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

Wie man eine Voicemail-App mit ASP.NET Core erstellt

Zuletzt aktualisiert am May 5, 2021

Lesedauer: 10 Minuten

Mit der Vonage Voice API können Sie extrem leistungsfähige und flexible Contact Center-Lösungen aufbauen. Aber was passiert, wenn am anderen Ende niemand da ist, um den Anruf entgegenzunehmen? Nun, ich nehme an, Sie könnten das Telefon einfach klingeln lassen oder eine Nachricht abspielen und den Anrufer bitten, später noch einmal anzurufen. Wahrscheinlich würden die meisten Leute, mich eingeschlossen, die Nachricht des Kunden in Form einer Voicemail entgegennehmen. Mit der Vonage Voice API und unserem .NET SDKist dies ein Kinderspiel in ASP.NET Core!

Übersicht

Es gibt mehrere Möglichkeiten, Telefonate mit der Vonage Voice API aufzuzeichnen. In diesem Tutorial werden wir einen Answer-Webhook verwenden, der ein Nexmo Call Control Object (NCCO) zurückgibt, das eine Aktion enthält, mit der Vonage angewiesen wird, den Anruf aufzuzeichnen und die URL der Aufzeichnung nach Beendigung des Anrufs an unseren Server zurückzuschicken. Ein Webhook ist einfach ein öffentlich verfügbarer HTTP-Endpunkt, an den Vonage Anweisungen sendet, wenn es einen Anruf erhält.

Direkt zum Code springen

Wenn Sie dieses Tutorial überspringen und sich nur den Code ansehen möchten, finden Sie den gesamten Code für dieses Tutorial in GitHub.

Voraussetzungen

  • Wir testen dies mit ngrok. Folgen Sie den dortigen Anweisungen zur Einrichtung.

  • Wir benötigen npm um die nexmo-cli zu holen

  • Wir benötigen das neueste .NET Core SDK. Ich verwende in diesem Tutorial die Version 3.1.

  • Für dieses Tutorial werden wir Visual Studio verwenden. Natürlich funktioniert dies auch mit Visual Studio Code und Visual Studio für Mac. Es gibt nur einige leicht unterschiedliche Schritte für die Einrichtung und Ausführung.

Vonage API-Konto

Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.

In diesem Lernprogramm wird auch eine virtuelle Telefonnummer verwendet. Um eine zu erwerben, gehen Sie zu Rufnummern > Rufnummern kaufen und suchen Sie nach einer Nummer, die Ihren Anforderungen entspricht.

Einrichten der Nexmo CLI

Wenn npm installiert ist, können wir fortfahren und die Nexmo CLI installieren und konfigurieren:

npm install nexmo-cli -g nexmo setup API_KEY API_SECRET

Wenn Sie dies ausführen, wird die Nexmo CLI eingerichtet und ist betriebsbereit.

Ngrok laufen lassen

Ich werde alles auf den Boden werfen. localhost:5000. Die Ausführung von ngrok wird uns den öffentlichen Zugriff auf localhost:5000.

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

Notieren Sie sich die URL, unter der ngrok läuft. In meinem Fall läuft er auf http://7ca005ad1287.ngrok.io. Diese URL wird in Zukunft die Basis-URL für meine Webhooks sein.

Unsere Vonage-Anwendung erstellen

Eine Vonage Application ist ein Konstrukt, mit dem wir unsere Numbers und Webhooks einfach verknüpfen können. Sie können eine Applikation im Vonage Dashboarderstellen, oder Sie können sie einfach mit der CLI erstellen.

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

Mit diesen Befehlen wird eine Vonage-Anwendung erstellt. Dann werden alle eingehenden Anrufe an diese Anwendung mit der Antwort-URL verknüpft: http://7ca005ad1287.ngrok.io/webhooks/answer und leitet alle Anrufereignisse, die in dieser Anwendung auftreten, an http://7ca005ad1287.ngrok.io/webhooks/events. Dieser Befehl druckt zwei Dinge aus:

  1. Ihre Anwendungs-ID. Sie finden Ihre Anwendungs-ID im Vonage Dashboard

  2. Der private Schlüssel Ihrer Anwendung. Stellen Sie sicher, dass Sie diesen in einer Datei speichern - ich nenne meinen private.key

Verknüpfen Sie Ihre Vonage-Nummer mit Ihrer Bewerbung

Wenn Sie Ihren Account einrichten, wird Ihnen eine Vonage-Nummer zugewiesen. Diese können Sie im Abschnitt Numbers auf dem Dashboard sehen. Alternativ können Sie auch einfach den Befehl nexmo number:list in Ihrer Konsole ausführen, um Ihre Numbers aufzulisten. Nehmen Sie Ihre Vonage Numbers und Ihre Application ID und führen Sie Folgendes aus:

nexmo link:app VONAGE_NUMBER APPLICATION_ID

Wenn Sie dies getan haben, werden Ihre Anrufe problemlos an Ihre URL weitergeleitet.

Ihr Projekt erstellen

So erstellen Sie Ihr Projekt:

  • Visual Studio öffnen

  • Klicken Sie auf Neues Projekt erstellen

  • ASP.NET Core-Webanwendung auswählen

  • Weiter klicken

  • Benennen Sie Ihr Projekt VonageVoicemail

  • Klicken Sie auf Erstellen

  • API auswählen

  • Klicken Sie auf Erstellen

Abhängigkeiten installieren

Die einzige Abhängigkeit, die es gibt, ist das Vonage NuGet-Paket. Gehen Sie vor und holen Sie es mit Ihrer bevorzugten Methode. Bei mir navigiere ich zum VonageVoicemail.csprojVerzeichnis und führen Sie es aus:

dotnet add package Vonage

Erstellen Sie den Controller

Wenn Sie zu faul sind, können Sie auch auf die WeatherForecastController die bereits generiert ist. Aber für unsere Zwecke werden wir einen neuen Controller erstellen, indem wir mit der rechten Maustaste auf den Controllers Ordner -> Hinzufügen -> Controller -> Auswählen API Controller - Empty -> Klicken Sie auf Hinzufügen -> Benennen Sie diesen VoiceController.

Mit diesen Schritten wird ein leerer API-Controller erstellt.

Dependency Inject Konfiguration

Hierfür benötigen wir Zugriff auf die Konfiguration der App. Deklarieren Sie im VoiceController ein IConfiguration-Objekt, und injizieren Sie dann über die Abhängigkeit eine IConfiguration in den Konstruktor des Controllers.

private readonly IConfiguration _config;

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

Antwort-Route hinzufügen

Nachdem wir nun unseren API-Controller erstellt haben, fügen wir eine Antwortroute hinzu. Wir fügen eine Answer Methode am Ende dieser Route, die ein NCCO mit zwei Aktionen erstellt:

  1. Es wird mit dem Benutzer sprechen und ihm mitteilen, dass Sie gerade unpässlich sind.

  2. Eine Aufzeichnungsaktion, die nach 3 Sekunden Stille endet, vor Beginn der Aufzeichnung einen Piepton abgibt und am Ende des Anrufs eine POST-Anfrage mit den Aufzeichnungsinformationen auslöst.

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

Wichtig! host = Request.Headers["X-Original-Host"]; ermöglicht es Ihnen, die entsprechende Callback-URL zu erhalten, wenn Sie ngrok mit der -host-header Option. Entfernen Sie dies, wenn Sie es nicht verwenden.

Post-Recording-Route hinzufügen

Nach der Aufzeichnung des Anrufs sendet Vonage Ihnen eine Antwort an die von Ihnen angegebene Adresse. EventUrl die Sie angegeben haben. Aus dieser POST-Anforderung extrahieren wir die Aufzeichnungs-URL. Dann erstellen wir einen Voice-Client mit unseren Anmeldedaten, die wir in der Konfiguration speichern. Mit dem Voice-Client holen wir die Aufzeichnung ab und speichern sie in einer mp3-Datei auf unserer Festplatte.

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

Das ist der gesamte C#-Code, den Sie hierfür benötigen. Als Nächstes müssen wir die App konfigurieren!

Konfigurieren Sie die App

Es gibt zwei Arten von Konfigurationen, die wir vornehmen müssen.

  1. Fügen Sie die Konfigurationsschlüssel für APP_ID und PRIVATE_KEY_PATH in die Datei appsettings.json ein

  2. Aktualisieren Sie die Konfigurationseinstellungen in launchsettings.json, damit kestrel/IIS express auf http://localhost:5000

Konfigurations-Schlüssel hinzufügen

Öffnen Sie appsettings.json und fügen Sie die Tasten APP_ID und PRIVATE_KEY_PATH hinzu, wobei die Anwendungs-ID und der private Schlüssel verwendet werden, die wir zuvor mit der CLI erzeugt haben. Diese Schlüssel in JSON sehen wie folgt aus:

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

launchSettings.json aktualisieren

Jetzt müssen wir die Starteinstellungsdatei aktualisieren, damit IIS Express oder Kestrel auf http://localhost:5000. Öffnen Sie properties/launchSettings.jsonWenn Sie IIS Express verwenden, ändern Sie die Anwendungs-URL im iisSettings-Objekt in http://localhost:5000 und setzen Sie den sslPort auf 0, um SSL zu deaktivieren. Wenn Sie Kestrel verwenden, entfernen Sie den https://localhost:5001 Endpunkt und lassen nur den http://localhost:5000 Endpunkt.

Test

Das ist alles, was wir tun müssen, bevor wir die Anwendung ausführen. Sie können die Anwendung von Visual Studio aus starten, indem Sie F5 drücken, oder von der Kommandozeile aus, indem Sie dotnet run. Wenn Sie Ihre Vonage-API-Nummer anrufen, wird die Ansage abgespielt, der Anrufer nach dem Piepton aufgezeichnet und nach Beendigung des Anrufs eine Aufzeichnung des Gesprächs auf Ihrer Festplatte gespeichert.

Ressourcen

  • Der Code für dieses Tutorial befindet sich in GitHub.

Teilen Sie:

https://a.storyblok.com/f/270183/384x384/73d57fd8eb/stevelorello.png
Steve LorelloVonage Ehemalige

Ehemaliger .NET Developer Advocate @Vonage, polyglotter Software-Ingenieur, AI/ML