Desarrollo de sitio web

Nosotros Makklays. Ayudamos a realizar la idea.

BOT Telegram en PHP


Makklays - Artículos image

eye 22


Ahora mucha gente escribe sobre la practicidad, la modernidad y la utilidad de usar bots para obtener varios tipos de estadísticas o datos, aliviando la carga en el sitio y los centros de llamadas. Sí, BOT en un messenger, en este caso Telegram, es muy conveniente en un teléfono móvil. También es muy rápido: el intercambio de datos entre el teléfono y el sitio en formato json es de solo unos pocos bytes.

Solo puede imaginar lo conveniente que es usar el bot, por ejemplo, en su sitio web o web corporativa. Por ejemplo, cuando un usuario necesita conocer el estado de su pedido o el costo de un servicio o producto en particular. El usuario ya no necesita llamarte y molestarte con sus preguntas. Usando la automatización de la producción moderna, puede iniciar sesión en Telegram y su bot usando los comandos indicados (y el número de orden del usuario) le dará las respuestas necesarias las 24 horas del día sin llamar su atención (o costos variables por respuestas de su personal). Esta es solo una pequeña parte de las ventajas de usar un bot, pero ya es bastante tangible y notable en las condiciones modernas de reducir el tiempo para el trabajo de rutina y el desarrollo comercial.

El bot es conveniente de usar al sondear o probar a los usuarios. Ya que el messenger te permite obtener respuestas rápidas del usuario que lo usa y guardar estos datos en la base de datos para su uso posterior (resumir estadísticas, obtener datos, construir gráficos basados ​​en los resultados de las respuestas de los usuarios).

Averigüemos cómo hacer un BOT para Telegram. Créame, es muy simple (personalmente lo descubrí por la noche) en una interpretación simple. Sin embargo, es difícil si conecta el procesamiento de datos estadísticos en el sitio y devuelve el resultado de estos datos a consultas SQL, etc. volviendo al teléfono (me refiero a algún tipo de desarrollo extraordinario suyo). Para desarrollar un Telegram Bot, debe seguir unos sencillos pasos:

✔ Registro de bot
✔ Recibir mensajes entrantes
✔ Fotos
✔ Documento
✔ Desarrollando respuestas de bot

Según la documentación oficial de Telegram, todas las solicitudes se envían a través del protocolo HTTPS. "Let's Encrypt" - un certificado gratuito también está bien. Dado que Telegram está bloqueado en la Federación de Rusia, deberá utilizar un proxy (si es de la Federación de Rusia).



REGISTRO BOT



Para registrar un nuevo bot, debe escribirle al bot con el nombre @BotFather "papá de los bots" (encuentra un bot con este nombre en Telegram) y ejecuta el comando /newbot

En el siguiente mensaje, indique el nombre de su bot, al final debe ser "bot" o "_bot" (el nombre se puede editar más tarde). En el mensaje de respuesta, recibiremos el token de nuestro bot. Copiamos el token, todavía nos será útil cuando comencemos a hacer WebHook. Como puede ver en la lista de comandos

/setname - Nombre
/setdescription - Breve descripción
/setabouttext - Descripción del bot
/setuserpic - Userpic

podemos hacer configuraciones adicionales para nuestro bot usando @BotFather.
A continuación, configuramos WebHook - aquí es cuando todos los mensajes de Telegram llegan a un archivo / script PHP (https://somesite.com/bot.php) en tu sitio web. Para hacer esto, debe seguir el enlace en el que se insertan el token y la dirección correcta de su archivo en el sitio.

https://api.telegram.org/bot<token>/setWebhook?url=https://somesite.com/bot.php

donde token es tu token, y url - su dirección al script en el sitio (con https)

En respuesta, obtenemos lo siguiente:
{"ok":true,"result":true,"description":"Webhook was set"} 

Tenga en cuenta que cuando cambie el token, la instalación de WebHooka debe repetirse.
De lo contrario, ¿cómo sabe Telegram que tiene una nueva URL para el script de procesamiento de mensajes de Telegram?



RECIBIR MENSAJES ENTRANTES



Todos los mensajes vienen como una solicitud POST, con el tipo de datos application / json. Puede obtener mensajes en PHP como este:


$data = file_get_contents('php://input');
$data = json_decode($data, true);

Para ver los mensajes entrantes, deben escribirse en un archivo:

ob_start();
print_r($data);
$out = ob_get_clean();
file_put_contents(__DIR__ . '/message.txt', $out);

Se parece a esto:

Array (
[update_id] => 17584194
[message] => Array (
[message_id] => 26
[from] => Array (
[id] => 123456789
[is_bot] =>
[first_name] => UserName
[language_code] => ru-US
)
[chat] => Array (
[id] => 123456789
[first_name] => UserName
[type] => private
)
[date] => 1541888068
[text] => Hola bot!
)
)

Recibimos el texto del mensaje:

if (!empty($data['message']['text'])) {
$text = $data['message']['text'];
echo $text;
}


FOTOS



Al enviar una foto a un bot, se envía una serie de miniaturas al archivo de script, el último elemento será la foto original. El tamaño máximo de archivo es de 20 MB.

Solicitud de Telegram:


Array (
[update_id] => 17584194
[message] => Array (
[message_id] => 38
[from] => Array (
[id] => 123456789
[is_bot] =>
[first_name] => UserName
[language_code] => ru-US
)
[chat] => Array (
[id] => 123456789
[first_name] => UserName
[type] => private
)
[date] => 1541924962
[photo] => Array (
[0] => Array (
[file_id] => AgADAgADUqexG7u8OEudBvlhgMzKC1agOQ8ABC6Bx26USA7Mw3gAAgI
[file_size] => 1196
[width] => 51
[height] => 90
)
[1] => Array (
[file_id] => AgttAgADUqoxG7u8OEudBvlhgMzKC1agOQ8ABKwp_3jDPrIlxHgAAgI
[file_size] => 21146
[width] => 180
[height] => 320
)
[2] => Array (
[file_id] => AgADAgADUqyxG7u8OEudBvlhgMzKC1agOQ8ABAN8gJWpUT1MxXgAAgI
[file_size] => 90940
[width] => 449
[height] => 800
)
[3] => Array (
[file_id] => AgADAgADUqouu7u8OEudBvlhgMzKC1agOQ8ABIqVC1nEpbLDwngAAgI
[file_size] => 114363
[width] => 719
[height] => 1280
)
)
)
)

Para descargar el archivo, debe enviar una solicitud POST o GET para recibir la imagen con el parámetro file_id por la URL:
https://api.telegram.org/botbot<token>/getFile

En respuesta, recibirá información sobre el archivo:

Array (
[ok] => 1
[result] => Array (
[file_id] => AgADAgADUqoxG5u88E0dBvlhgMzKC1agOQ8ABIqVC1nEpbLDwngAAgI
[file_size] => 114363
[file_path] => photos/file_1.jpg
)
)

Además, se puede descargar desde el enlace:
https://api.telegram.org/file/botbot<token>/bot<file_path>

Y en PHP, guardar un archivo en el servidor se puede implementar de la siguiente manera:
$token = '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11';

if (!empty($data['message']['photo'])) {
$photo = array_pop($data['message']['photo']);

$ch = curl_init('https://api.telegram.org/bot' . $token . '/getFile');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('file_id' => $photo['file_id']));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);

$res = json_decode($res, true);
if ($res['ok']) {
$src = 'https://api.telegram.org/file/bot' . $token . '/' . $res['result']['file_path'];
$dest = __DIR__ . '/' . time() . '-' . basename($src);
copy($src, $dest);
}
}


DOCUMENTO


Solicitud de Telegram:


Array (
[update_id] => 17474201
[message] => Array (
[message_id] => 44
[from] => Array (
[id] => 123456789
[is_bot] =>
[first_name] => UserName
[language_code] => ru-US
)
[chat] => Array (
[id] => 123456789
[first_name] => UserName
[type] => private
)
[date] => 1541925844
[document] => Array (
[file_name] => IMG_7947.JPG
[mime_type] => image/jpeg
[thumb] => Array (
[file_id] => AAQCABMNv_QOAATwQugveIZBldZ3AAIC
[file_size] => 2644
[width] => 67
[height] => 90
)
[file_id] => BQADAgADtQEAAqu9OEhzn2cEz8LpkgI
[file_size] => 1976218
)
)
)

Los archivos se descargan de la misma forma que las fotos.

if (!empty($data['message']['document'])) {
$file_id = $data['message']['document']['file_id'];

$ch = curl_init('https://api.telegram.org/bot' . $token . '/getFile');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('file_id' => $file_id));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);

$res = json_decode($res, true);
if ($res['ok']) {
$src = 'https://api.telegram.org/file/bot' . $token . '/' . $res['result']['file_path'];
$dest = __DIR__ . '/' . time() . '-' . basename($src);
copy($src, $dest);
}
}


DESARROLLO DE BOT RESPUESTAS


Enviando texto

$response = array(
'chat_id' => $data['message']['chat']['id'],
'text' => 'Hey!'
);

$ch = curl_init('https://api.telegram.org/bot' . $token . '/sendMessage');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
curl_close($ch);

Enviando una foto

$response = array(
'chat_id' => $data['message']['chat']['id'],
'photo' => curl_file_create(__DIR__ . '/image.png')
);

$ch = curl_init('https://api.telegram.org/bot' . $token . '/sendPhoto');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
curl_close($ch);

Subir archivo

$response = array(
'chat_id' => $data['message']['chat']['id'],
'document' => curl_file_create(__DIR__ . '/file.xls')
);

$ch = curl_init('https://api.telegram.org/bot' . $token . '/sendDocument');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
curl_close($ch);