Enter a number, begins with a country code
24 | 28 |├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ └── NEW-ISSUE.yml └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .editorconfig ├── messages ├── message-status.js ├── inbound-message.js ├── signed-webhooks │ ├── webhook-server.js │ └── verify-signed-webhook.js ├── rcs │ ├── revoke-message.js │ ├── send-text.js │ ├── send-file.js │ ├── send-video.js │ ├── send-image.js │ ├── send-suggested-action-share-location.js │ ├── send-suggested-reply.js │ ├── send-suggested-action-dial.js │ ├── send-suggested-action-view-location.js │ ├── send-suggested-action-create-calendar-event.js │ ├── send-suggested-action-multiple.js │ ├── send-suggested-action-open-url.js │ └── send-rich-card-standalone.js ├── whatsapp │ ├── mark-as-read.js │ ├── send-text.js │ ├── send-file.js │ ├── send-image.js │ ├── send-video.js │ ├── send-audio.js │ ├── send-sticker-id.js │ ├── send-sticker-url.js │ ├── send-unreaction.js │ ├── send-location.js │ ├── send-reaction.js │ ├── send-mtm.js │ ├── send-single-product.js │ ├── send-authentication-template.js │ └── send-media-mtm.js ├── sms │ ├── send-sms-basic-auth.js │ └── send-sms.js ├── mms │ ├── send-mms-text.js │ ├── send-mms-file.js │ ├── send-mms.js │ ├── send-mms-audio.js │ ├── send-mms-vcard.js │ ├── send-mms-video.js │ └── send-mms-content.ts ├── sandbox │ ├── whatsapp │ │ └── send-text.js │ ├── viber │ │ └── send-text.js │ └── messenger │ │ └── send-text.js ├── viber │ ├── send-text.js │ ├── send-file.js │ ├── send-image.js │ └── send-video.js ├── messenger │ ├── send-text.js │ ├── send-file.js │ ├── send-audio.js │ ├── send-image.js │ └── send-video.js └── send-message-with-failover.js ├── number-insight ├── ni-advanced-async-client.js ├── ni-basic.js ├── ni-advanced.js ├── ni-standard.js └── ni-advanced-async.js ├── audit ├── get-event-types.js ├── get-event.js ├── get-events.js └── get-events-with-filtering.js ├── sms ├── receive-express.js ├── dlr-express.js ├── send-unicode-sms.js ├── send.js ├── send-express.js ├── verify-signed-sms.js ├── send-signed-sms.js └── README.md ├── subaccounts ├── get-subaccounts.js ├── get-subaccount.js ├── get-credit-transfers.js ├── get-balance-transfers.js ├── suspend-subaccount.js ├── reactivate-subaccount.js ├── transfer-credit.js ├── transfer-balance.js ├── create-subaccount.js └── transfer-number.js ├── account ├── account-balance.js ├── secret-management │ ├── list-api-secrets.js │ ├── get-api-secret.js │ ├── create-api-secret.js │ └── delete-api-secret.js └── configure-account.js ├── verify ├── cancel-verification-code.js ├── search-for-verify-request.js ├── check-verification-code.js ├── trigger-next-verification-process.js ├── README.md ├── send-verification-code.js ├── send-psd2-code.js ├── send-verification-with-pin-code.js ├── send-verification-code-with-workflow.js ├── send-psd2-with-workflow.js └── views │ ├── index.html │ ├── verify.html │ └── status.html ├── voice ├── retrieve-info-for-a-call.js ├── retrieve-info-for-all-calls.js ├── play-dtmf-into-a-call.js ├── README.md ├── transfer-a-call.js ├── receive-an-inbound-call.js ├── play-tts-into-a-call.js ├── answer-webhook-endpoint.js ├── download-a-recording.js ├── mute-a-call.js ├── conference-call.js ├── connect-an-inbound-call.js ├── earmuff-a-call.js ├── transfer-a-call-inline-ncco.js ├── stream-audio-into-a-call.js ├── make-an-outbound-call.js ├── make-an-outbound-call-with-ncco.js ├── handle-user-input-dtmf.js ├── record-a-conversation.js ├── handle-user-input-asr.js ├── track-ncco-progress.js ├── record-a-call.js ├── record-a-message.js ├── record-a-call-with-split-audio.js └── connect-synchronous.js ├── application ├── get-application.js ├── delete-application.js ├── list-applications.js ├── create-application.js └── update-application.js ├── conversation ├── user │ ├── get-user.js │ ├── delete-user.js │ ├── list-users.js │ ├── create-user.js │ ├── list-user-conversations.js │ └── update-user.js ├── conversation │ ├── delete-conversation.js │ ├── get-conversation.js │ ├── list-conversations.js │ ├── create-conversation.js │ └── update-conversation.js ├── event │ ├── get-event.js │ ├── delete-event.js │ ├── list-events.js │ ├── create-custom-event.js │ └── create-event.js └── member │ ├── get-member.js │ ├── delete-member.js │ ├── list-members.js │ ├── create-member.js │ └── update-member.js ├── verify2 ├── create-template.js ├── get-template.js ├── delete-template.js ├── list-templates.js ├── check-verification-code.js ├── update-template.js ├── cancel-request.js ├── get-fragment.js ├── delete-fragment.js ├── list-fragments.js ├── create-template-fragment.js ├── send-request-sms.js ├── send-request-email.js ├── send-request-whatsapp.js ├── update-template-fragment.js ├── send-request-voice.js ├── send-request-silent-auth.js ├── send-request-whatsapp-interactive.js └── send-request-with-fallback.js ├── numbers ├── buy-number.js ├── cancel-number.js ├── list-numbers.js ├── search-numbers.js └── update-number.js ├── number-insight-v2 └── sim-swap.js ├── jwt └── decode-jwt.js ├── meetings ├── retrieve-room.js ├── retrieve-theme.js ├── delete-theme.js ├── set-default-theme.js ├── upload-logo.js ├── list-dial-in-numbers.js ├── retrieve-recording.js ├── delete-recording.js ├── list-rooms.js ├── list-themes.js ├── create-theme.js ├── create-instant-room.js ├── list-rooms-by-theme.js ├── list-recordings.js ├── update-theme.js ├── create-long-term-room.js └── update-room.js ├── CONTRIBUTING.md ├── LICENSE.md ├── package.json └── eslint.config.js /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | --- 2 | blank_issues_enabled: false 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules 3 | npm-debug.log 4 | private.key 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | trim_trailing_whitespace = true 7 | max_line_length = 80 8 | indent_style = space 9 | indent_size = 2 10 | charset = utf-8 11 | -------------------------------------------------------------------------------- /messages/message-status.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const bodyParser = require('body-parser'); 3 | const app = express(); 4 | 5 | app.use(bodyParser.json()); 6 | app.use(bodyParser.urlencoded({ extended: true })); 7 | 8 | app.post('/webhooks/message-status', (req, res) => { 9 | console.log(req.body); 10 | res.status(200).end(); 11 | }); 12 | 13 | app.listen(3000); 14 | -------------------------------------------------------------------------------- /messages/inbound-message.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const bodyParser = require('body-parser'); 3 | const app = express(); 4 | 5 | app.use(bodyParser.json()); 6 | app.use(bodyParser.urlencoded({ extended: true })); 7 | 8 | app.post('/webhooks/inbound-message', (req, res) => { 9 | console.log(req.body); 10 | res.status(200).end(); 11 | }); 12 | 13 | app.listen(3000); 14 | -------------------------------------------------------------------------------- /number-insight/ni-advanced-async-client.js: -------------------------------------------------------------------------------- 1 | const app = require('express')(); 2 | const bodyParser = require('body-parser'); 3 | 4 | app.use(bodyParser.json()); 5 | app.use(bodyParser.urlencoded({ 6 | extended: true, 7 | })); 8 | 9 | const handleInsight = (request, response) => { 10 | console.log('params', Object.assign(request.query, request.body)); 11 | response.status(204).send(); 12 | }; 13 | 14 | app.post('/webhooks/insight', handleInsight); 15 | 16 | app.listen(3000); 17 | -------------------------------------------------------------------------------- /audit/get-event-types.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | 6 | const { Audit } = require('@vonage/audit'); 7 | 8 | const auditClient = new Audit({ 9 | apiKey: VONAGE_API_KEY, 10 | apiSecret: VONAGE_API_SECRET, 11 | }); 12 | 13 | auditClient.getEvent() 14 | .then((event) => console.log(event)) 15 | .catch((error) => console.error(error)); 16 | -------------------------------------------------------------------------------- /messages/signed-webhooks/webhook-server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const bodyParser = require('body-parser'); 3 | const app = express(); 4 | 5 | app.use(bodyParser.json()); 6 | app.use(bodyParser.urlencoded({ extended: true })); 7 | 8 | app.post('/webhooks/inbound-message', (req, res) => { 9 | console.log(req.body); 10 | res.status(200).end(); 11 | }); 12 | 13 | app.post('/webhooks/message-status', (req, res) => { 14 | console.log(req.body); 15 | res.status(200).end(); 16 | }); 17 | 18 | app.listen(3000); 19 | -------------------------------------------------------------------------------- /audit/get-event.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const EVENT_UUID = process.env.EVENT_UUID; 6 | 7 | const { Audit } = require('@vonage/audit'); 8 | 9 | const auditClient = new Audit({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | auditClient.getEvent(EVENT_UUID) 15 | .then((event) => console.log(event)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /sms/receive-express.js: -------------------------------------------------------------------------------- 1 | const app = require('express')(); 2 | const bodyParser = require('body-parser'); 3 | 4 | app.use(bodyParser.json()); 5 | app.use(bodyParser.urlencoded({ extended: true })); 6 | 7 | const handleInboundSms = (request, response) => { 8 | const params = Object.assign(request.query, request.body); 9 | console.log(params); 10 | response.status(204).send(); 11 | }; 12 | app 13 | .route('/webhooks/inbound-sms') 14 | .get(handleInboundSms) 15 | .post(handleInboundSms); 16 | 17 | app.listen(process.env.PORT || 3000); 18 | -------------------------------------------------------------------------------- /subaccounts/get-subaccounts.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | 6 | const { SubAccounts } = require('@vonage/subaccounts'); 7 | 8 | const subAccountClient = new SubAccounts({ 9 | apiKey: VONAGE_API_KEY, 10 | apiSecret: VONAGE_API_SECRET, 11 | }); 12 | 13 | subAccountClient.getSubAccounts() 14 | .then((subAccounts) => console.log(subAccounts)) 15 | .catch((error) => console.error(error)); 16 | -------------------------------------------------------------------------------- /account/account-balance.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | 6 | const { Vonage } = require('@vonage/server-sdk'); 7 | 8 | const vonage = new Vonage({ 9 | apiKey: VONAGE_API_KEY, 10 | apiSecret: VONAGE_API_SECRET, 11 | }); 12 | 13 | vonage.accounts.getBalance() 14 | .then((resp) => { 15 | console.log(`${resp.value.toFixed(2)} EUR`); 16 | }) 17 | .catch((error) => console.error(error)); 18 | -------------------------------------------------------------------------------- /sms/dlr-express.js: -------------------------------------------------------------------------------- 1 | const app = require('express')(); 2 | const bodyParser = require('body-parser'); 3 | 4 | app.use(bodyParser.json()); 5 | app.use(bodyParser.urlencoded({ extended: true })); 6 | 7 | const handleDeliveryReceipt = (request, response) => { 8 | const params = Object.assign(request.query, request.body); 9 | console.log(params); 10 | response.status(204).send(); 11 | }; 12 | 13 | app 14 | .route('/webhooks/delivery-receipt') 15 | .get(handleDeliveryReceipt) 16 | .post(handleDeliveryReceipt); 17 | 18 | app.listen(process.env.PORT || 3000); 19 | -------------------------------------------------------------------------------- /account/secret-management/list-api-secrets.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const ACCOUNT_ID = process.env.ACCOUNT_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | vonage.secrets.listSecrets(ACCOUNT_ID) 15 | .then((resp) => console.log(resp)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /verify/cancel-verification-code.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VERIFY_REQUEST_ID = process.env.VERIFY_REQUEST_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | vonage.verify.cancel(VERIFY_REQUEST_ID) 15 | .then((resp) => console.log(resp)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /number-insight/ni-basic.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const INSIGHT_NUMBER = process.env.INSIGHT_NUMBER; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | vonage.numberInsights.basicLookup(INSIGHT_NUMBER) 15 | .then((result) => console.log(result)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /number-insight/ni-advanced.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const INSIGHT_NUMBER = process.env.INSIGHT_NUMBER; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | vonage.numberInsights.advancedLookup(INSIGHT_NUMBER) 15 | .then((result) => console.log(result)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /number-insight/ni-standard.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const INSIGHT_NUMBER = process.env.INSIGHT_NUMBER; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | vonage.numberInsights.standardLookup(INSIGHT_NUMBER) 15 | .then((result) => console.log(result)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /verify/search-for-verify-request.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VERIFY_REQUEST_ID = process.env.VERIFY_REQUEST_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | vonage.verify.search(VERIFY_REQUEST_ID) 15 | .then(({ status }) => console.log(status)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /voice/retrieve-info-for-a-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const VOICE_CALL_ID = process.env.VOICE_CALL_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_PRIVATE_KEY, 12 | }); 13 | 14 | vonage.voice.getCall(VOICE_CALL_ID) 15 | .then((call) => console.log(call)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /application/get-application.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | vonage.applications.getApplication(VONAGE_APPLICATION_ID) 15 | .then((resp) => console.log(resp)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /audit/get-events.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | 6 | const { Audit } = require('@vonage/audit'); 7 | 8 | const auditClient = new Audit({ 9 | apiKey: VONAGE_API_KEY, 10 | apiSecret: VONAGE_API_SECRET, 11 | }); 12 | 13 | const run = async () => { 14 | try { 15 | for await (const event of auditClient.getEvents()) { 16 | console.log(event); 17 | } 18 | } catch (error) { 19 | console.log(error); 20 | } 21 | }; 22 | run(); 23 | 24 | -------------------------------------------------------------------------------- /conversation/user/get-user.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const USER_ID = process.env.USER_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_PRIVATE_KEY, 12 | }); 13 | 14 | vonage.users.getUser(USER_ID) 15 | .then((user) => console.log(user)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /application/delete-application.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | vonage.applications.deleteApplication(VONAGE_APPLICATION_ID) 15 | .then((resp) => console.log(resp)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /subaccounts/get-subaccount.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SUBACCOUNT_KEY = process.env.SUBACCOUNT_KEY; 6 | 7 | const { SubAccounts } = require('@vonage/subaccounts'); 8 | 9 | const subAccountClient = new SubAccounts({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | subAccountClient.getSubAccount(SUBACCOUNT_KEY) 15 | .then((subAccount) => console.log(subAccount)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /verify2/create-template.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | 6 | const { Vonage } = require('@vonage/server-sdk'); 7 | 8 | const vonage = new Vonage ({ 9 | applicationId: VONAGE_APPLICATION_ID, 10 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 11 | }); 12 | 13 | vonage.verify2.createTemplate({name: 'my-custom-template'}) 14 | .then((result) => console.log(result)) 15 | .catch((error) => console.error(error)); 16 | -------------------------------------------------------------------------------- /account/configure-account.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SMS_CALLBACK_URL = process.env.SMS_CALLBACK_URL; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | vonage.accounts.updateAccountCallbacks({ 15 | moCallBackUrl: SMS_CALLBACK_URL, 16 | }) 17 | .then((resp) => console.log(resp)) 18 | .catch((error) => console.error(error)); 19 | -------------------------------------------------------------------------------- /conversation/user/delete-user.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const USER_ID = process.env.USER_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_PRIVATE_KEY, 12 | }); 13 | 14 | vonage.users.deleteUser(USER_ID) 15 | .then(() => console.log('User deleted')) 16 | .catch((error) => console.error(error)); 17 | 18 | -------------------------------------------------------------------------------- /verify/check-verification-code.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VERIFY_REQUEST_ID = process.env.VERIFY_REQUEST_ID; 6 | const VERIFY_CODE = process.env.VERIFY_CODE; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | vonage.verify.check(VERIFY_REQUEST_ID, VERIFY_CODE) 16 | .then((resp) => console.log(resp)) 17 | .catch((error) => console.error(error)); 18 | -------------------------------------------------------------------------------- /verify/trigger-next-verification-process.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VERIFY_REQUEST_ID = process.env.VERIFY_REQUEST_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | vonage.verify.sendControl( 15 | VERIFY_REQUEST_ID, 16 | 'trigger_next_event', 17 | ) 18 | .then((resp) => console.log(resp)) 19 | .catch((error) => console.error(error)); 20 | -------------------------------------------------------------------------------- /verify/README.md: -------------------------------------------------------------------------------- 1 | # Two-Factor Authentication (2FA) Example for Node.JS 2 | 3 | This example includes a minimal web interface to demonstrate a proper 2FA UX. 4 | 5 |  6 | 7 | ## Configure with Your Vonage API Keys 8 | 9 | To use this sample you will first need a [Vonage account](https://dashboard.nexmo.com/sign-up). Once you have your own API credentials, rename 10 | the `.env-example` file to `.env` and set the values as required. 11 | 12 | For some of the examples, you will need to [buy a number](https://dashboard.nexmo.com/buy-numbers). -------------------------------------------------------------------------------- /application/list-applications.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | 6 | const { Vonage } = require('@vonage/server-sdk'); 7 | 8 | const vonage = new Vonage({ 9 | apiKey: VONAGE_API_KEY, 10 | apiSecret: VONAGE_API_SECRET, 11 | }); 12 | 13 | const run = async () => { 14 | try { 15 | for await (const application of vonage.applications.listAllApplications()) { 16 | console.log(application); 17 | } 18 | } catch (error) { 19 | console.log(error); 20 | } 21 | }; 22 | 23 | run(); 24 | -------------------------------------------------------------------------------- /subaccounts/get-credit-transfers.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const START_DATE = process.env.START_DATE; 6 | 7 | const { SubAccounts } = require('@vonage/subaccounts'); 8 | 9 | const subAccountClient = new SubAccounts({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | subAccountClient.listClientTransfers({ 15 | startDate: START_DATE, 16 | }) 17 | .then((creditTranfsers) => console.log(creditTranfsers)) 18 | .catch((error) => console.error(error)); 19 | -------------------------------------------------------------------------------- /account/secret-management/get-api-secret.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const ACCOUNT_SECRET_ID = process.env.VONAGE_SECRET_ID; 6 | const ACCOUNT_ID = process.env.ACCOUNT_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | vonage.secrets.getSecret(ACCOUNT_ID, ACCOUNT_SECRET_ID) 16 | .then((resp) => console.log(resp)) 17 | .catch((error) => console.error(error)); 18 | -------------------------------------------------------------------------------- /conversation/conversation/delete-conversation.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_ID = process.env.CONV_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_PRIVATE_KEY, 12 | }); 13 | 14 | vonage.conversations.deleteConversation(CONV_ID) 15 | .then(() => console.log('Conversation deleted')) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /conversation/conversation/get-conversation.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_ID = process.env.CONV_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_PRIVATE_KEY, 12 | }); 13 | 14 | vonage.conversations.getConversation(CONV_ID) 15 | .then((conversation) => console.log(conversation)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /subaccounts/get-balance-transfers.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const START_DATE = process.env.START_DATE; 6 | 7 | const { SubAccounts } = require('@vonage/subaccounts'); 8 | 9 | const subAccountClient = new SubAccounts({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | subAccountClient.listBalanceTransfers({ 15 | startDate: START_DATE, 16 | }) 17 | .then((balanceTranfsers) => console.log(balanceTranfsers)) 18 | .catch((error) => console.error(error)); 19 | -------------------------------------------------------------------------------- /subaccounts/suspend-subaccount.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SUBACCOUNT_KEY = process.env.SUBACCOUNT_KEY; 6 | 7 | const { SubAccounts } = require('@vonage/subaccounts'); 8 | 9 | const subAccountClient = new SubAccounts({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | subAccountClient.updateSubAccount( 15 | SUBACCOUNT_KEY, 16 | { suspended: true }, 17 | ) 18 | .then((subAccount) => console.log(subAccount)) 19 | .catch((error) => console.error(error)); 20 | -------------------------------------------------------------------------------- /subaccounts/reactivate-subaccount.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SUBACCOUNT_KEY = process.env.SUBACCOUNT_KEY; 6 | 7 | const { SubAccounts } = require('@vonage/subaccounts'); 8 | 9 | const subAccountClient = new SubAccounts({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | subAccountClient.updateSubAccount( 15 | SUBACCOUNT_KEY, 16 | { suspended: false }, 17 | ) 18 | .then((subAccount) => console.log(subAccount)) 19 | .catch((error) => console.error(error)); 20 | -------------------------------------------------------------------------------- /account/secret-management/create-api-secret.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const ACCOUNT_ID = process.env.ACCOUNT_ID; 6 | const ACCOUNT_SECRET_VALUE = process.env.ACCOUNT_SECRET_VALUE; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | vonage.secrets.createSecret(ACCOUNT_ID, ACCOUNT_SECRET_VALUE) 16 | .then((resp) => console.log(resp)) 17 | .catch((error) => console.error(error)); 18 | -------------------------------------------------------------------------------- /account/secret-management/delete-api-secret.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const ACCOUNT_SECRET_ID = process.env.VONAGE_SECRET_ID; 6 | const ACCOUNT_ID = process.env.ACCOUNT_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | vonage.accounts.deleteSecret(ACCOUNT_ID, ACCOUNT_SECRET_ID) 16 | .then(() => console.log('Secret deleted')) 17 | .catch((error) => console.error(error)); 18 | -------------------------------------------------------------------------------- /numbers/buy-number.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VONAGE_NUMBER = process.env.VONAGE_NUMBER; 6 | const COUNTRY_CODE = process.env.COUNTRY_CODE; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | vonage.number.buyNumber({ 16 | country: COUNTRY_CODE, 17 | msisdn: VONAGE_NUMBER, 18 | }) 19 | .then((result) => console.log(result)) 20 | .catch((error) => console.error(error)); 21 | -------------------------------------------------------------------------------- /verify2/get-template.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_TEMPLATE_ID = process.env.VERIFY_TEMPLATE_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage ({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | }); 13 | 14 | vonage.verify2.getTemplate(VERIFY_TEMPLATE_ID) 15 | .then((template) => console.log(template)) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /voice/retrieve-info-for-all-calls.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 4 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 5 | 6 | const { Vonage } = require('@vonage/server-sdk'); 7 | 8 | const vonage = new Vonage({ 9 | applicationId: VONAGE_APPLICATION_ID, 10 | privateKey: VONAGE_PRIVATE_KEY, 11 | }); 12 | 13 | const getCalls = async () => { 14 | try { 15 | for await (const call of vonage.voice.getAllCalls()) { 16 | console.log(call); 17 | } 18 | } catch (error) { 19 | console.error(error); 20 | } 21 | }; 22 | 23 | getCalls(); 24 | -------------------------------------------------------------------------------- /conversation/user/list-users.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | 6 | const { Vonage } = require('@vonage/server-sdk'); 7 | 8 | const vonage = new Vonage({ 9 | applicationId: VONAGE_APPLICATION_ID, 10 | privateKey: VONAGE_PRIVATE_KEY, 11 | }); 12 | 13 | const run = async () => { 14 | try{ 15 | for await (const user of vonage.users.listAllUsers()) { 16 | console.log(user); 17 | } 18 | } catch (error) { 19 | console.error(error); 20 | } 21 | }; 22 | 23 | run(); 24 | -------------------------------------------------------------------------------- /numbers/cancel-number.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VONAGE_NUMBER = process.env.VONAGE_NUMBER; 6 | const COUNTRY_CODE = process.env.COUNTRY_CODE; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | vonage.number.cancelNumber({ 16 | country: COUNTRY_CODE, 17 | msisdn: VONAGE_NUMBER, 18 | }) 19 | .then((result) => console.log(result)) 20 | .catch((error) => console.error(error)); 21 | -------------------------------------------------------------------------------- /verify2/delete-template.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_TEMPLATE_ID = process.env.VERIFY_TEMPLATE_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage ({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | }); 13 | 14 | vonage.verify2.deleteTemplate(VERIFY_TEMPLATE_ID) 15 | .then(() => console.log('Template deleted')) 16 | .catch((error) => console.error(error)); 17 | -------------------------------------------------------------------------------- /voice/play-dtmf-into-a-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const VOICE_CALL_ID = process.env.VOICE_CALL_ID; 6 | const VOICE_DTMF_DIGITS = process.env.VOICE_DTMF_DIGITS; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | vonage.voice.playDTMF(VOICE_CALL_ID, VOICE_DTMF_DIGITS) 16 | .then((resp) => console.log(resp)) 17 | .catch((error) => console.error(error)); 18 | -------------------------------------------------------------------------------- /conversation/event/get-event.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname + '/../../' + process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_ID = process.env.CONV_ID; 6 | const CONV_EVENT_ID = process.env.CONV_EVENT_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | vonage.conversations.getEvent(CONV_ID, CONV_EVENT_ID) 16 | .then((event) => console.log(event)) 17 | .catch((error) => console.error(error)); 18 | -------------------------------------------------------------------------------- /conversation/member/get-member.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_ID = process.env.CONV_ID; 6 | const CONV_MEMBER_ID = process.env.CONV_MEMBER_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | vonage.conversations.getMember(CONV_ID, CONV_MEMBER_ID) 16 | .then((member) => console.log(member)) 17 | .catch((error) => console.log(error)); 18 | -------------------------------------------------------------------------------- /voice/README.md: -------------------------------------------------------------------------------- 1 | # Getting Started with Vonage Voice APIs with Node.js 2 | 3 | ## Set up the ENV with Your Vonage API Keys 4 | 5 | To use this sample you will first need a [Vonage account](https://dashboard.nexmo.com/sign-up). Once you have your own API credentials, rename 6 | the `.env-example` file to `.env` and set the values as required. 7 | 8 | You also need to [buy a number](https://dashboard.nexmo.com/buy-numbers) where you can send and receive SMS messages. 9 | 10 | ## Run the Examples 11 | 12 | To run Voice APIs, you need to set up your secure Vonage Application first. You can use [Vonage CLI tool](https://github.com/Nexmo/nexmo-cli) to create and manage your Vonage Applications. 13 | -------------------------------------------------------------------------------- /conversation/event/delete-event.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname + '/../../' + process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_ID = process.env.CONV_ID; 6 | const CONV_EVENT_ID = process.env.CONV_EVENT_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | vonage.conversations.deleteEvent(CONV_ID, CONV_EVENT_ID) 16 | .then(() => console.log('Event deleted')) 17 | .catch((error) => console.error(error)); 18 | -------------------------------------------------------------------------------- /verify/send-verification-code.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VERIFY_NUMBER = process.env.VERIFY_NUMBER; 6 | const VERIFY_BRAND_NAME = process.env.VERIFY_BRAND_NAME; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | vonage.verify.start({ 16 | number: VERIFY_NUMBER, 17 | brand: VERIFY_BRAND_NAME, 18 | }) 19 | .then(({ requestId } ) => console.log(requestId)) 20 | .catch((error) => console.error(error)); 21 | -------------------------------------------------------------------------------- /voice/transfer-a-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const VOICE_CALL_ID = process.env.VOICE_CALL_ID; 6 | const VOICE_NCCO_URL = process.env.VOICE_NCCO_URL; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | vonage.voice.transferCallWithURL(VOICE_CALL_ID, VOICE_NCCO_URL) 16 | .then(() => console.log(`Call transfered to ${VOICE_NCCO_URL}`)) 17 | .catch((error) => console.error(error)); 18 | -------------------------------------------------------------------------------- /number-insight/ni-advanced-async.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const INSIGHT_NUMBER = process.env.INSIGHT_NUMBER; 6 | const INSIGHT_CALLBACK_URL = process.env.INSIGHT_CALLBACK_URL; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | vonage.numberInsight.asyncAdvancedLookup( 16 | INSIGHT_NUMBER, 17 | INSIGHT_CALLBACK_URL, 18 | ) 19 | .then((result) => console.log(result)) 20 | .catch((error) => console.error(error)); 21 | -------------------------------------------------------------------------------- /number-insight-v2/sim-swap.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const INSIGHT_NUMBER = process.env.INSIGHT_NUMBER; 6 | 7 | const { NumberInsightV2, Insight } = require('@vonage/number-insight-v2'); 8 | 9 | const insight = new NumberInsightV2({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | async function run() { 15 | const resp = await insight.checkForFraud({ 16 | type: 'phone', 17 | phone: INSIGHT_NUMBER, 18 | insights: [Insight.SIM_SWAP], 19 | }); 20 | 21 | console.log(resp); 22 | } 23 | 24 | run(); 25 | -------------------------------------------------------------------------------- /sms/send-unicode-sms.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SMS_TO_NUMBER = process.env.VONAGE_SMS_TO_NUMBER; 6 | const SMS_SENDER_ID = process.env.SMS_SENDER_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | vonage.sms.send({ 16 | to: SMS_TO_NUMBER, 17 | from: SMS_SENDER_ID, 18 | text: 'こんにちは世界', 19 | type: 'unicode', 20 | }) 21 | .then((resp) => console.log(resp)) 22 | .catch((error) => console.error(error)); 23 | -------------------------------------------------------------------------------- /verify2/list-templates.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | 6 | const { Vonage } = require('@vonage/server-sdk'); 7 | 8 | const vonage = new Vonage ({ 9 | applicationId: VONAGE_APPLICATION_ID, 10 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 11 | }); 12 | 13 | const run = async () => { 14 | try { 15 | for await (const fragment of vonage.verify2.listAllTemplate()) { 16 | console.log(fragment); 17 | } 18 | } catch (error) { 19 | console.error(error); 20 | } 21 | }; 22 | 23 | run(); 24 | -------------------------------------------------------------------------------- /conversation/conversation/list-conversations.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | 6 | const { Vonage } = require('@vonage/server-sdk'); 7 | 8 | const vonage = new Vonage({ 9 | applicationId: VONAGE_APPLICATION_ID, 10 | privateKey: VONAGE_PRIVATE_KEY, 11 | }); 12 | 13 | const run = async () => { 14 | try { 15 | for await (const conversation of vonage.conversations.listAllConversations()) { 16 | console.log(conversation); 17 | } 18 | } catch (error) { 19 | console.error(error); 20 | } 21 | }; 22 | 23 | run(); 24 | -------------------------------------------------------------------------------- /conversation/member/delete-member.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname + '/../../' + process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_ID = process.env.CONV_ID; 6 | const CONV_MEMBER_ID = process.env.CONV_MEMBER_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | vonage.conversations.deleteMember( 16 | CONV_ID, 17 | CONV_MEMBER_ID, 18 | ) 19 | .then(() => console.log('Memeber deleted')) 20 | .catch((error) => console.error(error)); 21 | -------------------------------------------------------------------------------- /subaccounts/transfer-credit.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SUBACCOUNT_KEY = process.env.SUBACCOUNT_KEY; 6 | const AMOUNT = process.env.AMOUNT; 7 | 8 | const { SubAccounts } = require('@vonage/subaccounts'); 9 | 10 | const subAccountClient = new SubAccounts({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | subAccountClient.transferCredit({ 16 | from: VONAGE_API_KEY, 17 | to: SUBACCOUNT_KEY, 18 | amount: AMOUNT, 19 | }) 20 | .then((creditTransfer) => console.log(creditTransfer)) 21 | .catch((error) => console.error(error)); 22 | -------------------------------------------------------------------------------- /subaccounts/transfer-balance.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SUBACCOUNT_KEY = process.env.SUBACCOUNT_KEY; 6 | const AMOUNT = process.env.AMOUNT; 7 | 8 | const { SubAccounts } = require('@vonage/subaccounts'); 9 | 10 | const subAccountClient = new SubAccounts({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | subAccountClient.transferBalance({ 16 | from: VONAGE_API_KEY, 17 | to: SUBACCOUNT_KEY, 18 | amount: AMOUNT, 19 | }) 20 | .then((balanceTransfer) => console.log(balanceTransfer)) 21 | .catch((error) => console.error(error)); 22 | -------------------------------------------------------------------------------- /voice/receive-an-inbound-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const port = process.env.PORT || 3000; 4 | 5 | const Express = require('express'); 6 | 7 | const app = new Express(); 8 | 9 | const onInboundCall = (request, response) => { 10 | const from = request.query.from; 11 | const fromSplitIntoCharacters = from.split('').join(' '); 12 | 13 | const ncco = [ 14 | { 15 | action: 'talk', 16 | text: `Thank you for calling from ${fromSplitIntoCharacters}`, 17 | }, 18 | ]; 19 | 20 | response.json(ncco); 21 | }; 22 | 23 | app.get('/webhooks/answer', onInboundCall); 24 | 25 | app.listen(port, () => { 26 | console.log(`Example app listening on port ${port}`); 27 | }); 28 | -------------------------------------------------------------------------------- /conversation/event/list-events.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_ID = process.env.CONV_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_PRIVATE_KEY, 12 | }); 13 | 14 | const run = async () => { 15 | try { 16 | for await (const event of vonage.conversations.listAllEvents(CONV_ID)) { 17 | console.log(event); 18 | } 19 | } catch (error) { 20 | console.error(error); 21 | } 22 | }; 23 | 24 | run(); 25 | -------------------------------------------------------------------------------- /conversation/user/create-user.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const USER_NAME = process.env.USER_NAME; 6 | const USER_DISPLAY_NAME = process.env.USER_DISPLAY_NAME; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | vonage.users.createUser({ 16 | 'name': USER_NAME, 17 | 'displayName': USER_DISPLAY_NAME, 18 | }) 19 | .then((user) => console.log(user)) 20 | .catch((error) => console.error(error)); 21 | -------------------------------------------------------------------------------- /conversation/member/list-members.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_ID = process.env.CONV_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_PRIVATE_KEY, 12 | }); 13 | 14 | const run = async () => { 15 | try { 16 | for await (const member of vonage.conversations.listAllMembers(CONV_ID)) { 17 | console.log(member); 18 | } 19 | } catch (error) { 20 | console.error(error); 21 | } 22 | }; 23 | 24 | run(); 25 | 26 | -------------------------------------------------------------------------------- /voice/play-tts-into-a-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 4 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 5 | const VOICE_CALL_ID = process.env.VOICE_CALL_ID; 6 | const VOICE_TEXT = process.env.VOICE_TEXT; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | vonage.voice.playTTS( 16 | VOICE_CALL_ID, 17 | { 18 | action: 'talk', 19 | text: VOICE_TEXT, 20 | language: 'en-US', 21 | }) 22 | .then((resp) => console.log(resp)) 23 | .catch((error) => console.error(error)); 24 | -------------------------------------------------------------------------------- /verify2/check-verification-code.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_REQUEST_ID = process.env.VERIFY_REQUEST_ID; 6 | const VERIFY_CODE = process.env.VERIFY_CODE; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage ({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 13 | }); 14 | 15 | vonage.verify2.checkCode(VERIFY_REQUEST_ID, VERIFY_CODE) 16 | .then((status) => console.log(`The status is ${status}`), 17 | ) 18 | .catch((err) => console.error(err)); 19 | -------------------------------------------------------------------------------- /jwt/decode-jwt.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const express = require('express'); 4 | const jwt = require('jsonwebtoken'); 5 | 6 | const app = express(); 7 | 8 | const signatureSecret = process.env.VONAGE_SIGNATURE_SECRET; 9 | 10 | app.set('port', (process.env.PORT || 5000)); 11 | 12 | app.get('/', function (req, res) { 13 | try { 14 | const auth = jwt.verify(req.headers['authorization'].split(' ')[1], signatureSecret); 15 | res.send('Verified'); 16 | console.log(auth); 17 | } catch (error) { 18 | console.error(error); 19 | res.sendStatus('401'); 20 | } 21 | }); 22 | 23 | app.listen(app.get('port'), function() { 24 | console.log('Example app listening on port', app.get('port')); 25 | }); 26 | -------------------------------------------------------------------------------- /meetings/retrieve-room.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const ROOM_ID = process.env.ROOM_ID; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | meetingsClient.getRoom(ROOM_ID) 18 | .then((room) => console.log(room)) 19 | .catch((error) => console.error(error)); 20 | -------------------------------------------------------------------------------- /subaccounts/create-subaccount.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const NEW_SUBACCOUNT_NAME = process.env.NEW_SUBACCOUNT_NAME; 6 | const NEW_SUBACCOUNT_SECRET = process.env.NEW_SUBACCOUNT_SECRET; 7 | 8 | const { SubAccounts } = require('@vonage/subaccounts'); 9 | 10 | const subAccountClient = new SubAccounts({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | subAccountClient.createSubAccount({ 16 | name: NEW_SUBACCOUNT_NAME, 17 | secret: NEW_SUBACCOUNT_SECRET, 18 | }) 19 | .then((newSubAccount) => console.log(newSubAccount)) 20 | .catch((error) => console.error(error)); 21 | -------------------------------------------------------------------------------- /meetings/retrieve-theme.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const THEME_ID = process.env.THEME_ID; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | meetingsClient.getTheme(THEME_ID) 18 | .then((theme) => console.log(theme)) 19 | .catch((error) => console.error(error)); 20 | -------------------------------------------------------------------------------- /verify/send-psd2-code.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VERIFY_NUMBER = process.env.VERIFY_NUMBER; 6 | const VERIFY_PAYEE_NAME = process.env.VERIFY_PAYEE_NAME; 7 | const VERIFY_AMOUNT = process.env.VERIFY_AMOUNT; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | 11 | const vonage = new Vonage({ 12 | apiKey: VONAGE_API_KEY, 13 | apiSecret: VONAGE_API_SECRET, 14 | }); 15 | 16 | vonage.verify.start({ 17 | number: VERIFY_NUMBER, 18 | payee: VERIFY_PAYEE_NAME, 19 | amount: VERIFY_AMOUNT, 20 | }) 21 | .then(({ requestId } ) => console.log(requestId)) 22 | .catch((error) => console.error(error)); 23 | -------------------------------------------------------------------------------- /conversation/user/list-user-conversations.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const USER_ID = process.env.USER_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_PRIVATE_KEY, 12 | }); 13 | 14 | const run = async () => { 15 | try { 16 | for await (const conversation of vonage.conversations.listAllUserConversation(USER_ID)) { 17 | console.log(conversation); 18 | } 19 | } catch (error) { 20 | console.error(error); 21 | } 22 | }; 23 | 24 | run(); 25 | -------------------------------------------------------------------------------- /meetings/delete-theme.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const THEME_ID = process.env.THEME_ID; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | meetingsClient.deleteTheme(THEME_ID) 18 | .then(() => console.log('Theme deleted')) 19 | .catch((error) => console.error(error)); 20 | -------------------------------------------------------------------------------- /verify2/update-template.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_TEMPLATE_ID = process.env.VERIFY_TEMPLATE_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage ({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | }); 13 | 14 | vonage.verify2.getTemplateFragment( 15 | VERIFY_TEMPLATE_ID, 16 | { 17 | name: 'Updated template name', 18 | isDefault: true, 19 | }, 20 | ) 21 | .then((fragment) => console.log(fragment)) 22 | .catch((error) => console.error(error)); 23 | -------------------------------------------------------------------------------- /verify2/cancel-request.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_REQUEST_ID = process.env.VERIFY_REQUEST_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage ({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | }); 13 | 14 | vonage.verify2.cancel(VERIFY_REQUEST_ID) 15 | .then((status) => status 16 | ? console.log('Request cancelled') 17 | : console.log('Request was already fullfilled or request id is invalid'), 18 | ) 19 | .catch((error) => console.error(error)); 20 | -------------------------------------------------------------------------------- /verify/send-verification-with-pin-code.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VERIFY_NUMBER = process.env.VERIFY_NUMBER; 6 | const VERIFY_CODE = process.env.VERIFY_CODE; 7 | const VERIFY_BRAND_NAME = process.env.VERIFY_BRAND_NAME; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | 11 | const vonage = new Vonage({ 12 | apiKey: VONAGE_API_KEY, 13 | apiSecret: VONAGE_API_SECRET, 14 | }); 15 | 16 | vonage.verify.start({ 17 | number: VERIFY_NUMBER, 18 | brand: VERIFY_BRAND_NAME, 19 | pinCode: VERIFY_CODE, 20 | }) 21 | .then(({ requestId } ) => console.log(requestId)) 22 | .catch((error) => console.error(error)); 23 | -------------------------------------------------------------------------------- /verify2/get-fragment.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_TEMPLATE_ID = process.env.VERIFY_TEMPLATE_ID; 6 | const VERIFY_TEMPLATE_FRAGMENT_ID = process.env.VERIFY_TEMPLATE_FRAGMENT_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage ({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 13 | }); 14 | 15 | vonage.verify2.getTemplateFragment(VERIFY_TEMPLATE_ID, VERIFY_TEMPLATE_FRAGMENT_ID) 16 | .then((fragment) => console.log(fragment)) 17 | .catch((error) => console.error(error)); 18 | -------------------------------------------------------------------------------- /conversation/conversation/create-conversation.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_NAME = process.env.CONV_NAME; 6 | const CONV_DISPLAY_NAME = process.env.CONV_DISPLAY_NAME; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | vonage.conversations.createConversation({ 16 | 'name': CONV_NAME, 17 | 'displayName': CONV_DISPLAY_NAME, 18 | }) 19 | .then((conversation) => console.log(conversation)) 20 | .catch((error) => console.error(error)); 21 | -------------------------------------------------------------------------------- /meetings/set-default-theme.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const THEME_ID = process.env.THEME_ID; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | meetingsClient.setDefaultTheme(THEME_ID) 18 | .then(() => console.log('Default Theme updated')) 19 | .catch((error) => console.error(error)); 20 | -------------------------------------------------------------------------------- /meetings/upload-logo.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const THEME_ID = process.env.THEME_ID; 6 | const THEME_FILE = '/path/to/file'; 7 | 8 | const { Auth } = require('@vonage/auth'); 9 | const { Meetings, LogoType } = require('@vonage/meetings'); 10 | 11 | const credentials = new Auth({ 12 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 13 | applicationId: VONAGE_APPLICATION_ID, 14 | }); 15 | const options = {}; 16 | 17 | const meetingsClient = new Meetings(credentials, options); 18 | await meetingsClient.uploadIcon(THEME_ID, LogoType.WHITE, THEME_FILE); 19 | -------------------------------------------------------------------------------- /meetings/list-dial-in-numbers.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const SESSION_ID = process.env.SESSION_ID; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | meetingsClient.getDialInNumbers(SESSION_ID) 18 | .then((numbers) => console.log(numbers)) 19 | .catch((error) => console.error(error)); 20 | -------------------------------------------------------------------------------- /meetings/retrieve-recording.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const RECORDING_ID = process.env.RECORDING_ID; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | meetingsClient.getRecording(RECORDING_ID) 18 | .then((recording) => console.log(recording)) 19 | .catch((error) => console.error(error)); 20 | -------------------------------------------------------------------------------- /verify2/delete-fragment.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_TEMPLATE_ID = process.env.VERIFY_TEMPLATE_ID; 6 | const VERIFY_TEMPLATE_FRAGMENT_ID = process.env.VERIFY_TEMPLATE_FRAGMENT_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage ({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 13 | }); 14 | 15 | vonage.verify2.deleteTemplateFragment(VERIFY_TEMPLATE_ID, VERIFY_TEMPLATE_FRAGMENT_ID) 16 | .then(() => console.log('Fragment deleted')) 17 | .catch((error) => console.error(error)); 18 | -------------------------------------------------------------------------------- /meetings/delete-recording.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const RECORDING_ID = process.env.RECORDING_ID; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | meetingsClient.deleteRecording(RECORDING_ID) 18 | .then(() => console.log('Recording deleted')) 19 | .catch((error) => console.error(error)); 20 | -------------------------------------------------------------------------------- /verify2/list-fragments.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_TEMPLATE_ID = process.env.VERIFY_TEMPLATE_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage ({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | }); 13 | 14 | const run = async () => { 15 | try { 16 | for await (const fragment of vonage.verify2.listAllTemplateFragments(VERIFY_TEMPLATE_ID)) { 17 | console.log(fragment); 18 | } 19 | } catch (error) { 20 | console.error(error); 21 | } 22 | }; 23 | 24 | run(); 25 | -------------------------------------------------------------------------------- /voice/answer-webhook-endpoint.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const port = process.env.PORT || 3000; 4 | 5 | const Express = require('express'); 6 | const bodyParser = require('body-parser'); 7 | 8 | const app = new Express(); 9 | 10 | app.use(bodyParser.urlencoded({ extended: false })); 11 | 12 | app.get('/webhook/answer', (_, res) => { 13 | // At this point you build an NCCO that fulfills your use case. 14 | // For the purposes of an example we'll just read out some text. 15 | const ncco = [ 16 | { 17 | action: 'talk', 18 | text: 'Hello from Vonage!', 19 | }, 20 | ]; 21 | 22 | res.json(ncco); 23 | res.status(200); 24 | }); 25 | 26 | app.listen(port, () => { 27 | console.log(`Example app listening on port ${port}`); 28 | }); 29 | 30 | -------------------------------------------------------------------------------- /voice/download-a-recording.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 4 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 5 | const VOICE_RECORDING_URL = process.env.VOICE_RECORDING_URL; 6 | const VOICE_RECORDING_DESTINATION = process.env.VOICE_RECORDING_DESTINATION; 7 | 8 | const { FileClient } = require('@vonage/server-client'); 9 | 10 | const fileClient = new FileClient({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | fileClient.downloadFile( 16 | VOICE_RECORDING_URL, 17 | VOICE_RECORDING_DESTINATION, 18 | ) 19 | .then(() => console.log(`File Downloaded to ${VOICE_RECORDING_DESTINATION}`)) 20 | .catch((error) => console.error(error)); 21 | 22 | -------------------------------------------------------------------------------- /meetings/list-rooms.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | 6 | const { Auth } = require('@vonage/auth'); 7 | const { Meetings } = require('@vonage/meetings'); 8 | 9 | const credentials = new Auth({ 10 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 11 | applicationId: VONAGE_APPLICATION_ID, 12 | }); 13 | 14 | const meetingsClient = new Meetings(credentials); 15 | 16 | const run = async () => { 17 | try { 18 | for await (const room of meetingsClient.getRooms()) { 19 | console.log(room); 20 | }; 21 | } catch (error) { 22 | console.error(error); 23 | } 24 | }; 25 | 26 | run(); 27 | -------------------------------------------------------------------------------- /verify/send-verification-code-with-workflow.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VERIFY_NUMBER = process.env.VERIFY_NUMBER; 6 | const VERIFY_VERIFY_WORKFLOW_ID = process.env.VERIFY_WORKFLOW_ID; 7 | const VERIFY_BRAND_NAME = process.env.VERIFY_BRAND_NAME; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | 11 | const vonage = new Vonage({ 12 | apiKey: VONAGE_API_KEY, 13 | apiSecret: VONAGE_API_SECRET, 14 | }); 15 | 16 | vonage.verify.start({ 17 | number: VERIFY_NUMBER, 18 | senderId: VERIFY_BRAND_NAME, 19 | workflow_id: VERIFY_VERIFY_WORKFLOW_ID, 20 | }) 21 | .then(({ requestId } ) => console.log(requestId)) 22 | .catch((error) => console.error(error)); 23 | -------------------------------------------------------------------------------- /meetings/list-themes.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | 6 | const { Auth } = require('@vonage/auth'); 7 | const { Meetings } = require('@vonage/meetings'); 8 | 9 | const credentials = new Auth({ 10 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 11 | applicationId: VONAGE_APPLICATION_ID, 12 | }); 13 | 14 | const meetingsClient = new Meetings(credentials); 15 | 16 | const run = async () => { 17 | try { 18 | for await (const theme of meetingsClient.getThemes()) { 19 | console.log(theme); 20 | } 21 | } catch (error) { 22 | console.error(error); 23 | } 24 | }; 25 | 26 | run(); 27 | -------------------------------------------------------------------------------- /subaccounts/transfer-number.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SUBACCOUNT_KEY = process.env.SUBACCOUNT_KEY; 6 | const VONAGE_NUMBER = process.env.VONAGE_NUMBER; 7 | const COUNTRY_CODE = process.env.COUNTRY_CODE; 8 | 9 | const { SubAccounts } = require('@vonage/subaccounts'); 10 | 11 | const subAccountClient = new SubAccounts({ 12 | apiKey: VONAGE_API_KEY, 13 | apiSecret: VONAGE_API_SECRET, 14 | }); 15 | 16 | subAccountClient.transferNumber({ 17 | from: VONAGE_API_KEY, 18 | to: SUBACCOUNT_KEY, 19 | numbers: VONAGE_NUMBER, 20 | country: COUNTRY_CODE, 21 | }) 22 | .then((numberTransfer) => console.log(numberTransfer)) 23 | .catch((error) => console.error(error)); 24 | -------------------------------------------------------------------------------- /voice/mute-a-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const VOICE_CALL_ID = process.env.VOICE_CALL_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_PRIVATE_KEY, 12 | }); 13 | 14 | vonage.voice.muteCall(VOICE_CALL_ID) 15 | .then(() => console.log('Call Muted')) 16 | .catch((error) => console.error(error)); 17 | 18 | const unmute = () => { 19 | vonage.voice.unmuteCall(VOICE_CALL_ID) 20 | .then(() => console.log('Unmuted Call')) 21 | .catch((error) => console.error(error)); 22 | }; 23 | 24 | setTimeout(unmute, 5000); // delay 5 seconds 25 | -------------------------------------------------------------------------------- /verify2/create-template-fragment.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_TEMPLATE_ID = process.env.VERIFY_TEMPLATE_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage ({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | }); 13 | 14 | vonage.verify2.createTemplateFragment( 15 | VERIFY_TEMPLATE_ID, 16 | { 17 | channel: 'sms', 18 | locale: 'en-us', 19 | text: 'The authentication code for your ${brand} is: ${code}', 20 | }, 21 | ) 22 | .then((result) => console.log(result)) 23 | .catch((error) => console.error(error)); 24 | -------------------------------------------------------------------------------- /voice/conference-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VOICE_CONF_NAME = process.env.VOICE_CONF_NAME; 4 | const port = process.env.PORT || 3000; 5 | 6 | const Express = require('express'); 7 | const bodyParser = require('body-parser'); 8 | 9 | const app = new Express(); 10 | app.use(bodyParser.json()); 11 | 12 | const onInboundCall = (_, response) => { 13 | const ncco = [ 14 | { 15 | action: 'talk', 16 | text: 'Please wait while we connect you to the conference', 17 | }, 18 | { 19 | action: 'conversation', 20 | name: VOICE_CONF_NAME, 21 | }, 22 | ]; 23 | 24 | response.json(ncco); 25 | }; 26 | 27 | app.get('/webhooks/answer', onInboundCall); 28 | 29 | app.listen(port, () => { 30 | console.log(`Example app listening on port ${port}`); 31 | }); 32 | -------------------------------------------------------------------------------- /meetings/create-theme.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const THEME_DISPLAY_NAME = process.env.THEME_DISPLAY_NAME; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | meetingsClient.createTheme({ 18 | themeName: THEME_DISPLAY_NAME, 19 | mainColor: '#c0ffee', 20 | }) 21 | .then((theme) => console.log(theme)) 22 | .catch((error) => console.error(error)); 23 | -------------------------------------------------------------------------------- /voice/connect-an-inbound-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_VIRTUAL_NUMBER = process.env.VONAGE_VIRTUAL_NUMBER; 4 | const VOICE_TO_NUMBER = process.env.VOICE_TO_NUMBER; 5 | const port = process.env.PORT || 3000; 6 | 7 | const Express = require('express'); 8 | 9 | const app = new Express(); 10 | 11 | const onInboundCall = (_, response) => { 12 | const ncco = [ 13 | { 14 | action: 'connect', 15 | from: VONAGE_VIRTUAL_NUMBER, 16 | endpoint: [ 17 | { 18 | type: 'phone', 19 | number: VOICE_TO_NUMBER, 20 | }, 21 | ], 22 | }, 23 | ]; 24 | 25 | response.json(ncco); 26 | }; 27 | 28 | app.get('/webhooks/answer', onInboundCall); 29 | 30 | app.listen(port, () => { 31 | console.log(`Example app listening on port ${port}`); 32 | }); 33 | -------------------------------------------------------------------------------- /voice/earmuff-a-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const VOICE_CALL_ID = process.env.VOICE_CALL_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_PRIVATE_KEY, 12 | }); 13 | 14 | vonage.voice.earmuffCall(VOICE_CALL_ID) 15 | .then(() => console.log('Call earmuffed')) 16 | .catch((error) => console.error(error)); 17 | 18 | const unearmuff = () => { 19 | vonage.voice.unearmuffCall(VOICE_CALL_ID) 20 | .then(() => console.log('Unearmuffed call')) 21 | .catch((error) => console.error(error)); 22 | }; 23 | 24 | setTimeout(unearmuff, 3000); // delay 3 seconds 25 | -------------------------------------------------------------------------------- /conversation/event/create-custom-event.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname + '/../../' + process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_EVENT_FROM = process.env.CONV_EVENT_FROM; 6 | const CONV_ID = process.env.CONVERSATION_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | vonage.conversations.createEvent( 16 | CONV_ID, 17 | { 18 | 'type': 'custom:YOUR_EVENT_NAME', 19 | 'from': CONV_EVENT_FROM, 20 | 'body': { 21 | 'your': 'data', 22 | }, 23 | }, 24 | ) 25 | .then((event) => console.log(event)) 26 | .catch((error) => console.error(error)); 27 | -------------------------------------------------------------------------------- /sms/send.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SMS_TO_NUMBER = process.env.VONAGE_SMS_TO_NUMBER; 6 | const SMS_SENDER_ID = process.env.SMS_SENDER_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | vonage.sms.send({ 16 | to: SMS_TO_NUMBER, 17 | from: SMS_SENDER_ID, 18 | text: 'A text message sent using the Vonage SMS API', 19 | }) 20 | .then((resp) => { 21 | console.log('Message sent successfully'); 22 | console.log(resp); 23 | }) 24 | .catch((err) => { 25 | console.log('There was an error sending the messages.'); 26 | console.error(err); 27 | }); 28 | -------------------------------------------------------------------------------- /voice/transfer-a-call-inline-ncco.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const VOICE_CALL_ID = process.env.VOICE_CALL_ID; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | applicationId: VONAGE_APPLICATION_ID, 11 | privateKey: VONAGE_PRIVATE_KEY, 12 | }); 13 | 14 | vonage.voice.transferCallWithNCCO(VOICE_CALL_ID, { 15 | action: 'transfer', 16 | destination: { 17 | 'type': 'ncco', 18 | 'ncco': [ 19 | { 20 | 'action': 'talk', 21 | 'text': 'This is a transfer action using an inline NCCO', 22 | }, 23 | ], 24 | }, 25 | }) 26 | .then(() => console.log('Call Transferred')) 27 | .catch((error) => console.error(error)); 28 | -------------------------------------------------------------------------------- /meetings/create-instant-room.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const ROOM_DISPLAY_NAME = process.env.ROOM_DISPLAY_NAME; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings, MeetingType } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | meetingsClient.createRoom({ 18 | type: MeetingType.INSTANT, 19 | displayName: ROOM_DISPLAY_NAME, 20 | }) 21 | .then((room) => console.log(room)) 22 | .catch((error) => console.error(error)); 23 | -------------------------------------------------------------------------------- /audit/get-events-with-filtering.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SEARCH_TEXT = process.env.SEARCH_TEXT; 6 | const DATE_FROM = process.env.DATE_FROM; 7 | const DATE_TO = process.env.DATE_TO; 8 | 9 | const { Audit } = require('@vonage/audit'); 10 | 11 | const auditClient = new Audit({ 12 | apiKey: VONAGE_API_KEY, 13 | apiSecret: VONAGE_API_SECRET, 14 | }); 15 | 16 | const run = async () => { 17 | const filter = { 18 | dateFrom: DATE_FROM, 19 | dateTo: DATE_TO, 20 | searchText: SEARCH_TEXT, 21 | }; 22 | 23 | try { 24 | for await (const event of auditClient.getEvents(filter)) { 25 | console.log(event); 26 | } 27 | } catch (error) { 28 | console.log(error); 29 | } 30 | }; 31 | run(); 32 | -------------------------------------------------------------------------------- /verify/send-psd2-with-workflow.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VERIFY_NUMBER = process.env.VERIFY_NUMBER; 6 | const VERIFY_PAYEE_NAME = process.env.VERIFY_PAYEE_NAME; 7 | const VERIFY_AMOUNT = process.env.VERIFY_AMOUNT; 8 | const VERIFY_WORKFLOW_ID = process.env.VERIFY_WORKFLOW_ID; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | 12 | const vonage = new Vonage({ 13 | apiKey: VONAGE_API_KEY, 14 | apiSecret: VONAGE_API_SECRET, 15 | }); 16 | 17 | vonage.verify.start({ 18 | number: VERIFY_NUMBER, 19 | payee: VERIFY_PAYEE_NAME, 20 | amount: VERIFY_AMOUNT, 21 | workflow_id: VERIFY_WORKFLOW_ID, 22 | }) 23 | .then(({ requestId } ) => console.log(requestId)) 24 | .catch((error) => console.error(error)); 25 | -------------------------------------------------------------------------------- /meetings/list-rooms-by-theme.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const THEME_ID = process.env.THEME_ID; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | const run = async () => { 18 | try { 19 | for (const room of meetingsClient.getRoomsForTheme(THEME_ID)) { 20 | console.log(room); 21 | } 22 | } catch (error) { 23 | console.error(error); 24 | } 25 | }; 26 | 27 | run(); 28 | -------------------------------------------------------------------------------- /conversation/event/create-event.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname + '/../../' + process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_EVENT_FROM = process.env.CONV_EVENT_FROM; 6 | const CONV_EVENT_TYPE = process.env.CONV_EVENT_TYPE; 7 | const CONV_ID = process.env.CONV_ID; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_PRIVATE_KEY, 14 | }); 15 | 16 | vonage.conversations.createEvent( 17 | CONV_ID, 18 | { 19 | 'type': CONV_EVENT_TYPE, 20 | 'from': CONV_EVENT_FROM, 21 | 'body': { 22 | 'text': 'message', 23 | }, 24 | }, 25 | ) 26 | .then((event) => console.log(event)) 27 | .catch((error) => console.error(error)); 28 | -------------------------------------------------------------------------------- /numbers/list-numbers.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const NUMBER_SEARCH_CRITERIA = process.env.NUMBER_SEARCH_CRITERIA; 6 | const NUMBER_SEARCH_PATTERN = process.env.NUMBER_SEARCH_PATTERN; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | apiKey: VONAGE_API_KEY, 12 | apiSecret: VONAGE_API_SECRET, 13 | }); 14 | 15 | const run = async () => { 16 | try { 17 | const filter = { 18 | pattern: NUMBER_SEARCH_CRITERIA, 19 | searchPattern: NUMBER_SEARCH_PATTERN, 20 | }; 21 | 22 | for await (const number of vonage.number.getOwnedNumbers(filter)) { 23 | console.log(number); 24 | } 25 | } catch (error) { 26 | console.error(error); 27 | } 28 | }; 29 | 30 | run(); 31 | -------------------------------------------------------------------------------- /meetings/list-recordings.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const SESSION_ID = process.env.SESSION_ID; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | const run = async () => { 18 | try{ 19 | for await (const recording of meetingsClient.getSessionRecordings(SESSION_ID)) { 20 | console.log(recording); 21 | } 22 | } catch (error) { 23 | console.error(error); 24 | } 25 | }; 26 | 27 | run(); 28 | -------------------------------------------------------------------------------- /verify2/send-request-sms.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_BRAND_NAME = process.env.VERIFY_BRAND_NAME; 6 | const VERIFY_NUMBER = process.env.VERIFY_NUMBER; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | const { Channels } = require('@vonage/verify2'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 14 | }); 15 | 16 | vonage.verify2.newRequest({ 17 | brand: VERIFY_BRAND_NAME, 18 | workflow: [ 19 | { 20 | channel: Channels.SMS, 21 | to: VERIFY_NUMBER, 22 | }, 23 | ], 24 | }) 25 | .then(({requestId}) => console.log(requestId)) 26 | .catch((err) => console.error(err)); 27 | -------------------------------------------------------------------------------- /verify2/send-request-email.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_BRAND_NAME = process.env.VERIFY_BRAND_NAME; 6 | const VERIFY_TO_EMAIL = process.env.VERIFY_TO_EMAIL; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | const { Channels } = require('@vonage/verify2'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 14 | }); 15 | 16 | vonage.verify2.newRequest({ 17 | brand: VERIFY_BRAND_NAME, 18 | workflow: [ 19 | { 20 | channel: Channels.EMAIL, 21 | to: VERIFY_TO_EMAIL, 22 | }, 23 | ], 24 | }) 25 | .then(({requestId}) => console.log(requestId)) 26 | .catch((err) => console.error(err)); 27 | -------------------------------------------------------------------------------- /verify2/send-request-whatsapp.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_BRAND_NAME = process.env.VERIFY_BRAND_NAME; 6 | const VERIFY_NUMBER = process.env.VERIFY_NUMBER; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | const { Channels } = require('@vonage/verify2'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 14 | }); 15 | 16 | vonage.verify2.newRequest({ 17 | brand: VERIFY_BRAND_NAME, 18 | workflow: [ 19 | { 20 | channel: Channels.WHATSAPP, 21 | to: VERIFY_NUMBER, 22 | }, 23 | ], 24 | }) 25 | .then(({requestId}) => console.log(requestId)) 26 | .catch((err) => console.error(err)); 27 | -------------------------------------------------------------------------------- /messages/signed-webhooks/verify-signed-webhook.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | const { verifySignature } = require('@vonage/jwt'); 3 | 4 | const VONAGE_API_SIGNATURE_SECRET = process.env.VONAGE_API_SIGNATURE_SECRET; 5 | 6 | const app = require('express')(); 7 | const bodyParser = require('body-parser'); 8 | 9 | app.use(bodyParser.json()); 10 | app.use(bodyParser.urlencoded({ 11 | extended: true, 12 | })); 13 | 14 | app 15 | .route('/webhooks/inbound-message') 16 | .post(handleInboundMessage); 17 | 18 | const handleInboundMessage = (request, response) => { 19 | const token = request.headers.authorization.split(' ')[1]; 20 | if (verifySignature(token, VONAGE_API_SIGNATURE_SECRET)) { 21 | console.log('Valid signature'); 22 | } else { 23 | console.log('Invalid signature'); 24 | } 25 | 26 | response.send(200); 27 | }; 28 | 29 | app.listen(process.env.PORT || 3000); 30 | -------------------------------------------------------------------------------- /verify2/update-template-fragment.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_TEMPLATE_ID = process.env.VERIFY_TEMPLATE_ID; 6 | const VERIFY_TEMPLATE_FRAGMENT_ID = process.env.VERIFY_TEMPLATE_FRAGMENT_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage ({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 13 | }); 14 | 15 | vonage.verify2.getTemplateFragment( 16 | VERIFY_TEMPLATE_ID, 17 | { 18 | templateFragmentId: VERIFY_TEMPLATE_FRAGMENT_ID, 19 | text: 'The authentication code for your ${brand} is: ${code}', 20 | }, 21 | ) 22 | .then((fragment) => console.log(fragment)) 23 | .catch((error) => console.error(error)); 24 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Getting Involved 2 | 3 | Thanks for your interest in the project, we'd love to have you involved! Check out the sections below to find out more about what to do next... 4 | 5 | ## Opening an Issue 6 | 7 | We always welcome issues, if you've seen something that isn't quite right or you have a suggestion for a new feature, please go ahead and open an issue in this project. Include as much information as you have, it really helps. 8 | 9 | ## Making a Code Change 10 | 11 | We're always open to pull requests, but these should be small and clearly described so that we can understand what you're trying to do. Feel free to open an issue first and get some discussion going. 12 | 13 | When you're ready to start coding, fork this repository to your own GitHub account and make your changes in a new branch. Once you're happy, open a pull request and explain what the change is and why you think we should include it in our project. -------------------------------------------------------------------------------- /verify2/send-request-voice.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname +'/../'+ process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_BRAND_NAME = process.env.VERIFY_BRAND_NAME; 6 | const VERIFY_NUMBER = process.env.VERIFY_NUMBER; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | const { Channels } = require('@vonage/verify2'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 14 | }); 15 | 16 | vonage.verify2.newRequest({ 17 | brand: VERIFY_BRAND_NAME, 18 | workflow: [ 19 | { 20 | channel: Channels.VOICE, 21 | to: VERIFY_NUMBER, 22 | }, 23 | ], 24 | }) 25 | .then(({requestId}) => console.log(requestId)) 26 | .catch((err) => console.error(err)); 27 | -------------------------------------------------------------------------------- /voice/stream-audio-into-a-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const VOICE_CALL_ID = process.env.VOICE_CALL_ID; 6 | const VOICE_STREAM_AUDIO = process.env.VOICE_STREAM_AUDIO; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | const vonage = new Vonage({ 11 | applicationId: VONAGE_APPLICATION_ID, 12 | privateKey: VONAGE_PRIVATE_KEY, 13 | }); 14 | 15 | vonage.voice.streamAudio(VOICE_CALL_ID, VOICE_STREAM_AUDIO, 0) 16 | .then((resp) => console.log(resp)) 17 | .catch((error) => console.error(error)); 18 | 19 | const stopStream = () => { 20 | vonage.voice.stopStreamAudio(VOICE_CALL_ID) 21 | .then((resp) => console.log(resp)) 22 | .catch((error) => console.error(error)); 23 | }; 24 | 25 | setTimeout(stopStream, 5000); // delay 5 seconds 26 | -------------------------------------------------------------------------------- /conversation/member/create-member.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_USER_ID = process.env.CONV_USER_ID; 6 | const CONV_ID = process.env.CONV_ID; 7 | const CONV_MEMBER_STATE = process.env.CONV_MEMBER_STATE; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_PRIVATE_KEY, 14 | }); 15 | 16 | const run = async () => { 17 | const member = vonage.conversations.createMember( 18 | CONV_ID, 19 | { 20 | user: { 21 | id: CONV_USER_ID, 22 | }, 23 | state: CONV_MEMBER_STATE, 24 | channel: { 25 | type:'app', 26 | }, 27 | }, 28 | ); 29 | console.log(member); 30 | }; 31 | 32 | run(); 33 | -------------------------------------------------------------------------------- /verify2/send-request-silent-auth.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_BRAND_NAME = process.env.VERIFY_BRAND_NAME; 6 | const VERIFY_NUMBER = process.env.VERIFY_NUMBER; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | const { SilentAuthChannel } = require('@vonage/verify2'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 14 | }); 15 | 16 | vonage.verify2.newRequest({ 17 | brand: VERIFY_BRAND_NAME, 18 | workflow: [ 19 | { 20 | channel: SilentAuthChannel.SILENT_AUTH, 21 | to: VERIFY_NUMBER, 22 | }, 23 | ], 24 | }) 25 | .then(({requestId}) => console.log(requestId)) 26 | .catch((err) => console.error(err)); 27 | -------------------------------------------------------------------------------- /verify2/send-request-whatsapp-interactive.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_BRAND_NAME = process.env.VERIFY_BRAND_NAME; 6 | const VERIFY_NUMBER = process.env.VERIFY_NUMBER; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | const { Channels } = require('@vonage/verify2'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 14 | }); 15 | 16 | vonage.verify2.newRequest({ 17 | brand: VERIFY_BRAND_NAME, 18 | workflow: [ 19 | { 20 | channel: Channels.WHATSAPP_INTERACTIVE, 21 | to: VERIFY_NUMBER, 22 | }, 23 | ], 24 | }) 25 | .then(({requestId}) => console.log(requestId)) 26 | .catch((err) => console.error(err)); 27 | -------------------------------------------------------------------------------- /meetings/update-theme.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const THEME_ID = process.env.THEME_ID; 6 | 7 | const { Auth } = require('@vonage/auth'); 8 | const { Meetings } = require('@vonage/meetings'); 9 | 10 | const credentials = new Auth({ 11 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 12 | applicationId: VONAGE_APPLICATION_ID, 13 | }); 14 | 15 | const meetingsClient = new Meetings(credentials); 16 | 17 | const run = async () => { 18 | try { 19 | const theme = await meetingsClient.getTheme(THEME_ID); 20 | theme.mainColor = '#c0ffee'; 21 | theme.brand = 'Brand'; 22 | await meetingsClient.updateTheme(THEME_ID, theme); 23 | } catch (error) { 24 | console.error(error); 25 | } 26 | }; 27 | 28 | run(); 29 | -------------------------------------------------------------------------------- /voice/make-an-outbound-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const VOICE_TO_NUMBER = process.env.VOICE_TO_NUMBER; 6 | const VONAGE_VIRTUAL_NUMBER = process.env.VONAGE_VIRTUAL_NUMBER; 7 | const VOICE_ANSWER_URL = process.env.VOICE_ANSWER_URL; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_PRIVATE_KEY, 14 | }); 15 | 16 | vonage.voice.createOutboundCall({ 17 | to: [ 18 | { 19 | type: 'phone', 20 | number: VOICE_TO_NUMBER, 21 | }, 22 | ], 23 | from: { 24 | type: 'phone', 25 | number: VONAGE_VIRTUAL_NUMBER, 26 | }, 27 | answer_url: [VOICE_ANSWER_URL], 28 | }) 29 | .then((resp) => console.log(resp)) 30 | .catch((error) => console.error(error)); 31 | -------------------------------------------------------------------------------- /meetings/create-long-term-room.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const ROOM_DISPLAY_NAME = process.env.ROOM_DISPLAY_NAME; 6 | const ROOM_EXPIRATION_DATE = process.env.ROOM_EXPIRATION_DATE; 7 | 8 | const { Auth } = require('@vonage/auth'); 9 | const { Meetings, MeetingType } = require('@vonage/meetings'); 10 | 11 | const credentials = new Auth({ 12 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 13 | applicationId: VONAGE_APPLICATION_ID, 14 | }); 15 | 16 | const meetingsClient = new Meetings(credentials); 17 | 18 | meetingsClient.createRoom({ 19 | type: MeetingType.LONG_TERM, 20 | displayName: ROOM_DISPLAY_NAME, 21 | expiresAt: ROOM_EXPIRATION_DATE, 22 | }) 23 | .then((room) => console.log(room)) 24 | .catch((error) => console.error(error)); 25 | -------------------------------------------------------------------------------- /meetings/update-room.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = __dirname + '/../../' + process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const ROOM_ID = process.env.ROOM_ID; 6 | const ROOM_EXPIRATION_DATE = process.env.ROOM_EXPIRATION_DATE; 7 | 8 | const { Auth } = require('@vonage/auth'); 9 | const { Meetings } = require('@vonage/meetings'); 10 | 11 | const credentials = new Auth({ 12 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 13 | applicationId: VONAGE_APPLICATION_ID, 14 | }); 15 | 16 | const meetingsClient = new Meetings(credentials); 17 | 18 | const run = async () => { 19 | try { 20 | const room = await meetingsClient.getRoom(ROOM_ID); 21 | room.expiresAt = ROOM_EXPIRATION_DATE; 22 | await meetingsClient.updateRoom(ROOM_ID, room); 23 | } catch (error) { 24 | console.error(error); 25 | } 26 | }; 27 | 28 | run(); 29 | -------------------------------------------------------------------------------- /conversation/user/update-user.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const USER_ID = process.env.USER_ID; 6 | const USER_NAME = process.env.USER_NEW_NAME; 7 | const USER_DISPLAY_NAME = process.env.USER_NEW_DISPLAY_NAME; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_PRIVATE_KEY, 14 | }); 15 | 16 | const run = async () => { 17 | // Load in all the user details to prevent overwriting 18 | const user = vonage.users.getUser( 19 | USER_ID, 20 | ); 21 | 22 | user.name = USER_NAME; 23 | user.displayName = USER_DISPLAY_NAME; 24 | 25 | try { 26 | await vonage.users.updateUser(user); 27 | console.log(user); 28 | } catch (error) { 29 | console.error(error); 30 | } 31 | }; 32 | 33 | run(); 34 | -------------------------------------------------------------------------------- /conversation/member/update-member.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname + '/../../' + process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_ID = process.env.CONV_ID; 6 | const CONV_MEMBER_ID = process.env.CONV_MEMBER_ID; 7 | const CONV_MEMBER_STATE = process.env.CONV_MEMBER_STATE; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_PRIVATE_KEY, 14 | }); 15 | 16 | const run = async () => { 17 | // Load in all the member details to prevent overwriting 18 | const member = vonage.conversations.getMember( 19 | CONV_ID, 20 | CONV_MEMBER_ID, 21 | ); 22 | 23 | member.state = CONV_MEMBER_STATE; 24 | 25 | await vonage.conversations.updateMember( 26 | CONV_ID, 27 | CONV_MEMBER_ID, 28 | member, 29 | ); 30 | console.log(member); 31 | }; 32 | 33 | run(); 34 | -------------------------------------------------------------------------------- /sms/send-express.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SMS_SENDER_ID = process.env.SMS_SENDER_ID; 6 | 7 | const express = require('express'); 8 | const bodyParser = require('body-parser'); 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | const { SMS } = require('@vonage/messages'); 11 | 12 | const app = express(); 13 | app.use(bodyParser.json()); 14 | app.use(bodyParser.urlencoded({ extended: true })); 15 | 16 | app.listen(process.env.PORT || 3000); 17 | 18 | const vonage = new Vonage({ 19 | apiKey: VONAGE_API_KEY, 20 | apiSecret: VONAGE_API_SECRET, 21 | }); 22 | 23 | app.post('/send', (req, res) => { 24 | vonage.message.send(new SMS({ 25 | from: SMS_SENDER_ID, 26 | to: req.body.toNumber, 27 | text: req.body.message, 28 | })) 29 | .then((result) => res.json({message_uuid: result.messageUUID})) 30 | .catch(() => res.status(400)); 31 | }); 32 | -------------------------------------------------------------------------------- /messages/rcs/revoke-message.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 6 | const MESSAGE_ID = process.env.MESSAGE_ID; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | 10 | /** 11 | * It is best to send messages using JWT instead of basic auth. If you leave out 12 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 13 | * 14 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 15 | */ 16 | const vonage = new Vonage( 17 | { 18 | applicationId: VONAGE_APPLICATION_ID, 19 | privateKey: VONAGE_PRIVATE_KEY, 20 | }, 21 | { 22 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 23 | }, 24 | ); 25 | 26 | vonage.messages.updateMessage(MESSAGE_ID, 'revoked') 27 | .then(() => console.log('Message revoked')) 28 | .catch((error) => console.error(error)); 29 | -------------------------------------------------------------------------------- /sms/verify-signed-sms.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_SIGNATURE_SECRET = process.env.VONAGE_SIGNATURE_SECRET; 4 | 5 | const { Vonage } = require('@vonage/server-sdk'); 6 | 7 | const app = require('express')(); 8 | const bodyParser = require('body-parser'); 9 | 10 | app.use(bodyParser.json()); 11 | app.use(bodyParser.urlencoded({ 12 | extended: true, 13 | })); 14 | 15 | app 16 | .route('/webhooks/inbound-sms') 17 | .get(handleInboundSms) 18 | .post(handleInboundSms); 19 | 20 | const handleInboundSms = (request, response) => { 21 | const params = Object.assign(request.query, request.body); 22 | const { sig } = params; 23 | 24 | if (Vonage.sms.verifySignature( 25 | sig, 26 | params, 27 | VONAGE_SIGNATURE_SECRET, 28 | 'md5hash', // one of md5hash, md5, sha1, sha256, or sha512 29 | )) { 30 | console.log('Valid signature'); 31 | } else { 32 | console.log('Invalid signature'); 33 | } 34 | 35 | response.status(204).send(); 36 | }; 37 | 38 | app.listen(process.env.PORT || 3000); 39 | -------------------------------------------------------------------------------- /voice/make-an-outbound-call-with-ncco.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const VOICE_TO_NUMBER = process.env.VOICE_TO_NUMBER; 6 | const VONAGE_VIRTUAL_NUMBER = process.env.VONAGE_VIRTUAL_NUMBER; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | const { NCCOBuilder, Talk } = require('@vonage/voice'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_PRIVATE_KEY, 14 | }); 15 | 16 | const builder = new NCCOBuilder(); 17 | builder.addAction(new Talk('This is a text to speech call from Vonage')); 18 | 19 | vonage.voice.createOutboundCall({ 20 | to: [ 21 | { 22 | type: 'phone', 23 | number: VOICE_TO_NUMBER, 24 | }, 25 | ], 26 | from: { 27 | type: 'phone', 28 | number: VONAGE_VIRTUAL_NUMBER, 29 | }, 30 | ncco: builder.build(), 31 | }) 32 | .then((result) => console.log(result)) 33 | .catch((error) => console.error(error)); 34 | -------------------------------------------------------------------------------- /numbers/search-numbers.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const COUNTRY_CODE = process.env.COUNTRY_CODE; 6 | const VONAGE_NUMBER_TYPE = process.env.VONAGE_NUMBER_TYPE; 7 | const VONAGE_NUMBER_FEATURES = process.env.VONAGE_NUMBER_FEATURES; 8 | const NUMBER_SEARCH_CRITERIA = process.env.NUMBER_SEARCH_CRITERIA; 9 | const NUMBER_SEARCH_PATTERN = process.env.NUMBER_SEARCH_PATTERN; 10 | 11 | const { Vonage } = require('@vonage/server-sdk'); 12 | 13 | const vonage = new Vonage({ 14 | apiKey: VONAGE_API_KEY, 15 | apiSecret: VONAGE_API_SECRET, 16 | }); 17 | 18 | vonage.numbers.getOwnedNumbers({ 19 | country: COUNTRY_CODE, 20 | type: VONAGE_NUMBER_TYPE, 21 | pattern: NUMBER_SEARCH_CRITERIA, 22 | searchPattern: NUMBER_SEARCH_PATTERN, 23 | features: VONAGE_NUMBER_FEATURES, 24 | }) 25 | .then((numbers) => { 26 | for (const number of numbers) { 27 | console.log(number); 28 | } 29 | }) 30 | .catch((error) => console.error(error)); 31 | -------------------------------------------------------------------------------- /verify2/send-request-with-fallback.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({path: __dirname + '/../.env'}); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH; 5 | const VERIFY_BRAND_NAME = process.env.VERIFY_BRAND_NAME; 6 | const VERIFY_NUMBER = process.env.VERIFY_NUMBER; 7 | const VERIFY_TO_EMAIL = process.env.VERIFY_TO_EMAIL; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | const { Channels, SilentAuthChannel } = require('@vonage/verify2'); 11 | 12 | const vonage = new Vonage({ 13 | applicationId: VONAGE_APPLICATION_ID, 14 | privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH, 15 | }); 16 | 17 | vonage.verify2.newRequest({ 18 | brand: VERIFY_BRAND_NAME, 19 | workflow: [ 20 | { 21 | channel: SilentAuthChannel.SILENT_AUTH, 22 | to: VERIFY_NUMBER, 23 | }, 24 | { 25 | channel: Channels.EMAIL, 26 | to: VERIFY_TO_EMAIL, 27 | }, 28 | ], 29 | }) 30 | .then(({requestId}) => console.log(requestId)) 31 | .catch((err) => console.error(err)); 32 | -------------------------------------------------------------------------------- /voice/handle-user-input-dtmf.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const port = process.env.PORT || 3000; 4 | 5 | const Express = require('express'); 6 | const bodyParser = require('body-parser'); 7 | 8 | const app = new Express(); 9 | 10 | app.use(bodyParser.json()); 11 | 12 | const onInboundCall = (request, response) => { 13 | const ncco = [ 14 | { 15 | action: 'talk', 16 | text: 'Please enter a digit', 17 | }, 18 | { 19 | action: 'input', 20 | type: ['dtmf'], 21 | eventUrl: [`${request.protocol}://${request.get('host')}/webhooks/dtmf`], 22 | }, 23 | ]; 24 | 25 | response.json(ncco); 26 | }; 27 | 28 | const onInput = (request, response) => { 29 | const dtmf = request.body.dtmf; 30 | 31 | const ncco = [ 32 | { 33 | action: 'talk', 34 | text: `You pressed ${dtmf}`, 35 | }, 36 | ]; 37 | 38 | response.json(ncco); 39 | }; 40 | 41 | app 42 | .get('/webhooks/answer', onInboundCall) 43 | .post('/webhooks/dtmf', onInput); 44 | 45 | app.listen(port, () => { 46 | console.log(`Example app listening on port ${port}`); 47 | }); 48 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | 3 | Copyright 2020 Vonage 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /voice/record-a-conversation.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VOICE_CONF_NAME = process.env.CONF_NAME; 4 | const port = process.env.PORT || 3000; 5 | 6 | const Express = require('express'); 7 | const bodyParser = require('body-parser'); 8 | 9 | const app = new Express(); 10 | app.use(bodyParser.json()); 11 | 12 | const onInboundCall = (request, response) => { 13 | const ncco = [ 14 | { 15 | 'action': 'conversation', 16 | 'name': VOICE_CONF_NAME, 17 | 'record': 'true', 18 | 'eventMethod': 'POST', 19 | 'eventUrl': [`${request.protocol}://${request.get('host')}/webhooks/recordings`], 20 | }, 21 | ]; 22 | 23 | response.json(ncco); 24 | }; 25 | 26 | const onRecording = (request, response) => { 27 | const recording_url = request.body?.recording_url; 28 | console.log(`Recording URL = ${recording_url}`); 29 | 30 | response.status(204).send(); 31 | }; 32 | 33 | app 34 | .get('/webhooks/answer', onInboundCall) 35 | .post('/webhooks/recordings', onRecording); 36 | 37 | app.listen(port, () => { 38 | console.log(`Example app listening on port ${port}`); 39 | }); 40 | -------------------------------------------------------------------------------- /sms/send-signed-sms.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const SMS_SIGNATURE = process.env.SMS_SIGNATURE; 6 | const SMS_TO_NUMBER = process.env.VONAGE_SMS_TO_NUMBER; 7 | const SMS_SENDER_ID = process.env.VONAGE_SMS_SENDER_ID; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | 11 | const vonage = new Vonage({ 12 | apiKey: VONAGE_API_KEY, 13 | apiSecret: VONAGE_API_SECRET, 14 | // By passing in the signature, the SDK will sign the request for you 15 | // Isn't that neat?! 16 | signature: { 17 | secret: SMS_SIGNATURE, 18 | algorithm: 'md5hash', 19 | }, 20 | }); 21 | 22 | 23 | const sendMessage = async () => { 24 | try { 25 | const result = await vonage.sms.send({ 26 | from: SMS_SENDER_ID, 27 | to: SMS_TO_NUMBER, 28 | text: 'A text message sent using the Vonage SMS API', 29 | }); 30 | 31 | console.log('Message sent successfully.'); 32 | console.log(result); 33 | } catch (error) { 34 | console.error(`Message failed with error: ${error.message}`); 35 | } 36 | }; 37 | 38 | sendMessage(); 39 | -------------------------------------------------------------------------------- /voice/handle-user-input-asr.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const port = process.env.PORT || 3000; 4 | 5 | const Express = require('express'); 6 | 7 | const app = new Express(); 8 | 9 | const onInboundCall = (request, response) => { 10 | const ncco = [ 11 | { 12 | action: 'talk', 13 | text: 'Please say something', 14 | }, 15 | { 16 | action: 'input', 17 | type: ['speech'], 18 | eventUrl: [`${request.protocol}://${request.get('host')}/webhooks/asr`], 19 | speech: { 20 | endOnSilence: 1, 21 | language: 'en-US', 22 | uuid: [request.query.uuid], 23 | }, 24 | }, 25 | ]; 26 | 27 | response.json(ncco); 28 | }; 29 | 30 | const onInput = (request, response) => { 31 | const speech = request.body?.speech?.results[0]?.text; 32 | 33 | const ncco = [ 34 | { 35 | action: 'talk', 36 | text: `You said ${speech}`, 37 | }, 38 | ]; 39 | 40 | response.json(ncco); 41 | }; 42 | 43 | app 44 | .get('/webhooks/answer', onInboundCall) 45 | .post('/webhooks/asr', onInput); 46 | 47 | app.listen(port, () => { 48 | console.log(`Example app listening on port ${port}`); 49 | }); 50 | -------------------------------------------------------------------------------- /sms/README.md: -------------------------------------------------------------------------------- 1 | # Getting Started with Vonage SMS APIs with Node.js 2 | 3 | ## Set up the ENV with Your Vonage API Keys 4 | 5 | To use this sample you will first need a [Vonage account](https://dashboard.nexmo.com/sign-up). Once you have your own API credentials, rename 6 | the `.env-example` file to `.env` and set the values as required. 7 | 8 | You also need to [buy a number](https://dashboard.nexmo.com/buy-numbers) where you can send and receive SMS messages. 9 | 10 | ## Run the Examples 11 | 12 | Run a node script from terminal: 13 | 14 | ```bash 15 | $ node you_dir/send.js 16 | ``` 17 | 18 | To run "send" examples, just set up your ENV and run locally. 19 | 20 | To run "receive" examples, you need to run the webhook file on a server, or tunnel from your local server using the services like [ngrok](https://ngrok.com/). See the tutorials for more details. 21 | 22 | ### Webhooks 23 | 24 | These simple examples will receive webhooks and output information to the console so you can see the data that was received. 25 | 26 | For incoming SMSes, configure your webhook to point to `/webhooks/incoming-sms`. 27 | 28 | To receive delivery receipts (DLRs), configure your webhook to point to `/webhooks/delivery-receipt`. -------------------------------------------------------------------------------- /messages/whatsapp/mark-as-read.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_MESSAGE_ID = process.env.MESSAGES_MESSAGE_ID; 6 | const GEOSPECIFIC_MESSAGES_API_URL = process.env.GEOSPECIFIC_MESSAGES_API_URL; 7 | 8 | const { Vonage } = require('@vonage/server-sdk'); 9 | const { UpdateMessageStatus } = require('@vonage/messages'); 10 | 11 | /** 12 | * It is best to send messages using JWT instead of basic auth. If you leave out 13 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 14 | * 15 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 16 | */ 17 | const vonage = new Vonage( 18 | { 19 | applicationId: VONAGE_APPLICATION_ID, 20 | privateKey: VONAGE_PRIVATE_KEY, 21 | }, 22 | { 23 | ...(GEOSPECIFIC_MESSAGES_API_URL ? {apiHost: GEOSPECIFIC_MESSAGES_API_URL} : {}), 24 | }, 25 | ); 26 | 27 | vonage.messages.updateMessage(MESSAGES_MESSAGE_ID, UpdateMessageStatus.READ) 28 | .then(({ messageUUID }) => console.log(messageUUID)) 29 | .catch((error) => console.error(error)); 30 | -------------------------------------------------------------------------------- /numbers/update-number.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const VONAGE_NUMBER = process.env.VONAGE_NUMBER; 6 | const COUNTRY_CODE = process.env.COUNTRY_CODE; 7 | const SMS_CALLBACK_URL = process.env.SMS_CALLBACK_URL; 8 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 9 | const VOICE_CALLBACK_TYPE = process.env.VOICE_CALLBACK_TYPE; 10 | const VOICE_CALLBACK_VALUE = process.env.VOICE_CALLBACK_VALUE; 11 | const VOICE_STATUS_URL = process.env.VOICE_STATUS_URL; 12 | 13 | const { Vonage } = require('@vonage/server-sdk'); 14 | 15 | const vonage = new Vonage({ 16 | apiKey: VONAGE_API_KEY, 17 | apiSecret: VONAGE_API_SECRET, 18 | }); 19 | 20 | vonage.numbers.updateNumber({ 21 | country: COUNTRY_CODE, 22 | msisdn: VONAGE_NUMBER, 23 | messagesCallbackType: 'app', 24 | messagesCallbackValue: VONAGE_APPLICATION_ID, 25 | voiceCallbackType: VOICE_CALLBACK_TYPE, 26 | voiceCallbackValue: VOICE_CALLBACK_VALUE, 27 | voiceStatusCallback: VOICE_STATUS_URL, 28 | moHttpUrl: SMS_CALLBACK_URL, 29 | }) 30 | .then((result) => console.log(result)) 31 | .catch((error) => console.error(error)); 32 | -------------------------------------------------------------------------------- /voice/track-ncco-progress.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const port = process.env.PORT || 3000; 4 | 5 | const Express = require('express'); 6 | const app = new Express(); 7 | 8 | const onInboundCall = (request, response) => { 9 | const ncco = [ 10 | { 11 | 'action': 'talk', 12 | 'text': 'Thanks for calling the notification line', 13 | }, 14 | { 15 | 'action': 'notify', 16 | 'payload': { 17 | 'foo': 'bar', 18 | }, 19 | 'eventUrl': [`${request.protocol}://${request.get('host')}/webhooks/notification`], 20 | }, 21 | { 22 | 'action': 'talk', 23 | 'text': 'You will never hear me as the notification URL will return an NCCO ', 24 | }, 25 | ]; 26 | 27 | response.json(ncco); 28 | }; 29 | 30 | const onNotification = (_, response) => { 31 | const ncco = [ 32 | { 33 | 'action': 'talk', 34 | 'text': 'Your notification has been received, loud and clear', 35 | }, 36 | ]; 37 | 38 | response.json(ncco); 39 | }; 40 | 41 | app 42 | .get('/webhooks/answer', onInboundCall) 43 | .post('/webhooks/notification', onNotification); 44 | 45 | app.listen(port, () => { 46 | console.log(`Example app listening on port ${port}`); 47 | }); 48 | -------------------------------------------------------------------------------- /conversation/conversation/update-conversation.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = __dirname +'/../../'+ process.env.VONAGE_PRIVATE_KEY; 5 | const CONV_NAME = process.env.CONV_NAME; 6 | const CONV_DISPLAY_NAME = process.env.CONV_DISPLAY_NAME; 7 | const CONVERSATION_ID = process.env.CONVERSATION_ID; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | 11 | const vonage = new Vonage({ 12 | applicationId: VONAGE_APPLICATION_ID, 13 | privateKey: VONAGE_PRIVATE_KEY, 14 | }); 15 | 16 | const run = async () => { 17 | let conversation; 18 | try { 19 | // Load the conversation to prevent overwriting 20 | conversation= await vonage.conversations.getConversation(CONVERSATION_ID); 21 | } catch (error) { 22 | console.error('Error loading conversation', error); 23 | return; 24 | } 25 | 26 | conversation.name = CONV_NAME; 27 | conversation.displayName = CONV_DISPLAY_NAME; 28 | 29 | try { 30 | await vonage.conversations.update(conversation); 31 | console.log('Conversation updated'); 32 | } catch (error) { 33 | console.error('Error updating conversation', error); 34 | } 35 | }; 36 | 37 | run(); 38 | -------------------------------------------------------------------------------- /messages/sms/send-sms-basic-auth.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const SMS_SENDER_ID = process.env.SMS_SENDER_ID; 7 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | const { Channels } = require('@vonage/messages'); 11 | 12 | /** 13 | * By leaving out the applicationId and privateKey parameters, the Vonage 14 | * SDK will use basic authentication to authenticate with the Messages API. 15 | * 16 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 17 | */ 18 | const vonage = new Vonage( 19 | { 20 | apiKey: VONAGE_API_KEY, 21 | apiSecret: VONAGE_API_SECRET, 22 | }, 23 | { 24 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 25 | }, 26 | ); 27 | 28 | vonage.messages.send({ 29 | messageType: 'sms', 30 | channel: Channels.SMS, 31 | text: 'This is an SMS text message sent using the Messages API', 32 | to: MESSAGES_TO_NUMBER, 33 | from: SMS_SENDER_ID, 34 | }) 35 | .then(({ messageUUID }) => console.log(messageUUID)) 36 | .catch((error) => console.error(error)); 37 | -------------------------------------------------------------------------------- /messages/rcs/send-text.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const RCS_SENDER_ID = process.env.RCS_SENDER_ID; 7 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | const { Channels } = require('@vonage/messages'); 11 | 12 | /** 13 | * It is best to send messages using JWT instead of basic auth. If you leave out 14 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 15 | * 16 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 17 | */ 18 | const vonage = new Vonage( 19 | { 20 | applicationId: VONAGE_APPLICATION_ID, 21 | privateKey: VONAGE_PRIVATE_KEY, 22 | }, 23 | { 24 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 25 | }, 26 | ); 27 | 28 | vonage.messages.send({ 29 | messageType: 'text', 30 | channel: Channels.RCS, 31 | text: 'Hello from Vonage Messages API', 32 | to: MESSAGES_TO_NUMBER, 33 | from: RCS_SENDER_ID, 34 | }) 35 | .then(({ messageUUID }) => console.log(messageUUID)) 36 | .catch((error) => console.error(error)); 37 | -------------------------------------------------------------------------------- /voice/record-a-call.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VOICE_TO_NUMBER = process.env.VOICE_TO_NUMBER; 4 | const VONAGE_VIRTUAL_NUMBER = process.env.VONAGE_VIRTUAL_NUMBER; 5 | const port = process.env.PORT || 3000; 6 | 7 | const Express = require('express'); 8 | const bodyParser = require('body-parser'); 9 | 10 | const app = new Express(); 11 | app.use(bodyParser.json()); 12 | 13 | const onInboundCall = (request, response) => { 14 | const ncco = [ 15 | { 16 | action: 'record', 17 | eventUrl: [`${request.protocol}://${request.get('host')}/webhooks/recordings`], 18 | }, 19 | { 20 | action: 'connect', 21 | from: VONAGE_VIRTUAL_NUMBER, 22 | endpoint: [ 23 | { 24 | type: 'phone', 25 | number: VOICE_TO_NUMBER, 26 | }, 27 | ], 28 | }, 29 | ]; 30 | response.json(ncco); 31 | }; 32 | 33 | const onRecording = (request, response) => { 34 | const recording_url = request.body.recording_url; 35 | console.log(`Recording URL = ${recording_url}`); 36 | 37 | response.status(204).send(); 38 | }; 39 | 40 | app 41 | .get('/webhooks/answer', onInboundCall) 42 | .post('/webhooks/recordings', onRecording); 43 | 44 | app.listen(port, () => { 45 | console.log(`Example app listening on port ${port}`); 46 | }); 47 | -------------------------------------------------------------------------------- /voice/record-a-message.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const port = process.env.PORT || 3000; 4 | 5 | const Express = require('express'); 6 | const bodyParser = require('body-parser'); 7 | 8 | const app = new Express(); 9 | app.use(bodyParser.json()); 10 | 11 | const onInboundCall = (request, response) => { 12 | const ncco = [ 13 | { 14 | action: 'talk', 15 | text: 'Please leave a message after the tone, then press #. We will get back to you as soon as we can.', 16 | }, 17 | { 18 | action: 'record', 19 | endOnKey: '#', 20 | beepStart: 'true', 21 | endOnSilence: '3', 22 | eventUrl: [`${request.protocol}://${request.get('host')}/webhooks/recordings`], 23 | }, 24 | { 25 | action: 'talk', 26 | text: 'Thank you for your message. Goodbye.', 27 | }, 28 | ]; 29 | 30 | response.json(ncco); 31 | }; 32 | 33 | const onRecording = (request, response) => { 34 | const recording_url = request.body.recording_url; 35 | console.log(`Recording URL = ${recording_url}`); 36 | 37 | response.status(204).send(); 38 | }; 39 | 40 | app 41 | .get('/webhooks/answer', onInboundCall) 42 | .post('/webhooks/recordings', onRecording); 43 | 44 | app.listen(port, () => { 45 | console.log(`Example app listening on port ${port}`); 46 | }); 47 | -------------------------------------------------------------------------------- /messages/sms/send-sms.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const SMS_SENDER_ID = process.env.SMS_SENDER_ID; 7 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | const { Channels } = require('@vonage/messages'); 11 | 12 | /** 13 | * It is best to send messages using JWT instead of basic auth. If you leave out 14 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 15 | * 16 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 17 | */ 18 | const vonage = new Vonage( 19 | { 20 | applicationId: VONAGE_APPLICATION_ID, 21 | privateKey: VONAGE_PRIVATE_KEY, 22 | }, 23 | { 24 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 25 | }, 26 | ); 27 | 28 | vonage.messages.send({ 29 | messageType: 'sms', 30 | channel: Channels.SMS, 31 | text: 'This is an SMS text message sent using the Messages API', 32 | to: MESSAGES_TO_NUMBER, 33 | from: SMS_SENDER_ID, 34 | }) 35 | .then(({ messageUUID }) => console.log(messageUUID)) 36 | .catch((error) => console.error(error)); 37 | -------------------------------------------------------------------------------- /messages/mms/send-mms-text.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const MMS_SENDER_ID = process.env.MMS_SENDER_ID; 7 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | const { Channels } = require('@vonage/messages'); 11 | 12 | /** 13 | * It is best to send messages using JWT instead of basic auth. If you leave out 14 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 15 | * 16 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 17 | */ 18 | const vonage = new Vonage( 19 | { 20 | applicationId: VONAGE_APPLICATION_ID, 21 | privateKey: VONAGE_PRIVATE_KEY, 22 | }, 23 | { 24 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 25 | }, 26 | ); 27 | 28 | vonage.messages.send({ 29 | messageType: 'text', 30 | channel: Channels.MMS, 31 | text: 'This is an RCS text message sent via the Vonage Messages API.', 32 | to: MESSAGES_TO_NUMBER, 33 | from: MMS_SENDER_ID, 34 | }) 35 | .then(({ messageUUID }) => console.log(messageUUID)) 36 | .catch((error) => console.error(error)); 37 | 38 | -------------------------------------------------------------------------------- /messages/sandbox/whatsapp/send-text.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | const { Vonage } = require('@vonage/server-sdk'); 3 | const { Channels } = require('@vonage/messages'); 4 | 5 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 6 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 7 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 8 | const WHATSAPP_SENDER_ID = process.env.WHATSAPP_SENDER_ID; 9 | const MESSAGES_SANDBOX_URL = process.env.MESSAGES_SANDBOX_URL; 10 | 11 | /** 12 | * It is best to send messages using JWT instead of basic auth. If you leave out 13 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 14 | * 15 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 16 | */ 17 | const vonage = new Vonage( 18 | { 19 | applicationId: VONAGE_APPLICATION_ID, 20 | privateKey: VONAGE_PRIVATE_KEY, 21 | }, 22 | { 23 | apiHost: MESSAGES_SANDBOX_URL, 24 | }, 25 | ); 26 | 27 | vonage.messages.send({ 28 | to: MESSAGES_TO_NUMBER, 29 | from: WHATSAPP_SENDER_ID, 30 | channel: Channels.WHATSAPP, 31 | messageType: 'text', 32 | text: 'This is a WhatsApp text message sent using the Vonage Messages API.', 33 | }) 34 | .then((resp) => console.log(resp.messageUUID)) 35 | .catch((error) => console.error(error)); 36 | -------------------------------------------------------------------------------- /messages/sandbox/viber/send-text.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | const { Vonage } = require('@vonage/server-sdk'); 3 | const { Channels } = require('@vonage/messages'); 4 | 5 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 6 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 7 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 8 | const VIBER_SENDER_ID = process.env.VIBER_SENDER_ID; 9 | const MESSAGES_SANDBOX_URL = process.env.MESSAGES_SANDBOX_URL; 10 | 11 | /** 12 | * It is best to send messages using JWT instead of basic auth. If you leave out 13 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 14 | * 15 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 16 | */ 17 | const vonage = new Vonage( 18 | { 19 | applicationId: VONAGE_APPLICATION_ID, 20 | privateKey: VONAGE_PRIVATE_KEY, 21 | }, 22 | { 23 | apiHost: MESSAGES_SANDBOX_URL, 24 | }, 25 | ); 26 | 27 | vonage.messages.send({ 28 | to: MESSAGES_TO_NUMBER, 29 | from: VIBER_SENDER_ID, 30 | channel: Channels.WHATSAPP, 31 | messageType: 'text', 32 | text: 'This is a Viber Business Service text message sent using the Vonage Messages API.', 33 | }) 34 | .then((resp) => console.log(resp.messageUUID)) 35 | .catch((error) => console.error(error)); 36 | -------------------------------------------------------------------------------- /messages/viber/send-text.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const VIBER_SENDER_ID = process.env.VIBER_SENDER_ID; 7 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | const { Channels } = require('@vonage/messages'); 11 | 12 | /** 13 | * It is best to send messages using JWT instead of basic auth. If you leave out 14 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 15 | * 16 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 17 | */ 18 | const vonage = new Vonage( 19 | { 20 | applicationId: VONAGE_APPLICATION_ID, 21 | privateKey: VONAGE_PRIVATE_KEY, 22 | }, 23 | { 24 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 25 | }, 26 | ); 27 | 28 | vonage.messages.send({ 29 | messageType: 'text', 30 | channel: Channels.VIBER, 31 | text: 'This is a Viber Service Message text message sent using the Messages API', 32 | to: MESSAGES_TO_NUMBER, 33 | from: VIBER_SENDER_ID, 34 | }) 35 | .then(({ messageUUID }) => console.log(messageUUID)) 36 | .catch((error) => console.error(error)); 37 | -------------------------------------------------------------------------------- /messages/whatsapp/send-text.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const WHATSAPP_SENDER_ID = process.env.WHATSAPP_SENDER_ID; 7 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | const { Channels } = require('@vonage/messages'); 11 | 12 | /** 13 | * It is best to send messages using JWT instead of basic auth. If you leave out 14 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 15 | * 16 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 17 | */ 18 | const vonage = new Vonage( 19 | { 20 | applicationId: VONAGE_APPLICATION_ID, 21 | privateKey: VONAGE_PRIVATE_KEY, 22 | }, 23 | { 24 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 25 | }, 26 | ); 27 | 28 | vonage.messages.send({ 29 | to: MESSAGES_TO_NUMBER, 30 | from: WHATSAPP_SENDER_ID, 31 | channel: Channels.WHATSAPP, 32 | messageType: 'text', 33 | text: 'This is a WhatsApp text message sent using the Vonage Messages API.', 34 | }) 35 | .then((resp) => console.log(resp.messageUUID)) 36 | .catch((error) => console.error(error)); 37 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vonage-node-code-snippets", 3 | "version": "0.1.0", 4 | "description": "Vonage Quickstart Samples for Node.js", 5 | "keywords": [ 6 | "sms", 7 | "voice", 8 | "vonage", 9 | "verify", 10 | "2fa", 11 | "phone numbers", 12 | "code snippets" 13 | ], 14 | "license": "MIT", 15 | "author": "vonage", 16 | "contributors": [ 17 | "Kelly J Andrews", 18 | "Phil Leggetter", 19 | "Tomomi Imura" 20 | ], 21 | "main": "index.js", 22 | "scripts": { 23 | "eslint": "eslint", 24 | "lint": "eslint .", 25 | "lint:fix": "eslint --fix ." 26 | }, 27 | "dependencies": { 28 | "@eslint/js": "9.20.0", 29 | "@stylistic/eslint-plugin-js": "3.1.0", 30 | "@vonage/audit": "1.16.1", 31 | "@vonage/auth": "1.12.0", 32 | "@vonage/jwt": "1.11.0", 33 | "@vonage/meetings": "1.12.1", 34 | "@vonage/messages": "1.18.2", 35 | "@vonage/number-insight-v2": "1.8.4", 36 | "@vonage/server-client": "1.16.1", 37 | "@vonage/server-sdk": "3.19.4", 38 | "@vonage/subaccounts": "1.12.1", 39 | "@vonage/verify2": "1.15.1", 40 | "@vonage/voice": "1.17.1", 41 | "body-parser": "^1.20.3", 42 | "dotenv": "^16.4.7", 43 | "ejs": "^3.1.10", 44 | "eslint-plugin-n": "17.15.1", 45 | "express": "^4.21.2", 46 | "globals": "15.15.0", 47 | "jsonwebtoken": "9.0.2" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /messages/mms/send-mms-file.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const MMS_SENDER_ID = process.env.MMS_SENDER_ID; 7 | const MESSAGES_FILE_URL = process.env.MESSAGES_FILE_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'file', 31 | channel: Channels.MMS, 32 | file: { 33 | url: MESSAGES_FILE_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: MMS_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/mms/send-mms.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const MMS_SENDER_ID = process.env.MMS_SENDER_ID; 7 | const MESSAGES_IMAGE_URL = process.env.MESSAGES_IMAGE_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'image', 31 | channel: Channels.MMS, 32 | image: { 33 | url: MESSAGES_IMAGE_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: MMS_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/rcs/send-file.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const RCS_SENDER_ID = process.env.RCS_SENDER_ID; 7 | const MESSAGES_FILE_URL = process.env.MESSAGES_FILE_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'file', 31 | channel: Channels.RCS, 32 | file: { 33 | url: MESSAGES_FILE_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: RCS_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/sandbox/messenger/send-text.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | const { Vonage } = require('@vonage/server-sdk'); 3 | const { Channels } = require('@vonage/messages'); 4 | 5 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 6 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 7 | const MESSENGER_RECIPIENT_ID = process.env.MESSENGER_RECIPIENT_ID; 8 | const MESSENGER_SENDER_ID = process.env.MESSENGER_SENDER_ID; 9 | const MESSAGES_SANDBOX_URL = process.env.MESSAGES_SANDBOX_URL; 10 | 11 | /** 12 | * It is best to send messages using JWT instead of basic auth. If you leave out 13 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 14 | * 15 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 16 | */ 17 | const vonage = new Vonage( 18 | { 19 | applicationId: VONAGE_APPLICATION_ID, 20 | privateKey: VONAGE_PRIVATE_KEY, 21 | }, 22 | { 23 | apiHost: MESSAGES_SANDBOX_URL, 24 | }, 25 | ); 26 | 27 | 28 | vonage.messages.send({ 29 | to: MESSENGER_RECIPIENT_ID, 30 | from: MESSENGER_SENDER_ID, 31 | channel: Channels.WHATSAPP, 32 | messageType: 'text', 33 | text: 'This is a Facebook Messenger text message sent using the Vonage Messages API.', 34 | }) 35 | .then((resp) => console.log(resp.messageUUID)) 36 | .catch((error) => console.error(error)); 37 | -------------------------------------------------------------------------------- /messages/mms/send-mms-audio.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const MMS_SENDER_ID = process.env.MMS_SENDER_ID; 7 | const MESSAGES_AUDIO_URL = process.env.MESSAGES_AUDIO_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'audio', 31 | channel: Channels.MMS, 32 | audio:{ 33 | url: MESSAGES_AUDIO_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: MMS_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/rcs/send-video.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const RCS_SENDER_ID = process.env.RCS_SENDER_ID; 7 | const MESSAGES_VIDEO_URL = process.env.MESSAGES_VIDEO_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'video', 31 | channel: Channels.RCS, 32 | video: { 33 | url: MESSAGES_VIDEO_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: RCS_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/viber/send-file.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const MESSAGES_FILE_URL = process.env.MESSAGES_FILE_URL; 7 | const VIBER_SENDER_ID = process.env.VIBER_SENDER_ID; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | type: 'file', 31 | channel: Channels.VIBER, 32 | file: { 33 | url: MESSAGES_FILE_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: VIBER_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/messenger/send-text.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSENGER_RECIPIENT_ID = process.env.MESSENGER_RECIPIENT_ID; 6 | const MESSENGER_SENDER_ID = process.env.MESSENGER_SENDER_ID; 7 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | const { Channels } = require('@vonage/messages'); 11 | 12 | /** 13 | * It is best to send messages using JWT instead of basic auth. If you leave out 14 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 15 | * 16 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 17 | */ 18 | const vonage = new Vonage( 19 | { 20 | applicationId: VONAGE_APPLICATION_ID, 21 | privateKey: VONAGE_PRIVATE_KEY, 22 | }, 23 | { 24 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 25 | }, 26 | ); 27 | 28 | vonage.messages.send({ 29 | messageType: 'text', 30 | channel: Channels.MESSENGER, 31 | text: 'This is a Facebook Messenger text message sent using the Messages API', 32 | to: MESSENGER_RECIPIENT_ID, 33 | from: MESSENGER_SENDER_ID, 34 | }) 35 | .then(({ messageUUID }) => console.log(messageUUID)) 36 | .catch((error) => console.error(error)); 37 | -------------------------------------------------------------------------------- /messages/mms/send-mms-vcard.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const MMS_SENDER_ID = process.env.MMS_SENDER_ID; 7 | const MESSAGES_VCARD_URL = process.env.MESSAGES_VCARD_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'vcard', 31 | channel: Channels.MMS, 32 | vcard: { 33 | url: MESSAGES_VCARD_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: MMS_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/mms/send-mms-video.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const MMS_SENDER_ID = process.env.MMS_SENDER_ID; 7 | const MESSAGES_VIDEO_URL = process.env.MESSAGES_VIDEO_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'video', 31 | channel: Channels.MMS, 32 | video: { 33 | url: MESSAGES_VIDEO_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: MMS_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/rcs/send-image.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const RCS_SENDER_ID = process.env.RCS_SENDER_ID; 7 | const MESSAGES_IMAGE_URL = process.env.MESSAGES_IMAGE_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? { apiHost: MESSAGES_API_URL } : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'image', 31 | channel: Channels.RCS, 32 | image: { 33 | url: MESSAGES_IMAGE_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: RCS_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /voice/record-a-call-with-split-audio.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VOICE_TO_NUMBER = process.env.VOICE_TO_NUMBER; 4 | const VONAGE_VIRTUAL_NUMBER = process.env.VONAGE_VIRTUAL_NUMBER; 5 | const port = process.env.PORT || 3000; 6 | 7 | const Express = require('express'); 8 | const bodyParser = require('body-parser'); 9 | 10 | const app = new Express(); 11 | app.use(bodyParser.json()); 12 | 13 | const onInboundCall = (request, response) => { 14 | const ncco = [ 15 | { 16 | action: 'record', 17 | split: 'conversation', 18 | channels: 2, 19 | eventUrl: [`${request.protocol}://${request.get('host')}/webhooks/recordings`], 20 | }, 21 | { 22 | action: 'connect', 23 | from: VONAGE_VIRTUAL_NUMBER, 24 | endpoint: [ 25 | { 26 | type: 'phone', 27 | number: VOICE_TO_NUMBER, 28 | }, 29 | ], 30 | }, 31 | ]; 32 | response.json(ncco); 33 | }; 34 | 35 | const onRecording = (request, response) => { 36 | const recording_url = request.body.recording_url; 37 | console.log(`Recording URL = ${recording_url}`); 38 | 39 | response.status(204).send(); 40 | }; 41 | 42 | app 43 | .get('/webhooks/answer', onInboundCall) 44 | .post('/webhooks/recordings', onRecording); 45 | 46 | app.listen(port, () => { 47 | console.log(`Example app listening on port ${port}`); 48 | }); 49 | -------------------------------------------------------------------------------- /messages/viber/send-image.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const VIBER_SENDER_ID = process.env.VIBER_SENDER_ID; 7 | const MESSAGES_IMAGE_URL = process.env.MESSAGES_IMAGE_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'image', 31 | channel: Channels.VIBER, 32 | image: { 33 | url: MESSAGES_IMAGE_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: VIBER_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/whatsapp/send-file.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const WHATSAPP_SENDER_ID = process.env.WHATSAPP_SENDER_ID; 7 | const MESSAGES_FILE_URL = process.env.MESSAGES_FILE_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | to: MESSAGES_TO_NUMBER, 31 | from: WHATSAPP_SENDER_ID, 32 | channel: Channels.WHATSAPP, 33 | messageType: 'file', 34 | file: { 35 | url: MESSAGES_FILE_URL, 36 | }, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/whatsapp/send-image.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const WHATSAPP_SENDER_ID = process.env.WHATSAPP_SENDER_ID; 7 | const MESSAGES_IMAGE_URL = process.env.MESSAGES_IMAGE_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | to: MESSAGES_TO_NUMBER, 31 | from: WHATSAPP_SENDER_ID, 32 | channel: Channels.WHATSAPP, 33 | messageType: 'image', 34 | image: { 35 | url: MESSAGES_IMAGE_URL, 36 | }, 37 | }) 38 | .then((resp) => console.log(resp.messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/whatsapp/send-video.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const WHATSAPP_SENDER_ID = process.env.WHATSAPP_SENDER_ID; 7 | const MESSAGES_VIDEO_URL = process.env.MESSAGES_VIDEO_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'video', 31 | channel: Channels.WHATSAPP, 32 | video: { 33 | url: MESSAGES_VIDEO_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: WHATSAPP_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/whatsapp/send-audio.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const WHATS_APP_SENDER_ID = process.env.WHATS_APP_SENDER_ID; 7 | const MESSAGES_AUDIO_URL = process.env.MESSAGES_AUDIO_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'audio', 31 | channel: Channels.WHATSAPP, 32 | audio :{ 33 | url: MESSAGES_AUDIO_URL, 34 | }, 35 | to: MESSAGES_TO_NUMBER, 36 | from: WHATS_APP_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/messenger/send-file.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSENGER_RECIPIENT_ID = process.env.MESSENGER_RECIPIENT_ID; 6 | const MESSENGER_SENDER_ID = process.env.MESSENGER_SENDER_ID; 7 | const MESSAGES_FILE_URL = process.env.MESSAGES_FILE_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'file', 31 | channel: Channels.MESSENGER, 32 | file: { 33 | url: MESSAGES_FILE_URL, 34 | }, 35 | to: MESSENGER_RECIPIENT_ID, 36 | from: MESSENGER_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/messenger/send-audio.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSENGER_RECIPIENT_ID = process.env.MESSENGER_RECIPIENT_ID; 6 | const MESSENGER_SENDER_ID = process.env.MESSENGER_SENDER_ID; 7 | const MESSAGES_AUDIO_URL = process.env.MESSAGES_AUDIO_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messaegType: 'audio', 31 | channel: Channels.MESSENGER, 32 | audio: { 33 | url: MESSAGES_AUDIO_URL, 34 | }, 35 | to: MESSENGER_RECIPIENT_ID, 36 | from: MESSENGER_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/messenger/send-image.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSENGER_RECIPIENT_ID = process.env.MESSENGER_RECIPIENT_ID; 6 | const MESSENGER_SENDER_ID = process.env.MESSENGER_SENDER_ID; 7 | const MESSAGES_IMAGE_URL = process.env.MESSAGES_IMAGE_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'image', 31 | channel: Channels.MESSENGER, 32 | image: { 33 | url: MESSAGES_IMAGE_URL, 34 | }, 35 | to: MESSENGER_RECIPIENT_ID, 36 | from: MESSENGER_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/messenger/send-video.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSENGER_RECIPIENT_ID = process.env.MESSENGER_RECIPIENT_ID; 6 | const MESSENGER_SENDER_ID = process.env.MESSENGER_SENDER_ID; 7 | const MESSAGES_VIDEO_URL = process.env.MESSAGES_VIDEO_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | messageType: 'video', 31 | channel: Channels.MESSENGER, 32 | video: { 33 | url: MESSAGES_VIDEO_URL, 34 | }, 35 | to: MESSENGER_RECIPIENT_ID, 36 | from: MESSENGER_SENDER_ID, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | -------------------------------------------------------------------------------- /messages/whatsapp/send-sticker-id.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const WHATSAPP_SENDER_ID = process.env.WHATSAPP_SENDER_ID; 7 | const WHATSAPP_STICKER_ID = process.env.WHATSAPP_STICKER_ID; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | to: MESSAGES_TO_NUMBER, 31 | from: WHATSAPP_SENDER_ID, 32 | channel: Channels.WHATSAPP, 33 | messageType: 'sticker', 34 | sticker: { 35 | id: WHATSAPP_STICKER_ID, 36 | }, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | 41 | -------------------------------------------------------------------------------- /messages/whatsapp/send-sticker-url.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const WHATSAPP_SENDER_ID = process.env.WHATSAPP_SENDER_ID; 7 | const WHATSAPP_STICKER_URL = process.env.WHATSAPP_STICKER_URL; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | to: MESSAGES_TO_NUMBER, 31 | from: WHATSAPP_SENDER_ID, 32 | channel: Channels.WHATSAPP, 33 | messageType: 'sticker', 34 | sticker: { 35 | id: WHATSAPP_STICKER_URL, 36 | }, 37 | }) 38 | .then(({ messageUUID }) => console.log(messageUUID)) 39 | .catch((error) => console.error(error)); 40 | 41 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Description 4 | 5 | 6 | ## Motivation and Context 7 | 8 | 9 | 10 | ## Testing Details 11 | 12 | 13 | 14 | 15 | ## Example Output(if appropriate) 16 | 17 | ## Types of changes 18 | 19 | - [ ] Bug fix (non-breaking change which fixes an issue) 20 | - [ ] New feature (non-breaking change which adds functionality) 21 | - [ ] Breaking change (fix or feature that would cause existing functionality to change) 22 | 23 | ## Checklist 24 | 25 | 26 | - [ ] My code follows the code style of this project. 27 | - [ ] My change requires a change to the documentation. 28 | - [ ] I have updated the documentation accordingly. 29 | - [ ] I have read the **CONTRIBUTING.md** document. 30 | - [ ] All new and existing tests passed. 31 | -------------------------------------------------------------------------------- /messages/whatsapp/send-unreaction.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const WHATSAPP_SENDER_ID = process.env.WHATSAPP_SENDER_ID; 7 | const MESSAGES_MESSAGE_ID = process.env.MESSAGES_MESSAGE_ID; 8 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 9 | 10 | const { Vonage } = require('@vonage/server-sdk'); 11 | const { Channels } = require('@vonage/messages'); 12 | 13 | /** 14 | * It is best to send messages using JWT instead of basic auth. If you leave out 15 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 16 | * 17 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 18 | */ 19 | const vonage = new Vonage( 20 | { 21 | applicationId: VONAGE_APPLICATION_ID, 22 | privateKey: VONAGE_PRIVATE_KEY, 23 | }, 24 | { 25 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 26 | }, 27 | ); 28 | 29 | vonage.messages.send({ 30 | to: MESSAGES_TO_NUMBER, 31 | from: WHATSAPP_SENDER_ID, 32 | channel: Channels.WHATSAPP, 33 | messageType: 'reaction', 34 | reaction: { 35 | action: 'unreact', 36 | }, 37 | context: { 38 | message_uuid: MESSAGES_MESSAGE_ID, 39 | }, 40 | }) 41 | .then(({ messageUUID }) => console.log(messageUUID)) 42 | .catch((error) => console.error(error)); 43 | -------------------------------------------------------------------------------- /messages/viber/send-video.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const MESSAGES_VIDEO_URL = process.env.MESSAGES_VIDEO_URL; 7 | const MESSAGES_IMAGE_URL = process.env.MESSAGES_IMAGE_URL; 8 | const VIBER_SENDER_ID = process.env.VIBER_SENDER_ID; 9 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 10 | 11 | const { Vonage } = require('@vonage/server-sdk'); 12 | const { Channels } = require('@vonage/messages'); 13 | 14 | /** 15 | * It is best to send messages using JWT instead of basic auth. If you leave out 16 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 17 | * 18 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 19 | */ 20 | const vonage = new Vonage( 21 | { 22 | applicationId: VONAGE_APPLICATION_ID, 23 | privateKey: VONAGE_PRIVATE_KEY, 24 | }, 25 | { 26 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 27 | }, 28 | ); 29 | 30 | vonage.messages.send({ 31 | type: 'video', 32 | channel: Channels.VIBER, 33 | video: { 34 | url: MESSAGES_VIDEO_URL, 35 | thumbUrl: MESSAGES_IMAGE_URL, 36 | }, 37 | to: MESSAGES_TO_NUMBER, 38 | from: VIBER_SENDER_ID, 39 | }) 40 | .then(({ messageUUID }) => console.log(messageUUID)) 41 | .catch((error) => console.error(error)); 42 | -------------------------------------------------------------------------------- /application/create-application.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../.env' }); 2 | 3 | const VONAGE_API_KEY = process.env.VONAGE_API_KEY; 4 | const VONAGE_API_SECRET = process.env.VONAGE_API_SECRET; 5 | const APPLICATION_NAME = process.env.APPLICATION_NAME; 6 | 7 | const { Vonage } = require('@vonage/server-sdk'); 8 | 9 | const vonage = new Vonage({ 10 | apiKey: VONAGE_API_KEY, 11 | apiSecret: VONAGE_API_SECRET, 12 | }); 13 | 14 | vonage.applications.createApplication({ 15 | name: APPLICATION_NAME, 16 | capabilities: { 17 | voice: { 18 | webhooks: { 19 | answer_url: { 20 | address: 'https://example.com/webhooks/answer', 21 | http_method: 'GET', 22 | }, 23 | event_url: { 24 | address: 'https://example.com/webhooks/event', 25 | http_method: 'POST', 26 | }, 27 | }, 28 | }, 29 | messages: { 30 | webhooks: { 31 | inbound_url: { 32 | address: 'https://example.com/webhooks/inbound', 33 | http_method: 'POST', 34 | }, 35 | status_url: { 36 | address: 'https://example.com/webhooks/status', 37 | http_method: 'POST', 38 | }, 39 | }, 40 | }, 41 | rtc: { 42 | webhooks: { 43 | event_url: { 44 | address: 'https://example.com/webhooks/rtcevent', 45 | http_method: 'POST', 46 | }, 47 | }, 48 | }, 49 | }, 50 | }) 51 | .then((app) => console.log(app)) 52 | .catch((error) => console.error(error)); 53 | -------------------------------------------------------------------------------- /messages/whatsapp/send-location.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: __dirname + '/../../.env' }); 2 | 3 | const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID; 4 | const VONAGE_PRIVATE_KEY = process.env.VONAGE_PRIVATE_KEY; 5 | const MESSAGES_TO_NUMBER = process.env.MESSAGES_TO_NUMBER; 6 | const WHATSAPP_SENDER_ID = process.env.WHATSAPP_SENDER_ID; 7 | const MESSAGES_API_URL = process.env.MESSAGES_API_URL; 8 | 9 | const { Vonage } = require('@vonage/server-sdk'); 10 | const { Channels } = require('@vonage/messages'); 11 | 12 | /** 13 | * It is best to send messages using JWT instead of basic auth. If you leave out 14 | * apiKey and apiSecret, the messages SDK will send requests using JWT tokens 15 | * 16 | * @link https://developer.vonage.com/en/messages/technical-details#authentication 17 | */ 18 | const vonage = new Vonage( 19 | { 20 | applicationId: VONAGE_APPLICATION_ID, 21 | privateKey: VONAGE_PRIVATE_KEY, 22 | }, 23 | { 24 | ...(MESSAGES_API_URL ? {apiHost: MESSAGES_API_URL} : {}), 25 | }, 26 | ); 27 | 28 | vonage.messages.send({ 29 | to: MESSAGES_TO_NUMBER, 30 | from: WHATSAPP_SENDER_ID, 31 | channel: Channels.WHATSAPP, 32 | messageType: 'custom', 33 | custom: { 34 | type: 'location', 35 | location: { 36 | longitude: -122.425332, 37 | latitude: 37.758056, 38 | name: 'Facebook HQ', 39 | address: '1 Hacker Way, Menlo Park, CA 94025', 40 | }, 41 | }, 42 | }) 43 | .then(({ messageUUID }) => console.log(messageUUID)) 44 | .catch((error) => console.error(error)); 45 | -------------------------------------------------------------------------------- /verify/views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |Enter a number, begins with a country code
24 | 28 |<%= message %>
24 | <% if(locals.requestId) { %> 25 | Try with another PIN if you have one.