
Compartilhar:
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.
Receber uma chamada telefônica com a Voice API da Vonage, ASP.NET Core e NancyFX
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-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
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 USDa mesma forma que para vincular o número, você pode usar o painel ou a CLI.
vonage apps:link --number=PHONE_NUMBER APP_IDPrecisamos 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:
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.