352

Cómo crear tu propio bot de Telegram con Python

67528Puntos

hace 4 años

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/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.

Anthony Ismael
Anthony Ismael
anthony_manotoa

67528Puntos

hace 4 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
16
70174Puntos
4 años

¡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
67528Puntos
4 años

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

7
69847Puntos
4 años

¡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!

9
67528Puntos
4 años

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

6
23039Puntos
4 años

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

6
48903Puntos
4 años

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

8
67528Puntos
4 años

Recuerda:

Nadie es infeliz programando con Python 😂🙌

3
52141Puntos
4 años

Esta buenísimo Anthony, buen trabajo 😄

3
11065Puntos
4 años

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
11956Puntos
4 años

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

2
39434Puntos
4 años

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

2
8912Puntos
4 años
<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
4 años

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
28737Puntos
4 años

Muchas gracias Anthony, excelente post!!!

2
5637Puntos
4 años

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

2
3571Puntos
4 años

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

2
14544Puntos
4 años

hacer un bot de telegram esta entre mis planes, gracias por mostrar esta informacion.

es de mucha ayuda la verdad

2
18283Puntos
4 años

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
22380Puntos
4 años

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

2
67528Puntos
4 años

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
13093Puntos
4 años

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
5637Puntos
4 años

Muchas gracias Anthony

2
5040Puntos
4 años

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.

2
15526Puntos
4 años

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
67528Puntos
4 años

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
4 años

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

2
319Puntos
4 años

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

2
42880Puntos
4 años

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.

2
8237Puntos
4 años

Esto es increíble, muchas gracias.

2
32738Puntos
4 años

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

2
23384Puntos
4 años

Increíble tu aporte! Muchas gracias!

2
5035Puntos
4 años

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
31982Puntos
4 años

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

1
3 años

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
67528Puntos
3 años

Hola 😄

Debes instalarlos en tu entorno virtual con:

pip install bs4

pip install schedule
1
9205Puntos
3 años

Te puede ayudar cambiar de ruta donde se encuentra el interprete de python, das clic en la parte inferior de VSC donde aparece la version de python que estas usando, te abrira una barra de busqueda para buscar el interprete, prueba eligiendo otra de las opciones, si no funcionan buscala manualmente dando clic alli mismo en “Enter interpreter Path…”. La version que tiene tu ambiente virtual estara en /tu_carpeta/venv/pyvenv.cfg, pyvenv.cfg es el archivo que tiene la configuracion, una vez lo elijas tu version de python te aparece entre las opciones de la barra de busqueda de interpretes y la elijes.

1
3 años

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
7593Puntos
3 años

tengo un problema no entiendo mucho sobre como subir proyectos a la nube … si lo subo a git hub me funcionaria 24/7???

1
28165Puntos
3 años

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
26994Puntos
4 años

¿Qué no se puede hacer con Python? Excelente

1
4Puntos
3 años

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
6446Puntos
3 años

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
5261Puntos
3 años

Genial, me acaba de ahorrar estar pendiente al pc en un trabajo de manitoreo!!

1
10975Puntos
4 años

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

1
3411Puntos
4 años

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
3 años

No sé porqué me das la sensación de parecerte a “Doctor House”… en buen sentido lo digo Anthony ja ja

1
39Puntos
3 años

**Ess genial, Anthony, gracias! **

Me encanta esta comunidad, soy nueva por acá.
Me gustaría saber si existe la posibilidad de armar un bot que permita consultar datos desde un excel?
Por ejemplo, Pedro quiere saber un dato concreto de una celda y con un comando, o de alguna manera, acceder al mismo con el bot… cómo puedo conectar esto?
Muchas gracias!

1
35552Puntos
2 años

Excelente aporte, a pesar de que lleva 2 años en platzi apenas lo vi, me surge una duda: ¿Cual es el tamaño maximo que acepta el mensaje para enviarse? Intente agregar una conexion a mysql y el resultado enviarlo al bot pero el mensaje no llega

1
1143Puntos
3 años

hola colegas, como puedo hacer para que el bot apenas detecte un cambio en el sitio web, me envie el mensaje por telegram?

0
4 años

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

0
4 años

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

1
67528Puntos
4 años

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
7567Puntos
4 años

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
78124Puntos
4 años

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
7567Puntos
4 años

Muchas gracias!

0
3411Puntos
4 años

Fantástico y muy practico como lo explicas, gracias

0
38Puntos
4 años

No puedo crear nada 😦

0
67528Puntos
4 años

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