https://d226lax1qjow5r.cloudfront.net/blog/blogposts/twitter-interactive-voice-response-dr/tweet-to-talk.png

Créer un SVI pour Twitter avec la synthèse vocale et l'API Voice de Nexmo

Publié le May 13, 2021

Temps de lecture : 5 minutes

Je suis un peu accro à Twitter. Comme beaucoup d'autres technophiles, j'ai rejoint Twitter lorsque sa popularité a explosé à SXSW en 2007, et c'est toujours un excellent moyen de suivre ce qui se passe dans les festivals ou les conférences.

Mais l'internet des conférences n'est généralement pas très performant. Vous pouvez toujours tweeter par SMS, mais sans connexion de données, vous ne pouvez pas suivre le hashtag de la conférence ou rechercher des tweets à proximité pour savoir où trouver la meilleure after-party. Mais même si vous n'avez pas de données, vous pouvez probablement encore passer des appels. Mettons en place un robot Twitter que nous pourrons contrôler par le biais d'un appel téléphonique et laissons-le nous lire les tweets !

Avant de commencer

Vous aurez besoin de quelques éléments avant de commencer.

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.

Contrôler notre robot avec DTMF

Il peut y avoir plusieurs hashtags que nous voulons suivre, ou peut-être que nous voulons être en mesure de vérifier les derniers tweets de quelques comptes différents. Nous avons donc besoin d'un moyen d'indiquer à notre robot quel flux il doit nous lire.

Pour ce faire, nous allons utiliser la signalisation multifréquence à deux tons (DTMF). Lorsque vous composez un numéro sur votre téléphone, la tonalité que vous entendez est la DTMF. Avec l'action Nexmo input nous demandons à l'utilisateur d'appuyer sur un numéro particulier, puis nous modifions l'action en fonction du numéro saisi. Si vous avez déjà eu à appeler une ligne d'assistance à la clientèle, vous avez probablement rencontré un système de réponse vocale interactive (RVI). système de réponse vocale interactive (SVI)et c'est ce que nous sommes sur le point de créer.

Lorsqu'un utilisateur appelle, nous lui lisons une liste des entrées disponibles, nous l'invitons à faire une sélection, puis nous utilisons l'API Twitter et la synthèse vocale pour lui lire les tweets pertinents.

Créer un système de réponse vocale interactive avec Python et Flask.

Lorsqu'un utilisateur appelle notre numéro virtuel, Nexmo demande notre objet de contrôle d'appel Nexmo (NCCO). Le NCCO est un fichier JSON qui contient une liste d'actions que Nexmo doit effectuer lorsque quelqu'un appelle notre numéro. Prenons un exemple.

[
  {
    "action": "talk", 
    "bargeIn": "true", 
    "text": "Welcome to Nexmo's talking Twitter. Please select from the following options. To hear the latest breaking news press 1. For showbiz gossip press 2. If you'd like to hear the latest #API tweets press 3. Or for tweets by Aaron Bassett press 4.", 
    "voice_name": "Amy"
  }, 
  {
    "action": "input", 
    "eventUrl": [
      "https://example.com/ivr/"
    ], 
    "maxDigits": 1
  }
]

Le NCCO ci-dessus a deux actions : Premièrement, nous utilisons la synthèse vocale pour indiquer à l'appelant les options qui s'offrent à lui. bargeIn à true pour que l'appelant puisse appuyer sur le numéro à tout moment, sans écouter tout le message, s'il sait déjà quelle option il veut. L'action suivante capture le numéro sur lequel l'utilisateur appuie et le transmet à notre fichier eventUrl. Cette action eventUrl renverra un autre NCCO, qui indiquera à Nexmo ce qu'il doit faire ensuite.

Convertir les tweets en discours

Lorsque l'appelant saisit un numéro, celui-ci est envoyé dans le cadre d'une requête POST à notre point de terminaison /ivr/ point de terminaison. En utilisant quelques conditionnelles (allez Guido, juste une déclaration d'interrupteur !) nous pouvons comparer l'entrée de l'utilisateur à notre liste de tweets possibles et renvoyer chaque tweet en tant qu'action dans notre nouveau NCCO. talk dans notre nouveau NCCO. Nous utiliserons la synthèse vocale pour lire les tweets. la synthèse vocale pour lire les tweets à l'utilisateur.

Si l'utilisateur a saisi une valeur que nous ne reconnaissons pas, nous diffusons un court message lui indiquant que sa saisie n'a pas été comprise, puis nous recommençons le processus.

Essayez-le vous-même

view on Github

Le code d'exemple utilise Python et Flask, je vous recommande donc de créer un nouvel environnement virtuel Python, puis de cloner le code et d'installer les dépendances.

git clone git@github.com:nexmo-community/nexmo-call-twitter.git
cd nexmo-call-twitter/
pip install -r requirements.txt

Une petite configuration est nécessaire ; dans le app.py mettez le event_url à votre URL ngrok suivie de /ivr/et assurez-vous de définir les variables Twitter requises dans votre environnement. Vous pouvez trouver des détails sur la façon de créer une nouvelle application Twitter dans la documentation python-twitter. créer une nouvelle application Twitter dans la documentation python-twitter.

export TWITTER_CONSUMER_KEY=
export TWITTER_CONSUMER_SECRET=
export TWITTER_ACCESS_KEY=
export TWITTER_ACCESS_SECRET=

Une fois que toutes les variables requises sont définies, vous pouvez lancer l'application Flask. Démarrons-la en mode développement ; de cette façon, nous obtiendrons une bonne sortie de débogage si quelque chose ne va pas. Vous devrez créer quelques variables environnementales supplémentaires pour Flask.

export FLASK_APP=app.py
export FLASK_DEBUG=1

Une fois qu'ils sont définis, nous pouvons exécuter notre application à l'aide de :

flask run

Essayez de visiter http://127.0.0.1:5000 dans votre navigateur web. Si tout fonctionne correctement, vous devriez voir notre BCN. Mais pour que ce serveur soit accessible par l Nexmo Voice APINexmo, il faut qu'il soit public. Assurez-vous donc que ngrok fonctionne et pointe vers le bon port.

Vous devrez également configurer votre application vocale Nexmo. La manière la plus simple de le faire est de passer par notre section de gestion de l'application vocale dans le tableau de bord Nexmo. Gestion de l'application Voice dans le tableau de bord Nexmo. L'URL de l'événement n'a pas d'importance dans cet exemple car nous ne travaillerons pas avec des webhooks, alors définissez-la ainsi que l'URL de la réponse à votre URL ngrok.

screenshot of Nexmo voice application screenscreenshot of Nexmo voice application screen

Une fois que vous avez créé/configuré votre application vocale, n'oubliez pas d'y associer un numéro de téléphone !

Essayez-le

Pour l'essayer, il vous suffit d'appeler le numéro virtuel Nexmo que vous avez associé à votre nouvelle application vocale. Vous devriez entendre le message d'introduction avec les différentes options. Essayez d'entrer différents numéros ou même un numéro qui n'est pas reconnu et écoutez les différents messages que vous recevrez en retour.

Utiliser ses propres sources de données

Modifiez l'exemple et changez les comptes Twitter ou le hashtag dont vous voulez récupérer les tweets, mais n'oubliez pas de mettre à jour votre message d'introduction pour refléter vos changements.

Bien entendu, vous n'êtes pas obligé de tirer vos messages de Twitter. Vous pouvez utiliser n'importe quelle source de données, découvrir l'évolution de vos actionset avoir toujours à portée de main des blagues de papaou même vérifier ce qui se trouve en haut de la page d'accueil de Hacker News.

ncco = []

topstories = requests.get('https://hacker-news.firebaseio.com/v0/topstories.json').json()
for x in range(0, 5):
    story = requests.get(
        'https://hacker-news.firebaseio.com/v0/item/{id}.json'.format(
            id=topstories[x]
        )
    ).json()

    ncco.append({
        'action': 'talk',
        'text': story['title']
    })

En fait, vous pouvez exécuter n'importe quel code. Nous avons tous entendu parler des ChatOps, mais qu'en est-il des IVROps ?

Appuyez sur 1 pour l'éteindre et le rallumer

IT Crowd: Have you tried switching it off and back on again?IT Crowd: Have you tried switching it off and back on again?

Toutefois, vous devriez peut-être prévoir une certaine authentification dans ce cas...

[
    {
        "action": "talk",
        "text": "Please enter your PIN followed by the hash key"
    },
    {
        "action": "input",
        "submitOnHash": "true",
        "eventUrl": ["https://example.com/verifypin/"]
    }
]

Partager:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Aaron BassettAnciens de Vonage

Aaron était défenseur des développeurs chez Nexmo. Ingénieur logiciel chevronné et artiste numérique en herbe, Aaron est souvent amené à créer des choses avec du code ou de l'électronique, parfois les deux. On peut généralement savoir qu'il travaille sur quelque chose de nouveau grâce à l'odeur de composants brûlés qui flotte dans l'air.