https://a.storyblok.com/f/270183/74338/cc00a48bd9/forward-call-featured.png

Encaminhar uma chamada por meio de um proxy de voz com o Node-RED

Publicado em May 24, 2021

Tempo de leitura: 10 minutos

Observação: algumas das ferramentas ou métodos descritos neste artigo podem não ter mais suporte ou estar desatualizados. Para obter conteúdo atualizado ou suporte, consulte nossas postagens mais recentes ou nossa Documentação

Neste tutorial, vamos usar a Voice API da Nexmo para fazer chamadas privadas, redirecionando uma chamada por meio de um proxy de voz; e, como bônus adicional, também vamos adicionar um recurso de gravação no final.

Se você já se perguntou como entrar em contato com o motorista de um serviço de carona compartilhada, com o anfitrião do Airbnb ou com o entregador sem saber o número deles, ou se simplesmente tem interesse em fazer chamadas privadas, acompanhe este artigo e descubra como fazer isso!

Dependências

Pré-requisitos

Antes de começar, você precisará de algumas coisas:

Como obter suas credenciais

Para usar os nós do Nexmo no Node-RED, você precisará fornecer suas credenciais; por isso, é melhor tê-las à mão. Acesse seu painel de controle para encontrar sua chave de API e seu segredo e anote-os.

Em seguida, você precisará de um Voice-enabled . Acesse Numbers > Comprar números para adquirir um.

Buy Number Nexmo DashboardBuy Number Nexmo Dashboard

Configurando seu editor do Node-RED

Acesse o editor do Node-RED digitando no navegador http://localhost:1880.

Depois de abrir o editor, você precisará instalar os nós do Nexmo. Você pode fazer isso na seção paleta “Gerenciar” , procurando pelo node-red-contrib-nexmo pacote e clicando em “Instalar”.

Agora você deve ver todos os nós do Nexmo aparecerem no lado esquerdo da tela — na sua paleta de nós, junto com outros nós padrão.

Exponha seu servidor local à Internet

Caso você não esteja usando uma versão hospedada do Node-RED, a Voice API da Nexmo precisará de outra forma de acessar seus endpoints de webhook; portanto, vamos tornar seu servidor local acessível pela internet pública. Se você estiver executando o Node-RED em um servidor web público em vez de na sua máquina local, já está tudo pronto para seguir em frente para a etapa de criação de uma aplicação do Nexmo Voice .

Uma maneira prática de fazer isso é usando um serviço de tunelamento como o ngrok, e há um Node para isso que você pode instalar diretamente do seu editor.

Fique à vontade para conferir também nosso tutorial sobre Introdução ao Ngrok no Node-RED para saber mais.

Depois de instalar o nó do ngrok e reiniciar seu editor, o ngrok nó deve aparecer na sua paleta de nós. Ele aceita as sequências de caracteres em ou off como entrada para iniciar/parar o túnel e exibe o endereço do host do ngrok como o msg.payload.

Importar da Área de trabalho o trecho abaixo ou tente criar esse caminho por conta própria.

[
    {
        "id": "faed0f7.1e524f",
        "type": "inject",
        "z": "5b8bbfc3.1a9f18",
        "name": "",
        "topic": "",
        "payload": "on",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 100,
        "wires": [
            [
                "8a01baeb.6756d"
            ]
        ]
    },
    {
        "id": "11051fa9.75bd1",
        "type": "inject",
        "z": "5b8bbfc3.1a9f18",
        "name": "",
        "topic": "",
        "payload": "off",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 160,
        "wires": [
            [
                "8a01baeb.6756d"
            ]
        ]
    },
    {
        "id": "8a01baeb.6756d",
        "type": "ngrok",
        "z": "5b8bbfc3.1a9f18",
        "port": "1880",
        "creds": "5a9e2b8c.173a2c",
        "region": "ap",
        "subdomain": "",
        "name": "",
        "x": 400,
        "y": 140,
        "wires": [
            [
                "93fd5675.743c1"
            ]
        ]
    },
    {
        "id": "93fd5675.743c1",
        "type": "debug",
        "z": "5b8bbfc3.1a9f18",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "x": 620,
        "y": 140,
        "wires": []
    },
    {
        "id": "5a9e2b8c.173a2c",
        "type": "ngrokauth",
        "z": ""
    }
]

Neste momento, seu editor deve estar mais ou menos assim:

ngrok pathngrok path

Como última etapa antes de clicar em “Implantar”, abra as ngrok propriedades do nó e especifique o número da porta (1880 para o Node-RED) e a região.

Você também pode adicionar o seu authtoken da conta do ngrok, caso tenha um. Não se preocupe se não tiver; basta pular essa etapa por enquanto. O node exibirá um aviso informando que não está totalmente configurado, mas isso não representa nenhum problema.

ngrok propertiesngrok properties

Acesso Implantar e clique no botão inject botão do nó e, em seguida, acesse a URL exibida na área de depuração (YOUR_URL para referência futura) para encontrar seu editor do Node-RED em um endereço público.

ngrok node-redngrok node-red

Criar um aplicativo de voz da Nexmo

Algumas das APIs da Nexmo, incluindo a Voice API, utilizam os Aplicativos da Nexmo para armazenar as informações de segurança e configuração necessárias para se conectar aos terminais da Nexmo.

Na paleta do Nexmo Node-RED, vários nós permitem criar essas Applications: getrecording, earmuff, mute, hangup, transfer, createcall, playaudio, playtts e playdtmf.

Arraste qualquer um desses nós para a sua área de trabalho e, em seguida, clique duas vezes nele para abrir as propriedades do nó.

Ao lado do Nexmo Credentials, selecione “Adicionar novo nexmovoiceapp...” no menu suspenso e clique no botão “Editar”. Preencha os detalhes abaixo e clique em “Criar novo aplicativo”.

KEY DESCRIPTION
Name Choose a name for your Voice Application, for example "Nexmo Voice Application".
API Key Your Nexmo API key, shown in your account overview.
API Secret Your Nexmo API secret, shown in your account overview.
Answer URL YOUR_URL/answer, you'll be hosting a Nexmo Call Control Object (NCCO) here. - more about this later on.
Event URL YOUR_URL/event, you'll need to reference this when setting up the event handler.

O Node-RED criará então uma nova Application Nexmo no seu Account e preencherá os campos “App ID” e “Private Key”. Após essa etapa, fique à vontade para excluir o nó Nexmo que você utilizou, já que um nexmovoiceapp foi criado um nó de configuração que contém todas as credenciais do Nexmo necessárias para este fluxo.

create voice appcreate voice app

Configurar um número para ligar

Em seguida, você precisará vincular seu número virtual a este aplicativo.

Encontre o aplicativo de voz que você acabou de criar no seu painel do Nexmo, acessando Voice > Seus Applications.

Clique no nome deste aplicativo e, em seguida, na seção Numbers , clique na botão “Link” ao lado do número virtual que você alugou anteriormente.

Caso o número que você deseja usar já esteja vinculado a outro aplicativo, clique em Gerenciar número e configure-o para encaminhar as chamadas recebidas para o seu aplicativo.

link numberlink number

Dica extra: Use um comment node para anotar o número da Nexmo vinculado ao seu aplicativo; assim, você sempre o terá à mão.

Atender chamadas recebidas

Quando você recebe uma chamada, a Voice API da Nexmo faz uma GET solicitação a um endpoint definido por você, YOUR_URL/answere aguarda um conjunto de instruções sobre como lidar com a chamada.

Essas instruções vêm na forma de um Objeto de Controle de Chamadas da Nexmo, também conhecido como NCCOs. Há diversas ações disponíveis; encontre os nós correspondentes na paleta Nexmo no seu editor Node-RED ou consulte a Referência do NCCO para saber mais sobre elas.

Para este tutorial, vamos usar a connect ação, de modo que, quando a chamada recebida for atendida, ela seja redirecionada para um novo número de telefone que especificarmos.

Definir o ponto de extremidade do webhook para chamadas recebidas

Adicione um voice webhook e um return ncco nó à sua área de trabalho e conecte-os para definir um endpoint de webhook.

Em seguida, abra as voice webhook propriedades do nó, selecione GET como Method e digite /answer no URL campo e, em seguida, pressione Implantar.

inbound webhookinbound webhook

Ótimo! Agora você tem um webhook que retorna um NCCO para a API da Nexmo. Neste momento, ele ainda não contém nenhuma ação, então vamos adicionar uma!

Criar o objeto de controle de chamadas do Nexmo

Para encaminhar a chamada recebida, precisamos conectá-la a um novo terminal. Para isso, precisamos de uma connect ação.

Adicione um connect nó entre o voice webhook e um return ncco . Isso adicionará uma ação de conexão ao NCCO.

Abra o connect editor de nós, selecione Phone como um Endpointe digite o número para o qual você gostaria de ligar no Number {} campo.

Deixe o From {} campo em branco para que o identificador de chamadas apareça como “desconhecido”, ou preencha-o com um dos seus números virtuais da Nexmo.

Para saber mais sobre os outros parâmetros e a connect ação, consulte a Referência da NCCO.

Registrar eventos de chamada

Por fim, conecte um http in nó a um http response nó, bem como a um debug nó, para que você possa visualizar seus eventos de chamada na área de depuração.

No http nó de entrada, selecione POST como Method e preencha o URL campo com /event.

O http response nó deve ter 200 definido como Status code, mas não se preocupe com isso, esse também é o valor padrão.

forward flowforward flow

Agora ligue para o seu número da Nexmo e acompanhe os eventos da chamada na barra lateral de depuração!

forward call eventsforward call events

Adicionar um recurso de gravação

Ao fazer chamadas telefônicas de negócios, muitas vezes é útil ter a opção de gravá-las também. Então, vamos ver como podemos adaptar o fluxo acima para obter uma gravação da conversa.

Atualizar o NCCO

Primeiro, precisaremos de uma record ação adicionada ao Objeto de Controle de Chamadas da Nexmo.

A gravação começa quando a ação de gravação é executada no NCCO e termina quando a condição síncrona da ação é atendida. Ou seja, End On Silence, timeOut ou endOnKey.

Se você não definir uma condição síncrona, a Voice API executará imediatamente o próximo NCCO sem gravar.

No nosso caso de uso, isso significa que precisamos adicionar um record nó antes do connect nó, e nenhum End On Silence, Time Out ou End On Key valores devem ser definidos.

Vá em frente e adicione um record nó ao seu fluxo, entre o voice webhook e connect .

Abra as propriedades dele, preencha o URL {} campo com algo como YOUR_URL/record, selecione POST como Method e escolha um Format para o arquivo de gravação — vou escolher MP3. Você também pode marcar Beep Start para ter uma indicação clara de quando exatamente a gravação começa.

forwrad record nodeforwrad record node

Adicionar manipulador para o evento de gravação URL

Em seguida, precisamos adicionar um manipulador para a URL do evento de gravação — YOUR_URL/record. Dessa forma, receberemos o evento assim que a gravação for concluída e, então, poderemos baixar essa gravação para o nosso computador.

Adicione um http in nó e um http response nó à sua área de trabalho e conecte-os. Considere também adicionar um debug nó para ver o que está chegando pelo evento de gravação URL.
No http nó de entrada, selecione POST como um Method e preencha o URL campo com /record.

O http response nó deve ter 200 definido como Status code, mas esse também é o valor padrão.

forward record eventforward record event

Baixar a gravação

Assim que a gravação for concluída, a Nexmo nos envia a URL da gravação por meio do webhook de evento de gravação. A última etapa consiste em acessar a gravação e baixá-la.

Para esta etapa, precisaremos de um getrecording nó para buscar a gravação de áudio da URL fornecida e um file nó para gravá-lo em um arquivo em nosso computador.

Adicione um getrecording nó após o /record http in nó e, em seguida, nas propriedades desse nó, selecione o aplicativo de voz criado anteriormente no Nexmo Credentials menu suspenso e forneça um caminho absoluto como Filename {}.

forward get recordingforward get recording

E, por fim, adicione um file nó após getrecording. No editor do nó, certifique-se de que a opção opção “Criar diretório se não existir?” e selecione substituir ou acrescentar ao arquivo no Action menu suspenso. Deixe o Filename campo em branco, pois esse valor será passado a partir do getrecording nó, em {{msg.filename}}.

forward file nodeforward file node

Pronto! Pegue um segundo aparelho ou peça a um amigo para ligar para o seu número Nexmo, conversem e, assim que terminarem, o arquivo da gravação estará à sua disposição, já baixado no seu computador. Aproveite!

forward recording downloadforward recording download

E agora, para onde vamos?

Leitura complementar

Experimente outro tutorial

Compartilhar:

https://a.storyblok.com/f/270183/372x373/36054b72d0/julia-biro.png
Julia BiroRepresentante de Desenvolvedores

Julia está empenhada em capacitar outros desenvolvedores por meio da criação de tutoriais, guias e recursos práticos. Com experiência em divulgação e educação, ela busca tornar a tecnologia mais acessível e aprimorar a experiência geral dos desenvolvedores. É comum encontrá-la em eventos da comunidade local.