如何在 PHP 中从 Telegram 获取 callback_data
How to get callback_data from Telegram in PHP
我想从响应中获取回调数据,但数组为空。
我正在尝试在消息 callback_data
数组中显示。
这是我的代码:
$botToken = "token";
$botAPI = "https://api.telegram.org/bot" . $botToken;
$update = json_decode(file_get_contents('php://input'), TRUE);
$message = $update["message"]["text"]
$chatId = $update["message"]["chat"]["id"];
$callback_query = $update['callback_query'];
$callback_query_data = $callback_query['data'];
$url = $botAPI . '/sendMessage?chat_id=' . $chatId . '&text=';
if(isset($callback_query)){
file_get_contents($url . $callback_query_data);
}
if($message == "/start"){
$parameters = array('chat_id' => $chatId, "text" => "Здравствуйте. Выберите язык. \nАссалом. Забонро интихоб кунед.\nHi! Select your language.");
$parameters["method"] = "sendMessage";
$keyboard = ['inline_keyboard' => [[
['text' => "Точики", 'callback_data' => 'tajik'],
['text' => "Русский", 'callback_data' => 'russian'],
['text' => 'English', 'callback_data' => 'english']
]]];
$parameters["reply_markup"] = json_encode($keyboard, true);
echo json_encode($parameters);
}
代码中有一些小错误,我会尽力解决;
只有 webhooks 才能使用 php://input
,你告诉 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}");
}
如有不明之处请告诉我!
我想从响应中获取回调数据,但数组为空。
我正在尝试在消息 callback_data
数组中显示。
这是我的代码:
$botToken = "token";
$botAPI = "https://api.telegram.org/bot" . $botToken;
$update = json_decode(file_get_contents('php://input'), TRUE);
$message = $update["message"]["text"]
$chatId = $update["message"]["chat"]["id"];
$callback_query = $update['callback_query'];
$callback_query_data = $callback_query['data'];
$url = $botAPI . '/sendMessage?chat_id=' . $chatId . '&text=';
if(isset($callback_query)){
file_get_contents($url . $callback_query_data);
}
if($message == "/start"){
$parameters = array('chat_id' => $chatId, "text" => "Здравствуйте. Выберите язык. \nАссалом. Забонро интихоб кунед.\nHi! Select your language.");
$parameters["method"] = "sendMessage";
$keyboard = ['inline_keyboard' => [[
['text' => "Точики", 'callback_data' => 'tajik'],
['text' => "Русский", 'callback_data' => 'russian'],
['text' => 'English', 'callback_data' => 'english']
]]];
$parameters["reply_markup"] = json_encode($keyboard, true);
echo json_encode($parameters);
}
代码中有一些小错误,我会尽力解决;
只有 webhooks 才能使用
php://input
,你告诉 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}");
}
如有不明之处请告诉我!