web-dev-qa-db-fra.com

Clavier personnalisé Telegram Bot en PHP

J'essaie de créer un Telgram Bot en PHP avec un clavier personnalisé. Le message est livré, mais le clavier personnalisé ne fonctionnera pas. $ Keyb = array ('keyboard' => array (tableau ("A", "B"))); pas de succès non plus.

La méthode sendMessage renvoie à ReplyKeyboardMarkup pour l'objet. La création d'un tableau pour ReplyKeyboardMarkup ne fonctionne pas. J'ai également essayé de json_encode ($ keyb) mais ce n'est pas non plus la solution.

J'ai cherché dans GitHub des exemples mais je n'en ai pas trouvé où le clavier personnalisé est utilisé. Telegram fonctionne sur iPhone et sur le bureau, tous deux mis à jour.

Exemple de code:

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

Les documents semblent indiquer que vous devez fournir le paramètre reply_markup en tant qu'objet sérialisé JSON ... un peu stupide pour un formulaire POST endpoint:

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

Est-ce que celui-ci fonctionne?

23
Dan Belden
   $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);

Ce code fonctionne bien!