https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-handle-handset-input-dtmf-from-a-phone-call-in-asp-net-core/Blog_ASP-NET_VoiceAPI_1200x600.png

Wie man die Hörereingabe (DTMF) eines Telefonanrufs in ASP.NET Core handhabt

Zuletzt aktualisiert am May 10, 2021

Lesedauer: 11 Minuten

Der grundlegende Baustein eines jeden Interactive Voice Response (IVR)-Systems ist die Verarbeitung von Eingaben. Es gibt im Allgemeinen zwei Arten von Eingaben, die Sie programmgesteuert aus einem öffentlichen Telefonnetz (PSTN) entgegennehmen können, die beide von Vonage unterstützt werden:

  1. Dual-Tone Multi-Frequency (DTMF)-das sind Eingabeereignisse, die vom Handgerät Ihres Benutzers erfasst werden. Z. B. "Drücken Sie 1 für den Verkauf, 2 für den Kundendienst".

  2. Automatische Spracherkennung (ASR)-Dies sind Spracherkennungsereignisse, bei denen die Eingabe die Stimme des Benutzers ist.

In diesem Tutorial werden wir die Vonage Voice API verwenden, um zu lernen, wie wir schnell DTMF in unsere ASP.NET Core Applications einbinden können. Das Sammeln von DTMF von einem Benutzer über einen PSTN-Anruf beinhaltet Folgendes:

  1. Einrichten eines Vonage API-Konto wenn Sie noch keines haben.

  2. Erstellen einer Vonage-Anwendung mit der CLI.

  3. Schreiben Sie etwas C#-Code.

  4. Verbinden Sie unsere App mit dem Web.

Direkt zum Code springen

Wenn Sie dieses Tutorial überspringen und ein funktionierendes Beispiel verwenden möchten, finden Sie dieses Beispiel in GitHub.

Voraussetzungen

  • Die Vonage CLI. Wenn Sie es nicht haben, können Sie es installieren mit npm install @vonage/cli -g

  • Das neueste .NET Core SDK

  • Visual Studio oder Visual Studio Code. Ich werde Visual Studio 2019 verwenden.

  • ngrok zum Testen. Sie benötigen nur die kostenlose Version.

Vonage API-Konto

Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch kein Konto 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

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.

Ngrok aufdrehen

Wir werden ngrok verwenden, um unsere lokal ausgeführte ASP.NET Core-Anwendung für das Internet freizugeben. Nachdem Sie ngrok installiert haben, ist es so einfach wie das Ausführen des Befehls ngrok http 5000 in Ihrer Konsole auszuführen. Das Ergebnis sieht dann etwa so aus:

ngrokngrok

HINWEIS: Dieses Tutorial verwendet Kestral für das lokale Debugging. Wenn Sie stattdessen IIS Express verwenden möchten, lesen Sie bitte unseren Erläuterung über die Verwendung von ngrok mit IIS Express.

Das Wichtigste ist hier die Weiterleitungs-URL - in meinem Fall ist diese URL http://34332d9dca30.ngrok.io. Wenn Sie einen Anruf auf Ihrer Vonage-Nummer erhalten, sendet Vonage Ihrer Anwendung einen so genannten WebHook, d. h. eine HTTP-GET-Anfrage, die nach einem so genannten Call Control Object (NCCO) fragt. Unsere Anwendung hört auf /webhooks/answer Die gesamte URL, die ich benötige, lautet also http://34332d9dca30.ngrok.io/webhooks/answer.

CLI einrichten

Wenn Sie die Vonage CLI noch nicht eingerichtet haben, führen Sie dazu den Befehl vonage config:set <api_key> <api_secret> aus, wobei API-Schlüssel und Geheimnis der API-Schlüssel und das Geheimnis sind, die Sie auf der Einstellungen Ihres Accounts

Nummer kaufen und Antrag erstellen

Nun, da Ihre CLI eingerichtet ist, werden wir eine Nummer erwerben, eine Vonage-Anwendung erstellen und die Nummer mit dieser Anwendung verknüpfen, wodurch Vonage angewiesen wird, an Ihre Anwendung weiterzuleiten.

Kaufen Sie eine Nummer

Um eine Nummer zu kaufen, verwenden Sie den folgenden Befehl (ersetzen Sie Ihre Länder-ID durch US)

vonage numbers:search US vonage numbers:buy US

Geben Sie confirm um den Vorgang abzuschließen; es wird eine Nummer ausgegeben, die Sie gekauft haben.

Eine Anwendung erstellen

Als nächstes werden wir eine Anwendung erstellen. Der Befehl "Anwendung erstellen" benötigt zwei URLs: die Antwort-URL, die die Nummer ist, an die Vonage eingehende Anrufe sendet, und die Ereignis-URL, die die URL ist, an die Vonage Ereignisse sendet, die von einer Ihrer Nummern ausgehen. Denken Sie daran, die URL 34332d9dca30 durch den zufälligen Hashwert für Ihre ngrok-URL zu ersetzen:

vonage apps:create "DTMFInput" --messages_inbound_url=http://34332d9dca30.ngrok.io/webhooks/answer --messages_status_url=http://34332d9dca30.ngrok.io/webhooks/events

Dieser Vorgang wird mit einer Anwendungs-ID und einem privaten Schlüssel beantwortet. Speichern Sie diese beiden Werte. Wir werden in diesem Tutorial nur die Anwendungs-ID verwenden, aber Sie verwenden den privaten Schlüssel, um Ihre Anwendungsanfragen zu autorisieren.

Verknüpfen Sie die Anwendung

Als nächstes müssen wir unsere neu erworbene Nummer mit unserer Anwendung verknüpfen. Durch die Verknüpfung unserer Nummer wird Vonage angewiesen, alle unter dieser Nummer eingehenden Anrufe an die Webhook-URL unserer Anwendung zu senden. Dazu benötigen wir die Anwendungs-ID, die wir gerade von der Anfrage "create app" erhalten haben (sie sieht aus wie e7a25242-77a1-42cd-a32e-09febcb375f4) und die Telefonnummer, die wir gerade gekauft haben, und wir führen einen Befehl aus, der wie folgt aussieht:

vonage apps:link --number=VONAGE_NUMBER APP_ID

Unsere App erstellen

Jetzt müssen wir nur noch unsere App entwickeln!

Die App erstellen

Navigieren Sie in Ihrer Konsole zu dem Verzeichnis, in dem Sie normalerweise Ihren Code ablegen. Wir erstellen jetzt eine Web API ASP.NET Core-Anwendung erstellen. Wir werden nicht konfigurieren httpsnicht, was das Testen erleichtert. Sie können dies einfach mit dem folgenden dotnet CLI-Befehl einrichten:

dotnet new webapi -n VonageDtmf --no-https

Installieren Sie das Vonage SDK

Führen Sie den Befehl cd aus, um sich in den VonageDtmf Projektordner und führen Sie den folgenden Befehl aus, um das Vonage Server SDK zu Ihrem Projekt hinzuzufügen.

dotnet add package Vonage

Erstellen des Voice Controllers

Navigieren Sie in das von ihm erstellte Verzeichnis und öffnen Sie die csproj-Datei in der IDE Ihrer Wahl. Im Ordner Controllers Ordner, fügen Sie einen neuen leeren API Controller mit dem Namen VoiceController. In der VoiceControllerfügen wir, zusätzlich zum ApiController Boilerplate mit Anweisungen für System.Threading.Tasks, Vonage.Utility, Vonage.Voice.EventWebhooks, und Vonage.Voice.Nccos. Danach sollte der Controller wie folgt aussehen.

using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using Vonage.Utility;
using Vonage.Voice.EventWebhooks;
using Vonage.Voice.Nccos;

namespace VonageDtmf.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class VoiceController : ControllerBase
    {
    }
}

Umgang mit einer Antwort

Wir fügen nun unsere Route für /webhooks/answer. Diese Route wird eine GET-Anfrage sein, da Vonage ein NCCO von unserem Server abrufen wird. Mit dieser Methode wird ein NCCO mit zwei Aktionen (Anweisungen für den Anruf) erstellt. Aktion eins ist eine Gesprächsaktion, die den Benutzer auffordert, eine Ziffer einzugeben. Die zweite Aktion ist dann eine MultiInput-Aktion. Diese Aktion sammelt die Eingaben des Benutzers. Sie können angeben, ob Sie mit dieser Aktion DTMF- und/oder Spracheingaben erfassen möchten. Wir werden DTMF auswählen, indem wir ein DtmfSettings Objekt zur Aktion hinzufügen und die maximalen Ziffern auf 1. Wir übergeben ihm die Ereignis-URL, die die Basis-URL unseres Servers unter /webhooks/dtmf (wir werden diese Route in Kürze definieren.) Schließlich verwandeln wir diese Aktionen in eine NCCO und senden das JSON dieser Aktion an Vonage zurück.

[Route("/webhooks/answer")]
[HttpGet]
public ActionResult Answer()
{
    var responseUrl = $"{Request.Scheme}://{Request.Host}/webhooks/dtmf";
    var talkAction = new TalkAction
    {
        Text = "Hello please enter a digit.",
        BargeIn = "true"
    };
    var inputAction = new MultiInputAction
    {
        Dtmf = new DtmfSettings { MaxDigits = 1 },
        EventUrl = new[] { responseUrl },
        EventMethod = "POST"
    };
    var ncco = new Ncco(talkAction, inputAction);
    return Ok(ncco.ToString());
}

Handhabung der DTMF-Eingabe

Wenn der Benutzer eine Ziffer auf seinem Mobiltelefon eingibt, erhält unsere App einen weiteren Webhook von Vonage, der die vom Benutzer eingegebenen Ziffern enthält. Wir ziehen die MultiInput Struktur aus der Anfrage. Wir verwenden dann die Ziffern, die in das Dtmf Objekt eingebetteten Ziffern innerhalb dieser Struktur, um eine neue Gesprächsaktion zu erstellen, die dem Benutzer mitteilt, was die Eingabe war.

[Route("/webhooks/dtmf")]
[HttpPost]
public async Task<ActionResult> Dtmf()
{
    var input = await WebhookParser.ParseWebhookAsync<MultiInput>
        (Request.Body, Request.ContentType);
    var talkAction = new TalkAction
    {
        Text = $"Thank you for inputting: {input.Dtmf.Digits}"
    };
    var ncco = new Ncco(talkAction);
    return Ok(ncco.ToString());
}

Testen Sie die App

Jetzt müssen Sie die Anwendung nur noch testen. Verwenden Sie den folgenden Befehl, um die Anwendung auszuführen:

dotnet run

HINWEIS: Wenn Sie sich für IIS Express entscheiden, lesen Sie unbedingt unseren Artikel über Verwendung von IIS Express mit ngrok. Stellen Sie sicher, dass Sie in Ihrer Antwortmethode den x-original-host zur Bildung des Hostnamens verwenden und nicht den Request Host.

Jetzt, wo unsere Anwendung läuft, können Sie sich in Ihre Vonage-Nummer einwählen, und voilà! Sie können DTMF-Eingaben von Ihrem Benutzer empfangen.

Was kommt als Nächstes?

Durch die Möglichkeit, DTMF-Eingaben Ihrer Benutzer zu verwalten und über die PSTN-Leitung zu beantworten, können Sie alle Arten von leistungsstarken Integrationen mit Voice aufbauen. Sehen Sie sich unseren Leitfaden für interaktive Voice Response (IVR).

Sie können sich auch einige andere coole Voice-Integrationen ansehen, über die ich mit Voice und .NET gesprochen habe, darunter:

Ressourcen

  • Eine Kopie des Projekts, das in diesem Blogbeitrag vorgestellt wird, finden Sie auf 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