Vamos a divertirnos un rato y vamos a crear un bot con telegram y python usando una raspberry pi como máquina principal o servidor.
Aconsejo leer las entradas anteriores sobre python.
¿Listos? ahora esta entrada 🤓
Ya conocemos lo básico, que es fatbot, como consumir una url en python y que es bot!.
Antes de programar
Vamos a ir a botfather (@BotFather) y vamos a crear un bot, recuerden su bot debe terminar con bot o _bot, vamos a copiar el token y guardarlo.
Preparar nuestro entorno :
- descargar imagen (recomiendo el de noobs si no tienen mucha experiencia)
- Raspberry pi 3 , puede ser cualquier versión pero debe estar conectado a internet
- Descargar vs code
- Descargar postman
VS CODE
Instalar plugin de python
Raspberry y PC
Instalar esto por el momento
- sudo apt-get install python-pip – cosas de python
- apt-get update – actualizar repo
- apt-get upgrade – actualización sistema
- pip install requests
Entendiendo nuestro bot de telegram
De este momento en adelante nuestra biblia de consulta es la página oficial de telegram
para ver todo esta bien vamos a hacer una llamada a la siguiente url:
https://api.telegram.org/bot<token>/getMe ejemplo: https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe
vamos a recibir algo asi
{ "ok": true, "result": { "id": 010292438495, "is_bot": true, "first_name": "primerbot", "username": "primerbot_bot", "can_join_groups": true, "can_read_all_group_messages": false, "supports_inline_queries": false } }
nuestro token siempre irá en la url, lo que cambiaremos serán las rutas y los tipos de llamadas.
Entendiendo la api rest para crear un bot con telegram
Como vamos viendo poco a poco, nuestro bot con telegram se trata sobre llamadas de api rest, telegram nos da unas llamadas que hace ciertas tareas, por ejemplo tenemos una ruta para recibir información de actualización.
Tenemos Api para enviar texto, imágenes, videos, animación, etc. cada llamada tiene su propia estructura ya sea para llamar o para recibir nuestra respuesta.
Una parte complicada es entender que cada llamada disponible tiene una respuesta distinta y esto es útil para cuando consumimos nuestra api rest saber que vamos a buscar en ese objeto que nos trae.
Lo sé parece muy difícil pero es para tener en cuenta que nos espera, es más fácil cuando ya lo estamos usando.
Api disponibles para nuestro bot con telegram
Actualización de nuestro bot con telegram
https://api.telegram.org/bot<token>/getUpdates
con esta llamada vamos a recibir si alguien llamo a nuestro bot o que comando llamaron.
Enviar mensajes
para usar esta llamada necesitas de manera obligada chat_id y text
https://api.telegram.org/bot<token>/sendMessage { "chat_id":225514999, "text":"prueba" }
por ejemplo podemos poner mas parámetros para esto vemos los requerimientos
chat_id | Integer or String | Yes | Unique identifier for the target chat or username of the target channel (in the format @channelusername ) |
text | String | Yes | Text of the message to be sent, 1-4096 characters after entities parsing |
parse_mode | String | Optional | Mode for parsing entities in the message text. See formatting options for more details. |
disable_web_page_preview | Boolean | Optional | Disables link previews for links in this message |
disable_notification | Boolean | Optional | Sends the message silently. Users will receive a notification with no sound. |
reply_to_message_id | Integer | Optional | If the message is a reply, ID of the original message |
reply_markup | InlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardRemove or ForceReply | Optional | Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. |
Vamos a poner el siguiente body
{ "chat_id":255219699, "text":"*bold text* _italic text_ [inline URL](https://unprogramador.com/) [inline mention of a user](tg://user?id=123456789) `inline fixed-width code` ```esto es solamente una prueba ```", "disable_notification": "false", "reply_to_message_id": 1734993, "parse_mode": "Markdown" }
Enviar una imagen
Chat_id y photos son obligatorio para esta llamada, nuestro archivo sera un multipart y un máximo de 20 mb.
https://api.telegram.org/bot<token>/sendPhoto?chat_id=<chat_id>
Así para cada llamada, vamos a la páginas de telegram, vemos que metodo queremos usar, y ponemos en el cuerpo los parámetros que nos indica la api.
En este ejemplo seleccionamos el método sendVoice, el cual como mandamos un input podemos pasar el parámetros por get para que no nos compliquemos la vida, en otros casos donde no hay un input, podemos usar el ejemplo de la imagen.
Así vamos a construir cualquier llamada api rest de forma sencilla.
Ahora ya entendiendo como funciona telegram podemos comenzar a crear nuestro propio bot
El siguiente tutorial vamos a crear un bot con telegram que nos mande una foto.
[…] To know how to create a bot or how to understand the telegram api I recommend reading the previous post. […]
[…] Crear bot con telegram y python – parte 1 […]
[…] Crear bot con telegram y python – parte 1 […]
[…] Para saber cómo crear un bot o cómo entender la api de telegram recomiendo leer el post anterior. […]