Lunes, Diciembre 11, 2017

Exprimiendo Telegram. Tu propio bot de Telegram para enviar mensajes

senderbot

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 /startnos 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 el ID del canal, tal como hemos visto anteriormente.
  • -t nos permite definir el TOKEN del bot como vimos en el artículo anterior.
  • -p nos muestra la configuración, básicamente el ID del canal y el TOKEN 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

¿Quién está en línea?

Hay 181 invitados y ningún miembro en línea

Contador de Visitas

9070523
Hoy Hoy 362
Ayer Ayer 967
Esta semana Esta semana 362
Este mes Este mes 9290
Total de Visitas Total de Visitas 9070523

Día con más
visitantes

11-11-2017 : 2493

Gracias por su visita