
Partager:
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.
Créer un SVI pour Twitter avec la synthèse vocale et l'API Voice de Nexmo
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.
Compte et application Twitterla bibliothèque Python Twitter possède une bonne documentation sur la création d'une application Twitter
Si vous l'exécutez localement, vous aurez besoin d'un moyen de rendre votre serveur public. Nous suggérons d'utiliser ngrok.
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

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.txtUne 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=1Une fois qu'ils sont définis, nous pouvons exécuter notre application à l'aide de :
flask runEssayez 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 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?
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:
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.
