Inicio rápido de voz programable para Python
Con solo un par de líneas de código, la aplicación de Python puede realizar y recibir llamadas telefónicas con voz programable de Twilio.
Este inicio rápido de Python te enseñará a ejecutar esto con el uso de nuestra API REST, la biblioteca auxiliar de Twilio para Python y el micromarco Flask de Python a fin de facilitar el desarrollo.
En este inicio rápido, aprenderás lo siguiente:
- Registrarte en Twilio y obtener tu primer número de teléfono de Twilio con voz habilitada
- Configurar tu entorno de desarrollo para realizar y recibir llamadas telefónicas
- Realizar una llamada telefónica saliente que reproduce MP3
- Recibir y responder una llamada telefónica entrante que lee un mensaje para el agente de llamada mediante la conversión de texto a voz
¿Prefieres ver un video para comenzar? Mira nuestro video sobre cómo realizar y recibir llamadas telefónicas con Python en YouTube.
Regístrate en Twilio y obtén un número de teléfono
Si ya tienes una cuenta de Twilio y un número de teléfono de Twilio con voz habilitada, ¡ya tienes todo listo! Inicia sesión y, a continuación, no dudes en ir al paso siguiente.
Antes de poder hacer una llamada desde Python, necesitarás una cuenta de Twilio. Regístrate aquí para obtener una cuenta de prueba gratuita o inicia sesión en una cuenta que ya tengas.
Lo siguiente que necesitarás es un número de teléfono de Twilio con capacidad de voz. Si actualmente no posees un número de teléfono de Twilio con la funcionalidad de llamada por voz, deberás comprar uno. Después de ir a la página Buy a Number (Comprar un número), marca la casilla "Voice" (Voz) y haz clic en "Search" (Buscar).
A continuación, verás una lista de los números de teléfono disponibles y sus capacidades. Busca el número que más te guste y haz clic en "Buy" (Comprar) para añadirlo a tu cuenta.
Ahora que tienes una cuenta de Twilio y un número de teléfono programable, dispones de las herramientas básicas que necesitas para hacer una llamada telefónica.
Podrías usar la API HTTP de Twilio para hacer tus llamadas telefónicas, pero facilitaremos aún más las cosas mediante la biblioteca auxiliar oficial de Twilio para Python. Instalémosla a continuación.
Instala Python y la biblioteca auxiliar de Twilio
Si ya has visto uno de nuestros inicios rápidos para Python y tienes Python y la biblioteca auxiliar de Twilio para Python instalados, puedes saltarte este paso e ir directamente a hacer tu primera llamada telefónica.
Para hacer tu primera llamada telefónica con Twilio, necesitarás tener Python y la biblioteca auxiliar de Twilio para Python instalados.
Instala Python
Si usas un equipo Mac o Linux, es probable que ya tengas instalado Python. Para comprobarlo, abre un terminal y ejecuta el siguiente comando:
python --version
Deberías ver algo como así:
$ python --version
Python 3.9 # Python 3.6+ está bien también
Los usuarios de Windows pueden seguir este excelente tutorial para instalar Python en Windows.
El SDK de Python de Twilio solo admite Python 3.6+.
Instala la biblioteca auxiliar de Twilio para Python
La forma más fácil de instalar la biblioteca es mediante pip. Solo ejecuta esto en el terminal:
pip install twilio
Si aparece el error pip: command not found
, puedes utilizar easy_install
para instalar la biblioteca auxiliar de Twilio ejecutando esto en el terminal:
easy_install twilio
Para realizar una instalación manual, puedes descargar el código fuente (ZIP) de twilio-python y, luego, instalar la biblioteca ejecutando:
python setup.py install
en la carpeta que contiene la biblioteca twilio-python.
Y con esto, es hora de escribir código.
Realiza una llamada telefónica saliente con Python
Ahora que tenemos Python y twilio-python
instalados, podemos hacer una llamada telefónica saliente con una sola solicitud de API desde el número de teléfono de Twilio que acabamos de comprar. Crea un nuevo archivo llamado make_call.py
y escribe o pega este ejemplo de código.
Este código inicia una llamada telefónica entre los dos números de teléfono que pasamos como argumentos. El número "from" (de) es nuestro número de Twilio, y el número "to" (a) es a quien queremos llamar.
El argumento URL se dirige a elementos en TwiML, que le indica a Twilio qué hacer a continuación cuando nuestro destinatario contesta el teléfono. Este TwiML le indica a Twilio que lea un mensaje usando la conversión de texto a voz y que, luego, reproduzca MP3.
Sin embargo, antes de que este código funcione, necesitamos editarlo un poco para que sirva con tu cuenta de Twilio.
Reemplaza los valores de los marcadores de posición de credenciales
Cambia los valores de los marcadores de posición account_sid
y auth_token
por tus credenciales personales de Twilio.
Ve a https://www.twilio.com/console e inicia sesión. En esta página, encontrarás tu Account SID (SID de cuenta) y Auth Token (Token de autenticación) únicos, que necesitarás cada vez que envíes mensajes a través de Twilio Client de esta forma. Para revelar tu token de autenticación, puedes hacer clic en el ícono de globo ocular:
Abre make_call.py
y reemplaza los valores de account_sid
y auth_token
con tus valores únicos.
Nota: Está bien codificar de forma fija tus credenciales cuando comiences, pero debes utilizar las variables de entorno para mantenerlas en secreto antes de implementarlas en producción. Para obtener más información, fíjate en cómo establecer variables de entorno.
Sustituye los números de teléfono to y from_
¿Recuerdas el número de teléfono con voz habilitada que compraste hace solo unos minutos? Sustituye el número from_
(de) existente por ese número, y asegúrate de utilizar el formato E.164:
[+][código de país][número de teléfono con el código de área]
A continuación, reemplaza el número de teléfono to
(a) por tu número de teléfono celular. Podría ser cualquier número de teléfono que pueda recibir llamadas, pero es buena idea probar con el tuyo para que veas cómo funciona el proceso. Como se indicó anteriormente, debes utilizar el formato E.164 en este valor.
Guarda los cambios y ejecuta el guion desde el terminal:
python make_call.py
¡Eso es todo! Tu teléfono debería sonar con una llamada de tu número de Twilio, y escucharás nuestro breve mensaje para ti. 😉
Si utilizas una cuenta de prueba de Twilio, las llamadas telefónicas salientes se limitarán a los números de teléfono que hayas verificado con Twilio. Los números de teléfono se pueden comprobar a través de los ID de agente de llamada verificados de la consola de Twilio. Para conocer las demás restricciones y limitaciones de la cuenta de prueba, consulta nuestra guía sobre cómo trabajar con tu cuenta de prueba gratuita de Twilio.
A continuación, aprenderemos a responder una llamada realizada a tu número de teléfono de Twilio. En primer lugar, necesitaremos poner en funcionamiento un servidor Flask.
Instala Flask y configura el entorno de desarrollo
Para manejar llamadas telefónicas entrantes, necesitaremos una aplicación web ligera que acepte solicitudes de HTTP entrantes desde Twilio. Usaremos Flask en este inicio rápido, pero puedes emplear el marco web de tu elección para realizar y recibir llamadas telefónicas desde tus aplicaciones.
Para obtener instrucciones sobre cómo configurar Flask en Windows, consulta esta guía.
Instala pip y virtualenv
Para instalar Flask y configurar nuestro entorno de desarrollo, necesitaremos dos herramientas: pip para instalar Flask y virtualenv para crear un sandbox único de este proyecto. Si ya tienes estas herramientas instaladas, puedes pasar a la siguiente sección.
pip viene en el paquete de Python 3.4+, así que, si usas una versión reciente de este lenguaje, no necesitas instalar nada nuevo. Si tienes una versión anterior, no te preocupes: pip viene incluido en virtualenv. ¡Así que instalemos virtualenv!
Si usas Python 2.4, ejecuta el siguiente comando en el terminal:
easy_install virtualenv
Si usas Python 2.5-2.7, ejecuta el siguiente comando en el terminal y especifica el número de versión:
easy_install-2.7 virtualenv
Sustituye el 2.7 por 2.5 o 2.6 si tienes instalada esa versión.
Para instalar virtualenv con Python 3.4+:
# Si aparecen errores de "permiso denegado", intenta ejecutar "sudo python" en lugar de "python"
pip install virtualenv
Si aparece algún error en este paso, consulta estas sugerencias para la depuración.
Crea y activa tu entorno virtual
Una vez que hayas instalado virtualenv, utiliza el terminal para ir al directorio que estás utilizando en este inicio rápido y crea un entorno virtual:
cd Documents/my_quickstart_folder
virtualenv --no-site-packages .
Ahora, activa el entorno virtual:
source bin/activate
Para verificar si virtualenv se está ejecutando, puedes darle un vistazo al terminal: deberías ver el nombre del directorio incluido. Tendrá un aspecto similar a este:
(my_quickstart_folder)USER:~ user$
Para obtener más información sobre virtualenv o crear una ruta de entorno personalizada, consulta esta guía completa.
Instala dependencias
Ahora estamos listos para instalar Flask. Crea un archivo llamado requirements.txt
y agrégale las siguientes líneas:
Flask>=0.12
twilio~=6.0.0
A continuación, instala ambos paquetes con pip en tu terminal:
pip install -r requirements.txt
Prueba todo desde cero
En primer lugar, asegúrate de que virtualenv esté activado:
cd Documents/my_quickstart_folder
source bin/activate # En Windows, utiliza .\bin\activate.bat
A continuación, crea y abre un archivo llamado answer_phone.py
y agrega estas líneas:
Ahora es el momento de intentar ejecutarla. En el terminal, escribe:
python answer_phone.py
Deberías ver:
$ python answer_phone.py
* Ejecutándose en http://127.0.0.1:5000/
Ve a http://localhost:5000 en el navegador. Debería aparecer el mensaje "Hello World!" (Hola a todos). ¡Estás listo para crear tu primera app de voz programable de Twilio!
Si encontraste algún problema o deseas instrucciones sobre la configuración del entorno con una versión antigua de Python (<3.4), consulta nuestra guía completa para configurar un entorno de desarrollo Python local.
Permite que Twilio hable con tu aplicación de Flask
Estamos a punto de mejorar nuestra pequeña aplicación de Flask para aceptar llamadas telefónicas entrantes. Pero antes de hacerlo, debemos asegurarnos de que Twilio pueda hablar con nuestro entorno de desarrollo local.
La mayoría de los servicios de Twilio utilizan webhooks para comunicarse con ella. Cuando Twilio recibe una llamada telefónica, por ejemplo, llega a una URL en tu aplicación para obtener instrucciones sobre cómo gestionar la llamada.
Cuando trabajas en tu aplicación de Flask en el entorno de desarrollo, la app solo es accesible a través de otros programas de tu computadora y Twilio no podrá hablar con ella. Para resolver este problema, debemos hacer que la aplicación sea accesible a través de Internet.
Aunque hay muchas maneras de hacerlo, como implementar la aplicación en Heroku o AWS, probablemente querrás una forma menos laboriosa de probar tu app de Twilio. Para hacer que la app esté disponible en Internet de manera ligera, te recomendamos una herramienta llamada ngrok. Una vez iniciado, ngrok proporciona una URL única en el dominio ngrok.io que reenvía las solicitudes entrantes a tu entorno de desarrollo local.
Si aún no usas ngrok, dirígete a la página de descarga y selecciona el número binario correspondiente según tu sistema operativo. Una vez descargado, descomprime el paquete.
Si trabajas con Mac o Linux, ya tienes todo listo. Si usas Windows, sigue nuestra guía sobre cómo instalar y configurar ngrok en Windows. Para obtener más información sobre ngrok, incluidos algunos consejos y trucos excelentes, revisa esta publicación detallada del blog.
Una vez descargada, inicia la aplicación Hello World que hicimos anteriormente:
python answer_phone.py
Tu aplicación local se debe ejecutar localmente para que ngrok haga su trabajo.
A continuación, abre una nueva pestaña o ventana de terminal, e inicia ngrok con este comando:
./ngrok http 5000
Si el servidor local se ejecuta en un puerto diferente, reemplaza el 5000 por el número de puerto correcto.
Deberías ver un resultado similar a este:
Copia la URL pública de este resultado y pégala en el navegador. Deberías ver el mensaje "Hello World!" (Hola a todos) de la aplicación de Flask.
Responde llamadas entrantes con Twilio
Cuando tu número de Twilio reciba una llamada telefónica entrante, enviará una solicitud de HTTP a tu servidor pidiendo instrucciones sobre qué hacer a continuación. Una vez recibida la solicitud, puedes indicarle a Twilio cómo responder a la llamada.
En este inicio rápido, haremos que nuestra app de Flask responda la llamada telefónica y transmita un mensaje breve al agente de llamada. Vuelve a abrir answer_phone.py
y actualiza el código para que se parezca a este ejemplo de código:
Guarda el archivo y reinicia la app con
python answer_phone.py
Ahora deberías poder abrir un navegador web en http://localhost:5000/answer. Si visualizas el código fuente de la página, deberías ver el siguiente texto:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say voice="alice">Thank you for calling! Have a great day.</Say>
</Response>
Este código fuente es XML en TwiML generado por tu código con la ayuda de la biblioteca auxiliar de Twilio.
Verifica que ngrok todavía se esté ejecutando en el host local con el mismo puerto que antes. Ahora Twilio podrá encontrar tu aplicación. Solo hay una última cosa que necesitamos antes de estar listos para llamar a tu app: debemos indicarle a Twilio a dónde enviar su solicitud.
Configura la URL de tu webhook
A fin de que Twilio sepa dónde buscar, necesitas configurar tu número de teléfono de Twilio para llamar a la URL de tu webhook siempre que ingrese un nuevo mensaje.
- Inicia sesión en Twilio.com y ve a la página de números de la consola.
- Haz clic en el número de teléfono con voz habilitada.
- Busca la sección "Voice & Fax" (Voz y fax). Asegúrate de que la opción "Accept Incoming" (Aceptar llamadas entrantes) esté establecida en "Voice Calls" (Llamadas de voz). La opción predeterminada "Configure With" (Configurar con) es la que necesitarás: "Webhooks/TwiML...".
- En la sección "A Call Comes In" (Entra una llamada), selecciona "Webhook" y pega la URL que deseas utilizar añadiendo tu ruta de "/answer":
Guarda los cambios. ¡Ya tienes todo listo!
Prueba tu aplicación
Siempre que tu host local y los servidores de ngrok estén en funcionamiento, estamos listos para la parte divertida: probar nuestra nueva aplicación de Flask.
Realiza una llamada desde tu teléfono celular a tu número de teléfono de Twilio. Deberías ver una solicitud de HTTP en la consola de ngrok. Tu app de Flask procesará la solicitud entrante y responderá con tu TwiML. A continuación, oirás el mensaje una vez que se conecte la llamada.
¿Dónde ir a continuación?
Ahora ya conoces los conceptos básicos de realizar y responder llamadas telefónicas con Python.
Nuestra app de Flask aquí solo utilizó el verbo <Say> (Decir) en TwiML para leer un mensaje al agente de llamada mediante la conversión de texto a voz, pero puedes hacer mucho más con diferentes términos en TwiML, como <Record> (Grabar), <Gather> (Recopilar) y <Conference> (Conferencia).
Consulta estas páginas para obtener más información:
- Recopila las entradas del usuario a través del teclado (tonos DTMF) en Python
- Obtén información sobre cómo grabar llamadas telefónicas entrantes y salientes de Twilio Voice mediante Python
- Crea llamadas de conferencia en Python
- Consulta la documentación de referencia de la API sobre voz programable de Twilio
- Obtén información sobre cómo modificar llamadas en curso con Python
- ¿Deseas realizar una llamada desde el navegador o la aplicación? Utiliza Twilio Client para integrar llamadas VoIP de alta calidad.
- Recupera información sobre llamadas en curso y finalizadas desde tu cuenta de Twilio con el uso de Python.
- Consulta nuestro tutorial de aplicación de muestra completa sobre cómo transferir llamadas de un agente de soporte a otro con Python y Flask.
¡Nos emociona ver lo que construirás!
¿Necesitas ayuda?
Todos la necesitamos a veces; la programación es difícil. Obtén ayuda ahora de nuestro equipo de soporte, o recurre a la sabiduría de la multitud visitando Stack Overflow Collective de Twilio o navegando por la etiqueta de Twilio en Stack Overflow.