bot telegram

Crear un Bot en Telegram usando PHP

Comparte este artículo

Hará cosa de unos meses me pareció muy buena idea crear un bot de telegram para mantener algún que otro grupo de Telegram que tenía pensado hacer. Me dispuse a ello y la verdad que he de reconocer que no lo conseguí. Estoy casi seguro de que había un bug en la API de telegram porque me resultó imposible añadir mi bot a un chat. Hace unos días hice otro intento y la verdad es que no me resultó demasiado difícil, puede ser que estuviese inspirado o que corrigiesen el bug. Así que voy a hacer este tutorial para ayudar a cualquiera que tenga pensado hacer un bot en Telegram.

Crear nuestro Bot

Es evidente que necesitamos crear el bot. Voy  a suponer que tenéis Telegram en el móvil y que sabéis usar el TelegramWeb. Tenemos que entrar en la web de telegram (https://web.telegram.org/) y hablar con el BotFather:

/newbot

Nos pedirá el nombre del bot, tecleamos el que nos parezca.

Ahora nos pedirá el nombre de usuario del bot, si os fijáis nos dirá que debe terminar por la palabra bot. Este nombre deberá ser sin espacio. Ej: test_robot_bot, este nombre deberá ser único entre todos los bots que hay en telegram

Nos dará un token de este estilo:

622904421:AAfFFAeI9Ch9nfdHGbodfdAA0B0L_A

Ese token nos lo tenemos que apuntar porque es el que se usará para comunicar nuestros programas con la API de telegram

Activar nuestro Bot de Telegram

Vamos a ver si nuestro bot se ha creado:

/mybots

Esto nos sacará un listado con nuestros bots comenzando por “@”, es decir, deberíamos ver algo como @test_robot_bot

Ahora hay que activar el bot, para ello debemos pinchar en el enlace de nuestro bot (en el @test_robot_bot)

BotFather nos dira: Here it is: Nombre @test_robot_bot en ese momento deberemos pinchar en el enlace de  @test_robot_bot (sí, hemos pinchado 2 veces), se nos cambiará la pantalla y simplemente tendremos que pinchar en “Iniciar”

Con esto ya tenemos el bot iniciado y podremos crear un grupo y añadirlo a él.

Ahora hay que ponerle la privacidad a disabled:

/mybots

Escogemos el bot y pinchamos en Group Privacy y lo ponemos en disabled

Crear un grupo y añadir nuestro Bot de Telegram

Desde la interfaz de telegram creamos el grupo y añadimos nuestro bot. Como nuestro bot lo hemos activado antes, nos saldrá en la lista de contactos cuando creemos el grupo. Tras darle nombre al grupo se nos creará con 2 usuarios (nosotros y el bot)

En las propiedades del grupo convertimos el grupo en supergrupo. Esto último no es necesario, pero es recomendable porque lo súper siempre es más guay.

Obtener el chat_id

Para poder enviar mensajes desde el bot a través de la API necesitamos el chat_id, es decir, el identificador del grupo. Esta es una de las cosas que más me ha costado conseguir así que atentos al secreto, es sencillo pero no lo mencionan en todos los tutoriales

Llamamos a esta url. teniendo en cuenta que APIKEY será nuestra propia clave (la que nos dió el BotFather al principio:

https://api.telegram.org/botAPIKEY/getUpdates

Esto nos devolverá un json con una clave que tenemos que apuntarnos:

"migrate_to_chat_id":-100xxxxxxx

Conexión con la API de Telegram para mandar mensajes desde el Bot

Ya queda la última parte, desde php deberemos crearnos unas clases de conexión con la API de Telegram para el envío de mensajes.

 

<?php
class BOTQuerys{
public function __construct($apikey,$chatid){
  $this->apikey= $apikey;

       $this->chatid = $chatid;

}

public function sendMessage($msj){
$a_params['chat_id'] = $this->chatid;
$a_params['text'] = urlencode($msj);
$a_params['parse_mode'] = 'HTML' ;
$this->doCall("sendMessage",$a_params);
}
public function doCall($method,$a_params=array()){
  $params = array();
  foreach($a_params as $key=>$value){
    $params[]=$key.'='.$value;
  }
  $endpoint = "https://api.telegram.org/bot".$this->apikey."/".$method;
  if (count($params)>0){
    $endpoint.='?'.implode("&",$params);
  }

  $data = json_decode(file_get_contents($endpoint),true);

  return $data;

}
public function sendPhoto($ruta){
  $url = "https://api.telegram.org/bot".$this->apikey."/".sendPhoto?chat_id=".$this->chatid;
  $post_fields = array(
    'chat_id' => $this->chatid,
    'photo' => new CURLFile(realpath($ruta)),
  );
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Content-Type:multipart/form-data"));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
$output = curl_exec($ch);
// print $output;
}

Esta clase tiene dos métodos, con uno enviaremos un mensaje y con el otro enviamos imágenes. La imagen debe estar dentro de nuestro sistema de archivos. Tened en cuenta que no es posible enviar un mensaje y una imagen a la vez, así que lo mejor es mandar un mensaje primero y justo después la imagen

El uso sería algo así:

$bot = new BOTQuerys(API,CHATID);

$bot->sendMessage("holaaaaa");

$bot->sendPhoto("/home/pepe/kk.jpg");

Faltaría controlar errores si queremos  pero eso se sale del objetivo de este tutorial

Con esto ya tenemos nuestro Bot de Telegram

También te podría gustar...

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar