Getting started with Messages and Dispatch

A presentation at Vonage Campus in October 2019 in San Francisco, CA, USA by Paul Ardeleanu

Slide 1

Slide 1

Getting started with Messages and Dispatch Paul Ardeleanu & Hui Jing Chen

Slide 2

Slide 2

Slide 3

Slide 3

dashboard.nexmo.com

Slide 4

Slide 4

dashboard.nexmo.com CAMPUS2019

Slide 5

Slide 5

Slide 6

Slide 6

Slide 7

Slide 7

CampusDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d • voice • messages • rtc • vbc

Slide 8

Slide 8

CampusDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d nexmo-cli Server SDKs Client SDKs • • • • • • • • • nexmo-node nexmo-php nexmo-python nexmo-ruby nexmo-dotnet nexmo-java Android SDK iOS SDK JavaScript SDK

Slide 9

Slide 9

nexmo-cli

Slide 10

Slide 10

nexmo-cli ‣ Install github.com/nexmo/nexmo-cli $ npm install nexmo-cli@beta -g /usr/local/bin/nexmo -> /usr/local/lib/node_modules/nexmo-cli/lib/bin.js + nexmo-cli@0.4.9-beta-2 added 35 packages from 28 contributors and updated 17 packages in 4.886s $ yarn global add nexmo-cli@beta

Slide 11

Slide 11

nexmo-cli ‣ Setup

Slide 12

Slide 12

nexmo-cli ‣ Setup $ nexmo setup <api_key> <api_secret> No existing config found. Writing to new file. Credentials written to /Users/pardeleanu/.nexmorc C:\Users\pardeleanu/.nexmorc $ cat ~/.nexmorc [credentials] api_key=xxx api_secret=xxx

Get-Content ~/.nexmorc

Slide 13

Slide 13

nexmo-cli ‣ Create an application $ mkdir CampusDemo $ cd CampusDemo $ nexmo app:create CampusDemo Capabilities: messages ? Application Name: ? ? ? ? ? Select Messages Inbound URL: ⮐ Messages Status URL: ⮐ Public Key path: ⮐ Private Key path: ⮐ Application created: 85aabc9a-1501-4820-8683-61a5ac878ab8

Slide 14

Slide 14

nexmo-cli ‣ Create an application Application created: 85aabc9a-1501-4820-8683-61a5ac878ab8 Private Key: ——-BEGIN PRIVATE KEY——… ——-END PRIVATE KEY——- WARNING: You should save this key somewhere safe and secure now, it will not be provided again. No existing config found. Writing to new file. Credentials written to /Users/pardeleanu/CampusDemo/.nexmo-app

Slide 15

Slide 15

nexmo-cli ‣ Create an application $ cat .nexmo-app [app_config] app_id=85aabc9a-1501-4820-8683-61a5ac878ab8 private_key=”——-BEGIN PRIVATE KEY—— … ——-END PRIVATE KEY——-\n”

Get-Content .nexmo-app

Slide 16

Slide 16

nexmo-cli ‣ Create an application

Slide 17

Slide 17

nexmo-cli ‣ Create an application Application created: 85aabc9a-1501-4820-8683-61a5ac878ab8 Private Key: ——-BEGIN PRIVATE KEY——… ——-END PRIVATE KEY——- WARNING: You should save this key somewhere safe and secure now, it will not be provided again. No existing config found. Writing to new file. Credentials written to /Users/pardeleanu/CampusDemo/.nexmo-app To recreate this application in the future without interactive mode use the following command: nexmo app:create CampusDemo —capabilities=messages —messages-inbound-url=https:// example.com/ —messages-status-url=https://example.com/

Slide 18

Slide 18

Webhooks nexmo app:create CampusDemo —capabilities=messages —messages-inbound-url=https://example.com/ —messages-status-url=https://example.com/ Inbound webhook Status webhook

Slide 19

Slide 19

webhooks ‣ Status Send SMS CampusDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d https://example.com

Slide 20

Slide 20

webhooks ‣ Inbound https://example.com/inbound Inbound message CampusDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d https://example.com/status

Slide 21

Slide 21

dashboard.nexmo.com

Slide 22

Slide 22

dashboard.nexmo.com

Slide 23

Slide 23

Authorization POST https://api.nexmo.com/v0.1/messages Authorization: ??? …

Slide 24

Slide 24

authorization ‣ JSON Web Tokens jwt.io/introduction

Slide 25

Slide 25

authorization ‣ Generate a JWT $ nexmo jwt:generate eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NzAyODQ4NTAsImp0aSI6IjY2ODM3YjcwLW U3N2EtMTFlOS1iMzU2LTk1YWZjODM0NGExYiIsImFwcGxpY2F0aT3uX2lkIjoiODVhYWJjOWEtM2UwMS00O DI4LTg2ODMtNjFhNWFjODc4YWI4In0.N5WzcVvpR6uIiz_OjdAUM2YwfxDFrb50qnxcla8cbIateYNg10MydHK5mY8zqGWHdVCGY04Qq7HHEyltYDLk2H87duE3bvryHgzAP 1462mMIirraknSVooHrmahDuVyPdaHbr3TOHgCYIwINqX1Q0PpqVw6QOXTs4bzXDWaswH6Ly97i6wheshmsxkblxGY_ea_RQ RLJrzUJ9m6vsEtdNcYZh6D70367_hPdzKU0qgGmZNzStSwwmvauTnoL3fcOcB_B510lchR4XLfdpN0Okb6P0ZZea222 aqya1BCF3SjT3fiO5c1h3fbS9k9HPmMMEBM9U91PrzPZDcXCw_w

Slide 26

Slide 26

authorization ‣ JWT POST https://api.nexmo.com/v0.1/messages Authorization: Bearer eyJ…w_w …

Slide 27

Slide 27

Getting started with Messages and Dispatch Paul Ardeleanu & Hui Jing Chen

Slide 28

Slide 28

It started with a… SMS

Slide 29

Slide 29

SMS APIs Brand alerts customer that the package has been shipped. Toy Store Your package has been shipped! More info at www.toystore123.com

Slide 30

Slide 30

SMS APIs Brand alerts customer that the package has been shipped. Package is not delivered !?!#@?! Toy Store Your package has been shipped! More info at www.toystore123.com

Slide 31

Slide 31

SMS APIs Brand alerts customer that the package has been shipped. Package is not delivered !?!#@?! Customer tries to respond via SMS Toy Store Toy Store Your package has been shipped! More info at www.toystore123.com Your package has been shipped! More info at www.toystore123.com My package has not been delivered. !

Slide 32

Slide 32

SMS APIs Brand alerts customer that the package has been shipped. Package is not delivered !?!#@?! Customer tries to respond via SMS Customer calls to get more information Toy Store Toy Store Your package has been shipped! More info at www.toystore123.com Your package has been shipped! More info at www.toystore123.com My package has not been delivered. !

Slide 33

Slide 33

Slide 34

Slide 34

Preferred Communication Channels Expanding beyond SMS 2.5B 1.5B 1.3B 900M OTT Messaging app users WW by 2021 WhatsApp monthly users Facebook Messenger monthly users users on Viber

Slide 35

Slide 35

Customer Experience With Social Chat Apps Brand alerts customer that the package has been shipped. Package is not delivered !?!#@?! Customer enquires Toy Store Toy Store Your package has been shipped! More info at www.toystore123.com Your package has been shipped! More info at www.toystore123.com My package has not been delivered. ✓

Slide 36

Slide 36

Customer Experience With Social Chat Apps Brand alerts customer that the package has been shipped. Package is not delivered !?!#@?! Customer enquires Brand responds with updates Toy Store Toy Store Toy Store Your package has been shipped! More info at www.toystore123.com Your package has been shipped! More info at www.toystore123.com My package has not been delivered. Your package has been shipped! More info at www.toystore123.com My package has not been delivered. Your order #ABC123 has cleared customs and entered the Royal Mail network for delivery. It will delivered on November 4th between 8am and 5pm.

Slide 37

Slide 37

Engagement Opportunities with Social Channels Toy Store Your package has been shipped! More info at www.toystore123.com My package has not been delivered. Your order #ABC123 has cleared customs and entered the Royal Mail network for delivery. It will delivered on November 4th between 8am and 5pm. For latest delivery information please visit: https://ryml.me/?ABC123 Your package has been delivered:

Slide 38

Slide 38

Engagement Opportunities with Social Channels

Slide 39

Slide 39

Messages and Dispatch APIs

Slide 40

Slide 40

Messages API Dispatch API One API, multiple channels Orchestrate messages with failover

Slide 41

Slide 41

Messages API

Slide 42

Slide 42

Access to multiple social chat apps Single API Call that sends the message via one channel

Slide 43

Slide 43

Messages API ‣ Sending POST https://api.nexmo.com/v0.1/messages Authorization: Bearer YOUR_JWT Content-Type: application/json Accept: application/json { “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is an example SMS sent using the Messages API” } } }

Slide 44

Slide 44

Messages API ‣ Sending POST https://api.nexmo.com/v0.1/messages Authorization: Bearer YOUR_JWT Content-Type: application/json Accept: application/json { “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is an example SMS sent using the Messages API” } } }

Slide 45

Slide 45

Messages API ‣ Sending POST https://api.nexmo.com/v0.1/messages Authorization: Bearer YOUR_JWT Content-Type: application/json Accept: application/json { “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is an example SMS sent using the Messages API” } } }

Slide 46

Slide 46

Messages API ‣ Sending POST https://api.nexmo.com/v0.1/messages Authorization: Bearer YOUR_JWT Content-Type: application/json Accept: application/json { “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is an example SMS sent using the Messages API” } } }

Slide 47

Slide 47

Messages API ‣ Sending POST https://api.nexmo.com/v0.1/messages Authorization: Bearer YOUR_JWT Content-Type: application/json Accept: application/json { “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is an example SMS sent using the Messages API” } } }

Slide 48

Slide 48

Messages API ‣ Sending POST https://api.nexmo.com/v0.1/messages Authorization: Bearer YOUR_JWT Content-Type: application/json Accept: application/json { “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is an example SMS sent using the Messages API” } } }

Slide 49

Slide 49

Messages API POST https://api.nexmo.com/v0.1/messages Authorization: Bearer YOUR_JWT Content-Type: application/json Accept: application/json { “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is an example SMS sent using the Messages API” } } } {“message_uuid”:”87d66f13-a8a5-4894-a1e2-2a2c8f7d5cc6”}

Slide 50

Slide 50

Messages API ‣ Content Type POST https://api.nexmo.com/v0.1/messages Authorization: Bearer YOUR_JWT Content-Type: application/json Accept: application/json { “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is an example SMS sent using the Messages API” } } }

Slide 51

Slide 51

Messages API ‣ Content Type POST https://api.nexmo.com/v0.1/messages Authorization: Bearer YOUR_JWT Content-Type: application/json Accept: application/json { “from”: { “type”: “whatsapp”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “whatsapp”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “image”, “image”: { “url”: “https://vonage.com/Campus.png”, “caption”: “Vonage Campus” } } } }

Slide 52

Slide 52

Messages API ‣ Channels POST https://api.nexmo.com/v0.1/messages Authorization: Bearer YOUR_JWT Content-Type: application/json Accept: application/json { “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is an example SMS sent using the Messages API” } } }

Slide 53

Slide 53

Messages API ‣ Channels “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” },

Slide 54

Slide 54

Messages API ‣ Channels “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “from”: { “type”: “mms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “mms”, “number”: “DESTINATION_NUMBER” },

Slide 55

Slide 55

Messages API ‣ Channels “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “from”: { “type”: “mms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “mms”, “number”: “DESTINATION_NUMBER” }, “from”: { “type”: “whatsapp”, “number”: “YOUR_WHATSAPP_NUMBER” }, “to”: { “type”: “whatsapp”, “number”: “DESTINATION_NUMBER” },

Slide 56

Slide 56

Messages API ‣ Channels “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “from”: { “type”: “mms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “mms”, “number”: “DESTINATION_NUMBER” }, “from”: { “type”: “whatsapp”, “number”: “YOUR_WHATSAPP_NUMBER” }, “to”: { “type”: “whatsapp”, “number”: “DESTINATION_NUMBER” }, “from”: { “type”: “messenger”, “id”: “YOUR_FB_ID” }, “to”: { “type”: “messenger”, “id”: “RECIPIENT_FB_ID” },

Slide 57

Slide 57

Messages API ‣ Channels “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “from”: { “type”: “mms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “mms”, “number”: “DESTINATION_NUMBER” }, “from”: { “type”: “whatsapp”, “number”: “YOUR_WHATSAPP_NUMBER” }, “to”: { “type”: “whatsapp”, “number”: “DESTINATION_NUMBER” }, “from”: { “type”: “messenger”, “id”: “YOUR_FB_ID” }, “to”: { “type”: “messenger”, “id”: “RECIPIENT_FB_ID” }, “from”: { “type”: “viber_service_msg”, “id”: “YOUR_VIBER_ID” }, “to”: { “type”: “viber_service_msg”, “number”: “DESTINATION_NUMBER” },

Slide 58

Slide 58

Messages API ‣ Channels SMS MMS WhatsApp Facebook Messenger Viber 3200 n/a 4096 2000 1000 Image Support ✘ 2MB .jpg 640x480 pixels ✔ .jpg, .png and .gif .jpg and .png Video Support ✘ ✘ ✔ .mp4 ✘ Audio Support ✘ ✘ ✔ .mp3 ✘ Attachments ✘ ✘ ✔ .zip, .csv, .pdf ✘ Location ✘ ✘ ✔ ✔ ✘ Templates ✘ ✘ ✔ ✔ ✔ Customer identifier Phone number Phone number Phone number Facebook ID Phone number Text character limits

Slide 59

Slide 59

Messages API ‣ Status Single API Call that sends the message via one channel Delivery callbacks with message status, timestamp, cost or any applicable errors

Slide 60

Slide 60

Messages API ‣ Status Send message CampusDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d Status Webhook

Slide 61

Slide 61

Messages API ‣ Status { “message_uuid”:”ff427083-adcf-42f3-a27b-6dda9aa8a3e4”, “to”:{ “number”:”DESTINATION_NUMBER”, “type”:”sms” }, “from”:{ “number”:”YOUR_NEXMO_NUMBER”, “type”:”sms” }, “timestamp”:”2019-09-24T23:21:21.359Z”, “status”:”submitted” }

Slide 62

Slide 62

Messages API ‣ Status { “message_uuid”:”ff427083-adcf-42f3-a27b-6dda9aa8a3e4”, “to”:{ “number”:”DESTINATION_NUMBER”, “type”:”sms” }, “from”:{ “number”:”YOUR_NEXMO_NUMBER”, “type”:”sms” }, “timestamp”:”2019-09-24T23:21:21.359Z”, “status”:”submitted” { “message_uuid”:”ff427083-adcf-42f3-a27b-6dda9aa8a3e4”, “to”:{ “number”:”DESTINATION_NUMBER”, “type”:”sms” }, “from”:{ “number”:”YOUR_NEXMO_NUMBER”, “type”:”sms” }, “timestamp”:”2019-09-24T23:21:28.664Z”, “usage”:{ “price”:”0.0333”, “currency”:”EUR” }, “status”:”delivered” } }

Slide 63

Slide 63

Messages API ‣ Inbound https://example.com/inbound Inbound message CampusDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d https://example.com/status

Slide 64

Slide 64

Messages API ‣ Inbound { “message_uuid”:”7dddda83-26ae-45cd-8137-74d7647cbe22”, “to”:{ “id”:”107973713947023”, “type”:”messenger” }, “from”:{ “id”:”2019895078111911”, “type”:”messenger” }, “timestamp”:”2019-10-08T15:35:07.120Z”, “direction”:”inbound”, “message”:{ “content”:{ “type”:”text”, “text”:”I’m also at Campus!” } } }

Slide 65

Slide 65

Messages API ‣ Provider verification WhatsApp Viber

Slide 66

Slide 66

WhatsApp Provided by Nexmo Developers WhatsApp • Dedicated trial support team • Online direct support tool • Simple APIs for rapid implementation • Sales Consultation and SI services • Hosting and management (+regional hosting) • Compliance (GDPR) • Enterprise Products (Audit, Reports, Redact and Media Service) • Number and PSTN Voice management for WhatsApp Number • 24/7 Global Support • Reliability of trusted CPaaS provider • Short time to market • Low implementation complexity • Lower operability costs • Low support

Slide 67

Slide 67

Messages API ‣ WhatsApp Templates

Slide 68

Slide 68

WhatsApp Templates ‣ Message Content

Slide 69

Slide 69

WhatsApp Templates ‣ Message Variables

Slide 70

Slide 70

WhatsApp Templates ‣ Message Localization

Slide 71

Slide 71

Messages API ‣ WhatsApp Templates POST https://api.nexmo.com/v0.1/messages Authorization: Bearer YOUR_JWT Content-Type: application/json Accept: application/json { “from”: { “type”: “whatsapp”, “number”: “12012444460” }, “to”: { “type”: “whatsapp”, “number”: “447700900100” }, “message”: { “content”:{ “type”:”template”, “template”:{ “name”:”whatsapp:hsm:technology:nexmo:oh_dev_onboarding_1”, “parameters”:[ { “default”:”- Vonage Connect” }, { “default”:”Taking place in SF on Oct 29th-30th.” } ] } }, “whatsapp”: { “policy”: “deterministic”, “locale”: “en-GB” } } }

Slide 72

Slide 72

Messages API Abstracted API one API to rule them all Optimize Costs Leverage SMS and various social chat apps price points to diversify operating costs

Slide 73

Slide 73

Dispatch API

Slide 74

Slide 74

Dispatch API ‣ Optimize your Messaging Strategy Westfield SFO Single API Call that initiates your custom failover flow Not available Not arriving in time

Slide 75

Slide 75

Dispatch API ‣ Optimize your Messaging Strategy Single API Call that initiates your custom failover flow Not read within 1h Not delivered within 2h Get one Delivery callback with message status, timestamp, cost or any applicable errors

Slide 76

Slide 76

Dispatch API ‣ API Call POST https://api.nexmo.com/v0.1/dispatch Authorization: Bearer APP_JWT Content-Type: application/json Accept: application/json “template”:”failover”, “workflow”: [ … ] Not read within 1h Not delivered within 2h

Slide 77

Slide 77

Dispatch API ‣ Workflow “template”:”failover”, “workflow”: [ ] Not read within 1h Not delivered within 2h

Slide 78

Slide 78

Dispatch API ‣ Workflow “template”:”failover”, “workflow”: [ Facebook Messenger Viber SMS ] Not read within 1h Not delivered within 2h

Slide 79

Slide 79

Dispatch API ‣ Workflow “template”:”failover”, “workflow”: [ { “from”: { “type”: “messenger”, “number”: “YOUR_FB_ID” }, “to”: { “type”: “messenger”, “number”: “RECIPIENT_FB_ID” }, “message”: { “content”: { “type”: “text”, “text”: “This is a Message sent via the Dispatch API” } }, “failover”:{ “expiry_time”: 3600, “condition_status”: “read” } }, Viber SMS ] Not read within 1h Not delivered within 2h

Slide 80

Slide 80

Dispatch API ‣ Workflow Not read within 1h “template”:”failover”, “workflow”: [ Facebook Messenger { “from”: { “type”: “viber_service_msg”, “id”: “YOUR_VIBER_ID” }, “to”: { “type”: “viber_service_msg”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is a Message sent via the Dispatch API” } }, “failover”:{ “expiry_time”: 7200, “condition_status”: “delivered” } }, SMS ] Not delivered within 2h

Slide 81

Slide 81

Dispatch API ‣ Workflow “template”:”failover”, “workflow”: [ Facebook Messenger Viber { “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is a Message sent via the Dispatch API” } } } ] Not read within 1h Not delivered within 2h

Slide 82

Slide 82

Dispatch API ‣ Workflow “template”:”failover”, “workflow”: [ { “from”: { “type”: “messenger”, “number”: “YOUR_FB_ID” }, “to”: { “type”: “messenger”, “number”: “RECIPIENT_FB_ID” }, “message”: { “content”: { “type”: “text”, “text”: “This is a Message sent via the Dispatch API” } }, “failover”:{ “expiry_time”: 3600, “condition_status”: “read” } }, { “from”: { “type”: “viber_service_msg”, “id”: “YOUR_VIBER_ID” }, “to”: { “type”: “viber_service_msg”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is a Message sent via the Dispatch API” } }, “failover”:{ “expiry_time”: 7200, “condition_status”: “delivered” } }, { “from”: { “type”: “sms”, “number”: “YOUR_NEXMO_NUMBER” }, “to”: { “type”: “sms”, “number”: “DESTINATION_NUMBER” }, “message”: { “content”: { “type”: “text”, “text”: “This is a Message sent via the Dispatch API” } } } ] Not read within 1h Not delivered within 2h

Slide 83

Slide 83

Dispatch API ‣ Status

Slide 84

Slide 84

{ “template”:”failover”, “status”:”completed”, “timestamp”:”2019-10-28T04:49:56.242Z”, “usage”: {“price”:”0.0363”,”currency”:”EUR”}, “dispatch_uuid”:”c5b47800-8043-4e8b-995c-5b6c8344a95d”, “_links”:{ “messages”: [ { “message_uuid”:”67d02318-a1b4-4864-85bc-aebb7f9f2403”, “href”:”v0.1/messages/67d02318-a1b4-4864-85bc-aebb7f9f2403”, “channel”:”messenger”, “usage”:{“price”:”0.001”,”currency”:”EUR”},”status”:”delivered” }, { “message_uuid”:”0e08c318-36b2-418c-a956-fbe938edbe24”, “href”:”v0.1/messages/0e08c318-36b2-418c-a956-fbe938edbe24”, “channel”:”sms”, “usage”:{“price”:”0.0333”,”currency”:”EUR”}, “status”:”delivered” } ] } }

Slide 85

Slide 85

Dispatch API ‣ Most Engaging Formats First Smart Messaging Create a strategy to ensure the most high performing channels are prioritized first. Real-time Insights Get one final callback to see the details of the message that was sent including: social channel, timestamp, delivery status and cost. Channel Evaluations Quickly evaluate the effectiveness of each social channel to optimize the costs of your messaging strategy.

Slide 86

Slide 86

Channels Available SMS MMS Facebook Messenger WhatsApp Viber Services Messages Coming soon WeChat LINE RCS Apple Business Chat

Slide 87

Slide 87

nexmo.dev/campus-md

Slide 88

Slide 88

Thank you! devrel@nexmo.com