Introducción a la creación de bots en Telegram

Telegram es una conocida aplicación de mensajería móvil, en muchos aspectos igual a WhatsApp, la cual fue anterior en el tiempo. Aunque existen muchas otras funcionalidades en esta aplicación que, junto a la gran cantidad de usuarios que tiene, la hacen una singular aplicación de comunicación.

Una de estas funcionalidades son los bots, que son unos robots – como su nombre indica – o programas automáticos que pueden interactuar con el usuario en una gran cantidad de escenarios. Por ejemplo, @Pollbot te permite crear encuestas para que los miembros de un grupo voten a favor de una u otra opciones. Otro ejemplo distinto es @APODNASA_bot , el cual permite obtener la Astronomical Picture of the Day de la NASA, entre varias funcionalidades más.

Primeros pasos con BotFather

Para crear un bot, es necesario tener una cuenta de Telegram y tenerlo instalado en algún dispositivo. Este paso es obligatorio porque para crear bots es necesario hacer uso de otro bot, en concreto de @BotFather el cual nos dará el identificador para añadir nuestro bot a la base de datos de bots de Telegram.

Para comenzar, debemos abrir un nuevo chat con @BotFather y escribimos “/start”. Los bots pueden tener distintos comandos, los cuales se ejecutan con una barra lateral (“/”) y el comando. Se puede abrir la lista de comandos pulsando el botón de al lado de los emoticonos, cuyo icono es también la barra lateral. En nuestro caso, para crear un nuevo bot escribimos “/newbot”.

Nos pedirá distintos datos para identificar a nuestro bot. El primero es el nombre del bot, no el que se muestra en pantalla si no el identificador, el que va después de “@”, como los usuarios de Twitter, por ejemplo. Este nombre debe tener el sufijo “bot”, si no lo escribimos siguiendo esta regla nos dará un mensaje de error, hasta que pongamos un nombre válido.

IMPORTANTE: Acto seguido de poner un nombre válido nos devolverá un mensaje con un token, el cual es único y necesario para acceder a la API de Telegram y es muy importante no compartirlo con nadie, si el token se hubiera visto comprometido, podemos generar otro con el comando /revoke, que invalidará el anterior.

Ahora es útil cambiar algunos parámetros de nuestro bot para hacerlo más “bonito” de cara al usuario, como puede ser darle un nombre con “/setname”, descripción (“/setdescription”) o imagen (“/setuserpic”).

Empezando a programar

En este post vamos a hacer uso de Python en su versión 2, por lo que se recomienda un conocimiento básico de este lenguaje así como de hosting de aplicaciones en VPS.

Antes de comenzar debemos instalar un par de paquetes para poder importarlos en nuestro programa. Estos se pueden instalar con PyPi (para instalar PyPi, descargarlo de https://bootstrap.pypa.io/get-pip.py o en sistemas basados en Debian ejecutar `sudo apt-get install python-pip`), abriendo una terminal y escribiendo `pip install pyTelegramBotAPI`.

Creamos un nuevo archivo, por ejemplo main.py y le añadimos las siguientes líneas:
python
# -*- coding:utf-8 -*-import telebot # Añadir las bibliotecas necesarias
token="" # Reemplazar por el obtenido en el anterior apartadobot = telebot.TeleBot(token) # Inicializar el bot
@bot.message_handler(commands=['start'])def handle_start(message): bot.reply_to(message, "Hola mundo")
bot.polling()

Como se puede observar en el código anterior, se ha creado un bot que cuando se use el comando /start (el predeterminado para iniciar el bot) conteste al usuario __Hola mundo__. Para probar que funciona de forma local, ejecutar el archivo (`python main.py`) y acceder al bot desde Telegram.

Los comandos (que se mandan al bot con la sintaxis “/” + comando) pueden ser la palabra que queramos. Por ejemplo, una función para enviar un vídeo de YouTube sería la siguiente cuando se ejecuta el comando /video:
python
@bot.message_handler(commands=['video'])def handle_video(message): bot.reply_to(message, "https://www.youtube.com/watch?v=wjU8j2bj3RY")

Existen infinidad de funciones más predefinidas para usar, las más usuales en los chats son:

  1. send_message(chatid, text): en vez de responder a un mensaje anterior como en los ejemplos anteriores, solamente envía un mensaje al usuario.
  2. send_photo(chatid, photo): envía una foto al usuario, que ha debido de ser procesada en python con la orden `photo = open(‘/tmp/photo.png’, ‘rb’)`, aunque también es posible usar librerías como Pillow.
  3. send_audio(chatid, audio): envía un audio, el cual ha debido de ser abierto de igual manera que la foto.
  4. send_location(chatid, lat, lng): envía un mapa de Google Maps con un marcador en el punto indicado a través de la latitud y la longitud.

Las demás funciones pueden leerse en la documentación de pyTelegramAPI o directamente desde la documentación de Telegram.

Como se ve en la barra de envío de mensajes de Telegram, es posible mostrar los comandos disponibles pulsando en el botón “/”. Para ello, debemos crear una lista de comandos, ya que el bot no los coge automáticamente de nuestro código. Para ello, debemos activarlo con BotFather y el comando /setcommands.

 

 

Servidor

Los bots de Telegram se ejecutan en la parte del servidor, no en los dispositivos del usuario. Debemos hospedarlos en una plataforma web como puede ser un VPS (en https://clouding.io/ por ejemplo). No hace falta reservarlos demasiado CPU, RAM ni disco duro ya que no son pesados en general aunque si se reciben muchas peticiones a la vez puede ser aconsejable aumentar la CPU, sobre todo si se conectan a otros servidores o deben procesar muchos datos.

En un sistema GNU/Linux se ejecutan perfectamente. Para ello, debemos tener instalado los siguientes paquetes:

  1. python: `apt-get update && apt-get install python`
  2. python-pip: `apt-get install python-pip`
  3. pyTelegramAPI: `pip install pyTelegramBotAPI`
  4. screen: `apt-get install screen`

Después de haber instalado todos los paquetes hay que usar __screen__ para mantener el bot esperando a los usuarios:“`screen -S mybotpython main.py“`

Y ya estaría todo configurado. Para eliminar la ejecución de un bot, basta con ejecutar `screen -r mybot`.

CC-BY Creative Commons.

David Población Criado 

To write a comment on this article, fill out the form below. Fields marked with an asterisk (*) are required.