В коде есть небольшие ошибки, я постараюсь их исправить;
Использование
php://input
возможно только при
webhooks , вы сказали Telegram местоположение вашего скрипта?
https://api.telegram.org/bot<MY-TOKEN>/setWebhook?url=https://example.com/telegram/script.php
$callback_query_data = $callback_query['data']
Устанавливается только если кнопка Нажатие, это следует вызвать после проверки, если есть какие-либо данные обратного вызова
if (isset($update['callback_query'])) {
$callback_query_data = $update['callback_query']['data'];
}
Рабочий пример:
<?php
$update = json_decode(file_get_contents('php://input'), TRUE);
$botToken = "<MY-TOKEN>";
$botAPI = "https://api.telegram.org/bot" . $botToken;
// Check if callback is set
if (isset($update['callback_query'])) {
// Reply with callback_query data
$data = http_build_query([
'text' => 'Selected language: ' . $update['callback_query']['data'],
'chat_id' => $update['callback_query']['from']['id']
]);
file_get_contents($botAPI . "/sendMessage?{$data}");
}
// Check for normal command
$msg = $update['message']['text'];
if ($msg === "/start") {
// Create keyboard
$data = http_build_query([
'text' => 'Please select language;',
'chat_id' => $update['message']['from']['id']
]);
$keyboard = json_encode([
"inline_keyboard" => [
[
[
"text" => "english",
"callback_data" => "english"
],
[
"text" => "russian",
"callback_data" => "russian"
]
]
]
]);
// Send keyboard
file_get_contents($botAPI . "/sendMessage?{$data}&reply_markup={$keyboard}");
}
Пожалуйста, дайте мне знать, если что-то не понятно!