https://d226lax1qjow5r.cloudfront.net/blog/blogposts/receive-call-swift-dr/receive-call-swift.jpg

Telefonanrufe mit Voice API und Swift entgegennehmen

Zuletzt aktualisiert am May 12, 2021

Lesedauer: 11 Minuten

In diesem Tutorial werden Sie eine Swift-Anwendung erstellen, die Telefonanrufe mit dem Vapor Web-Framework und der Nexmo Sprach-API. Sie können dieses Tutorial sowohl unter MacOS als auch unter Ubuntu durchführen.

Die vollständige Lösung finden Sie in diesem Github-Repositorium.

Voraussetzungen

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.

  • Die Nexmo CLI - verwenden Sie, um eine Anwendung zu erstellen, eine Nummer zu kaufen und beides miteinander zu verbinden

  • Swift 4.1 oder höher - unter MacOS ist Xcode 9.3 oder höher ausreichend

Der Plan

In dieser Anleitung werden Sie durch die folgenden Schritte geführt:

  • Erfahren Sie mehr über Nexmo-Konzepte

  • Erstellen Sie ein neues Vapor-Projekt

  • Hinzufügen einer Route für die Sprachansage

  • Die Anwendung mit ngrok freilegen

  • Kaufen Sie eine Nexmo-Nummer

  • Erstellen Sie eine Nexmo-Anwendung zur Verwendung mit der Nummer

  • Testen Sie Ihre Anwendung

Nexmo-Konzepte

Bevor Sie sich mit dem Aufbau befassen, sollten Sie einige Konzepte verstehen.

A Nexmo-Anwendung ermöglicht Ihnen die einfache Nutzung von Nexmo-Produkten, in diesem Fall der Sprach-API um Sprachanwendungen in der Cloud zu erstellen.

Eine Nexmo-Anwendung benötigt zwei URLs als Parameter:

  • answer_url - Nexmo wird eine Anfrage an diese URL stellen, sobald der Anruf entgegengenommen wird

  • event_url - Nexmo sendet asynchron Ereignisinformationen an diese URL, wenn sich der Anrufstatus ändert; dies definiert letztendlich den Ablauf des Anrufs

Beide URLs müssen JSON zurückgeben und dem Nexmo Call Control Object (NCCO) Referenz. Im folgenden Beispiel wird ein NCCO definiert, das einen vordefinierten Text für einen eingehenden Anruf vorliest, wobei die Text to Speech Engine.

A virtuelle Nexmo-Nummer wird mit der Anwendung verknüpft und dient als "Einstiegspunkt" - dies ist die Nummer, die Sie anrufen, um die Anwendung zu testen.

Für weitere Informationen zur Nexmo-Anwendung besuchen Sie bitte die Nexmo API-Referenz.

Neues Projekt Vapor

Sie werden Vapor verwenden, um eine einfache Swift-Webanwendung zu erstellen. Wenn Sie Vapor noch nicht installiert haben, können Sie dies mit diesem Befehl nachholen:

brew install vapor/tap/vapor

Ausführliche Installationsanweisungen sind verfügbar für MacOS und Ubuntu.

Navigieren Sie von der Kommandozeile aus zu einem geeigneten Ort, an dem Ihr Projekt gespeichert werden soll (z.B. Ihr Dokumentenverzeichnis) und erstellen Sie eine neue Vapor-App:

vapor new ReceiveCall cd ReceiveCall/

Wenn Sie MacOS verwenden, können Sie vapor automatisch ein XCode-Projekt für Sie erstellen (die Option -y Option öffnet automatisch das Xcode-Projekt):

vapor xcode -y

Build & Run, um Ihre Anwendung zu testen und sicherzustellen, dass das Run Schema ausgewählt ist. Sobald alles kompiliert ist, wird der Server gestartet und Sie erhalten einen Hinweis in der Konsole:

Server starting on http://localhost:8080

Rufen Sie diese URL in Ihrem Browser auf und eine It works! Meldung sollte erscheinen.

Hinzufügen der Route

Sie fügen nun eine Route hinzu, die als answer_url für die Nexmo-Anwendung. http://localhost:8080/webhooks/answer wird mit dem folgenden JSON-Objekt antworten:

[
    {
        "action":"talk",
        "text":"<speak>To be <break strength='weak' \/> or not to be <break strength='weak' \/> that is the question.<\/speak>"
    }
]

Ein Vapor-Projekt speichert seine Routen in der Datei routes.swift Datei innerhalb der Sources/App Gruppe. Öffnen Sie diese Datei, löschen Sie alle bestehenden Routen und definieren Sie die neue Route:

import Vapor

public func routes(_ router: Router) throws {
    router.get("/webhooks/answer") { request -> String in
        let talk = Action(
            action: "talk",
            text: "<speak>To be <break strength='weak' /> or not to be <break strength='weak' /> that is the question.</speak>")
        let encoder = JSONEncoder()
        guard let data = try? encoder.encode([talk]) else { return "error encoding" }
        return String(data: data, encoding: .utf8) ?? "error"
    }
}

Action ist eine einfache Swift-Struktur zur Aufnahme der NCCO-Aktionsdetails - definieren Sie diese nach dem Schließen des Routers:

struct Action: Encodable {
    var action: String
    var text: String
}

Durch Kodierung Action so, dass es mit Encodablestellen Sie sicher, dass die JSONEncoder es verwenden kann.

Erstellen und starten Sie die App und testen Sie die neue Routenausgabe unter: http://localhost:8080/webhooks/answer.

Sie haben nun eine URL, die als die answer_url.

Stellen Sie Ihre Anwendung vor

Damit Nexmo Ihre Vapor-Anwendung erreichen kann, muss es auf eine öffentlich verfügbare URL zugreifen - Ihre Anwendung läuft auf Ihrem Rechner und ist nur innerhalb Ihres lokalen Netzwerks zugänglich.

ngrok ist ein einfaches Dienstprogramm, das Ihren lokalen Webserver über öffentliche URLs offenlegt.

Mit ngrok installiertführen Sie den folgenden Befehl aus:

ngrok http 8080

Notieren Sie sich die Weiterleitungsadresse, da Sie diese bei der Konfiguration Ihres Kontos benötigen - eine Beispielausgabe ist unten abgebildet - die Weiterleitungsadresse lautet https://7ffc0230.ngrok.io.

ngrok running in terminal with forwarding address https://7ffc0230.ngrok.iongrok running in terminal with forwarding address https://7ffc0230.ngrok.io

Kaufen Sie eine Nummer

Dies ist die Nummer, die Sie anrufen werden, um eine Verbindung zu Ihrer Nexmo-Anwendung herzustellen. Das folgende Beispiel verwendet eine US-Nummer, aber Nummern für andere Länder sind verfügbar.

Hinweis: Bei der Anmeldung für ein Nexmo-Konto werden 2,00 € auf Ihr Guthaben gutgeschrieben, und das ist mehr als genug, um eine Nummer zu erhalten.

Um eine neue Nummer zu erwerben, verwenden Sie die Nexmo CLI:

nexmo number:buy --country_code US

Notieren Sie sich die neue Nummer, die Ihnen beim Kauf zugewiesen wurde; Sie benötigen diese als nächstes.

Eine Nexmo-Anwendung erstellen

Sie werden nun alles zusammenfügen, indem Sie eine neue Nexmo-Anwendung unter Verwendung der ngrok-Weiterleitungsadresse:

nexmo app:create "Receive Call Demo" http://your-ngrok-forwarding-address/webhooks/answer http://your-ngrok-forwarding-address/webhooks/events --keyfile private.key

Hinweis: Der zweite URL-Parameter, http://your-ngrok-forwarding-address/webhooks/events, existiert nicht und wird auch nie verwendet, aber eine Ereignis-URL muss bei der Erstellung einer Nexmo-Anwendung angegeben werden.

Die Ausgabe des obigen Befehls enthält die ID der neuen Anwendung (z. B.: Application created: 39083ced-5275-423d-8a1f-9db528c106b1). Sie benötigen diese Anwendungs-ID, um Ihre Telefonnummer mit der Anwendung zu verknüpfen - Sie können dazu die Nexmo CLI verwenden:

nexmo link:app your-nexmo-phone-number your-application-id

Die Anwendung sendet nun eine Anfrage an Ihre http://your-ngrok-forwarding-address/webhooks/answer URL, wenn sie einen Telefonanruf erhält.

Testen Sie Ihre Anwendung

Rufen Sie von Ihrem Telefon aus Ihre Nexmo-Nummer an, um die wichtigste Frage von allen zu hören.

Schlussfolgerung

In wenigen Zeilen Code haben Sie eine Anwendung erstellt, die einen Telefonanruf entgegennehmen und dem Anrufer eine Nachricht vorlesen kann. Es gibt andere Möglichkeiten zur Interaktion mit dem Anrufer und andere Speech Synthesis Markup Language(SSML) Tags, die Sie verwenden können.

Wie geht es weiter?

Möchten Sie mehr erfahren? Sehen Sie sich unsere Dokumentation auf Nexmo Entwickler wo Sie etwas über den Anrufablauf, Sprach-API und Nexmo Anrufkontroll-Objekte.

Share:

https://a.storyblok.com/f/270183/384x384/f90e9d7feb/paul-ardeleanu.png
Paul ArdeleanuSenior Manager, Beziehungen zu Entwicklern

Paul ist iOS Developer Advocate bei Nexmo. Als erfahrener Software-Ingenieur, Trainer und Redner hat er sich auf datengesteuerte Lösungen auf Apple-Plattformen spezialisiert, mit Schwerpunkt auf Prototyping, Best Practices und Balance mit Agilität.