En el artículo anterior de Exprimiendo Telegram vimos los pasos mínimos indispensables para crear un bot. Allí vimos como utilizando BotFather dábamos de alta nuestro bot. En este proceso, obteníamos un token, que será el que hoy utilizaremos para que nuestro bot funcione. Las primeras funcionalidades que le vamos a dar a nuestro bot van a ser muy sencillas. Inicialmente este bot de telegram solo mandará mensajes de texto plano.
Sin embargo, como veremos en próximos artículos, veremos como ampliar nuestro bot inicial, añadiendo nuevas funcionalidades para enviar ubicaciones, documentos, contactos, audios, imágenes, vídeos y mucho mas.
Un bot de telegram para enviar mensajes
La API para construir un bot de telegram
Como ya comentamos en el artículo anterior, vamos a utilizar una API que nos permite integrar de forma muy sencilla Telegram con Python. Se trata de python-telegram-bot , y es una librería liberada bajo licencia LGPLv3. Como verás de aquí en adelante, es muy sencilla de utilizar, y nos va a permitir crear nuestro bot de Telegram de forma muy sencilla.
Requisitos
Como he comentado en el punto anterior, es requisito indispensable tener la librería de Python, python-telegram-bot. aunque para facilidad, y como hago en otras ocasiones, he creado un repositorio del bot de Telegram senderbot en GitHub. Para instalarlo todo lo necesario solo tienes que ejecutar la siguiente orden en un terminal,
git clone --recursive https://github.com/atareao/senderbot.git
Es posible que necesites alguna dependencia adicional, como puede ser python3-future
, python3-certifi
, python3-requests
. En ese caso ejecuta la orden,
sudo apt install python3-requests sudo apt install python3-future sudo apt install python3-certifi
Una vez clonado el repositorio en tu equipo, dentro del directorio src
encontrarás el bot de Telegram en cuestión, senderbot. Como verás es un sencillo ejecutable que funciona desde la línea de comandos. Pero, vamos paso por paso.
La parte importante, y básicamente lo único que nos interesa de este archivo es lo siguiente,
class SenderBot(Bot): def __init__(self, token=None, channel_id=None): if token is None or channel_id is None: configuration = Configuration() token = configuration.get('token') channel_id = configuration.get('channel_id') Bot.__init__(self, token) self.channel_id = channel_id def send_message(self, text): super(SenderBot, self).send_message(chat_id=self.channel_id, text=text, parse_mode=ParseMode.HTML)
Como ves es muy sencillo, tan solo heredamos de la clase Bot
de la librería y para enviar un mensaje, en formato HTML, utilizando el modo ParseMode.HTML. También hay posibilidad de utilizar otro modo que sería ParseMode.MARKDOWN, para enviar el mensaje en Markdown.
Ahora bien, ¿De donde sacamos el parámetro channel_id
y a que se refiere?. channel_id
es la identificación de donde lo vamos a enviar. Por ejemplo, en mi caso, yo suelo enviar mensajes desde la Raspberry Pi a mi cuenta de Telegram. Esto lo hago por ejemplo para informa cuando termina un proceso o cuando se produce un evento en particular.
Para obtener el channel_id
de nuestra cuenta, tan solo tenemos que llamar al bot de Telegram @get_id_bot. Al iniciar el bot /start
nos mandará un mensaje en el que nos indica Your Chat ID = 1234567
. Este es el que debemos utilizar.
Instalación del bot de Telegram desde repositorio
Como ya comenté en el artículo anterior, he creado un repositorio en Launchpad, desde donde podrás instalar el bot, sin necesidad de aprender a programar en Python, ni nada de nada. Para la instalación, debemos ejecutar las siguientes órdenes,
sudo add-apt-repository ppa:atareao/telegram sudo apt update sudo apt install senderbot
Uso y funcionamiento de senderbot
En el caso de que no instales senderbot
es decir, que simplemente clones el repositorio, entra en el directorio src
y ejecuta senderbot -h
para ver las instrucciones de uso. En el caso de que lo hayas instalado desde repositorio, ejecuta directamente la siguiente orden,
senderbot -h
Al ejecutar esta orden senderbot
nos muestra la siguiente ayuda,
Usage: senderbot [options] arg Options: -h, --help show this help message and exit -c CHANNEL_ID, --set-channel-id=CHANNEL_ID set channel id where bot will send messages -m MESSAGE, --message=MESSAGE send a message to the channel -p, --print-config Print configuration -t TOKEN, --set-token=TOKEN set the TOKEN of the bot
Las opciones son las siguientes,
-h
nos muestra la anterior ayuda-c
nos permite definir elID
del canal, tal como hemos visto anteriormente.-t
nos permite definir elTOKEN
del bot como vimos en el artículo anterior.-p
nos muestra la configuración, básicamente elID
del canal y elTOKEN
del bot.-m
nos permite enviar un mensaje con formato HTML
Así para configurar nuestro bot, ejecutaríamos la orden,
senderbot -c 1234567 -t XXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXX
Ahora podríamos mandar un texto en negrita ejecutando la siguiente orden,
senderbot -m "<strong>Hola</strong>"
Si piensas enviar varios mensajes seguidos, conviene que los agrupes en un solo, puesto que cada vez que envía un mensaje lee los parámetros del archivo de configuración, lo que es poco eficiente.
Conseguir que el bot de Telegram te avise cuando se inicia tu equipo o se apaga
Esto es relativamente sencillo. En el caso de que lo hayas instalado desde el paquete del repositorio, no debes preocuparte, porque ya añadí yo los archivos en cuestión. Solo te tienes que preocupar de habilitar o inhabilitar los servicios.
Servicios de inicio y fin
Tan solo debes añadir dos archivos al directorio /etc/systemd/system
. En mi caso los he llamado message_start.service
y message_stop.service
. Cada uno de los dos sirve para avisarte cuando se inicia tu equipo, o cuando se apaga respectivamente.
Antes de nada, debes configurar senderbot
para que lo utilice el administrador, para lo que ejecutarás la siguiente orden,
sudo senderbot -c 1234567 -t XXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXX
El contenido de los archivos será el siguiente,
message_start.service
[Unit] Description=Message for start [Service] Type=oneshot RemainAfterExit=false ExecStart=/usr/bin/python3 /usr/bin/senderbot -m "Iniciando" [Install] WantedBy=multi-user.target
message_stop.service
[Unit] Description=Message for stop [Service] Type=oneshot RemainAfterExit=true ExecStart=/bin/true ExecStop=/usr/bin/python3 /usr/bin/senderbot -m "Parando" [Install] WantedBy=multi-user.target
Para habilitar los servicios tienes que ejecutar las siguientes órdenes,
sudo systemctl enable message_start sudo systemctl enable message_stop
Si te has cansado de utilizarlos puedes ejecutar las siguientes órdenes para inhabilitarlos,
sudo systemctl disable message_start sudo systemctl disable message_stop
Por último, para conocer si están habilitados o inhabilitados, ejecutarás las siguientes órdenes,
sudo systemctl is-enabled message_start sudo systemctl is-enabled message_stop
Por supuesto que puedes cambiar los mensajes que he puesto de “Inciando” y “Parando”, por tus propios mensajes y personalizarlos según tus necesidades.
Conclusiones
Ya tienes tu primer bot de Telegram. Se trata de un punto de partida, para que veas sobre todo como funciona la API de Telegram y la librería para Python que he mencionado al inicio. Además he completado el bot de Telegram con dos servicios para que nos avise cuando se inicie y se detenga nuestra máquina, aunque recuerda que debes configurar el bot para el administrador del equipo.
En el próximo artículo veremos como ampliar nuestro bot con nuevas funcionalidades, para además de enviar mensajes, dar la posibilidad de que envíe imágenes, archivos de audio y archivos en general.
Más información: AskUbuntu
Fuente: atareao