
Partager:
Ancien développeur .NET Advocate @Vonage, ingénieur logiciel polyglotte full-stack, AI/ML
Comment créer une application de messagerie vocale avec ASP.NET Core
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 :
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.
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.
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 :
Votre numéro d'identification de la demande. Vous pouvez trouver votre ID d'application dans le tableau de bord Vonage
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 :
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 :
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 :
Il s'adressera à l'utilisateur en lui disant que vous êtes actuellement indisposé.
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-headeroption. 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.
Ajouter les clés de configuration pour APP_ID et PRIVATE_KEY_PATH au fichier appsettings.json
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.
