https://d226lax1qjow5r.cloudfront.net/blog/blogposts/build-an-interactive-voice-response-with-go/go_ivr_1200x627.png

Créer une réponse vocale interactive avec Go

Publié le February 11, 2021

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 :

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 :

go get github.com/vonage/vonage-go-sdk

É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 :

ngrok http 3000

Copiez l'URL HTTPS que ngrok utilise, car vous en aurez besoin plus tard. Elle sera similaire à l'exemple ci-dessous :

https://abc1234.ngrok.io -> http://localhost:8080

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 :

go run handle-user-input-with-dtmf.go

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.

Partager:

https://a.storyblok.com/f/270183/250x250/b052219541/greg-holmes.png
Greg HolmesAnciens de Vonage

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.