Facebook Messenger Send API is the main API used to send messages to users. Besides sending plain text messages, the API allows one to send:-
- Quick replies
- Rich media messages (
images,audios,videos, orfiles) - Templates (
generic template,button template,receipt template,list template)
This simple utility library makes sending all these types of messages easier but ONLY a few of them are supported with utility method as of now due to usage. However, one can always use the base method to send any message type as custom payload.
| Message Type | Utility method |
|---|---|
| custom payload | ✅ |
| read receipt | ✅ |
| typing bubble | ✅ |
| text | ✅ |
| quick_replies | ✅ |
| button template | ✅ |
| generic template | ✅ |
| receipt template | ✅ |
- Table of contents
- Pre-requisites
- Setup
- API Reference
- Recipient
- SendAsParams
- SendAsReadReceiptParams
- SendAsTypingBubbleParams
- SendAsTextParams
- SendAsQuickReplyParams
- SendAsButtonTemplateParams
- SendAsGenericTemplateParams
- SendAsReceiptTemplateParams
- Response
- ErrorResponse
- sendAs(params)
- sendAsReadReceipt(params)
- sendAsTypingBubble(params)
- sendAsText(params)
- sendAsQuickReply(params)
- sendAsButtonTemplate(params)
- sendAsGenericTemplate(params)
- sendAsReceiptTemplate(params)
- License
# Install via NPM
$ npm install --save @messageflow/send-asconst {
sendAs,
// sendAsButtonTemplate,
// sendAsGenericTemplate,
// sendAsQuickReply,
// sendAsReadReceipt,
// sendAsReceiptTemplate,
// sendAsText,
// sendAsTypingBubble,
} = require('@messageflow/send-as');
/** Send as custom payload */
void async function demoSendAsCustomPayload() {
try {
const recipient = {
/**
* These IDs are page-scoped IDs (PSID).
* This means that the IDs are unique for a given page.
**/
id: '<PSID>',
};
const message = {
attachment: {
type: 'template',
payload: {
template_type: 'media',
elements: [
{
media_type: '<image|video>',
url: '<FACEBOOK_URL>',
},
],
},
},
};
const d = await sendAs({
message,
recipient,
url: '<FACEBOOK_GRAPH_URL>/me/messages?access_token=<FACEBOOK_PAGE_ACCESS_TOKEN>',
});
assert.deepEqual(d, {
message_id: 'mid.$cAAJsujCd2ORj_1qmrFdzhVa-4cvO',
recipient_id: '<PSID>',
}); // OK
} catch (e) {
console.error('Failed to send as custom payload', e);
}
}();import {
sendAs,
// sendAsButtonTemplate,
// sendAsGenericTemplate,
// sendAsQuickReply,
// sendAsReadReceipt,
// sendAsReceiptTemplate,
// sendAsText,
// sendAsTypingBubble,
} from '@messageflow/send-as';
/** Send as custom payload */
void async function demoSendAsCustomPayload() {
try {
const recipient = {
/**
* These IDs are page-scoped IDs (PSID).
* This means that the IDs are unique for a given page.
**/
id: '<PSID>',
};
const message = {
attachment: {
type: 'template',
payload: {
template_type: 'media',
elements: [
{
media_type: '<image|video>',
url: '<FACEBOOK_URL>',
},
],
},
},
};
const d = await sendAs({
message,
recipient,
url: '<FACEBOOK_GRAPH_URL>/me/messages?access_token=<FACEBOOK_PAGE_ACCESS_TOKEN>',
});
assert.deepEqual(d, {
message_id: 'mid.$cAAJsujCd2ORj_1qmrFdzhVa-4cvO',
recipient_id: '<PSID>',
}); // OK
} catch (e) {
console.error('Failed to send as custom payload', e);
}
}();id<string> PSID of the message recipient.
url<string> URL to send message to.recipient<Recipient> Description of the message recipient.message<Object> Description of the message to be sent.text<string> Message text. Must be UTF-8 and has a 2000 character limit.textorattachmentmust be set.attachment<Object> Used to send messages with media or structured messages.textorattachmentmust be set.quick_replies<Object> Optional array ofquick_replyto be sent with messages.metadata<string> Optional custom string that is delivered as amessage echo. 1000 character limit.
notificationType<string> Optional push notification type.REGULAR: sound/ vibration.SILENT_PUSH: on-screen notification only.NO_PUSH: no notification.
typingDelay<number> Optional typing delay in milliseconds. Defaults to500.options<Object> Optional request options. See node-fetch options for more details.
url<string> URL to send message to.recipient<Recipient> Description of the message recipient.options<Object> Optional request options. See node-fetch options for more details.
url<string> URL to send message to.recipient<Recipient> Description of the message recipient.showTyping<boolean> If true, display typing bubble. Defaults totrue.options<Object> Optional request options. See node-fetch options for more details.
url<string> URL to send message to.recipient<Recipient> Description of the message recipient.message<Object> Description of the message to be sent.text<string> Message text. Must be UTF-8 and has a 2000 character limit.
notificationType<string> Optional push notification type.REGULAR: sound/ vibration.SILENT_PUSH: on-screen notification only.NO_PUSH: no notification.
typingDelay<number> Optional typing delay in milliseconds. Defaults to500.options<Object> Optional request options. See node-fetch options for more details.
url<string> URL to send message to.recipient<Recipient> Description of the message recipient.message<Object> Description of the message to be sent.text<string> Non-empty message text to send with the quick replies.textorattachmentmust be set. 2000 character limit.attachment<Object> Optional attachment to send with the quick replies.textorattachmentmust be set.quick_replies<Array<quick_reply>> An array of objects the describe the quick reply buttons to send. A maximum of 11 quick replies are supported.
notificationType<string> Optional push notification type.REGULAR: sound/ vibration.SILENT_PUSH: on-screen notification only.NO_PUSH: no notification.
typingDelay<number> Optional typing delay in milliseconds. Defaults to500.options<Object> Optional request options. See node-fetch options for more details.
url<string> URL to send message to.recipient<Recipient> Description of the message recipient.message<Object> Description of the message to be sent.attachment<Object> An object describing attachments to the message.
notificationType<string> Optional push notification type.REGULAR: sound/ vibration.SILENT_PUSH: on-screen notification only.NO_PUSH: no notification.
typingDelay<number> Optional typing delay in milliseconds. Defaults to500.options<Object> Optional request options. See node-fetch options for more details.
url<string> URL to send message to.recipient<Recipient> Description of the message recipient.message<Object> Description of the message to be sent.attachment<Object> An object describing attachments to the message.type<string> Value must betemplate.payload<Object> Payload of the template.template_type<string> Value must begeneric.elements<Array<Object>> An array of element objects that describe instances of the generic template to be sent. A horizontally scrollable carousel forms when more than 1 element in a template. 10 elements limit.title<string> Title of the template. 80 character limit.subtitle<string> Optional subtitle of the template. 80 character limit.image_url<string> Optional image URL of the template.default_action<Object> Optional default action executed when the template is tapped. Has the same properties as URL button, except thetitle.buttons<Array<button>> Optional array of buttons to append to the template. 3 buttons limit for each element.
sharable<boolean> Optional native share button in Messenger for the the template message. Defaults tofalse.image_aspect_ratio<string> Optional aspect ratio used to render images specified byelement.image_url. Must behorizontal(1.91:1) orsquare(1:1). Defaults tohorizontal.
notificationType<string> Optional push notification type.REGULAR: sound/ vibration.SILENT_PUSH: on-screen notification only.NO_PUSH: no notification.
typingDelay<number> Optional typing delay in milliseconds. Defaults to500.options<Object> Optional request options. See node-fetch options for more details.
url<string> URL to send message to.recipient<Recipient> Description of the message recipient.message<Object> Description of the message to be sent.attachment<Object> An object describing attachments to the message.type<string> Value must betemplate.payload<Object> Payload of the template.template_type<string> Value must bereceipt.recipient_name<string> The recipient's name.order_number<string> Unique order number.currency<string> Currency of the payment.payment_method<string> Custom string about which payment method and account a customer used, e.g. Visa 1234summary<Object> Payment summary.sharable<boolean> Optional native share button in Messenger for the the template message. Defaults tofalse.merchant_name<string> Optional merchant's name. It is shown as logo text if this presents.timestamp<number> Optional timestamp of the order in seconds.elements<Object> Optional array of elements of the order. 100 elements limit. Order of the elements is not guaranteed.title<string> Name of the item.price<number> Price of the item. It is a free item when the value is0.subtitle<string> Optional description of the item.quantity<number> Optional quantity of the item.currency<string> Optional currency of the item price.image_url<string> Optional image URL of the item.
address<Object> Optional shipping address of the order.street_1<string> Street address, line 1.city<string> City name of the address.postal_code<string> Postal code of the address.state<string> State abbreviation for U.S. addresses, or the region/ province for non U.S. addresses.country<string> 2-letter country code of the address.street_2<string> Optional street address, line 2.
adjustments<Object> Optional array of payment adjustments, such as discounts.
notificationType<string> Optional push notification type.REGULAR: sound/ vibration.SILENT_PUSH: on-screen notification only.NO_PUSH: no notification.
typingDelay<number> Optional typing delay in milliseconds. Defaults to500.options<Object> Optional request options. See node-fetch options for more details.
recipient_id<string> Unique ID for the user which is usually thePSID.message_id<string> Unique ID for the message.
error<Object> Error object when a request fails.
params<SendAsParams> Parameters required to call the method.- returns: <Promise<Response>> Promise which resolves with a JSON object containing identifiers for the message and its recipient.
The method throws an ErrorResponse when the request is not a successful.
params<SendAsReadReceiptParams> Parameters required to call the method.- returns: <Promise<Response>> Promise which resolves with a JSON object containing identifiers for the message and its recipient.
The method throws an ErrorResponse when the request is not a successful.
params<SendAsTypingBubbleParams> Parameters required to call the method.- returns: <Promise<Object>> Promise which resolves with a JSON object containing identifiers for its recipient.
params<SendAsTextParams> Parameters required to call the method.- returns: <Promise<Response>> Promise which resolves with a JSON object containing identifiers for the message and its recipient.
The method throws an ErrorResponse when the request is not a successful.
params<SendAsQuickReplyParams> Parameters required to call the method.- returns: <Promise<Response>> Promise which resolves with a JSON object containing identifiers for the message and its recipient.
The method throws an ErrorResponse when the request is not a successful.
params<SendAsButtonTemplateParams> Parameters required to call the method.- returns: <Promise<Response>> Promise which resolves with a JSON object containing identifiers for the message and its recipient.
The method throws an ErrorResponse when the request is not a successful.
params<SendAsGenericTemplateParams> Parameters required to call the method.- returns: <Promise<Response>> Promise which resolves with a JSON object containing identifiers for the message and its recipient.
The method throws an ErrorResponse when the request is not a successful.
params<SendAsReceiptTemplateParams> Parameters required to call the method.- returns: <Promise<Response>> Promise which resolves with a JSON object containing identifiers for the message and its recipient.
The method throws an ErrorResponse when the request is not a successful.
MIT License © Rong Sen Ng