
Teilen Sie:
Ehemaliger Ausbilder für Entwickler @Vonage. Kommt von einem PHP-Hintergrund, ist aber nicht auf eine Sprache beschränkt. Ein begeisterter Gamer und Raspberry-Pi-Enthusiast. Oft beim Bouldern in Kletterhallen anzutreffen.
Eingehende Anrufe mit Go bearbeiten
Lesedauer: 7 Minuten
In diesem Tutorial lernen wir, wie man eingehende Telefonanrufe mit einem JSON-Array von Aktionen namens Call Control Objects (NCCOs) behandelt. Dieses Tutorial verwendet Go und die Voice API.
Wir werden einen Server schreiben, der auf die Webhook-Endpunkte reagiert, die Vonage sendet, wenn ein Anruf eingeht oder ein Ereignis ausgelöst wird. Anschließend erstellen wir eine Vonage-Anwendung mit Voice-Funktionen, um eingehende Sprachanrufe an ihr Ziel zu leiten.
Sie finden den in diesem Tutorial gezeigten Code in der Go-Code-Snippets-Repository.
Voraussetzungen
Eine Rufnummer
Ein Vonage Account
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.
Den Code schreiben
Wenn Vonage einen Voice-Anruf an Ihre virtuelle Nummer erhält, prüft es, ob Sie einen Webhook für die Weiterleitung des Voice-Anrufs konfiguriert haben. Diese Konfiguration ist spezifisch für Ihre Anwendung, die Sie zuvor erstellt und konfiguriert haben. Sie haben auch einen Ereignis-Webhook konfiguriert, der alle Ereignisse in Ihrem Terminal ausgibt, z. B. ob der Anruf "geklingelt" oder "angenommen" wurde.
Lassen Sie uns den Code schreiben, der alle Anfragen an diese beiden Webhooks bearbeitet. Erstellen Sie eine Datei namens receive-an-inbound-call.go und kopieren Sie den folgenden Code in diese Datei:
package main
import (
"encoding/json"
"fmt"
"net/http"
"github.com/vonage/vonage-go-sdk/ncco"
)
func answer(w http.ResponseWriter, req *http.Request) {
paramKeys, _ := req.URL.Query()["from"]
MyNcco := ncco.Ncco{}
talk := ncco.TalkAction{Text: "Thank you for calling " + string(paramKeys[0])}
MyNcco.AddAction(talk)
data, _ := json.Marshal(MyNcco)
w.Header().Set("Content-Type", "application/json")
w.Write(data)
}
func event(w http.ResponseWriter, req *http.Request) {
paramKeys, _ := req.URL.Query()["status"]
fmt.Println("Event status: " + paramKeys[0])
}
func main() {
http.HandleFunc("/webhooks/answer", answer)
http.HandleFunc("/webhooks/event", event)
http.ListenAndServe(":8080", nil)
}Der obige Code enthält drei Funktionen. Die erste Funktion ist "answer", die die Nummer, von der der Anruf kommt, abruft und eine Talk Ncco Action mit der Zeichenfolge "Thank you for calling" zusammen mit der Telefonnummer des Anrufers erstellt. Sie gibt dann diese Ncco-Aktion als Antwort zurück.
Die zweite Funktion ist ein Handler für alle Ereignisaktualisierungen. In diesem Tutorial wird der Code jedes Mal, wenn der Ereignis-Webhook ausgelöst wird, den Status des Ereignisses in Ihrem Terminal ausgeben.
Die dritte Funktion ist die "main"-Funktion, die eine /webhooks/answer, und eine /webhooks/event Webhook-URLs, um die entsprechende Funktion für die Anfrage auszuführen. Der letzte Teil dieses Codes macht den Code zu einem Webserver, indem er den Port 8080 abhört.
Um Ihre Anwendung zu testen, führen Sie den folgenden Befehl aus:
go run receive-an-inbound-call.goGehen Sie nun in Ihrem Browser auf "http://localhost:8080/webhooks/answer". Sie werden mit Ihrem JSON-Array begrüßt, das Ihr NCCO ist, wie unten gezeigt:
[{"action":"talk","text":"Thank you for calling 447000000","bargeIn":false,"loop":1}]Die im obigen Beispiel gezeigte NCCO enthält vier Felder des Arrays, die im Folgenden näher beschrieben werden:
"action":"talk"bestimmt, um welche Art von Aktion es sich bei diesem NCCO handelt. Es weist Vonage an, dass es sich um eine sprechende Aktion handelt"text":"Thank you for calling 447000000"weist Vonage an, den Textkörper im Sprachanruf zu sprechen"bargeIn":falseweist Vonage an, dass der Benutzer das Gespräch nicht unterbrechen kann, bevor es beendet ist"loop":1weist Vonage an, den Text nur einmal zu sprechen
Stellen Sie das Projekt ins Internet
Wenn der Anruf eingeht, sendet Vonage eine HTTP-Anfrage an die Webhook-URL, die für die Nummer konfiguriert ist. Diese Anwendung sollte also für das Internet zugänglich sein, weshalb wir empfehlen Ngrok.
Starten Sie Ngrok mit dem folgenden Befehl:
Kopieren Sie die https-URL, die ngrok verwendet, da Sie diese später benötigen. Sie wird ähnlich wie im folgenden Beispiel sein:
Hinweis Diese URL ist jedes Mal anders, wenn Sie den Befehl ausführen, wenn Sie den kostenlosen Plan verwenden. Daher müssen Sie Ihre Anwendung im Dashboard jedes Mal aktualisieren, wenn Sie den Befehl ausführen.
Konfigurieren Sie die Einstellungen
Erstellen Sie eine Applikation in Ihrem Dashboard unter "Ihre Applications". Geben Sie Ihrer neuen Anwendung einen Namen und wählen Sie dann "Öffentlichen und privaten Schlüssel generieren". Dadurch wird die Datei "private.key" für Sie heruntergeladen, die Sie dann neben den Code verschieben sollten, den Sie gerade erstellen.
Fügen Sie der Anwendung Voice-Funktionen hinzu und konfigurieren Sie die URLs mit der Ngrok-URL, die Sie zuvor kopiert haben. Verwenden Sie für die Antwort-URL [paste ngrok url]/webhooks/answer und für die Ereignis-URL [paste ngrok url]/webhooks/event.
Sie haben eine virtuelle Vonage-Nummer erworben, eine Vonage-Anwendung erstellt und den Code für die Webhook-Ereignisse geschrieben. Jetzt ist es an der Zeit, Ihr Projekt zu testen!
Zeit zum Testen
Wir haben unsere Vonage-Anwendung und Telefonnummer so konfiguriert, dass wir wissen, wie eingehende Voice-Anrufe zu behandeln sind. Wir haben auch einen Webhook in receive-an-inbound-call.go geschrieben, um alle eingehenden Anrufanfragen zu bearbeiten. Nun ist es an der Zeit, diese Anwendung zu testen. Wenn Sie den unten stehenden Befehl ausführen, wird ein Webserver mit diesem Webhook gestartet, der auf die Anfrage wartet. Führen Sie also den unten stehenden Befehl aus, um unsere neue Anwendung zu testen:
Wenn Sie Ihre virtuelle Nummer anrufen, hören Sie die Worte "Vielen Dank für Ihren Anruf", gefolgt von Ihrer Rufnummer.
Sie haben nun eine Vonage-Anwendung erstellt, eine virtuelle Telefonnummer gemietet und einen Code geschrieben, der Webhook-Anrufe an diese neue Nummer verarbeitet. Wenn Sie die Nummer anrufen, fügt Ihr Code nun dem Anruf eine Text-To-Speech-Nachricht hinzu, die Sie hören können.
Weitere Lektüre
Sie finden den in diesem Tutorial gezeigten Code in der Go-Code-Snippets-Repository.
Im Folgenden finden Sie einige weitere Tutorials, die wir für die Nutzung unserer Dienste mit Go geschrieben haben:
Wenn Sie Fragen, Ratschläge oder Ideen haben, die Sie mit der Community teilen möchten, dann können Sie sich gerne an unseren Slack-Arbeitsbereich der Gemeinschaft. Ich würde mich freuen, von allen zu hören, die dieses Tutorial implementiert haben und wie Ihr Projekt funktioniert.
