Cómo hacer un bot para Telegram (Python)

Tiempo de lectura: 4 minutos

Buenas a tod@s, hoy os voy a enseñar como crear un pequeño bot para utilizarlo con Telegram.

Un bot es un usuario más dentro de un chat, pero que responde solo. Es decir, es un pequeño robot qué tiene imagen de usuario, nombre y capacidad de responder un mensaje o escribir mensajes automáticos según la pregunta qué se le haga.

En este ejemplo, vamos a crear un pequeño bot que responda a todo lo que se le escriba, además servirá de ejemplo para que podáis desarrollar vuestros propios bot utilizandolo de base.

Antes de nada, hay que registrar al bot utilizando BotFather, un bot que ha creado Telegram para poder registrar nuestros nuevos bots.

@botFather

Para utilizarlo pulsamos en https://t.me/botfather

Para crear nuestro bot escribimos /newbot en el chat:

/newbot

> Alright, a new bot. How are we going to call it? Please choose a name for your bot.

Ahora tenemos que introducir el nombre del bot, es importante saber que el nombre tiene que ser nombre_bot:

nombre_bot

> Done! Congratulations on your new bot. You will find it at t.me/nombre_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:
543759345:AHsjdfUUdfsi2kjksaKKKdmmmsddd
Keep your token secure and store it safely, it can be used by anyone to control your bot.

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

Una vez creado, BotFather nos envía el token de acceso de nuestro bot

543759345:AHsjdfUUdfsi2kjksaKKKdmmmsddd

Este token tendremos que añadirlo más adelante en nuestro código para poder utilizar nuestro bot totalmente registrado en Telegram.

Vamos a programar este bot utilizando Python.

Comenzamos instalando Python 3

sudo apt install python3.8

En mi caso instalo python3.8, podéis instalar la versión de Python que prefiráis y sea compatible con telebot (https://pypi.org/project/pyTelegramBotAPI/)

Ahora instalamos pip para poder instalar las librerías necesarias.

sudo apt install python3-pip

Y ahora instalamos la librería Telebot (versión de

Y ahora instalamos la librería Telebot (versión de pytelegrambotapi).

pip install pytelegrambotapi

Una vez instalado, ya tenemos el entorno listo.

Ahora abrimos nuestro editor de código favorito, puede ser VisualStudio Code, notepad++…

Creamos un archivo llamado bot.py y añadimos lo siguiente.

# -*- coding: utf-8 -*-

# Importamos telebot
import telebot

# Añadimos el token que nos ha dado botfather
token_bot = 543759345:AHsjdfUUdfsi2kjksaKKKdmmmsddd

# Inicializamos al bot registrandolo con el token
bot = telebot.TeleBot(token_bot)

Con este código registramos al bot para comunicarnos con Telegram

Y ahora vamos a hacer la magia.

# -*- coding: utf-8 -*-

# Importamos telebot
import telebot

# Añadimos el token que nos ha dado botfather
token_bot = 543759345:AHsjdfUUdfsi2kjksaKKKdmmmsddd

# Inicializamos al bot registrandolo con el token
bot = telebot.TeleBot(token_bot)

# Creamos una función dónde vamos a recibir todos los mensajes del chat en el que esté incluido el bot
# Pasamos mensajes (es una lista de mensajes)

def recibir_mensajes(mensajes):
    # Recorremos la lista de mensajes:
    for mensaje in mensajes:
        # Ejemplo para imprimir el mensaje que llega
        print('El mensaje es ', mensaje.json['text'])
        # Obtiene id del chat para poder responder con el bot
        id_chat = mensaje.chat.id
        # Respondemos un texto usando el bot
        bot.send_message(id_chat, "Te respondo y soy un Bot")

# Registramos la función dónde vamos a recibir los mensajes del chat
bot.set_update_listener(recibir_mensajes)

# Decimos que el bot no finalice
bot.polling(none_stop=True)

Hemos creado la función recibir mensajes, tal como indico en los comentarios, esta función recorre todos los mensajes que se escriben dentro de un chat o canal y el bot responde automáticamente.

Para responder, utiliza la función de send_message, pasandole el id_chat y el texto String que queramos responder con el Bot.

Luego registramos la función dónde Telegram enviará los mensajes usando el set_update_listener

Para que os hagáis una idea, un mensaje de Telegram es un JSON con la siguiente estructura:

 {
 	'content_type': 'text',
 	'id': 85,
 	'message_id': 85,
 	'from_user': {
 		'id': 3124454,
 		'is_bot': False,
 		'first_name': 'Nombre usuario',
 		'username': 'user_name_telegram',
 		'last_name': None,
 		'language_code': None,
 		'can_join_groups': None,
 		'can_read_all_group_messages': None,
 		'supports_inline_queries': None
 	},
 	'date': 1652017138,
 	'chat': {
 		'id': -993482,
 		'type': 'group',
 		'title': 'Test',
 		'username': None,
 		'first_name': None,
 		'last_name': None,
 		'photo': None,
 		'bio': None,
 		'has_private_forwards': None,
 		'description': None,
 		'invite_link': None,
 		'pinned_message': None,
 		'permissions': None,
 		'slow_mode_delay': None,
 		'message_auto_delete_time': None,
 		'has_protected_content': None,
 		'sticker_set_name': None,
 		'can_set_sticker_set': None,
 		'linked_chat_id': None,
 		'location': None
 	},
 	'sender_chat': None,
 	'forward_from': None,
 	'forward_from_chat': None,
 	'forward_from_message_id': None,
 	'forward_signature': None,
 	'forward_sender_name': None,
 	'forward_date': None,
 	'is_automatic_forward': None,
 	'reply_to_message': None,
 	'via_bot': None,
 	'edit_date': None,
 	'has_protected_content': None,
 	'media_group_id': None,
 	'author_signature': None,
 	'text': 'ef',
 	'entities': None,
 	'caption_entities': None,
 	'audio': None,
 	'document': None,
 	'photo': None,
 	'sticker': None,
 	'video': None,
 	'video_note': None,
 	'voice': None,
 	'caption': None,
 	'contact': None,
 	'location': None,
 	'venue': None,
 	'animation': None,
 	'dice': None,
 	'new_chat_member': None,
 	'new_chat_members': None,
 	'left_chat_member': None,
 	'new_chat_title': None,
 	'new_chat_photo': None,
 	'delete_chat_photo': None,
 	'group_chat_created': None,
 	'supergroup_chat_created': None,
 	'channel_chat_created': None,
 	'migrate_to_chat_id': None,
 	'migrate_from_chat_id': None,
 	'pinned_message': None,
 	'invoice': None,
 	'successful_payment': None,
 	'connected_website': None,
 	'reply_markup': None,
 	'json': {
 		'message_id': 85,
 		'from': {
 			'id': 3124454,
 			'is_bot': False,
 			'first_name': 'Nombre_usuario',
 			'username': 'user_name_telegram'
 		},
 		'chat': {
 			'id': -993482,
 			'title': 'Test',
 			'type': 'group',
 			'all_members_are_administrators': True
 		},
 		'date': 1652017138,
 		'text': 'Texto enviado por el chat con el usuario user_name_telegram'
 	}
 }

Viendo esta estructura podemos elegir qué campos utilizar para responder con nuestro Bot, por ejemplo podríamos utilizar algún campo para saber si el usuario termina de entrar en el chat.

Finalmente, para ejecutar nuestro código ponemos en la consola.

python3 bot.py 

Y el bot quedará a la espera de recibir un mensaje.

Para que funcione en un chat o grupo, tendremos que buscar al bot indicando el nombre que hemos registrado con BotFather (en el ejemplo es @nombre_bot) y añadirlo al grupo.

Para que el bot tenga permisos de leer los mensajes hay que darle permisos de administrador.

Y con estos pasos hemos creado un bot para Telegram.

Si quieres ver cómo añadir comandos a este Bot, puedes visitar Añadir comandos a un bot de Telegram (Python)

5 comentarios en «Cómo hacer un bot para Telegram (Python)»

Deja un comentario