Getting started with Nexmo Conversation APIs Paul Ardeleanu 1
A presentation at NaijaHacks 2019 in December 2019 in by Paul Ardeleanu
Getting started with Nexmo Conversation APIs Paul Ardeleanu 1
dashboard.nexmo.com 2
dashboard.nexmo.com NAIJA19 3
NAIJA19 10/01/2020 4
6
7
8
NaijaDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d • voice • messages • rtc • vbc 9
NaijaDemo 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 10
nexmo-cli 11
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-3 added 35 packages from 28 contributors and updated 17 packages in 4.886s $ yarn global add nexmo-cli@beta 12
nexmo-cli ‣ Setup 13
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
Get-Content ~.nexmorc [credentials] api_key=xxx api_secret=xxx 14
New Application NaijaDemo 9c160e95-7050-4349-81da-eae435846867 15
nexmo-cli ‣ Create an application $ mkdir NaijaDemo $ cd NaijaDemo $ nexmo app:create ? Application Name: NaijaDemo ? Select Capabilities: voice, messages,rtc ? Use the default HTTP methods? Y ? ? ? ? ? ? ? ? Voice Answer URL: ⮐ Voice Fallback Answer URL: Voice Event URL: ⮐ Messages Inbound URL: ⮐ Messages Status URL: ⮐ RTC Event URL: ⮐ Public Key path: ⮐ Private Key path: ⮐ ⮐ Application created: 9c160e95-7050-4349-81da-eae435846867 16
nexmo-cli ‣ Create an application Application created: 9c160e95-7050-4349-81da-eae435846867 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/NaijaDemo/.nexmo-app 17
nexmo-cli ‣ Create an application $ cat .nexmo-app
Get-Content .nexmo-app [app_config] app_id= 9c160e95-7050-4349-81da-eae435846867 private_key=”——-BEGIN PRIVATE KEY—— … ——-END PRIVATE KEY——-\n” 18
nexmo-cli ‣ Create an application 19
nexmo-cli ‣ Create an application Application created: 9c160e95-7050-4349-81da-eae435846867 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/NaijaDemo/.nexmo-app To recreate this application in the future without interactive mode use the following command: nexmo app:create “NaijaDemo” —capabilities=voice,messages,rtc —voice-answerurl=https://example.com/ —voice-event-url=https://example.com/ —messages-inboundurl=https://example.com/ —messages-status-url=https://example.com/ —rtc-eventurl=https://example.com/ 20
Webhooks nexmo app:create NaijaDemo —capabilities=voice,messages,rtc —voice-answer-url=https://example.com/ —voice-event-url=https://example.com/ Answer webhook —messages-inbound-url=https://example.com/ —messages-status-url=https://example.com/ Event webhook —rtc-event-url=https://example.com/ 21
webhooks ‣ Inbound https://example.com/answer Call NaijaDemo 9c160e95-7050-4349-81da-eae435846867 https://example.com/events 22
Webhooks nexmo app:create NaijaDemo —capabilities=voice,messages,rtc —voice-answer-url=https://example.com/ —voice-event-url=https://example.com/ —messages-inbound-url=https://example.com/ —messages-status-url=https://example.com/ —rtc-event-url=https://example.com/ Inbound webhook Status webhook 23
webhooks ‣ Status Send SMS NaijaDemo 9c160e95-7050-4349-81da-eae435846867 https://example.com/status 24
webhooks ‣ Inbound https://example.com/inbound Inbound message NaijaDemo 9c160e95-7050-4349-81da-eae435846867 https://example.com/status 25
Webhooks nexmo app:create NaijaDemo —capabilities=voice,messages,rtc —voice-answer-url=https://example.com/ —voice-event-url=https://example.com/ —messages-inbound-url=https://example.com/ —messages-status-url=https://example.com/ —rtc-event-url=https://example.com/ Event webhook 26
dashboard.nexmo.com 27
dashboard.nexmo.com 28
POST https://api.nexmo.com/… Authorization: ??? Authorization … 29
authorization ‣ JSON web tokens jwt.io/introduction 30
authorization ‣ Generate a JWT $ nexmo jwt:generate eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NzAyODQ4NTAsImaSI6IjY2ODM3YjcwLWU3N2EtMTFlOS1iU2LTk1YWZjOD M0iIsImFwcGxpY2F0aT3uX2lkIjoiODVhYWJjOWEtM2UwMS00ODI4LTg2ODMtNjFhNWFjODc4YWI4In0.N5WzcVvpR6uIiz_OjdAUM2YwfxDFrb50qnxcla8cbIateYNg10dHK5mY8zqGWHdVCGY04Qq7HHEyltYDLk2H87duE3bvryHgzAP1462mMIirraknSVooHrmahDuVyPdbr3TOHgCYIwINqX1Q0PpqVw6QOXTs4bzXDWaswH6Ly97i6wheshmsxkblxGY_ea_RQRLJrzUJ9m6vsEtdNcYZh6D70367_hPdz0qgGmZNzStSwwmvauTnoL3fcOcB_B510lchR4XLfdpN0Okb6P0ZZea222aqya1BCF3SjT3fiO5c1h3fbS9k 9HPmMMEBM9U91PrzPZDcXCw_w 31
authorization ‣ Using a JWT POST https://api.nexmo.com/v0.1/messages Authorization: Bearer eyJ…w_w … 32
authorization ‣ Using a JWT 33
authorization ‣ Generate a longer lived JWT $ nexmo jwt:generate exp=$(($(date +%s)+86400)) 34
Conversations NaijaDemo 9c160e95-7050-4349-81da-eae435846867 35
NaijaDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d • voice • messages • rtc 36
NaijaDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d 37
NaijaDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d 38
Conversation APIs • • • Low-level Beta We love feedback api.nexmo.com/beta/conversations 39
Conversation API ‣ Create a Conversation curl -X “POST” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “C-0001”, “display_name”: “My first conversation” }’ 40
developer.nexmo.com/conversation 41
Conversation API ‣ Create a Conversation curl -X “POST” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “C-0001”, “display_name”: “My first conversation” }’ 42
Conversation API ‣ Create a Conversation curl -X “POST” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “C-0001”, “display_name”: “My first conversation” }’ 43
Conversation API ‣ Create a Conversation curl -X “POST” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “C-0001”, “display_name”: “My first conversation” }’ 44
Conversation API ‣ Create a Conversation curl -X “POST” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “C-0001”, “display_name”: “My first conversation” }’ 45
Conversation API ‣ Create a Conversation curl -X “POST” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “C-0001”, “display_name”: “My first conversation” }’ 46
Conversation API ‣ Create a Conversation curl -X “POST” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “C-0001”, “display_name”: “My first conversation” }’ 47
Conversation API ‣ Create a Conversation curl -X “POST” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “C-0001”, “display_name”: “My first conversation” }’ 48
Conversation API ‣ Create a Conversation curl -X “POST” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “C-0001”, “display_name”: “My first conversation” }’ { “id”: “CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”, “href”: “https://api.nexmo.com/beta/conversations/CON-9460506ab0d5-4e17-b24e-cd4a2eedb7e1” } 49
Conversation API ‣ Create a Conversation curl -X “POST” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “C-0001”, “display_name”: “My first conversation” }’ { “code”: “conversation:error:duplicate-name”, “description”: “The request failed because the conversation name already exists. Please provide a unique conversation name and try again.” } 50
Conversation API ‣ Retrieve a Conversation curl -X “GET” “https://api.nexmo.com/beta/conversations/ CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ 51
Conversation API ‣ Retrieve a Conversation curl -X “GET” “https://api.nexmo.com/beta/conversations/ CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ 52
Conversation API ‣ Retrieve a Conversation curl -X “GET” “https://api.nexmo.com/beta/conversations/ CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ 53
Conversation API ‣ Retrieve a Conversation curl -X “GET” “https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ { “uuid”:”CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”, “name”:”C-0001”, “display_name”:”My first conversation”, “timestamp”:{“created”:”2019-12-06T18:11:26.420Z”}, “sequence_number”:0, “numbers”:[], “properties”:{“custom_data”:{}}, “members”:[], “_links”:{ “self”:{“href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”} } } 54
Conversation API ‣ Update a Conversation curl -X “PUT” “https://api.nexmo.com/beta/conversations/ CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “C-0001”, “display_name”: “My Conversation” }’ 55
Conversation API ‣ List all Conversations curl -X “GET” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ 56
Conversation API ‣ List all Conversations curl -X “GET” “https://api.nexmo.com/beta/conversations” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ { “count”:2, “page_size”:10, “record_index”:0, “_links”:{ “self”:{“href”:”https://api.nexmo.com/beta/conversations”} }, “_embedded”:{ “conversations”:[ {“uuid”:”CON-7dce8c7a-223b-4e04-b655-73bde6d85398”,”name”:”C-0002”,”_links”:{“self”: {“href”:”https://api.nexmo.com/beta/conversations/CON-7dce8c7a-223b-4e04-b655-73bde6d85398”}}}, {“uuid”:”CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”,”name”:”C-0001”,”_links”:{“self”: {“href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”}}} ] } } 57
Conversation APIs developer.nexmo.com/conversation 58
Conversation API ‣ Conversation Members { “uuid”:”CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”, “name”:”C-0001”, “display_name”:”My first conversation”, “timestamp”:{“created”:”2019-12-06T18:11:26.420Z”}, “sequence_number”:0, “numbers”:[], “properties”:{“custom_data”:{}}, “members”:[], “_links”:{ “self”:{“href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”} } } 59
NaijaDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d 60
Conversation API ‣ Create a User curl -X “POST” “https://api.nexmo.com/beta/users” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “jane”, “display_name”: “Jane” }’ 61
Conversation API ‣ Create a User curl -X “POST” “https://api.nexmo.com/beta/users” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “name”: “jane”, “display_name”: “Jane” }’ { “id”:”USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “href”:”https://api.nexmo.com/beta/users/USR-d7037957-bdc1-4795-b8e2-17857a21f6f1” } 62
NaijaDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d 63
Conversation API ‣ Add a User to a Conversation curl -X “POST” “https://api.nexmo.com/beta/conversations/ CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1/members” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ \ -d $’{ “user_id”: “USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “action”: “invite”, “channel”: { “type”: “app” } }’ 64
Conversation API ‣ Add a User to a Conversation { “id”:”MEM-f4283a38-ac21-4702-a45f-77f05022db0b”, “user_id”:”USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “name”:”jane”, “display_name”:”Jane”, “state”:”INVITED”, “timestamp”:{“invited”:”2019-12-06T23:30:27.768Z”}, “channel”:{“type”:”app”,”legs”:[],”leg_ids”:[]}, “initiator”:{“invited”:{“isSystem”:true}}, “href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17b24e-cd4a2eedb7e1/members/MEM-f4283a38-ac21-4702-a45f-77f05022db0b” } 65
Conversation API ‣ Retrieve a Conversation curl -X “GET” “https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ { “uuid”:”CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”, “name”:”C-0001”, “display_name”:”My first conversation”, “timestamp”:{“created”:”2019-12-06T18:11:26.420Z”}, “sequence_number”:0, “numbers”:[], “properties”:{“custom_data”:{}}, “members”:[], “_links”:{ “self”:{“href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”} } } 66
{ “uuid”:”CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”, “name”:”C-0001”, “display_name”:”My Conversation”, “timestamp”: {“created”:”2019-12-06T18:11:26.420Z”,”updated”:”2019-12-06T18:57:01.743Z”}, “sequence_number”:2, “numbers”:[], “properties”:{“custom_data”:{}}, “members”:[ { “member_id”:”MEM-f4283a38-ac21-4702-a45f-77f05022db0b”, “user_id”:”USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “name”:”jane”, “display_name”:”Jane”, “state”:”INVITED”, “timestamp”:{“invited”:”2019-12-06T23:30:27.768Z”}, “invited_by”:”USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “channel”:{“type”:”app”,”legs”:[],”leg_ids”:[]}, “initiator”:{“invited”:{“isSystem”:true}}, “media”:{ “audio_settings”:{“enabled”:false,”earmuffed”:false,”muted”:false}, “audio”:{“enabled”:false,”earmuffed”:false,”muted”:false} } } ], “_links”:{“self”:{“href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”}} } 67
Conversation API ‣ Join a Conversation curl -X “PUT” “https://api.nexmo.com/beta/conversations/ CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1/members/MEM-f4283a38ac21-4702-a45f-77f05022db0b” \ -H ‘Authorization: Bearer eyJhb..’\ -H ‘Content-Type: application/json’ \ -d $’{ “user_id”: “USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “action”: “join”, “channel”: { “type”: “app” } }’ 68
{ “uuid”:”CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”, “name”:”C-0001”, “display_name”:”My Conversation”, “timestamp”: {“created”:”2019-12-06T18:11:26.420Z”,”updated”:”2019-12-06T18:57:01.743Z”}, “sequence_number”:2, “numbers”:[], “properties”:{“custom_data”:{}}, “members”:[ { “member_id”:”MEM-f4283a38-ac21-4702-a45f-77f05022db0b”, “user_id”:”USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “name”:”jane”, “display_name”:”Jane”, “state”:”JOINED”, “timestamp”:{“invited”:”2019-12-06T23:30:27.768Z”,”joined”:”2019-12-07T00:30:44.310Z”}, “invited_by”:”USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “channel”:{“type”:”app”,”legs”:[],”leg_ids”:[]}, “initiator”:{“invited”:{“isSystem”:true}}, “media”:{ “audio_settings”:{“enabled”:false,”earmuffed”:false,”muted”:false}, “audio”:{“enabled”:false,”earmuffed”:false,”muted”:false} } } ], “_links”:{“self”:{“href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”}} } 69
{ “uuid”:”CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”, “name”:”C-0001”, “display_name”:”My Conversation”, “timestamp”: {“created”:”2019-12-06T18:11:26.420Z”,”updated”:”2019-12-06T18:57:01.743Z”}, “sequence_number”:2, “numbers”:[], “properties”:{“custom_data”:{}}, “members”:[ { “member_id”:”MEM-f4283a38-ac21-4702-a45f-77f05022db0b”, “user_id”:”USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “name”:”jane”, “display_name”:”Jane”, “state”:”JOINED”, “timestamp”:{“invited”:”2019-12-06T23:30:27.768Z”,”joined”:”2019-12-07T00:30:44.310Z”}, “invited_by”:”USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “channel”:{“type”:”app”,”legs”:[],”leg_ids”:[]}, “initiator”:{“invited”:{“isSystem”:true}}, “media”:{ “audio_settings”:{“enabled”:false,”earmuffed”:false,”muted”:false}, “audio”:{“enabled”:false,”earmuffed”:false,”muted”:false} } } ], “_links”:{“self”:{“href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”}} } 70
{ “uuid”:”CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”, “name”:”C-0001”, “display_name”:”My Conversation”, “timestamp”: {“created”:”2019-12-06T18:11:26.420Z”,”updated”:”2019-12-06T18:57:01.743Z”}, “sequence_number”:2, “numbers”:[], “properties”:{“custom_data”:{}}, “members”:[ { “member_id”:”MEM-f4283a38-ac21-4702-a45f-77f05022db0b”, “user_id”:”USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “name”:”jane”, “display_name”:”Jane”, “state”:”JOINED”, “timestamp”:{“invited”:”2019-12-06T23:30:27.768Z”,”joined”:”2019-12-07T00:30:44.310Z”}, “invited_by”:”USR-d7037957-bdc1-4795-b8e2-17857a21f6f1”, “channel”:{“type”:”app”,”legs”:[],”leg_ids”:[]}, “initiator”:{“invited”:{“isSystem”:true}}, “media”:{ “audio_settings”:{“enabled”:false,”earmuffed”:false,”muted”:false}, “audio”:{“enabled”:false,”earmuffed”:false,”muted”:false} } } ], “_links”:{“self”:{“href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1”}} } 71
NaijaDemo 9c160e95-7050-4349-81da-eae435846867 Conversation Events 72
NaijaDemo cb9d439f-5c97-42e4-b05c-eacd3980f38d • • • conversation:created conversation:deleted conversation:updated • • • • text text:update text:typing:on text:typing:off • • • • • audio:ringing:start audio:play audio:say audio:speaking:on audio:speaking:off developer.nexmo.com/conversation/concepts/event 73
Conversation API ‣ Events for a Conversation curl -X “GET” “https://api.nexmo.com/beta/conversations/ CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1/events” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’ 74
[ { “id”:1, “type”:”conversation:updated”, “body”: …, “timestamp”:”2019-12-06T18:57:01.743Z”, “href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1/events/1” }, { “id”:2, “type”:”member:invited”, “from”:”MEM-f4283a38-ac21-4702-a45f-77f05022db0b”, “body”: …, “timestamp”:”2019-12-06T23:30:27.770Z”, “href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1/events/2” }, { “id”:3, “type”:”member:joined”, “from”:”MEM-f4283a38-ac21-4702-a45f-77f05022db0b”, “body”: …, “timestamp”:”2019-12-07T00:30:44.313Z”, “href”:”https://api.nexmo.com/beta/conversations/CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1/events/3” } ] 75
Conversation API ‣ Create an Event curl -X “POST” “https://api.nexmo.com/beta/conversations/ CON-9460506a-b0d5-4e17-b24e-cd4a2eedb7e1/events” \ -H ‘Authorization: Bearer eyJhb…’\ -H ‘Content-Type: application/json’\ -d $’{ “type”: “text”, “from”: “MEM-f4283a38-ac21-4702-a45f-77f05022db0b”, “body”: { “text”: “Welcome to NaijaHacks!” } }’ 76
NaijaDemo 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 77
Resources • developer.nexmo.com • github.com/nexmo-community • nexmo-community.slack.com • support@nexmo.com • devrel@nexmo.com • naijahacks2019.slack.com #company-nexmo • app.sli.do/event/tx20dhmp 78
Thank you! NAIJA19 10/01/2020 79