Ультра много времени уже убил, и так его и так и этак, но бот ни в какую не хочет реагировать на нажатие inline_keyboard, точнее на команды callback_data от инлайн клавиатуры. Нашёл даже уже в интернетах очень короткий скрипт от другого человека, как я понял у человека он был полностью рабочий, загружаю себе - всё равно не работает..
Что я уже делал? Много что проверял/перепроверял, правильно ли указывается chat_id и т.д и т.п - всё чётко и правильно указано! Логировал все ответы от telegram в файлик, по моему в telegram отправляется всё правильно, телеграмм даже даёт ответ, что была нажата inline_keyboard, в ответ присылает команду которая была указана в callback_data, но скрипт её тупо не обрабатывает и в итоге команда не срабатывает =(
Чего я только не переделал уже.. Не понимаю в чём дело. Копался в гугле, где то прочитал что в botfather нужно включать обработку inline_keyboard (что вроде как глупость какая то, сколько раз я использовал другого готового tg бота там было много inline клавиатур и к BotFather я ни разу не обращался чтобы там что то переключать), хотя всё равно попробовал по-переключал - 0 толку.
Я думаю проблема возможно как обычно на поверхности, в какой то мелочи но я не могу увидеть/понять в чём конкретно.
Возможно по правильному было бы какую то программулину установить, чтобы более удобнее/точнее мониторить какие запросы уходят/приходят в telegram, чтобы не в слепую всё прощупывать, но пока что в таких программах не разбирался, не знаю как ими пользоваться, в ближайшем будущем наверное придётся разобраться в них..
Думал ботика простецкого сделать, для простой задачи, там буквально весь код пишется за пол часика/часик.... но хочу сделать на инлайн кнопочках, а они ни в какую не хотят работать, в итоге 2 день уже мучаюсь... =(
Бот привязан хуком к домену, и файлы лежат на хостинге. Сейчас прикреплю скрипт который нашёл в интернете, и парень писал что у него он точно работал, у меня же даже он не работает.
Пока дальше роюсь в интернете и пробую разные варианты, решил оставить тут вопрос, чтобы зря время не тратить, возможно кто то уже сталкивался с подобным и сможет помочь сэкономить время.. Заранее спасибо кто поможет, хотя бы просто подскажет какие варианты ещё можно попробовать.
Код для примера который не работает ->
bot.php
<?php
$access_token = 'xxx';
$api = 'https://api.telegram.org/bot' . $access_token;
$output = json_decode(file_get_contents('php://input'), TRUE);
#логирование ответа от telegram
file_put_contents('log.txt', '$output: '.print_r($output, 1)."\n", FILE_APPEND);
$chat_id = $output['message']['chat']['id'];
$message = $output['message']['text'];
$callback_query = $output['callback_query'];
$data = $callback_query['data'];
$message_id = ['callback_query']['message']['message_id'];
$chat_id_in = $callback_query['message']['chat']['id'];
switch($message) {
case '/test':
$inline_button1 = ["text" => "Google url", "url" => "http://google.com"];
$inline_button2 = ["text" => "work plz", "callback_data" => '/plz'];
$inline_keyboard = [[$inline_button1, $inline_button2]];
$keyboard = ["inline_keyboard" => $inline_keyboard];
$replyMarkup = json_encode($keyboard);
sendMessage($chat_id, "ok", $replyMarkup);
break;
}
switch($data){
case '/plz':
sendMessage($chat_id_in, "plz");
break;
}
function sendMessage($chat_id, $message, $replyMarkup) {
file_get_contents($GLOBALS['api'] . '/sendMessage?chat_id=' . $chat_id . '&text=' . urlencode($message) . '&reply_markup=' . $replyMarkup);
}
Лог ответа от telegram ->
log.txt
//Когда пишу команду /test
$output: Array
(
[update_id] => 801037387
[message] => Array
(
[message_id] => 698
[from] => Array
(
[id] => 1358111111
[is_bot] =>
[first_name] => first_name
[username] => username
[language_code] => ru
)
[chat] => Array
(
[id] => 1358111111
[first_name] => first_name
[username] => username
[type] => private
)
[date] => 1631124344
[text] => /test
[entities] => Array
(
[0] => Array
(
[offset] => 0
[length] => 5
[type] => bot_command
)
)
)
)
//Когда нажимаю inline кнопку
$output: Array
(
[update_id] => 801037387
[callback_query] => Array
(
[id] => 5831111111111111111
[from] => Array
(
[id] => 1358111111
[is_bot] =>
[first_name] => first_name
[username] => username
[language_code] => ru
)
[message] => Array
(
[message_id] => 699
[from] => Array
(
[id] => 1981111111
[is_bot] => 1
[first_name] => BOT_NAME
[username] => bot_username_bot
)
[chat] => Array
(
[id] => 1358111111
[first_name] => first_name
[username] => username
[type] => private
)
[date] => 1631124344
[text] => ok
[reply_markup] => Array
(
[inline_keyboard] => Array
(
[0] => Array
(
[0] => Array
(
[text] => Google url
[url] => http://google.com/
)
[1] => Array
(
[text] => work plz
[callback_data] => /plz
)
)
)
)
)
[chat_instance] => 3145335060324141256
[data] => /plz
)
)
P.S. Даже вот вручную пробую через браузер отправить запрос боту ->
https://api.telegram.org/bot*TOKEN*/sendMessage?chat_id=*CHAT_ID*&text=MY_MESSAGE&reply_markup={"resize_keyboard":true,"inline_keyboard":[[{"text":"test","callback_data":"\/test"}]]}
Запрос отправляется, бот отображает мне инлайн кнопку, я на неё нажимаю, мне на хостинг в log.txt файлик приходит лог того что телеграмм мне в ответ отправил (такой же как сверху), то-есть он видит что я нажал кнопку, присылает мне данные из callback_data, в моём случае это команда /test, и у меня стоит в скрипте обработчик на эту команду, но он почему то ни в какую не хочет срабатывать на inline клавиатурах. =(