2016-08-25 35 views
1

需要内联键盘帮助。我做了一个按钮,但是如何处理回调?我知道我需要以某种方式得到一个callback_data并发出一条新消息。Iinline键盘。我做了一个按钮,但如何处理callback_data?

 <?php 
$access_token = 'xxx'; 
$api = 'https://api.telegram.org/bot' . $access_token; 
$output = json_decode(file_get_contents('php://input'), TRUE); 
$chat_id = $output['message']['chat']['id']; 
$first_name = $output['message']['chat']['first_name']; 
$message = $output['message']['text']; 
$callback_query = $output['callback_query']; 
$data = $callback_query['data']; 
$message_id = ['callback_query']['message']['message_id']; 
switch($message) { 
    case '/test': 
    $inline_button1 = array("text"=>"Google url","url"=>"http://google.com"); 
    $inline_button2 = array("text"=>"work plz","callback_data"=>'/plz'); 
    $inline_keyboard = [[$inline_button1,$inline_button2]]; 
    $keyboard=array("inline_keyboard"=>$inline_keyboard); 
    $replyMarkup = json_encode($keyboard); 
    sendMessage($chat_id, "ok", $replyMarkup); 
    break; 
} 
switch($data){ 
    case '/plz': 
    sendMessage($chat_id, "plz"); 
    break; 
} 
function sendMessage($chat_id, $message, $replyMarkup) { 
    file_get_contents($GLOBALS['api'] . '/sendMessage?chat_id=' . $chat_id . '&text=' . urlencode($message) . '&reply_markup=' . $replyMarkup); 
} 

回答

2

如果有人点击该按钮,您将收到一条callback_query对象,而不是消息的对象。 callback_query本身包含最初发送的消息。

$output = json_decode(file_get_contents('php://input'), TRUE); 
$callback_query = $output["callback_query"] 
$data = $callback_query["data"] // in your case $data is "/plz" 
+0

对不起,但我不明白该怎么办c message_id,我认为它一定是如此,但它没有奏效。这可能是我的代码的一个例子吗? 'switch($ message_id){ case'/ plz': sendMessage($ chat_id,“plz”); 休息; }' – batman

+0

你需要在'$ data'上使用你的开关才能找到'/ plz' – Maak

+0

它不起作用,怎么了?消息中更新的代码。 – batman

相关问题