
Crie um plano de fuga com a Voice API da Vonage e receba uma chamada fantasma
Tempo de leitura: 8 minutos
Visão geral
Neste tutorial, vou mostrar a você como usar a Voice API da Vonage para criar uma maneira sutil de se livrar de uma situação da qual você prefere não fazer parte. Você pode acionar uma chamada fantasma enviando um SMS para um número virtual!
O código deste projeto está no GitHub.
Pré-requisitos
Antes de começar a compilar o projeto, certifique-se de que você tenha:
Node.js e npm instalados no seu computador.
Ngrok para criar um túnel seguro para o seu localhost.
Um editor de texto e conhecimentos básicos de JavaScript.
Use o Ngrok para disponibilizar seu servidor local
O Ngrok expõe seus webhooks locais na internet pública e permite que você receba chamadas externas neles:
Inicie o ngrok com
ngrok http 3000.Anote o endereço de redirecionamento HTTPS (por exemplo,
https://xyz.ngrok.com).
Configurando o aplicativo Vonage
Após criar um Account na Vonage:
Criar um novo aplicativo: Vá para “Seus Applications” no painel e ative os recursos de Voice e Mensagens.
Gerar credenciais: Crie um par de chaves pública/privada para autenticação na API; isso fará com que um
private.keypara ser adicionado à pasta do nosso projeto.Vincular um número virtual: Adquira e vincule um número virtual ao seu aplicativo.
Configurar Webhooks: Defina a URL pública do seu servidor no ngrok como o ponto de extremidade para mensagens recebidas e eventos. Deve ficar assim: https://xyz.ngrok.com/inbound para mensagens recebidas e https://xyz.ngrok.com/event para eventos.
Messages Inbound and Status URLs
Implementação no lado do servidor
Configuração inicial do projeto
Criar um novo diretório de projeto: Abra o terminal e navegue até o local onde deseja criar seu novo projeto. Em seguida, use o comando a seguir para criar e acessar um novo diretório para o seu projeto:
mkdir vonage-ghost-call && cd vonage-ghost-callInicializar um projeto Node.js: No diretório do seu novo projeto, inicialize um projeto Node.js. Isso criará um
package.jsonarquivo que gerencia as dependências e os scripts do seu projeto. Use onpm initcomando para especificar detalhes ou pressione Enter para aceitar os padrões. O-ysinalizador preenche automaticamente os valores padrão sem solicitar os detalhes.npm init -yInstale as dependências: Agora, é hora de instalar as dependências necessárias para o projeto:
express: Uma estrutura web para Node.js.dotenv: Usado para carregar variáveis de ambiente a partir de um.envarquivo.@vonage/server-sdk: O SDK do servidor Vonage para Node.js.@vonage/voice: O SDK da Voice API da Vonage.
Para instalar tudo isso de uma só vez, execute o comando a seguir, que adicionará automaticamente esses pacotes ao seu
package.jsonarquivo e os incluirá no diretórionode_modules.npm install express dotenv @vonage/server-sdk @vonage/voice
Criar o arquivo de variáveis de ambiente
Crie um .env arquivo no seu projeto e adicione o seguinte ambiente, encontrado no trecho de código abaixo.
O
VONAGE_KEYeVONAGE_SECRETpodem ser encontradas no Painel da Vonage.
Vonage DashboardO
VONAGE_APPLICATION_IDpode ser encontrado no aplicativo que você criou, que está localizado no Aplicativos da Vonage.O
FROM_IMPORTANT_FRIENDé o número de telefone para a ligação.O
ANSWER_URLdetermina como lidar com uma chamada e a quem conectá-la. Para isso, ele executa um NCCO que utiliza diversos recursos da Voice API; um exemplo de valor poderia serhttps://raw.githubusercontent.com/nexmo-community/ncco-examples/gh-pages/text-to-speech.json.O
PRIVATE_KEY_PATHé o caminho doprivate.keyarquivo que baixamos anteriormente, quando geramos o par de chaves pública/privada para a autenticação da API.
Implementar o código do lado do servidor
No seu index.js arquivo, inicie o projeto importando os módulos necessários. Você configurará o Express para lidar com as solicitações HTTP recebidas e configurará o cliente Vonage com as credenciais armazenadas em suas variáveis de ambiente:
// Import dependencies
require('dotenv').config();
const express = require('express');
const { Vonage } = require('@vonage/server-sdk');
const app = express();
// Middleware for parsing incoming requests
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
// Initialize Vonage API client with environment variables
const vonage = new Vonage({
apiKey: process.env.VONAGE_KEY,
apiSecret: process.env.VONAGE_SECRET,
applicationId: process.env.VONAGE_APPLICATION_ID,
privateKey: process.env.PRIVATE_KEY_PATH
}); Tratamento de mensagens SMS recebidas
O servidor está aguardando a chegada de novas mensagens SMS. Quando o servidor recebe uma nova mensagem SMS, ele faz uma chamada para o número de telefone que enviou a mensagem. Isso está descrito na /inbound .
// Route to handle inbound SMS
app.post('/inbound', (req, res) => {
const { from } = req.body;
const requesterNumber = from;
// Function to trigger an outbound call
triggerOutboundCall(requesterNumber);
res.status(200).end();
});
// Server listens to a specified port
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`App listening on port ${PORT}`));
Chamada de saída sem NCCO
Se você precisar fazer uma chamada de saída com uma mensagem pré-gravada, poderá fazer a chamada sem especificar um NCCO. A Voice API permite que você inicie diretamente uma chamada de saída e reproduza um arquivo de áudio para o destinatário sem configurar uma lógica avançada de controle de chamadas.
function triggerOutboundCall(requesterNumber) {
const ANSWER_URL = process.env.ANSWER_URL; // URL to NCCO JSON
vonage.voice.createOutboundCall({
to: [{ type: type: 'phone', number: requesterNumber }],
from: { type: 'phone', number: process.env.FROM_IMPORTANT_FRIEND },
answer_url: [ANSWER_URL]
}, handleResponse);
}
function handleResponse(err, resp) {
if (err) console.error(err);
else console.log(resp);
}Nessa configuração, ANSWER_URL aponta para um arquivo JSON que define o fluxo de chamadas. Por exemplo:
[
{
"action": "talk",
"voiceName": "Amy",
"text": "There's an urgent need for you elsewhere. Please excuse yourself."
}
] Chamada de saída com a NCCO
Para uma experiência de atendimento mais personalizada, o NCCO oferece maior flexibilidade. Isso é especialmente útil para fluxos de chamadas dinâmicos.
async function makeCallWithNCCO(requesterNumber) {
const ncco = [
{
"action": "talk",
"voiceName": "Amy",
"text": "Hey, sorry to bother you, but I need your help; an urgent unforeseen circumstance has happened."
}
];
try {
const resp = await vonage.calls.create({
to: [{ type: 'phone', requesterNumber }],
from: { type: 'phone', number: process.env.FROM_IMPORTANT_FRIEND },
ncco
});
console.log(resp);
} catch (err) {
console.error(err);
}
}Essa função makeCallWithNCCO cria dinamicamente o fluxo de chamadas com base nas especificações do NCCO.
Neste exemplo, a ncco variável contém uma matriz de ações para controlar a chamada. A talk ação lê uma mensagem quando a chamada é atendida.
Passos para executar o aplicativo
Certifique-se de que
.envde que ele tenha todas as credenciais.Inicie o servidor executando o
node index.jscomando.Envie uma mensagem SMS para o seu número virtual para acionar a chamada fantasma!
O aplicativo fará uma ligação pelo método que você escolher — prepare-se para ter um motivo para sair daquela situação em que você não queria estar!
Conclusão
Hoje, você aprendeu a evitar a conveniência pessoal. Ao enviar uma mensagem SMS, você pode acionar uma chamada que forneça um motivo plausível para sair daquela situação da qual você não quer fazer parte, usando JavaScript, Node.js e a Voice API da Vonage.
O código deste projeto está no GitHub.
Participe da discussão e compartilhe suas ideias conosco na Comunidade de Desenvolvedores da Vonage no Slack ou siga-nos no X, anteriormente conhecido como Twitter!