https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-build-a-voicemail-app-with-asp-net-core-dr/Blog_ASP-NET_Voicemail_1200x600.png

Comment créer une application de messagerie vocale avec ASP.NET Core

Publié le May 5, 2021

Temps de lecture : 10 minutes

Vous pouvez créer des solutions de centre de contact extrêmement puissantes et flexibles avec l'API Voice de Vonage. Mais que se passe-t-il si personne ne répond au téléphone à l'autre bout du fil ? Je suppose que vous pourriez simplement laisser le téléphone sonner ou diffuser un message demandant de rappeler plus tard. La plupart des gens, y compris moi-même, feraient probablement mieux de prendre le message du client sous la forme d'un message vocal. Avec l Voice API de Vonage de Vonage et notre .NET SDKc'est un jeu d'enfant à réaliser en ASP.NET Core!

Vue d'ensemble

Il y a plusieurs façons d'enregistrer des appels téléphoniques avec l'API Voice de Vonage. Dans ce tutoriel, nous utiliserons un webhook Answer, qui renverra un Nexmo Call Control Object (NCCO) contenant une action indiquant à Vonage d'enregistrer l'appel et de renvoyer l'URL de l'enregistrement sur notre serveur à la fin de l'appel. Un webhook est simplement un point de terminaison HTTP accessible au public que Vonage contactera pour obtenir des instructions lorsqu'il recevra un appel.

Aller directement au code

Si vous souhaitez sauter ce tutoriel et vous contenter de regarder le code, vous pouvez trouver tout le code de ce tutoriel dans GitHub.

Conditions préalables

  • Nous testerons ceci avec ngrok. Allez-y et suivez leurs instructions pour l'installer.

  • Nous allons avoir besoin de npm pour récupérer le fichier nexmo-cli

  • Nous allons avoir besoin de la dernière version du SDK .NET Core. J'utilise la version 3.1 dans ce tutoriel.

  • Nous allons utiliser Visual Studio pour ce tutoriel. Bien entendu, cela fonctionnera également avec Visual Studio Code et Visual Studio pour Mac. Les étapes de l'installation et de l'exécution peuvent être légèrement différentes.

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.

Configuration de l'interface de programmation Nexmo

Avec npm installé, nous pouvons aller de l'avant et installer et configurer le CLI Nexmo en utilisant :

npm install nexmo-cli -g nexmo setup API_KEY API_SECRET

L'exécution de cette opération permet de configurer l'interface de programmation Nexmo et de la rendre prête à fonctionner.

Run Ngrok

Je vais jeter tout ce que j'ai sur... localhost:5000. L'exécution de ngrok nous permettra d'accéder publiquement à localhost:5000.

ngrok http --host-header=localhost:5000 5000

Prenez note de l'URL sur laquelle ngrok tourne. Dans mon cas, il tourne sur http://7ca005ad1287.ngrok.io. Cette URL sera l'URL de base pour mes webhooks à l'avenir.

Créer notre application Vonage

Une Application Vonage est une construction qui nous permet de relier facilement l'itinéraire de nos Numbers et de nos webhooks. Vous pouvez créer une application dans le tableau de bord de Vonageou vous pouvez simplement la créer maintenant avec le CLI.

nexmo app:create "AspNetTestApp" http://7ca005ad1287.ngrok.io/webhooks/answer http://7ca005ad1287.ngrok.io/webhooks/events

Ces commandes vont créer une application Vonage. Elle va ensuite lier tous les appels entrants vers cette application à l'URL de réponse : http://7ca005ad1287.ngrok.io/webhooks/answer et acheminer tous les événements d'appel qui se produisent sur cette application vers http://7ca005ad1287.ngrok.io/webhooks/events. Cette commande va imprimer deux choses :

  1. Votre numéro d'identification de la demande. Vous pouvez trouver votre ID d'application dans le tableau de bord Vonage

  2. La clé privée de votre application. Assurez-vous de prendre ceci et de l'enregistrer dans un fichier - j'appelle le mien private.key

Associez votre numéro Vonage à votre Applications

Lorsque vous créez votre Account, un numéro Vonage vous est attribué. Vous pouvez le voir dans la section dans la section Numbers du tableau de bord. Vous pouvez également exécuter la commande nexmo number:list dans votre console pour obtenir la liste de vos numéros. Prenez votre numéro Vonage et votre ID d'application et exécutez ce qui suit :

nexmo link:app VONAGE_NUMBER APPLICATION_ID

Une fois cette étape franchie, vos appels seront bien dirigés vers votre URL.

Créez votre projet

Pour créer votre projet :

  • Ouvrir Visual Studio

  • Cliquez sur Créer un nouveau projet

  • Sélectionnez l'application Web ASP.NET Core

  • Cliquez sur Suivant

  • Nommez votre projet VonageVoicemail

  • Cliquez sur Créer

  • Sélectionner l'API

  • Cliquez sur Créer

Installer les dépendances

La seule dépendance est le paquetage Vonage NuGet. Allez-y et récupérez-le en utilisant votre méthode préférée. La mienne est de naviguer dans le répertoire VonageVoicemail.csprojet de l'exécuter :

dotnet add package Vonage

Créer le contrôleur

Si vous vous sentez paresseux, vous pouvez vous appuyer sur le fichier WeatherForecastController qui est pré-généré. Mais pour nos besoins, nous allons créer un nouveau contrôleur en faisant un clic droit sur le dossier Controllers -> Ajouter -> Contrôleur -> Sélectionner API Controller - Empty -> cliquez sur Ajouter -> Nommez ceci VoiceController.

Ces étapes permettront de créer un contrôleur API vide.

Configuration de l'injection de dépendances

Pour cela, nous aurons besoin d'accéder à la configuration de l'application. Dans le VoiceController, déclarez un objet IConfiguration, puis la dépendance injecte une IConfiguration dans le constructeur du contrôleur.

private readonly IConfiguration _config;

public VoiceController(IConfiguration config)
{
    _config = config;
}

Ajouter un itinéraire de réponse

Maintenant que notre contrôleur API est construit, ajoutons une route de réponse. Nous ajouterons une méthode Answer à la fin de cette route, qui créera un NCCO avec deux actions :

  1. Il s'adressera à l'utilisateur en lui disant que vous êtes actuellement indisposé.

  2. Une action d'enregistrement qui se termine après 3 secondes de silence, qui émet un bip avant de commencer à enregistrer et qui provoque une requête POST à la fin de l'appel contenant les informations d'enregistrement.

[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();
}

Important : host = Request.Headers["X-Original-Host"]; vous permet d'obtenir l'URL de rappel appropriée lorsque vous utilisez ngrok avec l'option -host-header option. Supprimez cette option si vous ne l'utilisez pas.

Ajout d'une route post-enregistrement

Après avoir enregistré l'appel, Vonage affichera une réponse sur le site Web que vous avez fourni. EventUrl que vous avez fournie. À partir de cette requête POST, nous extrairons l'URL d'enregistrement. Ensuite, nous créerons un client vocal à partir de nos informations d'identification, que nous stockerons dans la configuration. Avec le client vocal, nous obtiendrons l'enregistrement, puis nous le sauvegarderons dans un fichier mp3 sur notre disque.

[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);
}

C'est tout le code C# dont vous aurez besoin pour cette application. Ensuite, configurons l'application !

Configurer l'application

Il y a deux types de configuration à effectuer.

  1. Ajouter les clés de configuration pour APP_ID et PRIVATE_KEY_PATH au fichier appsettings.json

  2. Mettre à jour les paramètres de configuration dans launchsettings.json pour que kestrel/IIS express écoute sur http://localhost:5000

Ajouter des clés de configuration

Ouvrir appsettings.json et ajoutez les clés APP_ID et PRIVATE_KEY_PATH en utilisant l'identifiant de l'application et la clé privée que nous avons générés avec le CLI plus tôt. Ces clés en JSON ressembleront à ce qui suit :

"APP_ID": "7h15-w111-83-y0u2-4pp-1d",
"PRIVATE_KEY_PATH": "C:\\path\\to\\your\\private.key"

Mise à jour de launchSettings.json

Nous devons maintenant mettre à jour le fichier des paramètres de lancement pour que IIS Express ou Kestrel écoute sur http://localhost:5000. Ouvrez properties/launchSettings.json; si vous utilisez IIS Express, changez l'URL de l'application dans l'objet iisSettings en http://localhost:5000 et définissez sslPort à 0 pour désactiver SSL. Si vous utilisez Kestrel, supprimez le point de terminaison https://localhost:5001 en ne conservant que le point de terminaison http://localhost:5000 pour ne laisser que le point d'arrivée.

Test

C'est tout ce que nous devons faire avant de lancer l'application. Vous pouvez lancer l'application depuis Visual Studio en appuyant sur F5, ou depuis la ligne de commande en lançant dotnet run. Si vous appelez votre numéro Vonage API, l'application diffusera le message sortant, enregistrera l'appelant après le bip et, une fois l'appel terminé, sauvegardera un enregistrement de l'appel sur votre disque.

Ressources

  • Le code de ce tutoriel se trouve sur GitHub.

Partager:

https://a.storyblok.com/f/270183/384x384/73d57fd8eb/stevelorello.png
Steve LorelloAnciens de Vonage

Ancien développeur .NET Advocate @Vonage, ingénieur logiciel polyglotte full-stack, AI/ML