ChatBot para Telegram

Proyecto paso a paso que forma parte de la Unidad 6. Proyectos de inteligencia artificial.

Hoy vamos a adentrarnos en el fascinante mundo de la Inteligencia Artificial (IA) y cómo ésta ha revolucionado la forma en la que nos comunicamos y nos relacionamos con la tecnología. En concreto, vamos a explorar qué es un chatbot y por qué está relacionado con la IA.

Tabla de contenidos

1. ¿Qué es un ChatBot?

Un chatbot es un programa informático diseñado para simular conversaciones con usuarios humanos a través de aplicaciones de mensajería, como Telegram. Estos chatbots pueden realizar diversas funciones, desde ayudarnos a programar citas hasta responder a nuestras preguntas o simplemente entretenernos con una conversación amena.

Pero, ¿por qué un chatbot está relacionado con la Inteligencia Artificial? La IA es una rama de la informática que busca desarrollar sistemas capaces de aprender, razonar, percibir y comunicarse de manera similar a como lo hacen los seres humanos. Los chatbots son un ejemplo perfecto de cómo la IA puede ser aplicada para simular la interacción humana, ya que deben ser capaces de comprender el lenguaje natural que utilizamos, procesar la información que se les proporciona y generar respuestas adecuadas y coherentes.

Para desarrollar un chatbot eficiente, es necesario entrenarlo con una gran cantidad de datos que representen diferentes situaciones y contextos de conversación. A medida que el chatbot se enfrenta a nuevos escenarios, aprende a través del Aprendizaje Automático y refina sus respuestas. Además, los chatbots pueden ser programados con reglas específicas y algoritmos de decisión que les permitan gestionar preguntas y respuestas de manera más efectiva.

En resumen, los chatbots son una aplicación práctica y fascinante de la Inteligencia Artificial, que nos permite experimentar de primera mano cómo las máquinas pueden aprender y comunicarse con nosotros de manera similar a como lo hacen los seres humanos. Al entender el funcionamiento de los chatbots, también adquirimos una comprensión más profunda de cómo la IA puede ser aplicada a diferentes contextos y situaciones, y cómo puede continuar revolucionando nuestras vidas en el futuro.

2. Fases del desarrollo del ChatBot

Si bien es cierto que todo lo que hemos descrito con anterioridad es posible hacerlo con un ChatBot, vamos a comenzar la construcción de nuestro bot simplemente como una aplicación que ofrezca respuestas semi aleatorias, de entre una lista de posibles respuestas, para posteriormente ir incorporando elementos puros de inteligencia artificial como utilidades PNL.

El desarrollo del ChatBot que nos ocupa consta de tres fases muy diferenciadas:

  • Diseñar nuestra aplicación.
  • Crear y configurar un bot de Telegram usando BotFather.
  • Configurar SnatchBot y vincularlo con nuestro bot de Telegram.

3. Diseñar nuestro bot

Debes tener muy presente cómo es la mecánica de funcionamiento de un ChatBot.

El usuario va a buscarlo en Telegram por el nombre que le hayamos puesto (debes idear cómo se llamará), junto al nombre aparecerá su icono representativo (piénsalo y diséñalo previamente); y también tendrá una imagen de cabecera y una descripción de qué es lo que hace o cómo funciona.

Una vez hecho esto, debes pensar que el usuario activará el bot, y que éste se ofrecerá al usuario a resolver alguna necesidad que tenga. El usuario escribirá sus necesidades (o pulsará entre una serie de opciones) y el bot responderá para intentar satisfacer las necesidades del usuario. Es decir, nunca debes olvidar que el funcionamiento de un ChatBot es exactamente igual que el de una conversación, por lo que siempre hay que responder o dar pie a que el usuario responda.

Dicho todo lo anterior, es hora de parar, reflexionar, y pensar muy bien qué quieres que haga tu ChatBot.

A modo de ejemplo de partida, nosotros vamos a construir un ChatBot que lo único que hará será contarle chistes malos al usuario, y lo seguirá haciendo mientras el usuario siga respondiendo positivamente. El nombre que hemos elegido es Chistes Malos Mercader. Ya tenemos preparados 65 chistes malos, 10 variantes de saludos y otras 10 variantes para preguntarle qué le ha parecido el chiste y si quiere que le contemos otro. Además, tenemos ya redactada la descripción de la aplicación y elegidas las dos imágenes que van a representar nuestro bot, tanto la imagen de cabecera como la de perfil.

4. Crear y configurar un bot de Telegram usando BotFather

Para crear un nuevo bot en Telegram, tan solo debemos abrir la aplicación y a través de la lupa buscar BotFather:

Asegúrate de seleccionar de todos los resultados aquel que tiene la marca azul de cuenta verificada. Una vez que la seleccionemos, nos aparecerá información sobre qué podemos hacer con esta herramienta.

Para activarla, simplemente pulsaremos en el botón azul START.

Si te fijas, pulsar en START es equivalente a enviar el mensaje /start, por lo que en cualquier momento puedes reiniciar cualquier bot de Telegram escribiendo ese comando.

En el mensaje que nos devuelve la herramienta puedes ver lo sencillo que es configurar un nuevo bot. Tienes la opción de ir escribiendo los comandos manualmente, o directamente ir pulsando en cada opción para ir configurando nuestro bot. Vamos a pinchar en /newbot

Como puedes ver en la pequeña conversación que he mantenido con BotFather, primero nos pide que le digamos el nombre que queremos ponerle a nuestra aplicación, luego nos pide qué nombre de usuario queremos ponerle, y una vez que hemos elegido correctamente el nombre de usuario (terminado en bot) nos ofrece un mensaje tremendamente importante que no podemos perder. COPIA y GUARDA en algún sitio seguro el token que se indica con la flecha naranja porque es la manera que tendremos de conectar nuestra segunda herramienta (SnatchBot) con nuestro bot de Telegram.

Una vez hecho todo esto, podemos volver atrás para seguir configurando nuestro bot, o escribir directamente /mybots

Se trata de ir pulsando en cada uno de los botones que nos ofrece e ir rellenando la información que nos pide hasta completar todos los campos necesarios. Una vez que no tengamos ninguno de esos iconos rojos, es decir, tenemos toda la información del bot rellena, habremos terminado nuestro trabajo en Telegram.

Lo que hemos hecho hasta ahora es crear el envoltorio de nuestro ChatBot: su texto de bienvenida, su icono, su descripción, su imagen de cabecera, su nombre y su usuario en Telegram, pero nada más, nuestro bot no hace nada.

Ahora, ya podríamos buscar Chistes Malos Mercader en Telegram, aparecería nuestro bot y su descripción pero al pulsar en START no haría nada. Ni diría nada, ni respondería nada, porque todavía no hemos programado su lógica de funcionamiento. Todo eso, es lo que nos queda por hacer y lo que veremos en el siguiente apartado.

5. Configurar SnatchBot y vincularlo con nuestro bot de Telegram

Para comenzar a trabajar en la lógica de nuestro bot vamos a visitar la web de SnatchBot [https://es.snatchbot.me/] y nos registramos de forma sencilla y gratuita usando nuestro correo electrónico corporativo del centro.

Una vez dentro, pulsamos en Mis bots y en la pantalla que nos sale (en la parte superior derecha) pulsamos en + Crear bot.

Se nos ofrecerán multitud de plantillas, pero nos quedaremos con Bot en blanco.

Rellenamos los datos básicos del bot y ya tendremos nuestro bot listo para añadir funcionalidad.

Volvemos a Mis Bots, pulsamos sobre el cuadro de nuestro bot y nos aseguramos que estamos trabajando dentro de nuestro bot:

Vamos a configurar nuestro bot para enlazarlo con nuestro bot de Telegram. Para ello, pulsamos en Canales:

Activamos Telegram, y en la parte derecha de la pantalla hacemos scroll hasta bajar al Paso 3. Localizamos el Telegram API Token y ahí pegamos el token que habíamos guardado al configurar nuestro bot de BotFather.

Una vez hecho esto ya podemos, empezar a crear lo que se llaman Interacciones, que son cada una de las veces que nuestro bot va a estar preparado para interactuar con el usuario de Telegram.

Lo primero que vamos a hacer es saludar al usuario y pedirle su nombre.

Para ello debemos crear una nueva interacción. Esto lo conseguimos pulsando en el menú Añadir nueva interacción:

De todas las opciones que nos ofrece, nos quedaremos con la primera “Declaración del chatbot“. Además, escribiremos un nombre para identificar a esta interacción, tal y como se indica en el lugar donde apunta la flecha verde. Cuando lo hayamos rellenado podemos pulsar en el botón Agregar.

Aquí es donde configuramos cada una de las interacciones. Tenemos muchísima información por delante, pero no te abrumes porque la mayoría de las veces sólo tocaremos un par de opciones. Fíjate que en la parte inferior derecha siempre aparece un globito con la imagen de tu chatbot. Esto quiere decir que estés en el punto de desarrollo en el que estés, siempre puedes probar tu chatbot pulsando en ese globito de chat y ver qué tal funciona tu aplicación.

Volvamos a la configuración de la interacción. Queríamos saludar al usuario y pedirle su nombre, pues directamente donde se indica “Mensaje bot” escribimos el mensaje que le aparecerá al usuario escrito por el bot.

Si ahora probamos nuestro chatbot, veremos cómo funciona correctamente:

De momento, sólo hemos programado que se salude al usuario y se le pida su nombre, pues eso es lo que hace. Además fíjate que nuestro chatbot responde siempre automáticamente tras cada mensaje del usuario. Esto es algo importante que debemos entender desde el principio.

A continuación, vamos a crear todas las demás interacciones, simplemente escribiendo su identificador, más adelante veremos cómo configuramos cada uno de ellos. Así será más fácil entender todo el proceso:

Como puedes ver, tenemos creadas 6 interacciones. Atiende a nuestra lógica para entender cómo funcionarán estas interacciones y cuál de ellas hará acto de presencia en cada caso:

  • Nuestro bot ejecutará la interacción Pide nombre, saludará al usuario y le pedirá su nombre.
  • Cuando el usuario conteste nuestro bot ejecutará Recoge nombre. Lo saludará por su nombre y le preguntará si quiere ver un chiste malo.
  • Si el usuario responde que no, nuestro bot ejecutará Despedida sin chistes y terminará.
  • Si el usuario responde que si, nuestro bot ejecutará Muestra chiste y mostrará un chiste malo. Tras este chiste le preguntará si quiere mas chistes.
  • Si el usuario responde que sí, se ejecutará ¿Más chistes? y así se hará de forma indefinida mientras el usuario responda que sí.
  • Si el usuario responde que no, se ejecutará Despedida con chistes, y el bot terminará.

Muy bien, sabiendo cuál es el flujo de todo el bot, retomemos nuestra primera interacción Pide nombre. Habíamos rellenado el panel Mensaje bot, pero ahora necesitamos conectarlo con la siguiente interacción:

Para ello, pulsamos sobre el panel de Conexiones y como queremos recoger el nombre del usuario sí o sí, escriba lo que escriba el usuario, no pondremos ninguna Conexión condicional, sino que configuraremos directamente la Conexión de reserva. De esta forma, en la sección de Conexión de reserva, seleccionamos la interacción Recoge nombre y ya tendremos conectada la primera interacción con la segunda.

Vayamos la interacción Recoge nombre.

La idea es que el Mensaje bot sea “Hombreeeee, ¡encantado Paco! ¿Quieres uno de los peores chistes de la historia?” si el nombre que introdujo el usuario fue Paco. Es decir, el nombre del usuario debemos recogerlo de la respuesta del usuario al mensaje anterior, por eso, donde aparece el nombre del usuario debemos pulsar en “Respuestas anteriores” (donde indica la flecha verde) y seleccionar la respuesta del usuario al mensaje anterior. Al hacer esto verás cómo se añade el siguiente código al mensaje:

[responseTo interaction=3644313 fallback=Amigo]

¿Qué significa todo esto? El número que aparece es el identificador del mensaje al que estaba respondiendo el usuario, es decir, la respuesta que dio el usuario cuando se le preguntó su nombre. Este identificador podemos sacarlo mirando directamente cada interacción, ya que aparece entre paréntesis debajo de cada una de ellas. Por su parte el fallback es un texto por defecto que ponemos en caso de que nuestro bot no encuentre el identificador que le hemos puesto. De manera que si el identificador está mal escrito, nos hemos equivocado o se ha producido algún fallo que imposibilita localizar un identificador correcto, nuestro mensaje utilizará la palabra genérica Amigo (o cualquier otra que pongamos aquí) para saludar al usuario.

Sigamos.

Hemos preguntado al usuario si quiere que le mostremos un chiste, pero en vez de dejarle responder, vamos a ofrecerle dos posibles respuestas para que seleccione una de ellas. La primera será ¡Claro 😍! y la segunda será NO, GRACIAS 🙃.

Para hacer esto configuraremos las Respuestas rápidas del panel de Conexiones. Escribimos la primera opción tal y como se ve:

Al terminar de escribir la respuesta, pulsamos [INTRO] y nos aparecerá la siguiente ventana:

Le decimos que sí, y a continuación configuraremos qué ocurrirá cuando se pulse en esta opción:

Nuestra intención es que cuando el usuario pulse en esta opción nuestro bot se vaya a la interacción Muestra chiste, así que configuramos nuestra condición tal y como aparece en la imagen y pulsamos en el botón Añadir respuesta rápida.

En esta ventana que sale es donde se estaría aplicando realmente la Inteligencia Artificial del bot. Imagina que el usuario en vez de pulsar sobre una respuesta rápida que le ofrecemos, hubiera tenido que responder Si, Vale, Venga, Claro, Adelante o cualquier otra palabra que signifique que sí quiere que se le muestre el chiste. En esta pantalla podríamos configurar todos los sinónimos, palabras similares, familias de palabras y cualquier otra relación entre palabras que permita aceptar la respuesta del usuario como un o como un No.

Sin embargo, no es nuestro caso, de momento en esta versión simple del bot, así que directamente pulsaremos en Cancelar para no configurar estas opciones.

De la misma manera que hemos procedido con la primera respuesta rápida, hacemos para la segunda, pero en este segundo caso lo enviaremos a Despedida sin chistes, quedamos nuestras respuestas rápidas así:

Ya que es una opción que sólo se usa en este caso, vamos a programarla:

Vamos a la interacción Despedida sin chistes, y simplemente en el panel Mensaje bot, escribimos un mensaje de respedida al usuario.

Pero, si el usuario en vez de pulsar en NO, GRACIAS 🙃 hubiera pulsado en ¡Claro 😍! tendríamos que programar la interacción Muestra chiste.

Observa este caso, porque es tremendamente interesante:

En este mensaje tenemos que hacer varias cosas. Primero queremos decirle que aquí viene un mensaje malo, luego mostrarle un chiste (de entre una lista de 65 chistes) y luego preguntarle qué tal le ha parecido, siempre en tono de broma y tratando de no repetir con frecuencia los mismos mensajes.

Lo primero que debemos entender que para meter tres mensajes distintos en el mismo Mensaje bot podemos hacer esto: mensaje1 ::next:: mensaje2 ::next:: mensaje3. De esta manera, se mostrará mensaje1 en un globito de Telegram, luego mensaje2 en otro globito y luego mensaje3 en otro globito.

Vale, primera cuestión resuelta, pero ¿cómo conseguimos hacer para que tanto el mensaje introductorio, como el chiste como el último mensaje no sean siempre los mismos? Para ello recurrimos a una utilidad de SnatchBot que son las { }, si, las llaves.

Si nosotros escribimos Hola, aquí va un mensaje ::next:: Aquí va un chiste ::next:: ¿Malo, verdad?, siempre que el usuario nos diga que quiere que le mostremos un chiste, aparecerán estos tres mismos mensajes, con lo que la apariencia de robot se pierde y parece simplemente una aplicación prediseñada para hacer siempre lo mismo, pero observa esto ahora. Si nuestro mensaje fuera:

{Hola, te dejo este truño}{Buenas, perdón por esta cagada}{Que tal, ahí va uno lamentable} ::next::, esas tres opciones que aparecen entre llaves, son mutuamente excluyentes, es decir, si se muestra una de ellas no se mostrarán las demás. De esta forma, podemos colocar 10 entradillas distintas, luego 65 chistes distintos y luego otros 10 mensajes finales disintos, y será muy difícil que se repitan para un mismo usuario utilizando el chatbot durante un rato. Si al probarlo algún mensaje se repitiera, simplemente puedes aumentar las opciones de mensajes para reducir la probabilidad de que se repita.

Finalmente, en el panel Conexiones, haremos que nuestra interacción quede enlazada con otra, la que recoge la respuesta del usuario de si quiere seguir viendo chistes o no:

En este caso, la interacción ¿Más chistes? preguntará al usuario si quiere continuar:

Y al igual que hicimos en otra de las opciones, configuraremos las respuestas rápidas para que el usuario elija si quiere continuar leyendo chistes o no:

Finalmente, si el usuario selecciona que no, que ya es suficiente, conectaremos la opción negativa con la última interacción que teníamos pendiente Despedida con chistes y le mostraríamos el mensaje final al usuario de despedida.

Para probar tu chatbot, no tienes que hacer nada más. Tampoco debes actualizar nada en Telegram. Tal y como has terminado en SnatchBot, puedes ir directamente a Telegram, buscar tu chatbot y ejecutarlo, verás cómo ya incluye todo lo que has hecho hasta el último minuto. ¿Mola verdad?

Conclusiones

Como se ha podido ver, hemos construido un chatbot que responde de forma pseudo aleatoria a ciertos mensajes, aunque el flujo de la aplicación está perfectamente controlado.

Una vez que tenemos una estructura de chatbot funcionando, sería buena idea ir un paso más allá y sustituir las respuestas rápidas, por respuestas abiertas del usuario para que podamos aplicar pequeños conceptos de PNL usando sinónimos, familias de palabras, palabra parecidas, etc…, e intentar incorporar un poco más de inteligencia a nuestro chatbot.

Este último desafío es el que te propongo para evaluar tu desempeño.

Espero que te haya gustado la experiencia de desarrollo de este primer proyecto, que el producto final te haya resultado interesante como punto de partida para trabajar más en profundidad los conceptos IA y también que seas capaz de dedicarle algunas horas más para comprobar si eres capaz de llevarlo al siguiente nivel por tí mismo.

Por mi parte, me encantará conocer hasta donde has llegado y si esta introducción te ha resultado de utilidad.

Mucho ánimo, hasta la próxima 👋.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *