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:
Para ello necesitas cumplir con 2 requisitos:
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.
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.
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í:
¡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.
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.
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
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
. 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.
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:
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.
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.
¡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!
¡Que bueno, Omar! Me encantará ver lo que sea que crees 😄
¡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!
Intentaré subir todos los meses un tutorial de lo nuevo que haya descubierto ese mes (en Data Science o mini-proyectos con Python) 🙌
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:
python3 -version
sudo apt install pythonpy
sudo apt-getupdate
sudo apt-get upgrade #este paso puede tomar un rato..
sudo apt-get install python3-venv
python3 -m venv .\venv\Scripts\activate
pip3 install bs4
pip3 install requests
pip3 install schedule
touch archivo.pycode archivo.py
Espero que sea de ayuda para alguien que no le funcione el tutorial a la primera. Saludos
Me estás tentando a tomar TODOS los cursos de Python. ¡Buenísimo!
Recuerda:
Esta buenísimo Anthony, buen trabajo 😄
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.
Muchas gracias Anthony
Despertaste mi curiosidad, voy a ponerlo en practica 👍
Muy buena explicación, ya lo arme esta una bestia.
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 💚🏅 !
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
Muchas gracias Anthony, excelente post!!!
Totalmente maravilloso, creare uno que hable sobre noticias.
sera mi proximo proyecto.
Wow, lo logré replicaaar ✨
¡Muchas gracias por el tutorial!
hacer un bot de telegram esta entre mis planes, gracias por mostrar esta informacion.
es de mucha ayuda la verdad
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 😃
No, el dejo el bot en local, en su computadora (O al menos eso dice)
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
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.
Muchas gracias Anthony
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.
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. 💚
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 😄
muy buen post , y bien explicado 😃 gracias por el aporte
Hola Ismael, ¿Conoces algún curso de Python aplicado al SEO? Gracias
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.
Esto es increíble, muchas gracias.
Oigan y si hacemos un tipo de bot para ayudar a mantener, rutinas, recordatorios y metas?
Increíble tu aporte! Muchas gracias!
Super!
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!.
Love it! Tutorial super bien explicado y práctico! 💚
Porque solo me funciona sin seleccionar las primeras 2 importaciones? si quiero ejecutar todo me dice que no existe bs4 y/o schule
Hola 😄
Debes instalarlos en tu entorno virtual con:
Si lo hice, pero aun asi me da error 😦
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.
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.
tengo un problema no entiendo mucho sobre como subir proyectos a la nube … si lo subo a git hub me funcionaria 24/7???
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
¿Qué no se puede hacer con Python? Excelente
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… 😃
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
Genial, me acaba de ahorrar estar pendiente al pc en un trabajo de manitoreo!!
Increíble y muy útil aplicación de Python.
Gracias por el tutorial
😉
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.
No sé porqué me das la sensación de parecerte a “Doctor House”… en buen sentido lo digo Anthony ja ja
**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!
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
hola colegas, como puedo hacer para que el bot apenas detecte un cambio en el sitio web, me envie el mensaje por telegram?
Excelente!!!
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
Muchas gracias!
tengo una pregunta antony???
este bot se puede hacer para saber cualquier tipo de informacion o solamente de los bitcoins???
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
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
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.
Muchas gracias!
Fantástico y muy practico como lo explicas, gracias
No puedo crear nada 😦
Hola, @kalima1985! 😃
¿Qué parte se te dificulta?