Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DEVEXP-375: Enhance DX for ttl field in SendMessageRequest #56

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { getAppIdFromConfig, getContactIdFromConfig, initConversationService, pr
queue: 'HIGH_PRIORITY',
processing_strategy: 'DEFAULT',
channel_priority_order: ['MESSENGER'],
ttl: 60,
},
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ export class ConversationEventService {
contact_id: message.contact_id!,
},
message: this.buildContactMessage(contactMessage),
ttl: '5s',
ttl: 5,
channel_properties: {
MESSENGER_NOTIFICATION_TYPE: 'NO_PUSH',
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,13 @@ export interface SendMessageRequestBase<T extends Recipient> {
queue?: MessageQueue;
/** @see Recipient */
recipient: T;
/** The timeout allotted for sending the message, expressed in seconds. Passed to channels which support it and emulated by the Conversation API for channels without ttl support but with message retract/unsend functionality. Channel failover will not be performed for messages with an expired TTL. The format is an integer with the suffix `s` (for seconds). Valid integer range is 3 to 315,576,000,000 (inclusive). Example values include `10s` (10 seconds) and `86400s` (24 hours). */
ttl?: string;
/** Overrides the app\'s [Processing Mode](../../../../../conversation/processing-modes/). Default value is `DEFAULT`. */
/** The timeout allotted for sending the message, expressed in seconds. Passed to channels which support it and emulated by the Conversation API for channels without ttl support but with message retract/unsend functionality. Channel failover will not be performed for messages with an expired TTL.
*
* The format is an integer with the suffix `s` (for seconds). Valid integer range is 3 to 315,576,000,000 (inclusive). Example values include `10s` (10 seconds) and `86400s` (24 hours).
* The SDK will take care of the formatting: example of valid input for 10 seconds: 10 (number), "10" (string), "10s" (string)
*/
ttl?: string | number;
/** Overrides the app's [Processing Mode](../../../../../conversation/processing-modes/). Default value is `DEFAULT`. */
processing_strategy?: ProcessingStrategy;
/** An arbitrary identifier that will be propagated to callbacks related to this message, including MO replies. Only applicable to messages sent with the `CONVERSATION` processing mode. Up to 128 characters long. */
correlation_id?: string;
Expand Down
21 changes: 19 additions & 2 deletions packages/conversation/src/rest/v1/messages/messages-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -361,8 +361,11 @@
'Accept': 'application/json',
};

const body: RequestBody = data['sendMessageRequestBody']
? JSON.stringify(data['sendMessageRequestBody'])
// Special fields handling: see method for details
const requestDataBody = this.performSendMessageRequestBodyTransformation(data.sendMessageRequestBody);

const body: RequestBody = requestDataBody
? JSON.stringify(requestDataBody)
: '{}';
const basePathUrl = `${this.client.apiClientOptions.hostname}/v1/projects/${this.client.apiClientOptions.projectId}/messages:send`;

Expand All @@ -377,6 +380,20 @@
});
}

performSendMessageRequestBodyTransformation(
body: SendMessageRequest<Recipient>

Check warning on line 384 in packages/conversation/src/rest/v1/messages/messages-api.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

Missing trailing comma

Check warning on line 384 in packages/conversation/src/rest/v1/messages/messages-api.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

Missing trailing comma
): SendMessageRequest<Recipient> {
const requestDataBody = { ...body };
// 'ttl' field can be a number or a string and needs to be formatted as for instance "10s" to be accepted by the server
if (typeof requestDataBody.ttl === 'number') {
requestDataBody.ttl = requestDataBody.ttl.toString();
}
if (typeof requestDataBody.ttl === 'string' && !requestDataBody.ttl.endsWith('s')) {
requestDataBody.ttl = requestDataBody.ttl + 's';
}
return requestDataBody;
}

/**
* Update message metadata
* Update a specific message metadata by its ID.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,22 @@ describe('MessagesApi', () => {
expect(response).toEqual(expectedResponse);
expect(fixture.send).toHaveBeenCalledWith(requestData);
});

it('should format the ttl field', () => {
const requestBody: SendMessageRequest<Recipient> = {
...sendMessageRequest,
...recipientContactId,
};
requestBody.ttl = 20;
let formattedBody = messagesApi.performSendMessageRequestBodyTransformation(requestBody);
expect(formattedBody.ttl).toBe('20s');
requestBody.ttl = '20';
formattedBody = messagesApi.performSendMessageRequestBodyTransformation(requestBody);
expect(formattedBody.ttl).toBe('20s');
requestBody.ttl = '20s';
formattedBody = messagesApi.performSendMessageRequestBodyTransformation(requestBody);
expect(formattedBody.ttl).toBe('20s');
});
});

describe ('sendCardMessage', () => {
Expand Down
Loading