290

Cómo crear tu propio bot de Telegram con Python

50036Puntos

hace 7 meses

Curso Básico de Python
Curso Básico de Python

Curso Básico de Python

Inicia en el mundo de la programación con el lenguaje de mayor crecimiento en el planeta: Python. Descubre qué es un algoritmo, y cómo se construye uno. Domina las variables, funciones, estructuras de datos, los condicionales y ciclos.

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 BeautifulSoupimport requestsimport 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<token>/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.

Curso Básico de Python
Curso Básico de Python

Curso Básico de Python

Inicia en el mundo de la programación con el lenguaje de mayor crecimiento en el planeta: Python. Descubre qué es un algoritmo, y cómo se construye uno. Domina las variables, funciones, estructuras de datos, los condicionales y ciclos.
Anthony Ismael
Anthony Ismael
anthony_manotoa

50036Puntos

hace 7 meses

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
14
43299Puntos

¡Qué increíble! Por eso Python es 💚💚💚

El tutorial es bastante práctico, pude crear el bot sin problemas gracias a la detallada manera en que lo escribiste. Ahora seguiré experimentando y creando bots.

¡Gracias!

3
50036Puntos
7 meses

¡Que bueno, Omar! Me encantará ver lo que sea que crees 😄

7
46377Puntos

¡Wow! ¿Todo eso podemos hacer con Python?

¡Muchas gracias Anthony! Una vez que lo intente te diré cómo me fue. Ojalá puedas seguir proponiéndonos más proyectos como este.

¡5 estrellas!

7
50036Puntos
7 meses

Intentaré subir todos los meses un tutorial de lo nuevo que haya descubierto ese mes (en Data Science o mini-proyectos con Python) 🙌

6
37066Puntos

Me estás tentando a tomar TODOS los cursos de Python. ¡Buenísimo!

5
50036Puntos
7 meses

Recuerda:

Nadie es infeliz programando con Python 😂🙌

5
16806Puntos

Quiero hacer un aporte como estudiante que realizo el curso de pre Works en Windows y tuvo que aplicar la siguiente configuración, dentro de la carpeta del proyecto y usando la terminal de curso en mencion:

  1. verificar si tienen instalado python 3
python3 -version
  1. Mi pc me pidio instalar pythonpy
sudo apt install pythonpy
  1. Busque y aplique actualizaciones a ubuntu:
sudo apt-getupdate
sudo apt-get upgrade
#este paso puede tomar un rato..
  1. Para poder activar el entorno virtual en python 3en la carpeta del proyecto se debe instalar:
sudo apt-get install python3-venv
  1. Luego se active en el entorno virtual
python3 -m venv .\venv\Scripts\activate
  1. Instalar bs4
pip3 install bs4
  1. Luego instalar requests
pip3 install requests
  1. Luego instalar schedule
pip3 install schedule
  1. Crear archivo donde se va a hacer el codigo para el bot
touch archivo.pycode archivo.py
  1. continuar el tutorial.

Espero que sea de ayuda para alguien que no le funcione el tutorial a la primera. Saludos

4
20470Puntos

Buen post, estaba haciendo mi bot con la API de Coinmarketcap, proporciona 10.000 llamados al mes al parecer, suficiente para el ejercicio 🧐
.
Aqui el enlace por si quieren experimentar de esta manera

Coinmarketcap

Captura.PNG
2
18987Puntos
6 meses

Sí con una API quedaria mejor, pienso igual que tu.

Gracias.

3
10450Puntos

Muchas gracias Anthony
Despertaste mi curiosidad, voy a ponerlo en practica 👍

3
6089Puntos

Maravilloso! qué buen aporte Anthony, gracias!
Ahora tengo más razones para querer aprender a programar en Python!! recién me lancé a estudiar Html, Css y Js.

3
4500Puntos

Hola a todos, para obtener el chad ID teneis que escribir esto:
https://api.telegram.org/bot(escribe tu token aqui)/getUpdates

Lo comparto porque tuve problemas a la hora de obtener el chat ID, espero que a alguien le sirva.

2
50036Puntos
7 meses

Muchas gracias por tu aporte, Fer 😄
Hubo un pequeño error en el Markdown y no se visualizaba bien justo esa parte, ya quedó corregido tal como comentas 💚

3
35740Puntos

Esta buenísimo Anthony, buen trabajo 😄

2
2349Puntos

Wow, lo logré replicaaar ✨
¡Muchas gracias por el tutorial!

2
22272Puntos

Muy buena explicación, ya lo arme esta una bestia.

2
319Puntos

Hola Ismael, ¿Conoces algún curso de Python aplicado al SEO? Gracias

2
11104Puntos

Muchas gracias Anthony, excelente post!!!

2
6389Puntos
<h1>Tony muchas gracias por este tutorial,</h1>

me gusto mucho ver el resultado con esta guía tan amigable y con la cual en medio de la diversión que promueven este tipo de retos guiados nos enseñaste funciones, variables, wescrapping y un condicional de recurrencia… tremendo 💚🏅 !

2
2039Puntos

Hola Ismael, la verdad ni idea de como funcionaban los bots en Python, pero con esta breve pero efectiva explicación me quedo claro que en tan pocas lineas de código, se puede hacer mucho con este lenguaje. Gracias!.

2
5204Puntos

Totalmente maravilloso, creare uno que hable sobre noticias.
sera mi proximo proyecto.

2
5204Puntos

Muchas gracias Anthony

2

muy buen post , y bien explicado 😃 gracias por el aporte

2
22387Puntos

Love it! Tutorial super bien explicado y práctico! 💚

2
14484Puntos

A mi me gustaría crear un bot para practicar inglés (Específicamente writting).
Aunque aún no logro comprender si solo funciona en la computadora, o si lo subiste a un servidor para que funcione aunque no tenga el ordenador encendido. Pero seguiré investigando y aprendiendo, cuando lo logre espero compartirlo 😃

0
8411Puntos
7 meses

No, el dejo el bot en local, en su computadora (O al menos eso dice)

2
50036Puntos
7 meses

Oh, suena genial 😃 ¿qué funcionalidades tendría?

Yep, el bot solo lo corrí en local así que necesito que mi consola esté corriendo para que siga funcionando. Si lo subes a la nube podrá estar siempre activo

2
7989Puntos
7 meses

Se puede hacer de las 2 maneras, en local y en un servidor, la manera mas recomendable es hacerlo en un servidor, ya que el programa estaría 24/7 corriendo, pero eso trae los costos asociados a este tipo de servicios. Pero al hacerlo en tu computadora, no tienes que pagar nada, ahora el programa solo funcionara, cuando tu computadora esta encendida.

2
6590Puntos

Gracias por tu post y wow, puede que no valla a imitar el tutorial pero como estudiante es satisfactorio ver como los temas que estudias tienen aplicaciones tan útiles en la realidad, puede que tome el curso de web scraping ya que siempre me ha gustado tratar con datos disponibles de diversas formas. 💚

0
50036Puntos
7 meses

Inténtalo, te tomará pocos minutos 😉

¡Muchas gracias por tu comentario! Y sí, es muy interesante todo lo que puedes lograr haciendo web scraping. Si lo haces estaría genial que luego nos compartas que lograste hacer 😄

2
3892Puntos

Excelente aporte. Me gustaría encontrar o saber si podemos crear bots de whatsapp bussines para devolver consultas de los usuarios que nos escriben por ejemplo si envían un comando como el 1 o 2 me devuelva la informacion asociada al id o docid del que hace la pregunta.

0
50036Puntos
7 meses

Claro que se puede 😄
De hecho hace un tiempo hice uno para un pequeño e-commerce que usa WhatsApp Business. En ese entonces no usé Python (aunque estoy seguro que se puede), sino una app que está en la PlayStore. Te la dejo acá para que le eches un vistazo: https://play.google.com/store/apps/details?id=tkstudio.autoresponderforwa

Y también te animo a que busques la manera de hacerlo con un lenguaje de programación 😉

2
8411Puntos

Justamente hice un bot con python hace unas semanas, pero en mi cado fue para discord, para aprender mas sobre python y sobre lo que se puede hacer con el.

Es un bot sencillo, lo hice siguiendo un tutorial en youtube, y por ahora lo que hace es conectarse a una API de un sitio web que retorna mensajes motivacionales (En el curso esa es la idea del bot), y ademas de eso, tiene una base de datos con mensajes motivacionales que enviara como mensajes al servidor al leer palabras que sean sinonimo de sad, unhappy y asi…

Ademas el bot esta alojado en una pagina web que sirve como server pero no lo es como tal, si quieren checarlo y ver como es un bot en discord, dejo el link a github:
https://github.com/orazioc17/DiscordBot

1
2265Puntos
7 meses

¡Hola! Suena genial ese bot ¿Podrías compartir el enlace al tutorial que seguiste? Me interesa hacer un bot para mi Discord

2
5331Puntos

Esto es increíble, muchas gracias.

2
26321Puntos

Oigan y si hacemos un tipo de bot para ayudar a mantener, rutinas, recordatorios y metas?

2

me encantaría ver si pudiera adaptar una red neuronal a uno de estos bot para reconocimiento de imágenes sería super interesante aunque nada sencillo

2
12202Puntos

Increíble tu aporte! Muchas gracias!

2
18365Puntos

No solo con python. Tambien con Javascript.
Sin embargo, tener bots para automatizar nuestro trabajo o ayudarnos realmente es util.

Y eso es lo que me encanta de Telegram.

1

Porque solo me funciona sin seleccionar las primeras 2 importaciones? si quiero ejecutar todo me dice que no existe bs4 y/o schule

error bot.png
1
50036Puntos
3 meses

Hola 😄

Debes instalarlos en tu entorno virtual con:

pip install bs4

pip install schedule
1
4Puntos

Muchas gracias por el tutorial! Lo acabo de hacer y funciona perféctamente. Me sirve de inicio con Python, como toma de contacto! Muy interesante.

Y de esta frase “Si quieres que esté activo 24/7 podrías montarlo en la nube y recibir tus notificaciones todos los días.” me surge una duda. ¿Cómo se hace? he hecho algunos scripts en local, pero nunca he subido a la nube, como dices. Tienes algún tutorial para… muy muy novatos? Gracias de antemano y disculpa mi ignorancia… 😃

1
2226Puntos

¿Qué no se puede hacer con Python? Excelente

1
1348Puntos

Excelente!!!

1
1389Puntos

Ismael una pregunta, una app como trello estará hecha con este lenguaje?? como hacen para ingresar datos en el celular e inmediatamente verlo en la web o de manera inversa.

1
14417Puntos

Python sigue siendo mi lenguaje de programación favorito, lo voy a dejar de lado un tiempo por el JS Challenge, pero este va a ser mi siguiente proyecto

1

Muy interesante el tutorial, lo puse en práctica y me funcionó… pero ahora tengo una duda. Cómo puedo hacer que mi bot sólo escuche las peticiones del grupo al que fue agregado, es decir, evitar que personas externas hagan peticiones privadas a mi bot.

1
6174Puntos

Alguien saber como puedo hacer que este bot que cree lo pueda ver otra persona? porque los mensajes solo me llegan a mi y si lo busca otra persona no le llega nada

1
50036Puntos
4 meses

Hola 😄

Serviría para otra persona siempre y cuando lo tengas corriendo en tu PC. Si detienes la ejecución, entonces ya no funcionará. La solución es subirlo a un server, o el otro día descubrí Deepnote y ahí podrías también calendarizar para que se esté ejecutando, pero no es el objetivo de la plataforma.

1
17506Puntos

A que servidor me aconsejas que lo suba para ser consumido? Gracias.

1
10755Puntos

Increíble y muy útil aplicación de Python.
Gracias por el tutorial
😉

0
26321Puntos

Si quieres complementar esta excelente información, puedes acceder** aquí

0
7247Puntos

Hola, muchas gracias por este tutorial me gustó mucho hacerlo! quisiera ponerlo a funcionar 24/7 pero ni idea como hacerlo apenas ando en bases de Python, hay algún curso externo o dentro de platzi que me recomiendes para lograrlo? un saludo y gracias de nuevo

3
63645Puntos
6 meses

No hay un curso es específico para esto, pero hay varias opciones, aunque tendrás que buscar más por tu cuenta.

La forma gratis sería con Heroku, crear una aplicación y el corra como servicio para que esté siempre activo. Lo he hecho con JavaScript, pero aún no con Python, dejé un Bot de Discord corriendo de esa forma para que estuviera siempre activo.

La otra es que uses alguna máquina virtual en nube como Digital Ocean, AWS, Google Cloud, etc. Ahí ya te tendrías que meter más a al configuración del servidor y probablemente encuentres mucha información de eso en YouTube y artículos en foros.

0
7247Puntos
6 meses

Muchas gracias!

0
1389Puntos

Fantástico y muy practico como lo explicas, gracias

0

Saludos una pregunta, si quisiera que el bot respondiera a un un llamado para pedir el precio de btc, se podría? de igual manera se podría hacer para que el bot me de el precio de multiples criptos. Estoy pensando en que se pueda usar en un grupo para solicitar el precio de la cripto que se desee

2
50036Puntos
6 meses

Hola 😃
Podrías hacerlo, pero para ello lo mejor sería usar una librería como pyTelegramBotAPI o python-telegram-bot para que exista esa interacción bidireccional y puedas solicitarlo cuando lo necesites. De la forma que lo expliqué es para un bot un poco más simple que la comunicación es unidireccional en la que solo interactúa el bot de forma calendarizada.

Para pedir el precio de varias monedas solo deberías crear un condicional según el input y hacer webscraping para cada una de las monedas.

0

tengo una pregunta antony???
este bot se puede hacer para saber cualquier tipo de informacion o solamente de los bitcoins???

1
50036Puntos
7 meses

Para lo que sea que quieras 😄
Puse lo de Bitcoin para darle un uso práctico, pero si sabes Python y web scraping, puedes aplicarlo a cualquier cosa que se te ocurra

0
38Puntos

No puedo crear nada 😦

0
50036Puntos
6 meses

Hola, @kalima1985! 😃
¿Qué parte se te dificulta?