Cómo enviar un mensaje a un chat de Telegram usando Python como lenguaje de programación. En este ejemplo usaremos las librerías Telebot y Telethon de Python. Comprobaremos si tenemos autorización para enviar mensajes y pediremos el código de autorización si no la tenemos. Enviaremos un mensaje usando tanto el nombre de usuario de Telegram como el ID de chat.
- Requisitos para enviar mensaje a chat de Telegram desde programa Python.
- Aplicación Python que envía un mensaje a un chat de Telegram.
Requisitos para enviar mensaje a chat de Telegram desde programa Python
Tener instalado Python en el equipo
En primer lugar necesitaremos tener instalado Python en el equipo. En el siguiente artículo explicamos cómo hacerlo:
Alta de App en Telegram con nuestro usuario para obtener api_id y api_hash
En segundo lugar, necesitaremos registrar la App en Telegram. Será ésta la que usemos para el envío de los mensajes y, por lo tanto, debe tener autorización (para evitar el spam).
Para dar de alta la App en nuestro usuario de Telegram, accederemos a la URL oficial de Telegram:
Introduciremos nuestro número de teléfono (con formato internacional. Por ejemplo, para un teléfono de España, sería +34666555444:
Telegram nos enviará un código de verificación al chat «Telegram» de nuestra cuenta:
Introduciremos este código en «Confirmation code» y pulsaremos «Sign In»:
Si ya tenemos una App dada de alta, nos mostrará el App api_id y el App api_hash de nuestra cuenta. Anotaremos estos datos pues los necesitaremos para enviar mensajes:
En caso de no tener App, nos mostrará directamente la página de creación de una nueva aplicación (application). Rellenaremos los datos y pulsaremos «Create application»:
Una vez creada nos mostrará, como hemos indicado anteriormente, el App api_id y el App api_hash de nuestra aplicación Telegram. Anotaremos estos datos que necesitaremos en el código Python para envío de mensajes.
Instalar librerías necesarias para enviar mensajes a chat de Telegram desde Python
Necesitaremos las librerías telebot y telethon, que deberemos instalar previamente. En el caso de un equipo Windows, lo podremos hacer abriendo una ventana de MS-DOS (símbolo de sistema). Para instalar telebot ejecutaremos el comando:
pip install telebot
Y para instalar telethon ejecutaremos el comando:
pip install telethon
De esta forma tendremos disponibles estas dos librerías que contienen los métodos para la conexión con Telegram y el envío de mensajes, entre otras muchas cosas.
Bot de Telegram
Necesitaremos disponer de un Bot de Telegram, que será al que le enviemos los mensajes. En el siguiente artículo explicamos cómo crear un bot de Telegram y cómo obtener su token. Necesitaremos este token para la validación de nuestro programa de envío de mensajes a chat de Telegram:
Anotaremos el token de seguridad del Bot de Telegram creado, que necesitaremos a continuación en el código de nuestra aplicación Python.
Obtener ID de Chat de Telegram y nombre de usuario de Telegram
Para enviar los mensajes necesitaremos o bien el nombre de usuario de Telegram o bien el ID de chat con el Bot. Cualquiera de los dos datos será suficiente. Para obtener nuestro nombre de usuario de Telegram podremos verlo en el perfil:
Y para obtener el ID de Chat de Telegram con el bot, podremos hacerlo de varias formas. La forma más sencilla es obteniendo el token de nuestro bot, que ya lo tendremos obtenido como hemos indicado anteriormente. Enviaremos un mensaje a nuestro bot:
Y accederemos a la URL siguiente:
https://api.telegram.org/botXXXXX:YYYYYY/getUpdates
Cambiando XXXXX:YYYYYY por el token de nuestro bot.
Nos mostrará el mensaje enviado y sus datos en formato JSON, entre ellos el ID de chat:
Otra forma de obtener el ID de Chat, más complicada, es mediante código, por ejemplo usando C#:
1 2 3 4 5 6 7 8 9 10 11 |
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; var me = Program.miBot.GetMeAsync().Result; Update[] updates = Program.miBot.GetUpdatesAsync(offset).Result; foreach (var update in updates) { offset = update.Id + 1; if (update.Message == null) continue; long idChat = update.Message.Chat.Id; } |
Y una tercera forma de obtener el ID de chat es mediante un bot de terceros, pero esto no lo recomendamos. El mejor método es mediante la URL como hemos indicado anteriormente.
Aplicación Python que envía un mensaje a un chat de Telegram
A continuación mostramos el código fuente en Python para enviar un mensaje a un chat de Telegram. El código fuente está comentado y explicado. Incluimos dos métodos, uno para enviar un mensaje a un chat usando el nombre del usuario de Telegram, y otro para enviar un mensaje a un chat a través de su ID.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# importamos las librerías requeridas from asyncio.windows_events import NULL from logging import NullHandler from telethon.sync import TelegramClient from telethon.tl.types import InputPeerUser, InputPeerChannel from telethon import TelegramClient from telethon.errors import SessionPasswordNeededError # App_ID, Api_Hash obtenidos desde web de Telegram de autorización de aplicación appID = '112233' appAPIHash = 'abcdefgh123456789' # Token del Bot de Telegram al que llegará el mensaje tokenBot = '123456789:ABCDEFGHIJKLMNOPQRST' # Mensaje que se enviará al chat del Bot de Telegram mensaje1 = "Envío de mensaje desde aplicación Python a chat de bot de Telegram por ProyectoA, usando el ID de Chat ?" mensaje2 = "Envío de mensaje desde aplicación Python a chat de bot de Telegram por ProyectoA, usando el nombre de usuario ?" # Número de telefóno móvil (incluyendo código de país) numeroTelefono = '+34666777888' # Nombre de usuario en Telegram al que se enviará el mensaje nombreUsuarioTelegram = 'mi_usuario_telegram' # O bien, si no queremos usar el nombre de usuario, el ID del chat al que se enviará el mensaje idChat = 1122334455 print("Conectando con Telegram...") # Creamos sesión de Telegram clienteTelegram = TelegramClient('sesión', appID, appAPIHash) print("Iniciando sesión en Telegram...") # Iniciamos una sesión de Telegram clienteTelegram.connect() # Si se ejecuta por primera vez, Telegram generará un código de inicio de sesión # en el chat de Telegram "Telegram", si es así, la aplicación # pedirá este código de inicio de sesión print("Comprobando autorización...") if not clienteTelegram.is_user_authorized(): clienteTelegram.send_code_request(numeroTelefono) # Pedimos el código de inicio de sesión que haya enviado Telegram al usuario try: clienteTelegram.sign_in(numeroTelefono, input('Introduzca el Código de inicio de sesión: ')) except SessionPasswordNeededError: clienteTelegram.sign_in(numeroTelefono, input('Introduzca la contraseña: ')) # *** Enviar mensaje usando el ID de chat de Telegram *** try: print("Creando un receptor de Telegram a partir del ID de chat de Tetlegram...") receptorChat = clienteTelegram.get_input_entity(idChat) async def main(): # Enviamos el mensaje al chat de Telegram # Se enviará al chat de Telegram del Bot con ID indicado en el receptor print("Enviando mensaje a chat de Bot del receptor de Telegram (ID Chat)...") await clienteTelegram.send_message(receptorChat, mensaje1) #Solo a modo informativo, obtenemos el nombre del Bot de Telegram al que enviamos el mensaje print("Enviado mensaje a chat de Bot [{}] de Telegram".format(idChat)) # Para que se ejecute la tarea anterior del método asíncrono clienteTelegram.loop.run_until_complete(main()) except Exception as e: print("Se ha producido un error en el envío por ID de Chat: {}".format(e)); # *** Enviar mensaje usando nombre de usuario de Telegram *** try: print("Creando un receptor de Telegram a partir del nombre de usuario de Tetlegram...") receptorNombre = clienteTelegram.get_input_entity(nombreUsuarioTelegram) async def main(): # Enviamos el mensaje al chat de Telegram # Se enviará al chat de Telegram del Bot con el usuario indicado en el receptor print("Enviando mensaje a chat de Bot del receptor de Telegram (usuario)...") await clienteTelegram.send_message(receptorNombre, mensaje2) print("Enviado mensaje a chat de Bot del receptor [{}] de Telegram".format(nombreUsuarioTelegram)) clienteTelegram.loop.run_until_complete(main()) # Para que se ejecute la tarea anterior del método asíncrono except Exception as e: print("Se ha producido un error en el envío por nombre de usuario: {}".format(e)); # Desconectamos la sesión de Telegram abierta print("Desconectando sesión de Telegram...") clienteTelegram.disconnect() print("Desconectado y fin del programa") |
La primera vez que ejecutemos la aplicación, por seguridad, Telegram generará un Código de inicio de sesión, que nos enviará al chat de Telegram:
La aplicación nos solicitará este código de inicio de sesión en la consola, lo introduciremos. Si es correcto Telegram detectará el inicio de sesión desde una App externa y nos los mostrará en su chat de Telegram:
Si el código de inicio es correcto, realizará el envío de los mensajes al chat de Telegram:
Nos habrán llegado dos mensajes al chat de del bot de nuestro Telegram: