JavaScript

Criar um servidor de webhooks

Quando uma chamada recebida é atendida, a Vonage envia uma solicitação para uma URL de acesso público de sua escolha — chamamos isso de answer_url. Você precisa criar um servidor de webhook capaz de receber essa solicitação e retornar um NCCO que contém um connect ação que encaminhará a chamada para o do usuário app. Neste tutorial, o nome da usuária de destino está definido como Alice.

Novo projeto

Crie um novo diretório de projeto no local de sua escolha e acesse-o:

mkdir vonage-tutorial cd vonage-tutorial

Dentro da pasta, inicialize um novo projeto Node.js executando este comando:

npm init -y

Adicionar dependências

Em seguida, instale as dependências necessárias:

npm install express localtunnel --save

Crie o arquivo do servidor

Dentro da pasta do seu projeto, crie um arquivo chamado server.js e adicione o código conforme mostrado abaixo — certifique-se de substituir SUBDOMAIN com um valor real. O valor utilizado passará a fazer parte das URLs que você definirá como webhooks na próxima etapa.

'use strict';

const subdomain = 'SUBDOMAIN';

const express = require('express')
const app = express();
app.use(express.json());

app.get('/voice/answer', (req, res) => {
  console.log('NCCO request:');
  console.log(`  - caller: ${req.query.from}`);
  console.log('---');
  res.json([ 
    { 
      "action": "talk", 
      "text": "Please wait while we connect you."
    },
    { 
      "action": "connect", 
      "from": req.query.from,
      "endpoint": [ 
        { "type": "app", "user": "Alice" } 
      ]
    }
  ]);
});

app.all('/voice/event', (req, res) => {
  console.log('EVENT:');
  console.dir(req.body);
  console.log('---');
  res.sendStatus(200);
});

if(subdomain == "SUBDOMAIN") {
  console.log('\n\t🚨🚨🚨 Please change the SUBDOMAIN value');
  return false;
}
app.listen(3000);

const localtunnel = require('localtunnel');
(async () => {
  const tunnel = await localtunnel({ 
      subdomain: subdomain, 
      port: 3000
    });
  console.log(`App available at: ${tunnel.url}`);
})();

NOTA: Lembre-se de substituir SUBDOMAIN com uma sequência aleatória de sua escolha, com entre 4 e 20 caracteres alfanuméricos (letras minúsculas e números, sem sublinhados nem traços).

O código do servidor acima é composto por duas partes:

O servidor Express

A primeira parte cria um Express servidor e o disponibiliza localmente na porta 3000. O servidor disponibiliza dois caminhos:

  1. /voice/answer é o answer_url que mencionamos acima. Ele retorna um NCCO como um JSON resposta contendo informações para se conectar a um usuário do aplicativo.

  2. O segundo, /voice/event, você definirá como destino para que a Vonage o notifique sobre tudo o que estiver acontecendo durante a chamada — chamamos isso de event_url.

O localtunnel integração

A segunda parte do código do servidor acima expõe o Express servidor para que ele fique acessível aos servidores da Vonage.

NOTA: localtunnel é uma biblioteca JavaScript que expõe seu localhost para o mundo, facilitando testes e compartilhamento! Não é preciso mexer no DNS nem fazer implantação para que outras pessoas testem suas alterações.

Inicie o servidor

Agora você pode iniciar o servidor executando, no terminal, o seguinte comando:

node server.js

Será exibida uma mensagem informando que o servidor já está disponível:

App available at: https://SUBDOMAIN.loca.lt

Por favor, mantenha a janela do terminal à mão, pois você precisará do URL na próxima etapa.