Hace unos días tuve programe un bot de Telegram para registrar los asistentes a un evento: la idea es sencilla, aquellos participantes buscaban el bot; cuando se conectaran al mismo respondía un mensaje con el comando y que parámetros debían usar para registrarse. Al recibir el comando con los parámetros, verificaba que los parámetros estén bien, los guardaba en una base de datos y les respondía que fueron registrados.
A continuación les detallo los pasos para crear un sencillo bot de Telegram que responda un comando.
1 – Crear el bot en Telegram
El primer paso es crear un bot desde Telegram, para ello se recurre a un bot llamado BotFather, este bot nos permite crear un bot y obtener un API Token que luego utilizaremos desde nuestro programa.
También nos brinda link de la API de los bots
https://core.telegram.org/bots para que podamos ver que funciones tenemos.
Utilizando el comando /newbot y siguiendo los pasos que nos indica BotFather creamos el nuevo bot y nos brinda el Token.
Para ahorrar tiempo utilice la version web de Telegram, es más sencillo realizar las capturas y las pruebas.
Debemos indicar un nombre para el bot y luego un usuario, Telegram nos pide que el usuario del bot termine con la palabra bot.
2 – Librería, python-telegram-api
Necesitamos alguna libreria para que nos sirva de interface con la API de Telegram, afortunadamente esta libreria ya existe en Pÿthon y se llama python-telegram-bot, la instalamos en nuestra pc utilizando pip:
pip install python-telegram-bot
3 – Programando nuestro bot
La forma mas sencilla es adaptar uno de los ejemplos provistos por Telegram, el ejemplo que utilice se llama echobot2, cuya funcion simplemente a frase ingresada por el usuario responder con la misma frase.
Sugiero que se descarguen el archivo en su maquina, y lo tengan abierto en el editor. Lo primero que debemos hacer es indicar cual es nuestro token; para ello dentro de la función main() reemplazamos «TOKEN» por el nuestro.
updater = Updater("INGRESAR AQUI EL TOKEN", use_context=True)
Guardamos el cambio. Ahora podremos ejecutar el programa y posteriormente buscar en Telegram nuestro bot, lo hacemos utilizando el nombre que le dimos.
Como se comento antes, el bot simplemente responde a cada frase del usuario con la misma frase. Vamos modificarlo para que solo responda cuando se escriba «manzana verde», y responda con la frase «prefiero comer pizza».
Para ello si buscamos dentro de la función main(), encontraremos una linea con lo siguiente:
dp.add_handler(MessageHandler(Filters.text, echo))
Básicamente lo que hace es procesar todos los mensajes, indicando cual sera la función que realizara esta tarea, en este caso se llama echo.
Si buscamos la función echo, vemos que es bastante sencilla, recibe dos parámetros update y context; y dentro de la función tiene una sola linea:
update.message.reply_text(update.message.text)
update.message.text es el texto del mensaje que escribio el usuario, y
update.message.reply_text() es la función que permite al bot responder en la conversación.
Comentamos esa linea y la modificamos de la siguiente manera:
#update.message.reply_text(update.message.text)
if(update.message.text.upper().find("MANZANAS VERDES") > 0 ):
update.message.reply_text("Prefiero comer pizza")
Guardamos, volvemos a ejecutar nuestro bot y cuando realizamos una prueba ocurre lo siguiente:
El siguiente paso seria crear un comando para que ejecute una acción especifica. Crearemos un comando llamado sumar, que reciba dos parámetros y los sume. Para esto debemos volver a ir a la función main(), y donde estan definidos los diferentes handler, crearemos uno nuevo, justo debajo de los ya existentes:
dp.add_handler(CommandHandler("start", start))
dp.add_handler(CommandHandler("help", help))
dp.add_handler(CommandHandler("sumar", sumar))
Aquí le indicamos que para el comando «sumar» llame a la función «sumar» (no estuvimos muy creativos). Debemos definir sumar, de la siguiente manera:
def sumar(update, context):
try:
numero1 = int(context.args[0])
numero2 = int(context.args[1])
suma = numero1 + numero2
update.message.reply_text('La suma es '+str(suma))
except (IndexError, ValueError):
update.message.reply_text('Por favor utiliza dos numeros')
Desde context podemos obtener los argumentos, lo utilizamos dentro de un bloque de try para poder responder en caso que no se envíen numero y falle la conversión a enteros, en ese caso respondemos que solo utilice números. En el caso que los podamos convertir los sumamos y devolvemos la suma con update.message.reply_text().
Como ven es muy sencillo crear un bot de Telegram que realice una tarea simple.
El repositorio con el ejemplo es el siguiente:
https://github.com/gsampallo/micropython_demo_bot
Recuerden, que el token se revoco, por lo que sera necesario que Uds. creen un nuevo bot y utilicen su propio token.
Que buenos tutoriales amigos yo estaba viendo un curso como programarlos con dialogflow pero este método también se ve muy genial saludos. T.me/Luis0H