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. Para isso, basta extrair o usuário de destino do to parâmetro de consulta e devolvê-lo na sua resposta.
Novo projeto
Crie um novo diretório de projeto no local de sua escolha e acesse-o:
Dentro da pasta, inicialize um novo projeto Node.js executando este comando:
Adicionar dependências
Em seguida, instale as dependências necessárias:
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_user}`);
console.log(` - callee: ${req.query.to}`);
console.log('---');
let ncco = [{"action": "talk", "text": "No destination user - hanging up"}];
const username = req.query.to;
if (username) {
ncco = [
{
"action": "talk",
"text": "Connecting you to " + username
},
{
"action": "connect",
"endpoint": [
{
"type": "app",
"user": username
}
]
}
]
}
res.json(ncco);
});
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 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:
-
/voice/answeré oanswer_urlque mencionamos acima. Ele retorna umJSONresposta contendo o usuário de destino da chamada.Observe que o
useré extraído doreq.query.toparâmetro que a Vonage está enviando como parte da solicitação. O NCCO, gerado dinamicamente, então encaminha a chamada para o telefone de destino usando umconnectação. -
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 deevent_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:
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.
Fazendo uma chamada de voz de aplicativo para aplicativo
Você faz uma chamada de voz de um aplicativo iOS para outro aplicativo iOS