Cómo crear tu propio bot de Telegram con Python

Curso de Fundamentos de Python

Toma las primeras clases gratis

COMPARTE ESTE ARTÍCULO Y MUESTRA LO QUE APRENDISTE

En este post te enseñaré cómo desarrollar tu propio bot con Python, que te enviará todos los días mensajes con el precio actual de Bitcoin a Telegram. Como resumen de lo que vamos a hacer:

  1. Crear el bot desde Telegram.
  2. Obtener el token para conectar tu script con Telegram.
  3. Hacer una función en Python que envíe mensajes a Telegram.
  4. Crear una función para hacer web scraping a una web que muestre los precios de Bitcoin en tiempo real.
  5. Hacer que se envíe diariamente una actualización del precio a tu chat.

Para ello necesitas cumplir con 2 requisitos:

  • Descargar Telegram, puede ser en el celular o PC. Yo usaré la versión Desktop para este tutorial.
  • Tener instalado Python 3.

Creando el bot con BotFather

El primer paso para crear tu bot es hacer que Telegram sepa que existe. Para ello en el buscador de Telegram busca: BotFather. Abre el resultado llamado @BotFather y que tiene una marca de verificación azul.

bothfather en telegram

Interactuar con BotFather consiste en intercambiar mensajes. Dale a “Start” y te aparecerán una serie de comandos. Cada uno te servirá para personalizar tu bot al máximo.

Vamos a crear el bot ejecutando el comando /newbot o dando clic a dicho comando. Te va a preguntar el nombre del bot y luego el username. En mi caso le llamaré Btc price. Para colocar el username es importante que el nombre termine en “bot” y no puede iniciar con un número. Yo le llamaré btc_daily_update_bot.

crear un bot en telegram con bothfather

Con eso tu bot ya está creado. Ahora te va a dar un mensaje con recomendaciones, la URL del bot y tu token de acceso. No compartas con nadie este token porque cualquiera que lo tenga podría modificar tu bot.

Adicionalmente, si quieres hacer modificaciones, puedes ejecutar /help para volver a tener la lista de comandos. Con /setabouttext puedes añadir la biografía del bot y con /setuserpic podrás ponerle una foto de perfil. El mío quedó así:

bot del precio de bitcoin en telegram

¡Felicidades! Ya tienes creado tu bot y listo para programarlo y personalizarlo tanto como quieras.

A continuación, te enseñaré cómo desarrollar la lógica del bot utilizando Python como base. Si aún no conoces el lenguaje, te invito a tomar el Curso Básico de Python, ¡te va a encantar! Si ya tienes los conocimientos básicos, acompáñame a la siguiente parte.

Programando el bot con Python

Aunque existen miles de bots para Telegram, estos no se alojan en los servidores de la plataforma. Si quieres conocer más sobre la API de Telegram, acá te dejo la documentación. En este tutorial no subiré el bot a un server, sino que lo ejecutaré en local, por lo que una vez cierre la consola este dejará de funcionar.

Hay muchas librerías como pyTelegramBotAPI o python-telegram-bot que nos facilitan la vida para programar el bot. Te invito a revisarlas y dejar en los comentarios qué cosas podrías programar con su ayuda.

Como este es un bot simple, no es necesario recurrir a ellas por ahora. Ahora sí, iniciemos con el desarrollo. Estoy trabajando con cmder en Windows 10, por lo que hay algunos comandos que serán distintos si estás en Mac o Linux.

Creación de entorno virtual

Primero, como buena práctica, vamos a crear un entorno virtual para instalar los módulos que requeriremos. Para eso ejecuta py -m venv venv en la consola dentro de la carpeta de tu proyecto. Y luego con .\venv\Scripts\activate activa el entorno virtual.

Una vez activado, es hora de instalar los módulos que se necesitará para el bot. La forma más rápida es con pip, así que acá te dejo los comandos que necesitarás:

# Para obtener el precio de Bitcoin
pip install bs4
# Para conectarse con Telegram con peticiones HTTP
pip install requests
# Para que los mensajes del bot sean recurrentes
pip install schedule

El primer mensaje de tu bot

Inicia creando tu archivo .py y luego importa los módulos que acabamos de instalar:

from bs4 import BeautifulSoup  #del módulo bs4, necesitamos BeautifulSoup
import requests
import schedule

Es hora de hacer que el bot envíe su primer mensaje a Telegram. Para ello vamos a necesitar tener el token que te dio BotFather y el chat ID. Para obtener este último tienes que ejecutar tu bot en Telegram, lo puedes hacer a través del link t.me/nombreDeTuBot que recibiste al crearlo o poniendo en el buscador el username de tu bot.

Una vez lo abras, dale a /start. Luego en una nueva pestaña del navegador coloca:

https://api.telegram.org/bot(yourtoken)/getUpdates

Reemplazando(yourtoken) por tu token privado. Dale a enter y te saldrá algo como esto:

{"ok":true,"result":[{"update_id":49xxxxxx,
"message":{"message_id":2,"from":{"id":68xxxxxxx,"is_bot":false,"first_name":"Tony","last_name":"\ud83c\uddea\ud83c\udde8","username":"AnthonyManotoa","language_code":"en"},"chat":{"id":68xxxxxxx,"first_name":"Tony","last_name":"\ud83c\uddea\ud83c\udde8","username":"AnthonyManotoa","type":"private"},"date":1616777242,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}}]}

Si no te sale, vuelve a enviar /start a tu bot y luego recarga la página.

Copia el número de “id” (68xxxxxxx), no lo confundas con “update_id” o “message_id”. Esto lo vas a utilizar para que te conectes con tu propio chat más adelante.

Ahora vamos a definir una función que envíe un mensaje a Telegram. Se va a llamar bot_sendtext() y recibirá como parámetro el mensaje que el bot enviará. Para ello debemos tomar en cuenta que todas las consultas a la API de Telegram Bot deben ser atendidas a través de HTTPS y deben tener la siguiente estructura: https://api.telegram.org/bot/METHOD_NAME. Si quieres consultar todos los métodos, acá te dejo la documentación.

Así que para seguir esa estructura, primero guarda en una variable tu token y en otra tu chat ID. Luego haremos una tercera variable que contenga la estructura que nos pide Telegram y por último, vamos a retornar la petición HTTPS.

defbot_send_text(bot_message):
    
    bot_token = 'YOUR_TOKEN'
    bot_chatID = 'YOUR_CHAT_ID'
    send_text = 'https://api.telegram.org/bot' + bot_token + '/sendMessage?chat_id=' + bot_chatID + '&parse_mode=Markdown&text=' + bot_message

    response = requests.get(send_text)

    return response

¡Ahora tu bot ya funciona! Si quieres hacer la prueba, crea una nueva línea fuera de la función:

test_bot = bot_send_text('¡Hola, Telegram!')

Ejecuta en la consola el archivo .py con el que estás trabando. Es perfecto, tu primer bot en Telegram imprimió su primer “¡Hola, Telegram!" Pero no lo vamos a dejar aquí, es hora de hacer que nos dé el precio de Bitcoin todos los días.

Web scraping para obtener los datos

Para este bot vamos a necesitar sacar el precio actual de Bitcoin de una página web que lo actualice en tiempo real. Para ello vamos a usar técnicas de web scraping, pero no te preocupes, podrás entender este tutorial aunque sea la primera vez que escuchas el término. Si quieres profundizar en el tema, te invito a tomar el Curso de Fundamentos de Web Scraping con Python y Xpath.

Ahora vamos a crear la función btc_scraping(), la cual va a ingresar a la página web y analizar su estructura html para poder acceder a sus elementos:

defbtc_scraping():
    url = requests.get('https://awebanalysis.com/es/coin-details/bitcoin/')
    soup = BeautifulSoup(url.content, 'html.parser')

Para la siguiente parte necesitas ir a la web en cuestión, entrar al inspector de elementos y seleccionar la parte que nos interesa, es decir, el precio de Bitcoin. Aquí necesitarás obtener 2 datos: la etiqueta HTML a la que pertenece y el nombre de su clase:

inspector de elementor de un sitio web para hacer webscraping

Del módulo soup, traemos la función find, en la cual el primer parámetro es la etiqueta HTML del elemento que contiene el precio de Bitcoin y el segundo parámetro es un diccionario, cuya llave es class y el valor es la clase que obtuviste.

Al guardar lo anterior en la variable result, te devolverá también la etiqueta HTML y su clase. Para que te quede solo el valor, aplica el método text a la variable result y guárdala en nueva variable para que la función retorne ese resultado.

def btc_scraping():
    url = requests.get('https://awebanalysis.com/es/coin-details/bitcoin/')
    soup = BeautifulSoup(url.content, 'html.parser')
    result = soup.find('td', {'class': 'wbreak_word align-middle coin_price'})
    format_result = result.text

    return format_result

¡Ya tienes el precio de Bitcoin actualizado! Ahora vamos a hacer que te llegue como mensaje a Telegram todos los días a la hora que elijas.

Programando los mensajes recurrentes del bot

Vamos a hacer una última función que junte a las 2 anteriores y envíe el mensaje con el precio de Bitcoin a tu chat de Telegram. Para ello crea una variable que guarde el resultado de la función de web scraping y úsala como parámetro de la función que creaste para enviar mensajes al chat.

defreport():
    btc_price = f'El precio de Bitcoin es de {btc_scraping()}'
    bot_send_text(btc_price)

¡Con eso tu bot está listo! Pero vamos a hacer una última funcionalidad que haga que te envíe un mensaje todos los días a las 08:00 am. Así que añade el entry point y usemos el módulo schedule para programar los mensajes recurrentes y un ciclo while para que el bot esté siempre encendido:

if __name__ == '__main__':
        
    schedule.every().day.at("08:00").do(report)

    while True:
        schedule.run_pending()

Ten cuidado con no enviar demasiadas peticiones y saturar la web de la que estás extrayendo la información, por ejemplo, no hagas que te envíe el precio cada segundo.

Ahora sí, has terminado el bot al 100%. Recuerda que para que se mantenga en ejecución deberás tener tu archivo del bot corriendo en tu consola. Si quieres que esté activo 24/7 podrías montarlo en la nube y recibir tus notificaciones todos los días.

Acá te dejo el repositorio de GitHub del bot que acabamos de crear: telegrambot-btc.
Te invito a añadirle funcionalidades o a hacer uno completamente nuevo y compartirnos tu propio repositorio en la sección de comentarios. ¿Qué te ha parecido crear un bot para Telegram?, ¿qué otras ideas de bots tienes? Te estaré leyendo en los comentarios.

Ya viste lo que puedes hacer con Python, pero esto es solo la punta del iceberg. Con este lenguaje podrás trabajar en diversos campos como el Backend, IoT, Data Science o Inteligencia Artificial. Si aún no has dado el primer paso para aprenderlo, ahora es el momento con el Curso Básico de Python.

Bots de Discord: todo lo que necesitas saber.

Curso de Fundamentos de Python

Toma las primeras clases gratis

COMPARTE ESTE ARTÍCULO Y MUESTRA LO QUE APRENDISTE

0 Comentarios

para escribir tu comentario

Artículos relacionados