
Share:
)
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.
Telefonanrufe mit Voice API und Swift entgegennehmen
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 wirdevent_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:
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:
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):
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 Encodable
stellen 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:
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.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:
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:
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:
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:
)
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.