Send a Message Template

In this code snippet you learn how to send a Facebook message template using a custom object with the Messages API.

Example

Ensure the following variables are set to your required values using any convenient method:

Key Description
BASE_URL For production use the base URL is https://api.nexmo.com/. For sandbox testing the base URL is https://messages-sandbox.nexmo.com/.
MESSAGES_API_URL For production use the Messages API endpoint is https://api.nexmo.com/v0.1/messages. For sandbox testing the Messages API endpoint is https://messages-sandbox.nexmo.com/v0.1/messages.
FB_SENDER_ID Your Page ID. The FB_SENDER_ID is the same as the to.id value you received in the inbound messenger event on your Inbound Message Webhook URL. For sandbox testing this is 107083064136738.
FB_RECIPIENT_ID The PSID of the user you want to reply to. The FB_RECIPIENT_ID is the PSID of the Facebook User you are messaging. This value is the from.id value you received in the inbound messenger event on your Inbound Message Webhook URL.
LOGO_IMAGE_URL An optional logo image.
HEADER_IMAGE_URL An optional header image.
ABOVE_BAR_CODE_IMAGE_URL An optional image for above the bar code.

Prerequisites

If you do not have an application you can create one. Make sure you also configure your webhooks.

Write the code

Add the following to send-template.sh:

Copy to Clipboard
curl -X POST $MESSAGES_API_URL \
     -H 'Authorization: Bearer '$JWT \
     -H 'Content-Type: application/json' \
     -d $'{
  "from": {
    "type": "messenger",
    "id": "'$FB_SENDER_ID'"
  },
  "to": {
    "type": "messenger",
    "id": "'$FB_RECIPIENT_ID'"
  },
  "message": {
    "content": {
      "type": "custom",
      "custom": {
        "attachment": {
          "type": "template",
          "payload": {
            "template_type": "airline_boardingpass",
            "intro_message": "You are checked in.",
            "locale": "en_US",
            "boarding_pass": [
              {
                "passenger_name": "OTHER/A",
                "pnr_number": "CG4X7U",
                "seat": "1A",
                "logo_image_url": "'$LOGO_IMAGE_URL'",
                "header_image_url": "'$HEADER_IMAGE_URL'",
                "qr_code": "M1OTHER/A  CG4X7U nawouehgawgnapwi3jfa0wfh",
                "above_bar_code_image_url": "'$ABOVE_BAR_CODE_IMAGE_URL'",
                "auxiliary_fields": [
                  {
                    "label": "Terminal",
                    "value": "T1"
                  },
                  {
                    "label": "Departure",
                    "value": "30OCT 19:05"
                  }
                ],
                "secondary_fields": [
                  {
                    "label": "Boarding",
                    "value": "18:30"
                  },
                  {
                    "label": "Gate",
                    "value": "D57"
                  },
                  {
                    "label": "Seat",
                    "value": "74J"
                  },
                  {
                    "label": "Sec.Nr.",
                    "value": "003"
                  }
                ],
                "flight_info": {
                  "flight_number": "KL0642",
                  "departure_airport": {
                    "airport_code": "SFO",
                    "city": "San Francisco",
                    "terminal": "T1",
                    "gate": "D57"
                  },
                  "arrival_airport": {
                    "airport_code": "LHR",
                    "city": "London"
                  },
                  "flight_schedule": {
                    "departure_time": "2018-03-02T19:05",
                    "arrival_time": "2018-03-05T17:30"
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}'

View full source

Run your code

Save this file to your machine and run it:

bash send-template.sh

Prerequisites

If you do not have an application you can create one. Make sure you also configure your webhooks.

npm install nexmo@beta

Write the code

Add the following to send-template.js:

Copy to Clipboard
const Vonage = require('@vonage/server-sdk');

const vonage = new Vonage(
    {
        apiKey: VONAGE_API_KEY,
        apiSecret: VONAGE_API_SECRET,
        applicationId: VONAGE_APPLICATION_ID,
        privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH,
    },
    {
        apiHost: BASE_URL,
    }
);

vonage.channel.send(
    { type: 'messenger', id: FB_RECIPIENT_ID },
    { type: 'messenger', id: FB_SENDER_ID },
    {
        content: {
            type: 'custom',
            custom: {
                attachment: {
                    type: 'template',
                    payload: {
                        template_type: 'airline_boardingpass',
                        intro_message: 'You are checked in.',
                        locale: 'en_US',
                        boarding_pass: [
                            {
                                passenger_name: 'OTHER/A',
                                pnr_number: 'CG4X7U',
                                seat: '1A',
                                logo_image_url: LOGO_IMAGE_URL,
                                header_image_url: HEADER_IMAGE_URL,
                                qr_code: 'M1OTHER/A  CG4X7U nawouehgawgnapwi3jfa0wfh',
                                above_bar_code_image_url: ABOVE_BAR_CODE_IMAGE_URL,
                                auxiliary_fields: [
                                    {
                                        label: 'Terminal',
                                        value: 'T1',
                                    },
                                    {
                                        label: 'Departure',
                                        value: '30OCT 19:05',
                                    },
                                ],
                                secondary_fields: [
                                    {
                                        label: 'Boarding',
                                        value: '18:30',
                                    },
                                    {
                                        label: 'Gate',
                                        value: 'D57',
                                    },
                                    {
                                        label: 'Seat',
                                        value: '74J',
                                    },
                                    {
                                        label: 'Sec.Nr.',
                                        value: '003',
                                    },
                                ],
                                flight_info: {
                                    flight_number: 'KL0642',
                                    departure_airport: {
                                        airport_code: 'SFO',
                                        city: 'San Francisco',
                                        terminal: 'T1',
                                        gate: 'D57',
                                    },
                                    arrival_airport: {
                                        airport_code: 'LHR',
                                        city: 'London',
                                    },
                                    flight_schedule: {
                                        departure_time: '2018-03-02T19:05',
                                        arrival_time: '2018-03-05T17:30',
                                    },
                                },
                            },
                        ],
                    },
                },
            },
        },
    },
    (err, data) => {
        if (err) {
            console.error(err);
        } else {
            console.log(data.message_uuid);
        }
    }
);

View full source

Run your code

Save this file to your machine and run it:

node send-template.js

Try it out

When you run the code a Facebook message template is sent to the recipient. In this example the message is an airline boarding pass.

Further information