2015-06-28 26 views
15

Tôi đang cố gắng tạo một Bot Telgram bằng PHP bằng bàn phím tùy chỉnh. Tin nhắn được gửi, nhưng bàn phím tùy chỉnh sẽ không hoạt động. $ keyb = array ('keyboard' => mảng (mảng ("A", "B"))); cũng không thành công.Bàn phím tùy chỉnh Telegram Bot trong PHP

Các liên kết giới thiệu phương thức sendMessage đến ReplyKeyboardMarkup cho đối tượng. Tạo một mảng cho ReplyKeyboardMarkup không hoạt động. Cũng đã cố gắng để json_encode ($ keyb) nhưng đó cũng không phải là giải pháp.

Tôi đã tìm kiếm trong GitHub ví dụ nhưng tôi chưa tìm thấy nơi mà bàn phím tùy chỉnh được sử dụng. Telegram chạy trên iPhone và máy tính để bàn, cả hai đều tăng lên.

Mẫu mã:

$url = "https://api.telegram.org/bot<token>/sendMessage"; 

$keyb = array('ReplyKeyboardMarkup' => array('keyboard' => array(array("A", "B")))); 
$content = array('chat_id' => <chat_id>, 'reply_markup' => $keyb, 'text' => "Test"); 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($content)); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //fix http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/ 

// receive server response ... 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$server_output = curl_exec ($ch); 
curl_close ($ch); 
var_dump($server_output); 

Trả lời

20

Các tài liệu dường như để cho biết bạn cần phải cung cấp thông số reply_markup như một đối tượng serialized JSON ... ngu ngốc cho một thiết bị đầu cuối dạng POST:

$replyMarkup = array(
    'keyboard' => array(
     array("A", "B") 
    ) 
); 
$encodedMarkup = json_encode($replyMarkup); 
$content = array(
    'chat_id' => <chat_id>, 
    'reply_markup' => $encodedMarkup, 
    'text' => "Test" 
); 

Liệu cái này có tác dụng không?

+0

Không, không hoạt động hoặc .. Quên đề cập đến nhưng đã thử rằng cũng – Martin

+1

Dường như đây là cách tiếp cận chính xác theo reddit: http://www.reddit.com/r/Telegram/comments/3bblz0/sendmessage_with_replykeyboardmarkup_problem May có giá trị bán phá giá dữ liệu bài đăng của bạn và so sánh. Chúc may mắn. –

+0

Vâng, cái này hoạt động! Tôi mặc dù tôi đã thử tất cả, nhưng rõ ràng cái này tôi bỏ qua. Cảm ơn! – Martin

6
$keyboard = array(array("[Destaques]","[Campinas e RMC]","[esportes]")); 
    $resp = array("keyboard" => $keyboard,"resize_keyboard" => true,"one_time_keyboard" => true); 
    $reply = json_encode($resp); 
    $url = $GLOBALS[website]."/sendmessage?chat_id=".$chatId."&text=oi&reply_markup=".$reply; 
    file_get_contents($url); 

Mã này hoạt động tốt!

Các vấn đề liên quan