Conversar con Telegram mediante un bot.

Este es uno de los capítulos del tutorial Exprimiendo Telegram. Crea tu propio bot para Telegram.. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Anteriormente vimos como crear un teclado para Telegram, sin embargo, dependiendo de lo que queramos hacer, esto se nos puede quedar corto. Lo cierto es que los bots de Telegram nos dan un amplio abanico de posibilidades, para cualquier actividad que queramos hacer y en cualquier campo. Y esto nos lleva al artículo de hoy en el que veremos como conversar con Telegram. Por supuesto, me refiero a conversar con nuestro bot.

Esto de conversar con Telegram, tiene su lógica. No implica que vayamos a programar un bot inteligente, sino que lo que hará este bot es dar una respuesta en función de tu respuesta. Así el bot te contestará de una forma y otra, o te planteará una nueva pregunta, de una forma dinámica, práctica y rápida.

¿Que aplicaciones prácticas puede tener conversar con Telegram?

Exprimiendo Telegram. Conversar con Telegram. Portada.

Conversar con Telegram

Para dar una respuesta a la pregunta sobre ¿Que aplicaciones prácticas puede tener conversar con Telegram?, y tal y como he comentado en la introducción, me refiero a conversar con nuestro bot, te voy a dar una serie de ejemplos prácticos,

  • Un servicio de mantenimiento. Por ejemplo, el servicio de mantenimiento de una cafetera. Entras a conversar con el bot, y el te va haciendo preguntas, y en función de las respuestas que tu le das, te va guiando hacia las acciones que puedes tomar, o directamente, te pone en contacto con un departamento concreto.
  • Una empresa de seguros. Por ejemplo el caso de que tengas un percance con el coche. Según las preguntas y respuestas, es decir la conversación que tengas con el bot, este te dirigirá rápidamente a un departamento de la empresa de seguros.
  • Un restaurante. Que el permite al cliente saber si está abierto o cerrado, el menú del día, si hay mesas disponibles o reservar una mesa para comer o cenar.
  • Una peluquería u otro comercio de ese estilo, que te permita saber si está abierto o cerrado, y que te permita reservar una hora.
  • Un hotel, una casa rural o un alojamiento de Airbnb. Para saber si hay habitaciones o cass disponibles, o que te diga la mas cercana.

Lo cierto es que las posibilidades que se pueden ofrecer a través de Telegram, y en particular programando un bot, son expectaculares. Te permite pormenorizar todas las opciones que quieres ofrecer al usuario, y darle respuesta hasta el mas mínimo detalle. De esta manera, el usuario se encontrará realmente cómodo y perfectamente asistido.

ConversationHandler y RegexHandler

Para trabajar con nuestro bot en este asunto de Conversar con Telegram, tenemos que utilizar dos negociadores que son,

  • ConversationHandler, que nos permite crear la conversación, de forma que dependiendo de la respuesta del usuario se tome una salida u otra.
  • RegexHandler, que nos permite gestionar las respuestas del usuario.

Para poner un sencillo ejemplo, he creado una conversación para definir en función de tus respuestas la distribución Linux recomendable para ti. Para crear la conversación he utilizado una infografía que he encontrado en Reedit y que reproduzco a continuación.

Exprimiendo Telegram. Conversar con Telegram. Ejemplo. Diagrama de flujo.

En ningún caso debes tomar esto como fiable, simplemente lo he implementado a modo de ejemplo.

Exprimiendo Telegram. Conversar con Telegram. Ejemplo. Captura 1.

De esta manera, el bot te va preguntando desde ¿para que vas a utilizar la distribución? hasta ¿si te gustan las tecnologías? o ¿que sistema operativo utilizabas hasta ahora?.

Exprimiendo Telegram. Conversar con Telegram. Ejemplo. Captura 2.

Exprimiendo Telegram. Conversar con Telegram. Ejemplo. Captura 3.

ConversationHandler

El aspecto de ConversationHandler, en el caso que nos ocupa es el siguiente,

distro_handler = ConversationHandler(
    entry_points=[CommandHandler('distro', distro)],
    states={
        OPCION1: [RegexHandler(
            '^(Trabajo|Diversión|Normal|Diseño|Programación)$',
            opcion1)],
        OPCION2: [RegexHandler('^(Si|No)$', opcion2)],
        OPCION3: [RegexHandler('^(Si|No)$', opcion3)],
        OPCION4: [RegexHandler('^(Windows|Mac)$', opcion4)],
        OPCION5: [RegexHandler(
            '^(Rápido y funcionando|Configurar mi SO)$', opcion5)],
        OPCION21: [RegexHandler('^(Si|No)$', opcion21)],
        OPCION31: [RegexHandler('^(Ubuntu|Linux|Manjaro|Fedora)$',
                   opcion31)],
    },
    fallbacks=[CommandHandler('cancel', cancel)]

El ó los puntos de entrada son un negociador de los que vimos en el capítulo anterior. Y en el caso que nos ocupa, tendrá un aspecto como éste,

def distro(bot, update):
    reply_keyboard = [['Trabajo', 'Diversión', 'Normal'],
                      ['Diseño', 'Programación']]
    update.message.reply_text(
        '¿Que uso le vas a dar a tu distribución?',
        reply_markup=ReplyKeyboardMarkup(reply_keyboard,
                                         one_time_keyboard=True))
    return OPCION1

Si te fijas definimos el teclado al uso, el mensaje que preguntaremos, e indicamos que este teclado será de un solo uso.

Si desarrollamos una de las opciones, por ejemplo, la opción 2, el aspecto de la misma será el siguiente,

def opcion2(bot, update):
    selected = update.message.text
    if selected == 'Si':
        reply_keyboard = [['Si', 'No']]
        update.message.reply_text(
            '¿Has probado Arch?',
            reply_markup=ReplyKeyboardMarkup(reply_keyboard,
                                             one_time_keyboard=True))
        return OPCION21
    elif selected == 'No':
        reply_keyboard = [['Si', 'No']]
        update.message.reply_text(
            '¿Has utilizado antes una distribución Linux?',
            reply_markup=ReplyKeyboardMarkup(reply_keyboard,
                                             one_time_keyboard=True))
        return OPCION3

Como ves utilizando update.message.text capturamos la respuesta del usuario, que en el caso que nos ocupa, las opciones que teníamos eran Si ó No.

RegexHandler

Es un tipo de negociador que utiliza una expresión regular para comprobar los mensajes de texto.

Así por ejemplo en el caso de la opción 2, la definición es la siguiente,

RegexHandler('^(Si|No)$', opcion2)

Esto nos indica que las opciones o respuestas válidas son Si o No, y que la función que ejecutará será opcion2 que hemos visto un poco mas arriba.

Conversar con Telegram llega a senderbot

Tal y como he hecho para otros capítulos de esta tutorial, he añadido como ejemplo de funcionamiento la Selección de tu distribución favorita. De esta manera puedes, no solo probar el funcionamiento de este modo conversación, sino también elegir que distribución tienes que utilizar (mas o menos). Si lo quieres instalar y tienes instalado ppaurl, tan solo tienes que hacer clic en senderbot, en otro caso, ejecuta las siguientes órdenes en el emulador de terminal,

sudo add-apt-repository ppa:atareao/telegram
sudo apt update
sudo apt install senderbot

Si ya lo instalaste en versiones capítulos anteriores, solo tienes que actualizar el sistema, ejecutando la orden sudo apt update.

Una vez instalado o actualizado, solo te queda ponerlo en marcha. Para ello, ejecuta la orden,

senderbot -o

Por otro lado, indicar que si utilizas python-telegram-bot en la Raspberry, las dependencias python3-future y python3-certifi, no se encuentran disponibles en Jessie aunque si en Stretch.

Para instalarlas en Jessie, tienes que añadir la línea deb http://ftp.debian.org/debian jessie-backports main al final de /etc/apt/sources.list. Actualizar ejecutando la orden sudo apt update y a continuación instalar, ejecutando las siguientes órdenes,

sudo apt -t jessie-backports install python3-future
sudo apt -t jessie-backports install python3-certifi

Por supuesto, puedes consultar el código de este bot en GitHub. Por último, indicarte que si no quieres o no sabes o no tienes ningún interés en modificar el código del bot, pero quieres que añada una funcionalidad adicional que te interese, o que modifique una parte o lo que sea, para poder utilizar tu bot en tu equipo, no tienes mas que contactar conmigo, y haré las modificaciones que necesites.

Conclusiones

Con esto ya tienes una idea mas o menos clara de las opciones que te ofrece tu bot para conversar con Telegram, y como puedes utilizarlo para tu negocio o para cualquier otra actividad que te interese.

En el artículo siguiente, veremos que son los Bots Inline y como puedes crear tu propio bot inline, y que uso se le puede dar.