https://a.storyblok.com/f/270183/1368x665/19c91eeff9/node-js_voiceproxy.png

Como criar um proxy de voz no Node.js usando a Voice API

Publicado em November 28, 2024

Tempo de leitura: 4 minutos

Você já pediu comida por um serviço de entrega e precisou dar acesso ao motorista ao seu prédio? Talvez você hesite em compartilhar seu número pessoal, mas ainda assim queira garantir que a comida chegue. Com a chamada anônima, tanto você quanto o motorista podem se comunicar sem revelar seus números de telefone reais. O motorista vê um número temporário, assim como você, protegendo a privacidade de ambas as partes.

Classified Ads App PreviewClassified Ads App Preview

Neste tutorial, faremos exatamente isso e usaremos o funcionalidade de da Vonage. Vamos implantar esse aplicativo no Vonage Cloud Runtime, eliminando a necessidade de gerenciar servidores e hospedar por conta própria.

Pré-requisitos

  • A Account de desenvolvedor da Vonage

  • Um número de telefone da Vonage. Ele pode ser adquirido usando o crédito gratuito que você recebeu ao criar uma conta. Acesse seu Painel da API. No painel à esquerda, em “Criar e gerenciar”, acesse Numbers > Comprar Numbers. Procure um número de telefone que atenda às suas necessidades (certifique-se de que “Voice” esteja entre os recursos) e clique em Comprar.

Felizmente, isso é muito fácil de fazer usando a Voice API da Vonage, pois temos uma API de Chamadas Mascaradas pré-construída no Code Hub que você pode implantar instantaneamente! Vamos explicar como seguir esse caminho.

Como criar e implantar seu aplicativo

Depois de fazer login na sua conta de desenvolvedor da Vonage, acesse a página “Chamadas Mascaradas Avançadas” . Na seção guia “Implantar Código” , clique em “Implantar nova instância”.

Selecione a Região e atribua um nome à sua instância um nome. Clique em “Atribuir um número” e escolha o número de telefone da Vonage que você gostaria de vincular ao seu aplicativo. Clique em Continuar. Sua tela deve ficar assim agora:

Screenshot of Advanced Masked Calling application page with a new instance running with the buttons ‘Launch’, ‘View logs’ and ‘Delete’ next to them.Code Hub DeployedClique “Iniciar” para executar o aplicativo. Será solicitado que você insira suas credenciais de usuário. Tanto sua chave de API quanto sua senha (seu segredo de API) podem ser encontradas no seu Painel da API.

Em seguida, você verá seu novo aplicativo em “Instâncias implantadas”. Clique em “Iniciar” para executá-la e insira sua chave e seu segredo da API da Vonage para visualizar o aplicativo. Você pode consultar a especificação da API na seção “API”.

Depois de fazer login, você poderá ver o aplicativo.

Screenshot of Masked Calling API browser applicationPhone Number Pairing

Aqui, você pode adicionar dois números de telefone e definir uma data de validade para o período durante o qual deseja que eles utilizem o recurso de mascaramento de chamadas. Clique em Adicionar, e eles devem aparecer na sua lista de números de telefone emparelhados. Se você acabar adicionando mais pares de números de telefone e quiser encontrar um par específico, digite o número de telefone que está procurando e clique em Pesquisar para encontrar o par correspondente.

Quando qualquer um desses números ligar para o número da Vonage vinculado a este aplicativo (você pode confirmar o número vinculado na seção guia “Configurações” do aplicativo do navegador), o destinatário verá a chamada como proveniente do número da Vonage, e não do número real de quem está ligando. Da mesma forma, quem estiver ligando discará para o número da Vonage e também não saberá o número real do destinatário.

Experimente

Supondo que você tenha informado seu próprio número de telefone como Número de telefone 1, use seu celular para ligar para o número da Vonage vinculado a esta aplicação. A pessoa que é titular do Número de telefone 2 deverá receber uma ligação exibindo o número da Vonage em vez do seu número real. Vá em frente e experimente agora mesmo!

Como personalizar o código

Se você decidir personalizar o aplicativo pré-construído diretamente no Vonage Cloud Runtime, acesse o guia “Obter código” no página “Chamadas Mascaradas Avançadas” e clique em “Criar um novo ambiente de desenvolvimento”. Selecione sua região, dê um nomee escolha o número de telefone da Vonage que você deseja vincular a este aplicativo.

Screenshot of the Masked Calling API project on Vonage Cloud RuntimeMasked Calling READMEAssim que a área de trabalho for aberta, você verá que o aplicativo de exemplo já está pronto para uso! No entanto, você pode fazer suas próprias alterações no código diretamente neste IDE.

Para executar seu projeto atualizado, abra o aba “Terminal” e execute este comando:

npm run

Quando estiver pronto para fazer a implantação, execute este comando:

vcr deploy
Veja como funciona o fluxo da chamada:
  • O usuário adiciona números de telefone (numberOne, numberTwo) e define a validade (expiryTime) do emparelhamento no site (front-end).

  • pairNumbers cria o par e define a data de validade.

async function pairNumbers(numberOne, numberTwo, expiryTime, state) {
   try {
       await state.set(numberOne, numberTwo);
       await state.set(numberTwo, numberOne);

       const expirySeconds = getTimeInSeconds(expiryTime);
       await state.expire(numberOne, expirySeconds);
       await state.expire(numberTwo, expirySeconds);


       await state.mapSet('pairs', { [numberOne]: JSON.stringify({ numberTwo, expiryTime }) });
   } catch (e) {
       return false
   }
}
  • O onCall endpoint é acionado após aguardar uma chamada recebida no número da Vonage.

await voice.onCall('/onCall');
await voice.onCallEvent('/onCallEvent');
  • findPair recupera números emparelhados.

async function findPair(number, state) {
   const numbersSet = new Set();
   let pairObj = await state.mapGetValue('pairs', number);


   if (!pairObj) {
       // The pair is stored using the other number
       let pairedNumber = await state.get(number);
       numbersSet.add(pairedNumber);
       pairObj = await state.mapGetValue('pairs', pairedNumber);
   }
  • Se o par existir e não estiver vencido, conecte a chamada.

app.post('/onCall', async (req, res, next) => {
   try {
       const pairedNumber = await state.get(req.body.from);


       if (!pairedNumber) {
           res.json([{
               action: 'talk',
               text: 'This number has not been configured yet.'
           }]);
           return;
       }
  • Se não houver nenhum par ou se o par estiver expirado, trate a situação de acordo (por exemplo, o usuário que fez a chamada ouvirá a mensagem de erro).

app.post('/onCall', async (req, res, next) => {
   try {
       const pairedNumber = await state.get(req.body.from);


       if (!pairedNumber) {
           res.json([{
               action: 'talk',
               text: 'This number has not been configured yet.'
           }]);
           return;
       }
  • Após o vencimento, o par é automaticamente excluído.

app.delete('/pairs', validateRequestMiddleware, async (req, res, next) => {
   try {
       const numberOne = req.body.number_one;
       const numberTwo = req.body.number_two;


       if (!numberOne || !numberTwo) {
           res.sendStatus(400);
           return;
       }


       await state.delete(numberOne);
       await state.delete(numberTwo);
       await state.mapDelete('pairs', [numberOne, numberTwo]);
       res.sendStatus(200);
   } catch (e) {
       next(e);
   }
});

Você pode incluir esse código funcional em seu próprio aplicativo. No entanto, caso decida não implantar seu projeto no Vonage Cloud Runtime, há alguns aspectos a serem considerados. Consulte a documentação para implementar uma abordagem que não utilize o Vonage Cloud Runtime.

Junte-se à festa

E pronto, você já implantou um Voice Proxy no Vonage Cloud Runtime! Você pode aprimorar ainda mais o aplicativo adicionando seus próprios recursos. Nossa comunidade de desenvolvedores está crescendo no Slack, e adoraríamos que você fizesse parte dela. Se você acabar experimentando este tutorial, adoraria saber sua opinião. Fique à vontade para me marcar no X, antes conhecido como Twitter, e siga nossa equipe por lá também. Boa programação!

Compartilhar:

https://a.storyblok.com/f/270183/384x384/b68093ec17/diana-pham.png
Diana PhamRepresentante de Desenvolvedores

Diana é defensora de desenvolvedores na Vonage. Ela gosta de comer ostras frescas.