Usar un bot de telegram para enviar mensajes en nuestros sistemas con php, bash y python

 

Telegram ha sido una de las grandes innovaciones en mensajería en los últimos años, permite la creación de bots para que se envíen mensajes y archivos a nuestros grupos y canales, con lo cual, podemos hacer que nuestros sistemas tengan la característica de enviarnos mensajes y notificaciones de cosas que sucedan.

La innovación no radica en la posibilidad de enviar mensajes, ya que eso lo hemos usado desde hace muchos años con el protocolo XMPP, sólo que con Telegram, podemos crear un canal y enviar mensajes y archivos a dicho canal para que los miembros puedan verlos, sin que tengan la posibilidad de contestar.

Voy a enumerar algunos ejemplos:

1.- Que cuando ocurra algún suceso importante en nuestro sistema, nos lo envíe por mensaje a Telegram, por ejemplo si tenemos una tienda en línea, cuando se haga un pedido, que nos lo notifique.

2.- Cuando ocurra algún error en la ejecución de las consultas de base de datos, que lo notifique a los desarrolladores; hasta el momento, si en mis sistemas ocurre algún error en la ejecución de consultas de base de datos, inserta la consulta, el error y el usuario, entre otras cosas, a una bitácora, y enviaba correo a los desarrolladores del módulo, y además correos a los principales del proyecto para que estuvieran al tanto. Ahora, se creó un canal privado de Telegram, se agrega a los desarrolladores, y se manda un único mensaje de error. Si se van o entras desarrolladores, sólo se necesita agregar o quitar usuarios al canal.

3.- Respaldar documentos que se suban a nuestros sistemas. Ya sea que se guarden en base de datos, o los almacenemos en el disco duro del servidor, es buena medida el que al subirse un documento a nuestro sistema, lo mande a un canal creado para los archivos multimedia. Puede ser que nunca los llegues a necesitar porque los tienes guardados en base de datos, pero de todas maneras tienes el documento original que se subió e identificado ya que al enviar un dcumento, puedes agregarle un título y colocarle hashtag. hay que recordar el respetar el derecho a la privacidad, los usuarios deben estar enterados de que se está respaldando dicha información y visible para nosotros.

4.- Hacer que el servidor nos notifique algún suceso; por lo regular usamos la función de envío de correo, pero o tenemos muchos correos separados para cada tipo de suceso, o nos encontramos que al abrir el correo tenemos cien mil de ellos sin leer, y a veces por estar revisando sucesos no tan importantes, podemos perder de vista a aquellos que sí lo son, así que podemos dejar el envío de correos para la mayor parte de los sucesos, y que nos mande mensaje a Telegram cuando sucede algo con mucha importancia.

5.- Pon aquí tus ideas.

Ahora bien, para poder crear un bot, necesitamos hablar primero con BotFather (sí, los de Telegram tienen sentido del humor), así que en nuestra sesión de Telegram, agregamos al usuario @BotFather.

Le mandamos la orden de crear un bot con /newboot

Con lo cual nos contesta que le asignemos algún nombre al bot, así que le mandamos el que queramos.

Con lo cual nos pedirá que elijamos un nombre de usuario (que termine con la palabra bot), de esa manera se podrá identificar y entablar una conversación por Telegram, nosotros también podemos elegir un alias, de esa manera no necesitamos dar nuestro número de teléfonos para que se comuniquen con nosotros. Por ejemplo, si quieres pedirme cotización de sistemas, páginas web, etc, te puedes comunicar a @AngelosRosemary =D.

Una vez que elijes el nombre de tu bot, entonces se muestra un token que será con el cual podremos conectar con nuestro código para la comunicación entre nuestro sistema y Telegram.

Hasta éste momento ya tenemos el token, ahora necesitamos el id del usuario al que se le enviará el mensaje, o el id del canal.

Debemos recordar que Telegram fue creado teniendo la seguridad en mente, por lo cual no podremos hacer envío de mensajes a usuarios siendo nosotros quienes empecemos la conversación, es decir, no podríamos hacer un barrido de usuarios y escribirles ya que eso sería spam, por lo que el usuario que recibirá el mensaje debe en primer lugar, iniciar la conversación al bot, simplemente escribiéndo su nombre en el cuadro de búsqueda de Telegram e iniciando un nuevo chat. Al hacerlo, entonces nuestro bot ya puede enviarle mensajes.

Con respecto a los canales, debemos en primer lugar agregar al bot como administrador, de otra manera no podría mandar mensajes.

Para saber el id del usuario al que se le enviarán los mensajes, o el id del canal, la manera más rápida es entrar a nuestra sesión en telegram web.

Para usuario: en la lista de chats, buscamos al usuario y vemos la dirección que nos muestra en la barra de direcciones lo cual nos mostrará un parámetro parecido al siguiente

?p=u123456789_1234567890123456789

Debemos tomar lo que está entre la u y _, es decir, en el ejemplo “123456789” y ese es el id del usuario.

Si aparece un @ algo, como por ejemplo @AngelosRosemary, entonces ese también lo puedes utilizar como id, recordando que si el usuario lo cambia, entonces el bot ya no podrá mandarle mensajes más adelante.

Para canales: en la lista de chats, buscamos el canal y vemos la dirección que nos muestra en la barra de direcciones lo cual nos mostrará un parámetro parecido al siguiente

?p=c1234567890_12345678901234567890

Debemos tomar lo que está entre la c y _, y anteponer un -100, es decir, en el ejemplo “-1001234567890” y ese es el id del canal.

Si aparece un @ algo, como por ejemplo @musicaClasica, entonces ese también lo puedes utilizar como id, recordando que si el canal lo cambia, entonces el bot ya no podrá mandarle mensajes más adelante.

Ahora, ya tenemos el id al que le enviaremos mensajes, continuamos con el código para hacerlo.

PHP

Enviar mensajes

$token = "TuTokenAqui";
$id = "IdDelUsuariooCanalAqui";
$urlMsg = "https://api.telegram.org/bot{$token}/sendMessage";
$msg = "Tu mensaje aqui";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlMsg);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "chat_id={$id}&parse_mode=HTML&text=$msg");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec($ch);
curl_close($ch);

 

Enviar archivos

 
$file = "rutaDelArchivoAquí"; 
$token = "TuTokenAqui"; 
$id = "IdDelUsuariooCanalAqui"; 
$caption = "Texto o hashtag en el mensaje del archivo"; 
$url = "https://api.telegram.org/bot{$token}/sendDocument"; 
$post = array( 'chat_id' => $id, 'document' => '@' . $file, 
               'caption' => $caption ); 

if (file_exists($file)) : 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $server_output = curl_exec($ch); 
    curl_close($ch); 
endif; 

 

Enviar imágenes

$file = "rutaDeLaImagenAquí"; 
$token = "TuTokenAqui"; 
$id = "IdDelUsuariooCanalAqui"; 
$caption = "Texto o hashtag en el mensaje de la imagen"; 
$url = "https://api.telegram.org/bot{$token}/sendPhoto"; 
$post = array( 'chat_id' => $id, 'photo' => '@' . $file, 
               'caption' => $caption ); 

if (file_exists($file)) : 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $server_output = curl_exec($ch); 
    curl_close($ch); 
endif; 

 

Bash

Enviar mensaje


USERID="IdDelUsuariooCanalAqui"
KEY="TokenAqui"
URL="https://api.telegram.org/bot$KEY/sendMessage"
MSG="Tu mensaje aqui"
curl -s --max-time 10 -d "chat_id=$USERID&disable_web_page_preview=1&text=$MSG" $URL

 

Enviar archivos


USERID="IdDelUsuariooCanalAqui"
KEY="TokenAqui"
URL="https://api.telegram.org/bot$KEY/sendDocument"
FILE="RutaDelArchivo"

curl --fail -F chat_id="$USERID" -F document=@"$FILE" $URL -X POST --progress-bar -o tmp --connect-timeout 0

Nota: “–progress-bar -o tmp” es para enviar el archivo y ver una barra de progreso, si no lo necesitas, se lo puedes quitar.

 

Python

Enviar mensaje


import requests
import sys

id = "IdDelUsuariooCanalAqui"

token = "TokenAqui"

url = "https://api.telegram.org/bot" + token + "/sendMessage"
params = {
'chat_id': id,

'text' : str(sys.argv[1])
}

requests.post(url, params=params)

Uso: python archivo.py “Mi mensaje de texto”;

 

Enviar archivo

import requests
import sys

id = "IdDelUsuariooCanalAqui"

token = "TokenAqui"

url = "https://api.telegram.org/bot" + token + "/sendMessage"

files = {
'document': open(str(sys.argv[1]), 'rb')
}

params = {
'chat_id': id
}

requests.post(url, params=params, files=files)

Uso: python archivo.py /ruta/de/tu/archivo.algo

Aprovecho su atención para promocionar mis canales

Canal para escuchar y descubrir compositores, obras e intérpretes de música clásica

https://telegram.me/musicaClasica

 

Lugar donde se colocan noticias, tutoriales y cosas interesantes de tecnología, ciencia e historia

https://telegram.me/canal_angelinux

 

Canal de imágenes graciosas para pasar un buen rato.

https://telegram.me/heterogenio

 

Notas finales, el bot que se creó para este artículo ha sido eliminado, ningún otro bot fue dañado durante la creación de esta publicación.

Author: angelinux

Desarrollador de páginas web desde el año 2000 y con experiencia en programación de sistemas para empresas desde el 2008; cofundador de CONSoluciones; autor del blog de software libre “Angelinux-slack”; docente en maestría en UPAV y fundador de la distribución Linux Falco que está en desarrollo para la Universidad Veracruzana.
Además, ponente, organizador de congreso, laborista social, impartidor de cursos de programación y servidores Linux, webmaster, y ex invitado en programa de televisión.

11 comentarios sobre “Usar un bot de telegram para enviar mensajes en nuestros sistemas con php, bash y python

    1. Qué tal.

      Actualicé la entrada para dar soporte a envío de imágenes.

      Aquí te adjunto el código.

      $file = “rutaDeLaImagenAquí”;
      $token = “TuTokenAqui”;
      $id = “IdDelUsuariooCanalAqui”;
      $caption = “Texto o hashtag en el mensaje de la imagen”;
      $url = “https://api.telegram.org/bot{$token}/sendPhoto”;
      $post = array( ‘chat_id’ => $id, ‘photo’ => ‘@’ . $file,
      ‘caption’ => $caption );

      if (file_exists($file)) :
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      $server_output = curl_exec($ch);
      curl_close($ch);
      endif;

      Saludos.

       
  1. hola, quería enviar una imagen para mi canal y no entiendo ¿en donde se hace?.Si me podrias decir en que página o lugar me serviría de ayuda

     
    1. El código para enviar imagen a tu canal es
      $file = “rutaDeLaImagenAquí”;
      $token = “TuTokenAqui”;
      $id = “IdDelUsuariooCanalAqui”;
      $caption = “Texto o hashtag en el mensaje de la imagen”;
      $url = “https://api.telegram.org/bot{$token}/sendPhoto”;
      $post = array( ‘chat_id’ => $id, ‘photo’ => ‘@’ . $file,
      ‘caption’ => $caption );

      if (file_exists($file)) :
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      $server_output = curl_exec($ch);
      curl_close($ch);
      endif;

      Para ello debes tener un servidor que interprete PHP, así como crear un bot desde @BotFather emn Telegram.
      Ese bot debes colocarlo como administrador en tu canal e identificar el ID del canal.

      Espero te sirva la información. Saludos.

       
  2. El código para enviar imagen a tu canal es
    $file = “rutaDeLaImagenAquí”;
    $token = “TuTokenAqui”;
    $id = “IdDelUsuariooCanalAqui”;
    $caption = “Texto o hashtag en el mensaje de la imagen”;
    $url = “https://api.telegram.org/bot{$token}/sendPhoto”;
    $post = array( ‘chat_id’ => $id, ‘photo’ => ‘@’ . $file,
    ‘caption’ => $caption );

    if (file_exists($file)) :
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $server_output = curl_exec($ch);
    curl_close($ch);
    endif;

    Para ello debes tener un servidor que interprete PHP, así como crear un bot desde @BotFather emn Telegram.
    Ese bot debes colocarlo como administrador en tu canal e identificar el ID del canal.

    Espero te sirva la información. Saludos.

     
  3. Hola buenas tardes me gustaría saber si existe alguna forma de enviar una foto “sendPhoto” mediante C# cargando un archivo local

     
  4. Tengo en mi bd de datos números telefónicos de mis clientes, ¿como podria hacer para que me envie mensajes a esos números?

     
    1. ¿Qué tal? En ese caso se debe crear un bot, y cada uno de esos números telefónicos debe instalar Telegram.

      Si se desea que todos reciban el mismo mensaje, lo mejor es agregarlos a todos a un grupo o canal y programar que desde tu sistema envíe un único mensaje al grupo o canal, así todos los que estén ahí recibirán la notificación.

      Si se desea que sean mensajes independientes, entonces se debe obtener el id de cada usuario (no es por número telefónico) y que cada uno de ellos agregue tu bot, ya que los bots no pueden iniciar conversación con un usuario (para evitar el spam). Una vez que cada cliente agregue el bot, ya puede enviar mensajes desde tu sistema.

      Puede que lo que más te convenga, si es mucho problema que todos tus clientes instalen Telegram y agreguen el bot, es mandar SMS tradicionales desde tu sistema.

      Si necesitas apoyo, se te puede cotizar lo que llegues a necesitar.

      Te dejo la liga de mi empresa

      http://www.consoluciones.com.mx

      Saludos.

       
  5. Buenas!! estoy recién empezando, quisiera saber si podría crear un bot que frente a una consulta de un num de cliente responsa el estado que poseo en una tabla en un servidor interno

     
    1. Que tal. Claro que si, aquí hay una variación en el problema. El bot no sólo va a enviar un mensaje a Telegram, sino que el usuario puede interactuar con el bot. Para esto se necesita en primer lugar crear el bot con soporte para webhook y debe estar en un servidor con SSL activado ya que Telegram por seguridad solo va a permitir que se le envíen comandos a los bots de manera segura.

      El bot recibe el mensaje, procesa, consulta base de datos si es necesario, y puede enviar de regreso un mensaje, imagen, archivo o hipervínculo. Esto conlleva a un detalle que hay que tomar en cuenta, los bots son públicos, por lo que si sólo quieres que determinadas personas puedan hacer uso del mismo, se debe agregar alguna capa de seguridad como revisión del ID del usuario, o una clave de paso para validar que sea un usuario permitido y que no cualquier persona que ande buscando bots, pueda hacer uso del tuyo.

      http://blog.angelinux-slack.net/2017/01/28/usar-un-bot-de-telegram-como-monitor-de-servidores-linux/
      Éste es un ejemplo de un bot de Telegram que es capaz de interactuar con las órdenes enviadas desde la aplicación, trae el vínculo al código fuente del mismo. Es un poco austero ya que fue mi primer bot.

      Si necesitas soporte profesional o un desarrollo específico puedes contar con nosotros.

      http://consoluciones.com.mx/newpage/index.php

      Saludos.

       

Deja un comentario