
Compartir:
Antiguo desarrollador .NET Advocate @Vonage, ingeniero de software poliglota full-stack, AI/ML
Cómo crear una aplicación de buzón de voz con ASP.NET Core
Tiempo de lectura: 10 minutos
Puedes crear soluciones de centro de contacto extremadamente potentes y flexibles con Voice API de Vonage. Pero, ¿qué sucede si no hay nadie para contestar el teléfono del otro lado? Bueno, supongo que podrías simplemente dejar que suene el teléfono o reproducir un mensaje pidiéndoles que vuelvan a llamar más tarde. Probablemente lo que haría la mayoría de la gente, incluido yo mismo, es tomar el mensaje del cliente en forma de mensaje de voz. Con la Voice API de Vonage y nuestro SDK .NETesto es muy fácil de hacer en ASP.NET Core¡!
Visión general
Existen varias maneras de grabar llamadas telefónicas con Voice API de Vonage. En este tutorial, usaremos un webhook de respuesta, que devolverá un objeto de control de llamadas Nexmo (NCCO) que contiene una acción que le indica a Vonage que grabe la llamada y luego envíe la URL de la grabación a nuestro servidor cuando la llamada finalice. Un webhook es simplemente un punto final HTTP disponible públicamente al que Vonage solicitará instrucciones cuando reciba una llamada.
Ir directamente al código
Si quieres saltarte este tutorial y sólo mirar el código, puedes encontrar todo el código de este tutorial en GitHub.
Requisitos previos
Probaremos esto con ngrok. Sigue sus instrucciones para configurarlo.
Vamos a necesitar npm para obtener el nexmo-cli
Vamos a necesitar la última versión de .NET Core SDK. Estoy usando la versión 3.1 en este tutorial.
Vamos a utilizar Visual Studio para este tutorial. Por supuesto, esto también funcionará con Visual Studio Code y Visual Studio para Mac. Sólo puede haber algunos pasos ligeramente diferentes para la configuración y ejecución.
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.
Configuración de Nexmo CLI
Con npm instalado podemos seguir adelante e instalar y configurar el Nexmo CLI usando:
Ejecutando esto obtendrá la configuración Nexmo CLI y listo para funcionar.
Ejecutar Ngrok
Voy a estar tirando todo en localhost:5000. Ejecutar ngrok nos permitirá acceder públicamente a . localhost:5000.
Toma nota de la URL en la que se está ejecutando ngrok. En mi caso, se está ejecutando en http://7ca005ad1287.ngrok.io. Esta URL va a ser la URL base para mis webhooks en el futuro.
Crear nuestra aplicación de Vonage
Una aplicación de Vonage es una construcción que nos permite vincular la ruta de nuestros números y webhooks fácilmente. Puedes crear una aplicación en el Panel de Vonageo puedes crearla ahora con la CLI.
Estos comandos crearán una aplicación de Vonage. Luego vinculará todas las llamadas entrantes a esa aplicación con la URL de respuesta: http://7ca005ad1287.ngrok.io/webhooks/answer y dirigirá todos los eventos de llamadas que ocurran en esa aplicación a http://7ca005ad1287.ngrok.io/webhooks/events. Este comando imprimirá dos cosas:
Su identificador de solicitud. Puedes encontrar tu ID de aplicación en el Panel de Vonage
La clave privada de tu aplicación. Asegúrese de tomar esto y guardarlo en un archivo-estoy llamando a la mía
private.key
Vincula tu número de Vonage a tu aplicación
Cuando creas tu Account, se te asigna un número de Vonage. Puedes verlo en la sección sección Numbers del panel de control. También puedes ejecutar nexmo number:list en tu consola para obtener una lista de tus números. Toma tu número de Vonage y tu ID de aplicación y ejecuta lo siguiente:
Una vez hecho esto, sus llamadas se dirigirán a su URL.
Cree su proyecto
Para crear tu proyecto:
Abrir Visual Studio
Haga clic en Crear un nuevo proyecto
Seleccione una aplicación web ASP.NET Core
Haga clic en Siguiente
Nombra tu proyecto VonageVoicemail
Haga clic en Crear
Seleccionar API
Haga clic en Crear
Instalar dependencias
La única dependencia que va a tener es el paquete Vonage paquete NuGet. Vaya por delante y agarrar que el uso de su método preferido. El mío es navegar hasta el directorio VonageVoicemail.csprojy ejecutarlo:
Crear el controlador
Si le da pereza, puede utilizar el programa WeatherForecastController que está pregenerado. Pero para nuestros propósitos vamos a crear un nuevo controlador haciendo clic derecho sobre el Controllers -> Añadir -> Controlador -> Seleccionar API Controller - Empty -> clic en Añadir -> Nombre VoiceController.
Estos pasos crearán un controlador de API vacío.
Configuración de inyección de dependencias
Para ello necesitaremos acceder a la configuración de la aplicación. En el VoiceController, declara un objeto IConfiguration, y luego la dependencia inyecta un IConfiguration en el constructor del controlador.
private readonly IConfiguration _config;
public VoiceController(IConfiguration config)
{
_config = config;
} Añadir ruta de respuesta
Ahora que tenemos nuestro controlador API construido, vamos a añadir una ruta de respuesta. Añadiremos un método Answer al final de esta ruta, que creará una OCNC con dos acciones:
Hablará con el usuario, diciéndole que se encuentra indispuesto en ese momento.
Una acción de grabación que finalizará tras 3 segundos de silencio, emitirá un pitido antes de empezar a grabar y provocará una solicitud POST al final de la llamada con la información de la grabación.
[HttpGet]
[Route("webhooks/answer")]
public async Task<string> Answer()
{
var host = Request.Host.ToString();
//remove the next line if using ngrok without --host-header option
host = Request.Headers["X-Original-Host"];
var sitebase = $"{Request.Scheme}://{host}";
var talkAction = new TalkAction
{
Text = "Hello, you have reached Steve's number," +
" he cannot come to the phone right now. " +
"Please leave a message after the tone.",
VoiceName = "Joey"
};
var recordAction = new RecordAction
{
EndOnSilence = "3",
BeepStart = "true",
EventUrl = new[] { $"{sitebase}/webhooks/recording" },
EventMethod = "POST"
};
var ncco = new Ncco(talkAction, recordAction);
return ncco.ToString();
}Importante:
host = Request.Headers["X-Original-Host"];permite obtener la URL de devolución de llamada adecuada cuando se utiliza ngrok con la opción-host-headeropción. Elimine esto si no lo está utilizando.
Añadir ruta de postgrabación
Luego de grabar la llamada, Vonage te enviará una respuesta en la dirección EventUrl que proporcionaste. De esa solicitud POST, extraeremos la URL de grabación. Luego crearemos un cliente de voz a partir de nuestras credenciales, que almacenaremos en la configuración. Con el cliente de voz, obtendremos la grabación y luego la guardaremos en un archivo mp3 en nuestro disco.
[HttpPost]
[Route("webhooks/recording")]
public IActionResult Recording()
{
Record record;
var appId = _config["APP_ID"];
var privateKeyPath = _config["PRIVATE_KEY_PATH"];
var credentials = Credentials.FromAppIdAndPrivateKeyPath(appId, privateKeyPath);
var voiceClient = new VoiceClient(credentials);
using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
{
record = JsonConvert.DeserializeObject<Record>(reader.ReadToEndAsync().Result);
var recording = voiceClient.GetRecording(record.RecordingUrl);
System.IO.File.WriteAllBytes("your_recording.mp3", recording.ResultStream);
}
Console.WriteLine($"Record event received on webhook - URL: {record?.RecordingUrl}");
return StatusCode(204);
}Ese es todo el código C# que vas a necesitar para esto. A continuación, ¡vamos a configurar la aplicación!
Configurar la aplicación
Hay dos tipos de configuración que tendremos que realizar.
Añada las claves de configuración para APP_ID y PRIVATE_KEY_PATH al archivo appsettings.json
Actualice los ajustes de configuración en launchsettings.json para que kestrel/IIS express escuche en
http://localhost:5000
Añadir claves de configuración
Abra appsettings.json y añade las teclas APP_ID y PRIVATE_KEY_PATH utilizando el Id de la aplicación y la clave privada que generamos anteriormente con la CLI. Esas claves en JSON se verá como:
"APP_ID": "7h15-w111-83-y0u2-4pp-1d",
"PRIVATE_KEY_PATH": "C:\\path\\to\\your\\private.key" Actualizar launchSettings.json
Ahora tenemos que actualizar el archivo de configuración de lanzamiento para que IIS Express o Kestrel escuchen en http://localhost:5000. Abra properties/launchSettings.jsonSi está usando IIS Express, cambie la URL de la aplicación en el objeto iisSettings a http://localhost:5000 y establezca sslPort en 0 para desactivar SSL. Si utiliza Kestrel, elimine el endpoint https://localhost:5001 dejando sólo el endpoint http://localhost:5000 endpoint.
Prueba
Esto es todo lo que tenemos que hacer antes de ejecutar la aplicación. Puedes ejecutar la aplicación desde Visual Studio pulsando F5, o desde la línea de comandos ejecutando dotnet run. Si llamas a tu número de la API de Vonage, reproducirá el mensaje saliente, grabará a la persona que llama después del tono y, cuando la llamada finalice, guardará una grabación de la llamada en tu disco.
Recursos
El código de este tutorial se encuentra en GitHub.
