fbpx Saltar al contenido
AWS

¿Cómo crear un BOT de Telegram en AWS?

09/03/2021

Seguro que conoces Telegram. Y seguro que sabes que tiene BOTs. Pues si quieres saber cómo crear uno y desplegarlo en AWS este es tu post.

Todo esto surgió de un post en LinkedIn en el que preguntaba cómo querían que compartiese las instrucciones para crear y desplegar un BOT en AWS.

Las posibles formas eran en vídeo, PDF y en infraestructura como código. La opción ganadora fue Infraestructura como codigo.

Pero como se que también hay gente que ha respondido que no ha hecho nunca nada en infraestructura como código he decidido que voy a compartir la forma de hacerlo de las tres maneras.

Primero, en vídeo en Youtube. Después un tutorial paso a paso. Y si prefieres infraestructura como código al final del post tienes el formulario de descarga.

Crea tu BOT de Telegram viendo este vídeo

De una forma fácil y amena puedes ver el siguiente video y aprender a desplegar el BOT de Telegram.

Recuerda suscribirte al canal si te ha gustado porque seguiré añadiendo contenido para que puedas aprender sobre mas temas interesantes.

Si eres más de seguir un tutorial, sigue leyendo

¿Qué vamos a crear?

Vamos a crear un BOT de Telegram que repita lo que le enviamos

Requisitos

Los requisitos son sólo 2:

  • Tener cuenta en AWS. Puedes crear una gratuita en este enlace.
  • Tener cuenta en Telegram. Puedes bajar su aplicación desde su web y darte de alta.

Crear nuestro BOT en Telegram

Lo primero es crear un BOT en Telegram hablando con Botfather.

El comando para crear un BOT hablando con Botfather es /newbot.

Lo que nos va a pedir ahora es que le pongamos un nombre a nuestro BOT. Una vez lo pongamos hay que asignar un username al BOT. Los nombres de los BOTs en Telegram deben acabar en bot, por ejemplo ruben_bot.

Con esto hecho nos dará un Token que de la API de nuestro BOT que usaremos mas adelante.

Crear el código del BOT

Vamos a crear el código que vamos a desplegar para que el BOT funcione. Lo haremos usando Docker ya que nos facilita mucho las tareas de aprovisionamiento y posteriores actualizaciones.

Este es el Dockerfile que vamos usar.

FROM public.ecr.aws/lambda/python:3.8

COPY requirements.txt ./
RUN pip install -r requirements.txt

COPY src/* ./

CMD ["app.handler"]

En el FROM usamos la imagen de AWS Lambda para Python 3.8. Los comandos que hacemos luego son copiar un requirements.txt donde vamos a poner la librería de Telegram y despues con pip instalarla en nuestro contenedor.

Por último copiamos los archivos de la carpeta src al directorio donde se va a ejecutar el código.

Ahora creamos una carpeta src y dentro un archivo que se llame app.py con el siguiente contenido.

import os
import json
from telegram import (
    Bot,
    Update,
)
from telegram.ext import (
    Dispatcher,
    MessageHandler,
    Filters,
    CallbackContext,
)


def echo(update: Update, context: CallbackContext) -> None:
    update.message.reply_text(update.message.text)


def handler(event, context):
    print(event)
    bot = Bot(os.environ["BOT_TOKEN"])
    dispatcher = Dispatcher(bot, None, workers=0)
    dispatcher.add_handler(MessageHandler(Filters.text, echo))
    dispatcher.process_update(Update.de_json(json.loads(event["body"]), bot))

Resumiendo mucho, lo que hace este código es crear un Bot con el token que nos ha proporcionado Telegram cogiéndolo de la variable de entorno BOT_TOKEN. Después añade un handler que llama a la función echo en todos los mensajes de texto que le mandemos.

La función echo como indica su nombre hace un eco de lo que le escribimos.

Lo siguiente que tenemos que hacer es crear la imagen de Docker. Para ello en el directorio donde tenemos el Dockerfile usamos el siguiente comando.

docker build -t telegram-bot .

Siguiente paso: crear el repositorio en AWS ECR para subir la imagen.

Creamos un repositorio nuevo con el nombre telegram-bot.

Una vez creado, entra y sigue las instrucciones en View push commands para que puedas subir la imagen al repositorio.

Es importante que tengas configurada la CLI de AWS para ejecutar los comandos que vas a ver.

Una vez subida lo siguiente es crear la función Lambda que va a ejecutar el BOT.

Vamos al servicio de Lambda y creamos una nueva función de tipo contenedor. Ponemos la URI de la imagen que hemos subido previamente.

Una vez creada, en las variables de entorno debemos añadir una variable que se llame BOT_TOKEN y añadir el token de la API de Telegram.

Con esto ya tenemos la Lambda a punto.

Lo que tenemos que hacer ahora es crear un API Gateway e integrarlo con esta función Lambda.

Creamos un HTTP API y le ponemos nuestra Lambda como integración.

Definimos una ruta POST con el resource path /bot que se integre con nuestra Lambda.

Una vez hecho esto creamos la API y apuntamos la url de Invoke URL.

Usando curl vamos a configurar nuestro endpoint para que Telegram envíe los mensajes a él.

curl -F 'url=https://<API_URL>/bot' https://api.telegram.org/bot<BOT_TOKEN>/setWebhook

Hay que reemplazar <API_URL> por el Invoke URL y <BOT_TOKEN> por el token que teníamos de Telegram.

Si todo ha ido bien deberías recibir un mensaje similar a este.

{'ok': true, 'result': true, 'description': 'Webhook was set'}

Con esto ya puedes hablar con tu BOT 🤖.

¿Quieres el BOT en infraestructura como código?

¿Todavía no te decides y crees que es muy difícil seguir todos los pasos? Tengo la solución. Puedes bajarte el BOT en CDK y así instalarlo en cuestión de minutos.

¿Que no sabes qué es CDK? No pasa nada, suscríbete al canal de Youtube porque pronto lo vamos a ver en profundidad.

    * Al enviar este formulario aceptas la política de privacidad y consientes que se te envíen emails al correo introducido