Tu propio bot de Telegram para enviar mensajes.

Este es uno de los capítulos del tutorial Exprimiendo Telegram. Crea tu propio bot para Telegram.. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

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.

Exprimiendo Telegram. Tu propio bot de Telegram para enviar mensajes. Portada.

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,

23 comentarios en “Tu propio bot de Telegram para enviar mensajes.

  1. buen día, me podrían ayudar con la instalación de «python3-future» y «python3-certifi»? me aparece el siguiente error:
    «E: No se ha podido localizar el paquete python3-future»
    «E: No se ha podido localizar el paquete python3-certifi»

    En mi laptop funciona todo bien, pero en la raspberry no puedo instalar esas dos dependencias. Agradezco mucho la ayuda.

    1. Hola,

      Entiendo que en la Raspberry tienes la versión Jessie. En ese caso, tienes dos opciones, o bien actualizas a Stretch, o bien, haces los siguientes pasos,

      añades la línea «deb http://ftp.debian.org/debian jessie-backports main» al final de «/etc/apt/sources.list»

      actualizas

      $ sudo apt update
      e instalas los dos paquetes de la siguiente forma,

      $ sudo apt -t stretch-backports install python3-future
      $ sudo apt -t stretch-backports install python3-certifi

      Un saludo.

      1. muchas gracias, he tomado la opción 2 y ya funciona el bot.

        Quisiera hacer una pequeña corrección, en la línea
        $ sudo apt -t stretch-backports install …
        saldrá error. Lo corregí cambiando «stretch-backports» por «jessie-backports» ya que así fue como quedó guardado en el archivo sources.list.

  2. Tengo problemas a la hora de instalar el senderbot, intentandolo tando desde el repositorio como de git.
    Una vez clonado el repositorio intento ejecutar el senderbot y me da el siguinete resultado:
    Traceback (most recent call last):
    File «./senderbot», line 38, in
    import lxml.html as lh
    ImportError: No module named ‘lxml’

    y si intento añadir el repositorio e instalar directamente el senderbot me da estos problemas:
    – sudo add-apt-repository ppa:atareao/telegram:
    Traceback (most recent call last):
    File «/usr/bin/add-apt-repository», line 95, in
    sp = SoftwareProperties(options=options)
    File «/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py», line 109, in __init__
    self.reload_sourceslist()
    File «/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py», line 599, in reload_sourceslist
    self.distro.get_sources(self.sourceslist)
    File «/usr/lib/python3/dist-packages/aptsources/distro.py», line 89, in get_sources
    (self.id, self.codename))
    aptsources.distro.NoDistroTemplateException: Error: could not find a distribution template for Raspbian/stretch

    – sudo apt install senderbot: (Obviamente me dice que no encuentra el paquete, pero pego el resultado)
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    E: Unable to locate package senderbot

    Trabajo desde una raspberry pi zero con version 9.3

        1. Hola Naiara,

          Puedes utilizar telegram-cli para el script en bash, pero no se exactamente porque quieres hacerlo en bash, y no utilizando Python….

          Yo lo tengo implementado siguiendo los pasos que indico aquí en una Raspberry Pi. Para cada vez que se apaga (de forma programada) o se reinicia me avisa….

          Te recomiendo que sigas los pasos indicados aquí, y si tienes cualquier problema, me dices y te ayudo. Si utilizas Telegram, ponte en contacto conmigo por allí (si quieres) y lo resolvemos fácil.

          Un saludo y gracias

  3. Hola!
    Gracias por el artículo, es justo lo que estaba buscando para poder mandarme telegram desde mi servidor de Ubuntu 18.04.
    Al ejecutar senderbot -h (instalado mediante GIT), me da el siguiente error:
    Traceback (most recent call last):
    File «./senderbot», line 26, in
    from PIL import Image
    ModuleNotFoundError: No module named ‘PIL’

    ¿Sabrías decirme como puedo solucionarlo?

    Gracias de antemano,
    Fede

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *