https://a.storyblok.com/f/270183/75849/d23e6eb4ea/ghost-call.png

Crie um plano de fuga com a Voice API da Vonage e receba uma chamada fantasma

Publicado em January 30, 2024

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:

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:

  1. Inicie o ngrok com ngrok http 3000.

  2. Anote o endereço de redirecionamento HTTPS (por exemplo, https://xyz.ngrok.com).

Configurando o aplicativo Vonage

Após criar um Account na Vonage:

  1. Criar um novo aplicativo: Vá para “Seus Applications” no painel e ative os recursos de Voice e Mensagens.

  2. Gerar credenciais: Crie um par de chaves pública/privada para autenticação na API; isso fará com que um private.key para ser adicionado à pasta do nosso projeto.

  3. Vincular um número virtual: Adquira e vincule um número virtual ao seu aplicativo.

  4. 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. It shows that the Inbound URL and the Status URL should be filled with the ngrok url followed by /inbound and /status respectivelyMessages Inbound and Status URLs

Implementação no lado do servidor

Configuração inicial do projeto

  1. 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-call
  2. Inicializar um projeto Node.js: No diretório do seu novo projeto, inicialize um projeto Node.js. Isso criará um package.json arquivo que gerencia as dependências e os scripts do seu projeto. Use o npm init comando para especificar detalhes ou pressione Enter para aceitar os padrões. O -y sinalizador preenche automaticamente os valores padrão sem solicitar os detalhes.

    npm init -y
  3. Instale 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 .env arquivo.

    • @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.json arquivo e os incluirá no diretório node_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_KEY e VONAGE_SECRET podem ser encontradas no Painel da Vonage.

    Vonage Dashboard. It shows where the API Key and API Secrets are. Right under the text 'API key and API Secret'Vonage Dashboard

  • O VONAGE_APPLICATION_ID pode 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_URL determina 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 ser https://raw.githubusercontent.com/nexmo-community/ncco-examples/gh-pages/text-to-speech.json.

  • O PRIVATE_KEY_PATH é o caminho do private.key arquivo que baixamos anteriormente, quando geramos o par de chaves pública/privada para a autenticação da API.

VONAGE_KEY= VONAGE_SECRET= VONAGE_APPLICATION_ID= PRIVATE_KEY_PATH= ANSWER_URL= FROM_IMPORTANT_FRIEND=

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

  1. Certifique-se de que .env de que ele tenha todas as credenciais.

  2. Inicie o servidor executando o node index.js comando.

  3. Envie uma mensagem SMS para o seu número virtual para acionar a chamada fantasma!

  4. 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!

Compartilhar:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda CavallaroRepresentante de Desenvolvedores