
Partager:
Ancien développeur éducateur @Vonage. Issu d'une formation PHP, mais pas limité à un seul langage. Joueur passionné et adepte du Raspberry pi. On le trouve souvent en train de faire du bloc dans des salles d'escalade.
Jouer un fichier audio dans un appel Voice avec Go
Temps de lecture : 9 minutes
Dans les tutoriels précédents, nous avons appris à fabriquer et recevoir des appels vocaux avec Voice.
Ce tutoriel vous guidera dans le processus de réception d'un appel vocal et de lecture d'un fichier audio dans l'appel, à l'aide de Go et de l'API Voice API.
Nous écrirons un serveur qui répondra aux points de terminaison webhook que Vonage envoie lorsqu'un appel arrive. Nous créerons ensuite une application Vonage dotée de capacités vocales, afin d'acheminer les appels vocaux entrants vers leur destination. Enfin, nous demanderons à l'API de diffuser le fichier audio dans l'appel actif.
Conditions préalables
Pour suivre ce tutoriel, vous avez besoin des éléments suivants :
Un numéro de téléphone
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.
Écrire le code
Lorsque Vonage reçoit un appel vocal vers votre numéro virtuel, il vérifie si vous avez configuré un webhook pour acheminer l'appel vocal. Cette configuration est spécifique à votre application, que vous créerez et configurerez plus loin dans le tutoriel.
Écrivons le code qui gérera toutes les demandes adressées à ce webhook. Créez un fichier appelé play-an-audio-stream-into-a-call.go et copier ce qui suit dans ce fichier :
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)
}Tout d'abord, nous avons créé une nouvelle application Go avec une seule URL de webhook, /webhooks/answerpour gérer les appels entrants. L'application s'exécute également en tant que serveur via la ligne http.ListenAndServe(":3000", nil)pour s'assurer qu'elle fonctionne jusqu'à ce que vous souhaitiez arrêter le serveur.
La fonction answer crée deux objets de contrôle d'appel (NCCO). Le premier est TalkActionqui transmet une chaîne de caractères prédéterminée à la personne au téléphone. Le second ajoute le segment d'appel à une conférence téléphonique, ce qui maintient la ligne et nous permet de passer un flux audio dans l'appel.
Ensuite, nous devons ajouter la fonctionnalité de lecture d'un fichier audio dans l'appel actif. Cette fonction sera assurée par une URL définie comme suit /play-audio. Ainsi, au-dessus de func main() { ajoutez le code suivant :
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)
}et ci-dessous : http.HandleFunc("/webhooks/answer", answer) ajouter ce qui suit :
http.HandleFunc("/play-audio", playAudio)Nous avons maintenant créé un webhook pour répondre à un appel entrant sur votre numéro virtuel Vonage. Une fois que vous aurez répondu à l'appel, vous verrez dans votre terminal l'appel uuid, un identifiant spécifique pour cet appel vocal. Avant de tester, vous devez exposer votre projet à Internet et configurer votre Account dans le Dashboard. Passons donc à l'exposition du projet à l'internet.
Exposer le projet à l'Internet
Lorsqu'un appel téléphonique arrive, Vonage envoie une requête HTTP à l'URL de votre webhook préconfiguré. Votre application Go doit être accessible à l'internet pour la recevoir, c'est pourquoi nous vous recommandons d'utiliser Ngrok.
Lancez Ngrok avec la commande suivante :
Copiez l'URL HTTPS que ngrok utilise, car vous en aurez besoin plus tard. Elle sera similaire à l'exemple ci-dessous :
Remarque Cette URL sera différente à chaque fois que vous exécuterez la commande si vous utilisez le plan gratuit. Vous devrez donc mettre à jour votre application dans le Tableau de bord à chaque fois que vous exécutez la commande.
Configurer les paramètres
Créez une application dans votre tableau de bord sous "Vos Applications". Donnez un nom à votre nouvelle application et sélectionnez "Generate public and private key". private.key pour vous. Déplacez ce fichier à côté du code que vous avez créé.
Ajoutez les fonctionnalités Voice à l'application et configurez les URL à l'aide de l'URL Ngrok que vous avez copiée précédemment. Pour l'URL de réponse, utilisez [paste ngrok url]/webhooks/answer et pour l'URL de l'événement [paste ngrok url]/webhooks/event.
Cliquez maintenant sur le bouton Link à côté du numéro virtuel Vonage que vous venez d'acheter pour lier votre nouvelle application au numéro de téléphone.
Avec toutes les nouvelles informations que vous avez recueillies, créez un fichier .env dans le répertoire de votre projet et ajoutez les variables suivantes :
Mettez à jour les variables ci-dessus pour qu'elles aient les valeurs correctes. Par exemple, la première doit avoir private.key et la seconde doit avoir votre application ID figurant dans la page du tableau de bord du développeur lorsque vous avez créé votre application.
Vous avez acheté un numéro virtuel Vonage, créé une Applications Vonage et écrit le code pour gérer les événements webhook. Il est temps de tester votre projet !
Le moment de tester
Nous avons configuré notre application Vonage et notre numéro de téléphone pour savoir comment traiter les appels vocaux entrants. Nous avons également écrit un webhook à l'intérieur de play-an-audio-stream-into-a-call.go pour gérer toute demande d'appel entrant. Enfin, nous avons ajouté un autre point de terminaison qui sera déclenché manuellement pour lire le fichier audio dans l'appel spécifié.
Il est maintenant temps de tester cette application. Lorsque vous exécutez la commande ci-dessous, elle démarre un serveur web avec ce webhook à l'écoute de la requête. Exécutez donc la commande ci-dessous pour commencer à tester notre nouvelle application :
Lorsque vous appelez votre numéro virtuel, vous entendez les mots cités "Thank you for calling" (Merci d'avoir appelé). Vous aurez l'impression qu'il ne se passe rien d'autre que la poursuite de l'appel.
Ouvrez maintenant votre navigateur et tapez http://localhost:3000/play-audio?uuid=[paste your uuid here] en remplaçant votre [paste your uuid here] par le uuid dans votre terminal lorsque vous avez passé l'appel. En entrant cette URL, vous entendrez le flux audio joué lors de votre appel. Une fois que vous avez terminé, mettez fin à l'appel.
Vous avez créé une application Vonage, loué un numéro de téléphone virtuel et écrit du code pour gérer les appels webhook vers ce nouveau numéro. Lorsque vous appelez le numéro, votre code ajoute un message de synthèse vocale à l'appel pour que vous puissiez l'entendre. Vous déclenchez ensuite l'événement pour lire le fichier audio dans l'appel et l'écouter sur votre téléphone !
Pour en savoir plus
Vous pouvez trouver le code présenté dans ce tutoriel sur le dépôt dépôt d'extraits de code Go.
Vous trouverez ci-dessous quelques autres tutoriels que nous avons rédigés sur l'utilisation de nos services avec Go :
Si vous avez des questions, des conseils ou des idées que vous souhaitez partager avec la communauté, n'hésitez pas à vous rendre sur notre espace de travail Slack de la communauté. J'aimerais que tous ceux qui ont mis en œuvre ce tutoriel me fassent part de leurs commentaires et de la manière dont leur projet fonctionne.
