- Notifications
You must be signed in to change notification settings - Fork0
abelalonso/telegram-bot
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
- Introducción
- Crear el bot en telegram
- Creación del Dockerfile
- Librerías necesarias
- Punto de entrada
- Construcción de la imagen de docker
- Configuración de la lambda
- Configuración de API Gateway
Vamos a crear un bot de telegram sencillo que simplemente repetirá lo que le escribamos. La aplicación se va a desplegar en un contenedor en los servicios de Amazon.
En telegram accedemos al botBotfather y creamo un nuevo bot con el comando:
/newbot
Después de darle un nombre y username (terminado en "_bot") tendremos un token que almacenamos en un .env
Creamos un nuevo Dockerfile con el siguiente contenido.
FROM public.ecr.aws/lambda/python:3.8COPY requirements.txt ./RUN pip install -r requirements.txtCOPY src/* ./CMD ["app.handler"]
Creamos el archivorequirements.txt con las librerías de python necesarias para el proyecto:
python-telegram-bot==13.1
Creamos la carpeta /src y en su interior el archivo app.py
importosimportjsonfromtelegramimport (Bot,Update)fromtelegram.extimport (Dispatcher,MessageHandler,Filters,CallbackContext)defecho(update:Update,context:CallbackContext)->None:update.message.reply_text(update.message.text)defhandler(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))
Generamos la imagen de docker con el comando:
docker build -t telegram-bot .
Nos creamos un profile en nuestro~/.aws/credentials con elaccess key ID y elsecret access key.
Desplegamos la imagen de docker usando el comando que se indica en ECR en el apartado "push commands":
aws ecr get-login-password --region us-east-1 --profile bot-telegram | docker login --username AWS --password-stdin 433909495486.dkr.ecr.us-east-1.amazonaws.com
Este comando permite logar nuestro docker dentro de AWS en el repositorio que hemos creado.
Ahora debemos taguear la imagen correctamente:
docker tag telegram-bot:latest 433909495486.dkr.ecr.us-east-1.amazonaws.com/telegram-bot:latest
Y subirla al repositorio:
docker push 433909495486.dkr.ecr.us-east-1.amazonaws.com/telegram-bot:latest
Copiamos la URI del repositorio que vamos a necesitarla posteriormente.
Nos vamos al servicio lambda de AWS y creamos una nueva función comocontainer image, utilizando la URI que hemos copiado anteriormente.
Configuramos las variables de entorno de la lambda para añadir el token del bot que tenemos almacenado en el .env.
En el servicio API Gateway creamos una API HTTP. Con integracióo hacia la lambda que hemos creado.
Configuramos el método POST hacia /bot
Copiamos la URL de invocación
Desde una terminal ejecutamos un curl para asociar la url de invocación de la lambda al bot de télegram.
curl -F "url=<url de invocación>" https://api.telegram.org/bot<bot-token>/setWebhook
About
Resources
Uh oh!
There was an error while loading.Please reload this page.