
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.
Abspielen einer Audiodatei in einem Voice-Anruf mit Go
Lesedauer: 8 Minuten
In früheren Tutorials haben wir gelernt, wie man machen und empfangen Voice-Anrufe mit Go.
Dieses Tutorial führt Sie durch den Prozess des Empfangens eines Voice-Anrufs und des anschließenden Abspielens einer Audiodatei in den Anruf, wobei Go und die Voice API.
Wir werden einen Server schreiben, der auf die Webhook-Endpunkte antwortet, die Vonage bei eingehenden Anrufen sendet. Anschließend erstellen wir eine Vonage-Anwendung mit Voice-Funktionen, um eingehende Sprachanrufe an ihr Ziel zu leiten. Schließlich werden wir die API anweisen, die Audiodatei in den aktiven Anruf zu streamen.
Voraussetzungen
Um diesem Tutorial folgen zu können, benötigen Sie Folgendes:
Eine Rufnummer
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 im weiteren Verlauf des Tutorials erstellen und konfigurieren werden.
Schreiben wir den Code, der alle Anfragen an diesen Webhook bearbeiten wird. Erstellen Sie eine Datei namens play-an-audio-stream-into-a-call.go und kopieren Sie das Folgende in diese Datei:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
"github.com/joho/godotenv"
"github.com/vonage/vonage-go-sdk"
"github.com/vonage/vonage-go-sdk/ncco"
)
func answer(w http.ResponseWriter, req *http.Request) {
uuid, _ := req.URL.Query()["uuid"]
from, _ := req.URL.Query()["from"]
MyNcco := ncco.Ncco{}
talk := ncco.TalkAction{Text: "Thank you for calling."}
MyNcco.AddAction(talk)
conversation := ncco.ConversationAction{Name: from[0], StartOnEnter: "false"}
MyNcco.AddAction(conversation)
fmt.Println("uuid is :" + uuid[0])
data, _ := json.Marshal(MyNcco)
w.Header().Set("Content-Type", "application/json")
w.Write(data)
}
func main() {
http.HandleFunc("/webhooks/answer", answer)
http.ListenAndServe(":3000", nil)
}Zunächst haben wir eine neue Go-Anwendung mit einer einzigen Webhook-URL erstellt, /webhooks/answerum alle eingehenden Anrufe zu bearbeiten. Die Anwendung läuft auch als Server über die Zeile http.ListenAndServe(":3000", nil)um sicherzustellen, dass sie läuft, bis Sie den Server stoppen möchten.
Die Funktion answer Funktion erzeugt zwei Anrufsteuerungsobjekte (NCCOs). Das erste ist TalkActiondas eine vorgegebene Zeichenkette an die Person am Telefon weiterleitet. Das zweite fügt den Gesprächsteilnehmer zu einer Telefonkonferenz hinzu, die die Leitung aufrechterhält und es uns ermöglicht, einen Audiostrom in den Anruf zu übertragen.
Als nächstes müssen wir die Funktion zum Abspielen einer Audiodatei in den aktiven Anruf einfügen. Dies geschieht über eine URL, die als /play-audio. Also oben func main() { den folgenden Code ein:
func playAudio(w http.ResponseWriter, req *http.Request) {
godotenv.Load("../.env")
uuid, _ := req.URL.Query()["uuid"]
privateKey, _ := ioutil.ReadFile(os.Getenv("VONAGE_APPLICATION_PRIVATE_KEY_PATH"))
auth, _ := vonage.CreateAuthFromAppPrivateKey(os.Getenv("VONAGE_APPLICATION_ID"), privateKey)
client := vonage.NewVoiceClient(auth)
result, _, _ := client.PlayAudioStream(uuid[0],
"https://nexmo-community.github.io/ncco-examples/assets/voice_api_audio_streaming.mp3",
vonage.PlayAudioOpts{},
)
// or to stop the audio
// result, _, _:= client.StopAudioStream(os.Getenv(uuid[0]))
fmt.Println("Update message: " + result.Message)
}und darunter: http.HandleFunc("/webhooks/answer", answer) fügen Sie das Folgende hinzu:
http.HandleFunc("/play-audio", playAudio)Wir haben nun einen Webhook erstellt, der die Annahme eines an Ihre virtuelle Vonage-Nummer eingehenden Anrufs ermöglicht. Sobald der Anruf angenommen wurde, sehen Sie in Ihrem Terminal den Anruf uuidund eine spezifische ID für diesen Voice-Anruf. Bevor Sie testen können, müssen Sie Ihr Projekt dem Internet aussetzen und Ihren Account im Dashboard konfigurieren. Lassen Sie uns nun das Projekt für das Internet freigeben.
Stellen Sie das Projekt ins Internet
Wenn ein Anruf eingeht, sendet Vonage eine HTTP-Anfrage an Ihre vorkonfigurierte Webhook-URL. Ihre Go-Anwendung sollte über einen Internetzugang verfügen, um diese Anfrage zu empfangen, daher empfehlen wir Ngrok zu verwenden.
Starten Sie Ngrok mit dem folgenden Befehl:
Kopieren Sie die HTTPS-URL, die ngrok verwendet, da Sie diese später benötigen werden. 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. Sie müssen also 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 Applikation einen Namen und wählen Sie dann "Öffentlichen und privaten Schlüssel generieren". private.key Datei für Sie herunter. Verschieben Sie diese Datei neben den Code, den Sie erstellt haben.
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.
Klicken Sie nun auf die Schaltfläche Link neben Ihrer kürzlich erworbenen virtuellen Vonage-Nummer, um Ihre neue Anwendung mit der Rufnummer zu verknüpfen.
Erstellen Sie mit all den neuen Informationen, die Sie gesammelt haben, eine .env Datei in Ihrem Projektverzeichnis und fügen Sie die folgenden Variablen hinzu:
Aktualisieren Sie die obigen Variablen, damit sie die richtigen Werte haben. Zum Beispiel muss die erste Variable den Wert private.key und die zweite muss Ihre application ID auf der Seite Developer Dashboard aufgeführt sein, als Sie Ihre Anwendung erstellt haben.
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 play-an-audio-stream-into-a-call.go geschrieben, um alle eingehenden Anrufanfragen zu bearbeiten. Schließlich haben wir einen weiteren Endpunkt hinzugefügt, der manuell ausgelöst wird, um die Audiodatei für den angegebenen Anruf abzuspielen.
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 folgenden Befehl aus, um mit dem Testen unserer neuen Anwendung zu beginnen:
Wenn Sie Ihre virtuelle Nummer anrufen, hören Sie die Worte "Danke für Ihren Anruf". Es hat den Anschein, als ob nichts weiter passiert, außer dass der Anruf fortgesetzt wird.
Öffnen Sie nun Ihren Browser und geben Sie ein: http://localhost:3000/play-audio?uuid=[paste your uuid here] Ersetzen Sie Ihre [paste your uuid here] durch die uuid Ausgabe in Ihrem Terminal, als Sie den Anruf getätigt haben. Wenn Sie diese URL eingeben, hören Sie den Audiostream, der in Ihrem Anruf abgespielt wird. Wenn Sie fertig sind, beenden Sie das Gespräch.
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 eine Text-To-Speech-Nachricht in den Anruf ein, die Sie anhören können. Sie lösen dann das Ereignis aus, um die Audiodatei im Anruf abzuspielen und sie auf Ihrem Telefon anzuhören!
Weitere Lektüre
Sie finden den in diesem Tutorial gezeigten Code in der Go-Code-Snippets-Repository.
Im Folgenden finden Sie einige andere Tutorials, die wir über die Verwendung unserer Dienste mit Go geschrieben haben:
Wenn Sie Fragen, Ratschläge oder Ideen haben, die Sie mit der Community teilen möchten, können Sie sich gerne in unserem Slack-Arbeitsbereich der Gemeinschaft. Ich würde mich freuen, von allen zu hören, die dieses Tutorial implementiert haben und wie Ihr Projekt funktioniert.
