
Teilen Sie:
Ehemaliger .NET Developer Advocate @Vonage, polyglotter Software-Ingenieur, AI/ML
Wie man eine Voicemail-App mit ASP.NET Core erstellt
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:
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.
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.
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:
Ihre Anwendungs-ID. Sie finden Ihre Anwendungs-ID im Vonage Dashboard
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:
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:
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:
Es wird mit dem Benutzer sprechen und ihm mitteilen, dass Sie gerade unpässlich sind.
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-headerOption. 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.
Fügen Sie die Konfigurationsschlüssel für APP_ID und PRIVATE_KEY_PATH in die Datei appsettings.json ein
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.
