https://a.storyblok.com/f/270183/295714/2cdde5004d/receive-a-phone-call-with-nancyfx.png

Receber uma chamada telefônica com a Voice API da Vonage, ASP.NET Core e NancyFX

Publicado em May 4, 2021

Tempo de leitura: 3 minutos

Este é o terceiro tutorial da série sobre como usar Voice APIs com o ASP.NET.

Nos tutoriais anteriores, aprendemos como fazer uma chamada telefônica com a funcionalidade de conversão de texto em fala usando ASP.NET e como reproduzir áudio para quem está ligando no ASP.NET Core. Mas e quanto a receber chamadas? A boa notícia é que a Voice API da Vonage também lida com chamadas recebidas.

As chamadas recebidas são aquelas feitas para um número da Vonage a partir de outro telefone comum em qualquer lugar do mundo. Tanto as chamadas recebidas quanto as efetuadas seguem o mesmo fluxo de chamada após serem atendidas. Esse fluxo de chamada é controlado por um NCCO.

Neste tutorial, vamos criar um aplicativo ASP.NET que processa chamadas de voz recebidas e retorna uma resposta dinâmica.

Objetivos de aprendizagem

Neste tutorial, vamos:

  • Crie um aplicativo ASP.NET Core.

  • Use o NancyFX com o ASP.NET Core.

  • Crie uma aplicação de voz da Vonage.

  • Receba chamadas recebidas dentro do aplicativo.

  • Criar e retornar um NCCO.

  • Execute e teste o código usando o Ngrok.

Pré-requisito

  • Visual Studio 2017.

  • Uma configuração de projeto para esta série de tutoriais, que você pode encontrar no GitHub.

  • Opcional: O CLI da Vonage.

Configuração

Para usar a Voice API da Vonage, precisamos criar um aplicativo de voz.

As etapas de configuração estão detalhadas na postagem “Vonage Voice API com ASP.NET: Antes de começar”.

Assim que o aplicativo estiver configurado com sucesso, estaremos prontos para receber uma chamada com a Voice API da Vonage!

Recebendo uma ligação com o ASP.NET

Quando uma chamada é recebida, a Voice API da Vonage enviará uma solicitação ao aplicativo para determinar como responder ao chamador.

Para isso, vamos usar o NancyFX em conjunto com nosso projeto ASP.NET Core.

Nancy é uma estrutura leve de código aberto que promove o “caminho super-duper-feliz”. Isso significa que ela possui padrões e convenções sensatos e tenta não atrapalhar nosso trabalho o máximo possível.

Antes de mais nada, precisamos adicionar a Nancy ao nosso projeto:

csharp PM> Install-Package Nancy PM> Install-Package Microsoft.AspNetCore.Owin

Para que o Nancy possa processar quaisquer solicitações HTTP, precisamos configurar o ASP.NET Core para usar o Nancy por meio de Owin no Configure método de Startup.cs.

using Microsoft.AspNetCore.Builder;
using Nancy.Owin;

namespace NexmoVoiceASPNetCoreQuickStarts
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.UseOwin(x => x.UseNancy());
        }
    }
}

Estamos prontos para começar! O próximo passo é criar um módulo Nancy para lidar com quaisquer solicitações para /webhook/answer.

using Nancy;

namespace NexmoVoiceASPNetCoreQuickStarts
{
    public class VoiceModule : NancyModule
    {
        public VoiceModule()
        {
            Get["/webhook/answer"] = x => "Hello happy path";
        }
    }
}

Estou usando o Postman para testar e, como você pode ver, nossa /webhook/answer rota está retornando exatamente o que era esperado.

asp postman screenshotasp-post

Esse é um ótimo começo, mas a Vonage não sabe o que fazer com essa sequência de caracteres. Para atender corretamente à chamada, precisamos retornar um NCCO.

using Nancy;
using Newtonsoft.Json.Linq;

namespace NexmoVoiceASPNetCoreQuickStarts
{
    public class VoiceModule : NancyModule
    {
        public VoiceModule()
        {
            Get["/webhook/answer"] = x => GetInboundNCCO();
        }

        private string GetInboundNCCO()
        {
            dynamic TalkNCCO = new JObject();
            TalkNCCO.action = "talk";
            TalkNCCO.text = "Thank you for calling from " + string.Join(' ', this.Request.Query["from"].ToString().ToCharArray()));
            TalkNCCO.voiceName = "Kimberly";
            
            JArray jarrayObj = new JArray();
            jarrayObj.Add(TalkNCCO);

            return jarrayObj.ToString();

        }
    }
}

GetInboundNCCO() criará um objeto NCCO que utilizará a função de conversão de texto em fala para ler o número de telefone do chamador de volta para ele, utilizando a talk ação dentro do NCCO.

Estamos acessando o número de telefone por meio do from parâmetro na solicitação.

webhook answer screenshotwebhook answer

Esse é todo o código de que precisamos. Para testar isso corretamente, são necessárias mais algumas etapas de configuração.

Se você acompanhou tudo até aqui, já configurou sua conta da Vonage e criou um aplicativo de voz, conforme mostrado em esta postagem.

Precisamos vincular este aplicativo a um número de telefone da Vonage, o número para o qual faremos a ligação. Se você não tiver um número, pode adquirir um pelo painel de controle ou pela CLI. javascript vonage numbers:buy PHONE_NUMBER US Da mesma forma, para vincular o número, você pode usar o painel de controle ou a CLI.

vonage numbers:buy PHONE_NUMBER US

Da mesma forma que para vincular o número, você pode usar o painel ou a CLI.

vonage apps:link --number=PHONE_NUMBER APP_ID

Precisamos informar à Vonage para qual URL enviar uma solicitação quando uma chamada for recebida (answer_url). No meu caso, essa URL é http://localhost:63286/webhook/answer e isso só está funcionando localmente.

Para mostrar o nosso answer_url, vamos usar nosso bom amigo Ngrok.

ngrok http 63286 -host-header="localhost:63286"

Isso retornará uma nova URL (a minha é http://5e18af56.ngrok.io) que pode ser usada como answer_url para o aplicativo de voz. Atualize seu answer_url para http://[id].ngrok.io/webhook/answer

Pronto! Abra o aplicativo e teste-o ligando para o número da Vonage que você comprou. Ele deve agradecer pela ligação e, em seguida, ler seu número de telefone.

Saiba mais

Referências e ferramentas da API

Guias de introdução da Nexmo para ASP.NET

Compartilhar:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Rabeb OthmaniEx-funcionários da Vonage

Rabeb era Developer Advocate na Nexmo, com foco em APIs de comunicação em nuvem e em ajudar desenvolvedores a terem a melhor experiência possível ao criarem seus aplicativos. Além de ganhar a vida escrevendo código, Rabeb defende a inclusão de mais mulheres e minorias no setor de tecnologia, daí seu envolvimento com a Women Who Code e com diversas comunidades tecnológicas. Ela lidera a rede Women Who Code em Bristol.