
Compartir:
Aaron era un defensor de los desarrolladores en Nexmo. Ingeniero de software experimentado y aspirante a artista digital, Aaron suele crear cosas con código o electrónica; a veces ambas cosas. Cuando está trabajando en algo nuevo, suele percibir el olor a componentes quemados en el aire.
Creación de un IVR de Twitter con texto a voz y la Voice API de Nexmo
Tiempo de lectura: 4 minutos
Soy un poco adicto a Twitter. Como muchos otros aficionados a la tecnología, me uní a Twitter cuando su popularidad estalló en SXSW en 2007, y sigue siendo un medio excelente para estar al tanto de lo que ocurre en festivales o conferencias.
Pero el Internet de las conferencias no suele ser muy bueno. Podrías seguir twitteando por SMS, pero sin conexión de datos no puedes seguir el hashtag de la conferencia ni buscar tweets cercanos para saber dónde está la mejor fiesta posterior. Pero aunque no tengas datos, probablemente puedas hacer llamadas. Creemos un bot de Twitter que podamos controlar a través de una llamada telefónica y que nos lea los tuits.
Antes de empezar
Hay algunas cosas que necesitarás antes de empezar.
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.
Account de Twitter y una aplicación de TwitterLa biblioteca Twitter de Python tiene buena documentación sobre la creación de una aplicación Twitter
Si está ejecutando esto localmente, necesitará una forma de hacer público su servidor. Sugerimos usar ngrok.
Controlar nuestro bot con DTMF
Puede haber varios hashtags que queramos seguir, o quizás queramos consultar los últimos tweets de varias cuentas diferentes. Así que necesitamos alguna forma de decirle a nuestro bot qué flujo debe leernos.
Para ello, vamos a utilizar la señalización multifrecuencia bitono (DTMF). Cuando marca un número en su teléfono, el tono que oye es DTMF. Con la acción Nexmo input pedimos al usuario que pulse un número concreto y luego variamos la acción que realizamos en función del número introducido. Si alguna vez ha tenido que llamar a una línea de atención al cliente, es probable que se haya encontrado con un sistema de respuesta de voz interactiva (IVR). sistema interactivo de respuesta de voz (IVR)que es lo que vamos a crear.
Cuando un usuario llame, leeremos en voz alta una lista de las entradas disponibles, le pediremos que haga una selección y, a continuación, utilizaremos la API de Twitter y la conversión de texto a voz para leerle los tuits pertinentes.
Creación de un sistema interactivo de respuesta de voz con Python y Flask
Cuando un usuario llama a nuestro número virtual, Nexmo solicitará nuestro objeto de control de llamadas de Nexmo (NCCO). El NCCO es un archivo JSON que contiene una lista de acciones que Nexmo debe realizar cuando alguien llama a nuestro número. Veamos un ejemplo.
[
{
"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
}
]La OCN anterior tiene dos acciones: En primer lugar, utilizamos la función de texto a voz para que la persona que llama sepa cuáles son sus opciones. bargeIn para que la persona que llama pueda pulsar el número en cualquier momento, sin escuchar todo el mensaje, si ya sabe qué opción quiere. La siguiente acción captura el número que pulsa el usuario y lo envía a nuestro servidor POST eventUrl. Este eventUrl devolverá otro NCCO, que le dirá a Nexmo qué hacer a continuación.
Convertir tweets en discurso
Cuando la persona que llama introduce un número, éste se envía como parte de una solicitud POST a nuestro endpoint /ivr/ punto final. Usando algunos condicionales (vamos Guido ¡una sentencia switch!) podemos comparar la entrada del usuario con nuestra lista de posibles tweets y devolver cada tweet como una talk en nuestra nueva NCCO. Utilizaremos texto a voz para leer los tweets al usuario.
Si el usuario ha introducido un valor que no reconocemos, reproducimos un breve mensaje indicándole que no se ha entendido lo que ha introducido y volvemos a empezar el proceso.
Pruébelo usted mismo

El código de ejemplo utiliza Python y Flask, por lo que te recomiendo crear un nuevo entorno virtual Python y luego puedes clonar el código e instalar las dependencias.
git clone git@github.com:nexmo-community/nexmo-call-twitter.git
cd nexmo-call-twitter/
pip install -r requirements.txtSe requiere un poco de configuración; en el app.py establezca event_url a su URL ngrok seguido de /ivr/y asegúrate de configurar las variables de Twitter necesarias en tu entorno. Encontrará información detallada sobre cómo crear una nueva aplicación Twitter en la documentación python-twitter.
export TWITTER_CONSUMER_KEY=
export TWITTER_CONSUMER_SECRET=
export TWITTER_ACCESS_KEY=
export TWITTER_ACCESS_SECRET=Una vez configuradas todas las variables necesarias, puede ejecutar la aplicación Flask. Vamos a iniciarla en modo desarrollo; de esta forma obtendremos una buena salida de depuración si algo va mal. Necesitarás crear un par más de variables de entorno para Flask.
export FLASK_APP=app.py
export FLASK_DEBUG=1Y una vez configurados podemos ejecutar nuestra aplicación utilizando:
flask runPruebe a visitar http://127.0.0.1:5000 en su navegador. Si todo funciona correctamente, debería ver nuestra OCN. Pero para hacer este servidor accesible por el Nexmo Voice APInecesitaremos que sea público. Así que asegúrese de que ngrok se está ejecutando y apuntando al puerto correcto.
También tendrá que configurar su aplicación de voz Nexmo. La forma más fácil de hacerlo es a través de nuestra sección de gestión de aplicaciones de voz del Panel de control de Nexmo. La URL del evento no importa en este ejemplo, ya que no vamos a trabajar con ningún webhooks así que configúralo y tu URL de respuesta a tu URL ngrok.
screenshot of Nexmo voice application screen
Una vez que hayas creado/configurado tu aplicación de voz, no olvides vincularle un número de teléfono.
Pruébalo
Para probarla, sólo tienes que llamar al número virtual Nexmo que hayas vinculado a tu nueva aplicación de voz. Deberías escuchar el mensaje introductorio con las diferentes opciones. Pruebe a introducir diferentes Numbers o incluso un número no reconocido y escuche los diferentes mensajes que recibe de vuelta.
Utilizar sus propias fuentes de datos
Edite el ejemplo y cambie las cuentas de Twitter o los hashtag de los que desea recuperar tweets, pero no olvide actualizar su mensaje introductorio para reflejar los cambios.
Por supuesto, no tienes por qué extraer tus mensajes de Twitter. Puede utilizar cualquier fuente de datos que desee, averiguar el rendimiento de sus accionesy tener siempre a mano chistes de papáo incluso consultar lo que está en el top de Noticias Hacker.
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']
})De hecho, puede ejecutar cualquier código que desee. Todos hemos oído hablar de ChatOps, pero ¿qué hay de IVROps?
Pulse 1 para apagarlo y volver a encenderlo.
IT Crowd: Have you tried switching it off and back on again?
Aunque puede que quieras incluir algún tipo de autenticación...
[
{
"action": "talk",
"text": "Please enter your PIN followed by the hash key"
},
{
"action": "input",
"submitOnHash": "true",
"eventUrl": ["https://example.com/verifypin/"]
}
]Compartir:
Aaron era un defensor de los desarrolladores en Nexmo. Ingeniero de software experimentado y aspirante a artista digital, Aaron suele crear cosas con código o electrónica; a veces ambas cosas. Cuando está trabajando en algo nuevo, suele percibir el olor a componentes quemados en el aire.
