2015-06-28 21 views
15

Sto cercando di creare un Bot Telgram in PHP con una tastiera personalizzata. Il messaggio viene consegnato, ma la tastiera personalizzata non funzionerà. $ keyb = array ('keyboard' => array (array ("A", "B"))); anche senza successo.Tastiera personalizzata Telegram Bot in PHP

I riferimenti del metodo sendMessage a ReplyKeyboardMarkup per l'oggetto. Realizzare un array per ReplyKeyboardMarkup non funziona. Ho anche provato a json_encode ($ keyb) ma anche questa non è la soluzione.

Ho cercato in GitHub per gli esempi ma non ne ho trovato uno in cui viene utilizzata la tastiera personalizzata. Telegram funziona su iPhone e desktop, entrambi in versione uptodate.

codice di esempio:

$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); 

risposta

20

La documentazione sembrano indicare che è necessario fornire il parametro reply_markup come un oggetto serializzato JSON ... un pò stupido per un endpoint modulo POST:

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

fa questo lavoro?

+0

No, non funziona neanche .. Dimenticato di menzionare ma provato anche questo – Martin

+1

Sembra che questo sia l'approccio corretto secondo reddit: http://www.reddit.com/r/Telegram/comments/3bblz0/sendmessage_with_replykeyboardmarkup_problem May vale la pena di scaricare i dati del tuo post e confrontarli. In bocca al lupo. –

+0

Sì, questo funziona! Anche se ho provato tutto, ma chiaramente questo è saltato. Grazie! – 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); 

Questo codice funziona correttamente!

Problemi correlati