
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.
Créer une réponse vocale interactive avec Go
Temps de lecture : 8 minutes
Dans les tutoriels précédents, nous avons appris à fabriquer et recevoir appels vocaux avec Voice. Ce tutoriel vous montrera comment construire un système de réponse vocale interactive en utilisant Go et l'API Voice API.
Nous construirons un serveur qui répondra au point de terminaison webhook que Vonage envoie lorsqu'un appel arrive. À l'aide d'une application Vonage dotée de capacités vocales, nous acheminerons les appels vocaux entrants vers leur destination. Enfin, nous demanderons à l'API d'inviter l'utilisateur à donner des informations sur l'appel, puis, à l'aide de la synthèse vocale, de retransmettre ces informations à l'utilisateur.
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.
Installer le SDK Go
Ce projet utilisera le SDK Go de Vonage, que vous pouvez installer à l'aide de la commande suivante :
Écrire le code
Vonage vérifie si vous avez configuré un webhook vers lequel acheminer votre appel vocal lorsqu'il en reçoit un sur votre numéro virtuel. Cette configuration du webhook est spécifique à votre application, que vous créerez et configurerez plus loin dans le tutoriel.
Écrivons le code qui traitera toutes les demandes adressées à ce webhook. Tout d'abord, créez un fichier appelé handle-user-input-with-dtmf.go et copier ce qui suit dans ce fichier :
package main
import (
"encoding/json"
"io/ioutil"
"log"
"net/http"
"github.com/vonage/vonage-go-sdk/ncco"
)
type Dtmf struct {
Digits string
Timed_out bool
}
type Response struct {
Speech []string
Dtmf Dtmf
From string
To string
Uuid string
Conversation_uuid string
Timestamp string
}
func main() {
}Le code ci-dessus importe les bibliothèques que nous utiliserons tout au long de ce tutoriel, nous créons également deux nouvelles structures qui gèreront les entrées des requêtes webhook reçues de Vonage. Ensuite, nous avons initialisé notre projet avec une fonction main() fonction.
Ensuite, nous allons devoir créer un point de terminaison /webhooks/answer pour indiquer aux API de Vonage ce qu'il faut faire avec les appels entrants. Pour ce faire, nous devrons créer un objet de contrôle d'appel (NCCO) qui demandera d'abord à l'appelant d'entrer une touche, puis l'étape suivante consistera à enregistrer l'entrée de l'appelant. Ajoutez le code ci-dessous à votre projet, au-dessus de la fonction main() au-dessus de la fonction
func answer(w http.ResponseWriter, req *http.Request) {
MyNcco := ncco.Ncco{}
talk := ncco.TalkAction{Text: "Hello please press any key to continue."}
MyNcco.AddAction(talk)
inputAction := ncco.InputAction{EventUrl: []string{"https://demo.ngrok.io/webhooks/dtmf"}, Dtmf: &ncco.DtmfInput{MaxDigits: 1}}
MyNcco.AddAction(inputAction)
data, _ := json.Marshal(MyNcco)
w.Header().Set("Content-Type", "application/json")
w.Write(data)
}
Le projet ne dispose actuellement d'aucune fonctionnalité permettant de savoir quoi faire de l'entrée de l'appelant (vous avez peut-être remarqué l'URL https://demo.ngrok.io/webhooks/dtmf dans l'étape précédente). Nous allons devoir créer ce point d'accès dans notre projet, ce point d'accès devra lire le corps de la requête POST puis relire la clé soumise par l'appelant à l'étape précédente. Ajoutez l'exemple de code ci-dessous à votre projet :
func dtmf(w http.ResponseWriter, r *http.Request) {
data, _ := ioutil.ReadAll(r.Body)
var t Response
json.Unmarshal(data, &t)
MyNcco := ncco.Ncco{}
talk := ncco.TalkAction{Text: "You pressed " + t.Dtmf.Digits + ", Goodbye"}
MyNcco.AddAction(talk)
responseData, _ := json.Marshal(MyNcco)
w.Header().Set("Content-Type", "application/json")
w.Write(responseData)
}
Il est temps d'indiquer à la fonction main() de savoir quoi faire avec les deux nouvelles fonctions que nous avons créées. Nous devons créer un serveur http pour écouter sur le port 3000et router deux points d'extrémité vers ces fonctions. Ajoutez les trois lignes ci-dessous à votre fonction main() vide.
http.HandleFunc("/webhooks/answer", answer)
http.HandleFunc("/webhooks/dtmf", dtmf)
http.ListenAndServe(":3000", nil) 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.
Dans votre handle-user-input-with-dtmf.go trouvez la ligne inputAction := ncco.InputAction{EventUrl: []string{"https://demo.ngrok.io/webhooks/dtmf"}, dans la fonction answer() et remplacez "https://demo.ngrok.io" par l'URL de votre ngrok. N'oubliez pas de conserver la partie /webhooks/dtmf Cependant, n'oubliez pas de conserver la partie
Configurer les paramètres
Créez une application dans votre tableau de bord sous "Vos Applications". Donnez un nom à votre nouvelle application.
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.
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 handle-user-input-with-dtmf.go pour gérer toute demande d'appel entrant. Enfin, nous avons ajouté un autre point de terminaison que nous déclencherons une fois que l'appelant aura sélectionné une touche sur son téléphone.
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 la phrase suivante : "Bonjour, appuyez sur n'importe quelle touche pour continuer". Dès que vous entendez cette phrase, appuyez sur n'importe quelle touche de votre téléphone. Votre appel est alors redirigé vers l'URL du webhook. /webhooks/dtmf qui lira ce que vous avez saisi avec la phrase : "Vous avez appuyé sur [touche ici] Au revoir". En remplaçant [key here] par la touche que vous avez saisie.
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.
