https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-build-a-voicemail-with-asp-net-core-and-nancyfx-dr/csharp-voicemail.png

Wie man eine Voicemail mit ASP.NET Core und NancyFX erstellt

Zuletzt aktualisiert am April 28, 2021

Lesedauer: 3 Minuten

Haben Sie sich jemals gefragt, ob Meg Ryan lieber der Stimme von Tom Hanks lauschen würde, anstatt einfach nur Nachrichten zu lesen?

Meiner Meinung nach klingt "Call me Maybe" spannender als "You've got mail".

Wenn Sie also, wie ich, jemandem - vielleicht Ihren Kunden - eine Telefonnummer zur Verfügung stellen möchten, unter der sie Ihnen eine Nachricht hinterlassen können, erstellen Sie Ihre eigene Voicemail, die von Nexmo Voice APIs.

Lernziele

In diesem Lernprogramm werden wir:

  • Erstellen Sie eine ASP.NET Core-Anwendung.

  • Verwenden Sie NancyFX mit ASP.NET Core.

  • Erstellen Sie eine Nexmo-Sprachapplikation.

  • Erstellung und Rückgabe von NCCOs.

  • Führen Sie den Code mit Ngrok aus und testen Sie ihn.

Voraussetzungen

  • Visual Studio 2017 oder höher.

  • Ein Projekt-Setup für dieses Tutorial, das Sie auf Github.

  • Optional: Die Nexmo CLI. <sign-up></sign-up>

Konfiguration

Zur Verwendung Die Nexmo Voice APIzu nutzen, müssen wir eine eine Voice-Anwendung.

Die Konfigurationsschritte sind detailliert in der Nexmo Voice API mit ASP.NET beschrieben: Bevor Sie beginnen Beitrag.

Sobald die Konfiguration erfolgreich abgeschlossen ist, können wir eine Voicemail erstellen.

Erstellen einer Voicemail

Ähnlich wie in den vorherigen Blog-Beiträgen dieser Serie werden wir NancyFX zusammen mit unserem ASP.NET Core-Projekt verwenden.

Zunächst einmal müssen wir Nancy zu unserem Projekt hinzufügen:

PM> Install-Package Nancy
PM> Install-Package Microsoft.AspNetCore.Owin

Damit Nancy alle HTTP-Anfragen bearbeiten kann, müssen wir ASP.NET Core mitteilen, dass Nancy über Owin in der Configure Methode von Startup.cs.

using Microsoft.AspNetCore.Builder;
using Nancy.Owin;

namespace NexmoVoiceASPNetCoreQuickStarts
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.UseOwin(x => x.UseNancy());
        }
    }
}

Der nächste Schritt besteht darin, ein Nancy-Modul zu erstellen, in dem wir eine Route zu /webhook/answer einrichten, die mit dem ncco zurückgegeben von GetVoiceMailNCCO(). Für weitere Details darüber, wie genau man ein ncco zu schreiben, schauen Sie sich die NCCO-Referenz in unserer Dokumentation.

using Nancy;
using Newtonsoft.Json.Linq;

namespace NexmoVoiceASPNetCoreQuickStarts
{
    public class VoiceModule : NancyModule
    {
        public VoiceModule()
        {
            Get["/webhook/answer/"] = x => { var response = (Response)GetVoiceMailNCCO();
                                             response.ContentType = "application/json";
                                             return response;
                                           };
        }

        private string GetVoiceMailNCCO()
        {
            dynamic TalkNCCO = new JObject();
            TalkNCCO.action = "talk";
            TalkNCCO.text = "Hello. You have reached Bibi. Please, leave your message after the beep.";
            TalkNCCO.voiceName = "Emma";

            dynamic RecordNCCO = new JObject();
            RecordNCCO.action = "record";
            RecordNCCO.beepStart = true;
            RecordNCCO.eventUrl = "https://example.com/recording";
            RecordNCCO.endOnSilence = 3;


            JArray nccoObj = new JArray
            {
                TalkNCCO,
                RecordNCCO
            };

            return nccoObj.ToString();
        }
    }
}

Der obige Code begrüßt den Anrufer und weist ihn an, wann er seine Nachricht beginnen soll.

Sobald die Nachricht aufgezeichnet ist, wird Nexmo eine Anfrage an die URL in der 'record' Aktion stellen, die derzeit 'https://example.com/recording' ist.

Lassen Sie uns das beheben, indem wir die Informationen über die Aufzeichnung an eine andere Route senden /webhook/voicemail

public VoiceMailModule()
        {
            Get["/webhook/answer/"] = x => { var response = (Response)GetVoiceMailNCCO();
                                             response.ContentType = "application/json";
                                             return response;
                                           };
            Post["/webhook/voicemail/"] = x => { var response = (Response)GetRecording(Request.Query["recording_url"]);
                                                 response.ContentType = "application/json";
                                                 return response;
                                               };
            Post["/webhook/event"] = x => Request.Query["status"];
        }

private Response GetRecording(string url)
        {
            var client = new Client(creds: new Nexmo.Api.Request.Credentials
            {
                ApiKey = "NEXMO_API_KEY",
                ApiSecret = "NEXMO_API_SECRET",
                ApplicationId = "NEXMO_APPLICATION_ID",
                ApplicationKey = "NEXMO_APPLICATION_PRIVATE_KEY"
            });

            var result = client.getRecording(url);
            string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            string localFilename = "downloaded.mp3";
            string localPath = Path.Combine(documentsPath, localFilename);
            File.WriteAllBytes(localPath, result);
        }

Um den Code testen zu können, sind noch einige Konfigurationsschritte erforderlich.

Wenn Sie bisher mitgemacht haben, haben Sie Ihren Nexmo Account bereits konfiguriert und eine Voice App erstellt, wie in diesem Beitrag. Wir müssen diese App mit einer Nexmo-Telefonnummer verknüpfen, die wir anrufen wollen. Wenn du noch keine Nummer hast, kannst du eine kaufen über das Dashboard oder über die CLI erwerben:

nexmo number:buy --country_code US

Um die Nummer ähnlich zu verknüpfen, können Sie über das Dashboard oder die CLI verwenden:

nexmo link:app NEXMO_PHONE_NUMBER NEXMO_APP_ID

Wir müssen Nexmo mitteilen, an welche URL eine Anfrage gestellt werden soll, wenn ein Anruf eingeht - dies wird die answer_url. Für mich lautet diese URL http://localhost:63286/webhook/answer und die wird nur lokal ausgeführt.

Um unsere Webhook-Antwort-Url freizulegen, werden wir verwenden Ngrok.

ngrok http 63286

Wir haben jetzt eine neue Url (meine ist http://<SUBDOMAIN>.ngrok.io), die als die answer_url für die Voice-Anwendung verwendet werden kann.

Aktualisieren Sie Ihre Bewerbung mit Ihrer neuen answer_url. Sie sollte wie folgt aussehen http://[id].ngrok.io/webhook/answer Jetzt können Sie die Anwendung ausführen.

Mehr erfahren

API-Referenzen und Tools

Nexmo Einführungshandbücher für ASP.NET

Teilen Sie:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Rabeb OthmaniVonage Ehemalige

Rabeb war Developer Advocate bei Nexmo, wo sie sich auf Cloud-Kommunikations-APIs konzentrierte und Entwicklern half, die bestmögliche Erfahrung bei der Entwicklung ihrer Apps zu machen. Rabeb schreibt nicht nur Code für ihren Lebensunterhalt, sondern setzt sich auch dafür ein, mehr Frauen und Minderheiten in die Technologiebranche zu bringen, und engagiert sich daher bei Women Who Code und verschiedenen Tech-Communities. Sie leitet das Women Who Code Network in Bristol.