
net4me.net
Linux технологии, сети и электроника
Telegram, боты и PHP
Пишем простых ботов на php и разбираемся как это работает.
Просто, доступно, на конкретных примерах.
Linux технологии, сети и электроника
Пишем простых ботов на php и разбираемся как это работает.
Просто, доступно, на конкретных примерах.
curl https://api.telegram.org/botXXXX:XXXXXXXXXXXXX/deleteWebhook
curl -d "url=https://my.site.ru/bot/mytupobot.php" https://api.telegram.org/botXXXX:XXXXXXXXXXX/setWebhook
curl https://api.telegram.org/botXXXX:XXXXXXXXXXXXX/getWebhookInfo
и готов написать своего первого бота прям срочно, чтобы хоть какой-то результат получить от этого. =)
<?php
/**
* Telegram Bot тупо бот access token и URL.
*/
$access_token = 'XXXXX:XXXXXXXXXXXXXXXXXXXXXXX';
$api = 'https://api.telegram.org/bot' . $access_token;
/**
* Задаём основные переменные.
*/
$output = json_decode(file_get_contents('php://input'), TRUE);
@$chat_id = $output['message']['chat']['id'];
@$message = $output['message']['text'];
// команды тупо-бота
switch($message) {
case '/start':
sendMessage($chat_id, "\xF0\x9F\x93\xA1 тупобот на связи!");
break;
}
function sendMessage($chat_id, $message) {
file_get_contents($GLOBALS['api'] . '/sendMessage?chat_id=' . $chat_id . '&text=' . urlencode($message) . '&parse_mode=html');
}
Итак, этот тупо-бот всё же чего-то делает.<?php
/**
* Telegram Bot встречальщик access token и URL.
*/
$access_token = 'XXXXX:XXXXXXXXXXXXXXXXXXXXXXX';
$api = 'https://api.telegram.org/bot' . $access_token;
/**
* Задаём основные переменные.
*/
$output = json_decode(file_get_contents('php://input'), TRUE);
@$chat_id = $output['message']['chat']['id'];
@$message = $output['message']['text'];
// приветствие нового члена чата:
if ($output['message']['new_chat_member']){
$obj = $output['message']['new_chat_member'];
$newCM ="Привет
". $obj['first_name'] .", известный как @".$obj['username'] . "!
Добро пожаловать!";
sendMessage( $chat_id, $newCM );
}
// прощание
if ($output['message']['left_chat_member']){
$leftCM = "Упс... @". $output['message']['left_chat_member']['username'] . " покинул нас.";
sendMessage($chat_id, $leftCM);
}
// команды бота встречальщика
switch($message) {
case '/start':
sendMessage($chat_id, "\xF0\x9F\x93\xA1 бот встречальщик на связи!");
break;
}
function sendMessage($chat_id, $message) {
file_get_contents($GLOBALS['api'] . '/sendMessage?chat_id=' . $chat_id . '&text=' . urlencode($message) . '&parse_mode=html');
}
Пример простой. Но заставляет задуматься, а что же там в этом контенте такого, что оттуда можно достать всё что угодно?
Делаем самого неправильного бота дебагера.<?php
/**
* Telegram Bot Debugger access token и URL.
*/
$access_token = 'XXXXX:XXXXXXXXXXXXXXXXXXXXXXX';
$api = 'https://api.telegram.org/bot' . $access_token;
/**
* Задаём основные переменные.
*/
$output = json_decode(file_get_contents('php://input'), TRUE);
@$chat_id = $output['message']['chat']['id'];
@$message = $output['message']['text'];
switch($message) {
case '/start':
sendMessage($chat_id, "\xF0\x9F\x93\xA1 бот debugger на связи!");
break;
default:
$myDebug = "<pre>". json_encode($output) ."</pre>"; sendMessage($chat_id, $myDebug);
break;
}
function sendMessage($chat_id, $message) {
file_get_contents($GLOBALS['api'] . '/sendMessage?chat_id=' . $chat_id . '&text=' . urlencode($message) . '&parse_mode=html');
}
Что мы сделали? Правильно. Все сообщения (кроме команды /start , на которую мы реагируем ) выдаём в сыром виде. Как есть.<?php
/**
* Telegram Bot Debuger access token и URL.
*/
$access_token = 'XXXXX:XXXXXXXXXXXXXXXXXXXXXXX';
$api = 'https://api.telegram.org/bot' . $access_token;
/**
* Задаём основные переменные.
*/
$output = json_decode(file_get_contents('php://input'), TRUE);
@$chat_id = $output['message']['chat']['id'];
@$message = $output['message']['text'];
@$callback_query = $output['callback_query'];
@$data = $callback_query['data'];
@$chat_id_in = $callback_query['message']['chat']['id'];
@$message_id = $callback_query['message']['message_id'];
// inline keyboard set:
$inline_button3 = array("inline_message_id"=>"3","text"=>"show all","callback_data"=>'/1');
$inline_button4 = array("inline_message_id"=>"4","text"=>"show callback","callback_data"=>'/2');
$inline_keyboard1 = [[$inline_button3,$inline_button4]];
$keyboard1=array("inline_keyboard"=>$inline_keyboard1);
// do markup with inline keyboard:
$replyMarkup1 = json_encode($keyboard1);
switch($message) {
case '/start':
sendMessage($chat_id, "\xF0\x9F\x93\xA1 бот debugger на связи!");
break;
default:
$myDebug = "<pre>". json_encode($output) ."</pre>";
sendKeyboard($chat_id, $myDebug, $replyMarkup1); //send message with inline keyboard
break;
}
// callback data
switch($data){
case '/1':
// чтоб не крутились часы, посылаем пустой ответ при нажатии на кнопку.
// for delete "clock" on keyboard button - send null callback query answer:
send_answerCallbackQuery($callback_query['id'], null, false);
$myDebug = "<pre>". json_encode($output) ."</pre>";
sendKeyboard($chat_id_in, $myDebug);
break;
case '/2':
send_answerCallbackQuery($callback_query['id'],'callback id: ' . $callback_query['id'],true);
$myDebug = "<pre>". json_encode($output) ."</pre>";
sendKeyboard($chat_id_in, $myDebug);
break;
}
// Вместо универсальной функции, для наглядности используем различные функции отправки сообщений.
// Посылаем сообщение (send only message)
function sendMessage($chat_id, $message) {
file_get_contents($GLOBALS['api'] . '/sendMessage?chat_id=' . $chat_id . '&text=' . urlencode($message) . '&parse_mode=html');
}
// Посылаем сообщение с клавиатурой (send message with inline keyboard in reply markup)
function sendKeyboard($chat_id, $message, $replyMarkup) {
file_get_contents($GLOBALS['api'] . '/sendMessage?chat_id=' . $chat_id . '&text=' . urlencode($message) . '&parse_mode=html&reply_markup=' . $replyMarkup);
}
// Посылае ответ на нажатие кнопок (send callback query answer):
function send_answerCallbackQuery($callback_query_id, $text, $show_alert){
file_get_contents($GLOBALS['api'] . '/answerCallbackQuery?callback_query_id=' . $callback_query_id . '&text=' . $text . '&show_alert=' . $show_alert );
}
// END
Свежие версии этих php ботов вы найдёте в нашем репозитории на gitLab: https://gitlab.com/net4me/telegram-php