Telegram bot API: можно ли смешивать пользовательскую клавиатуру и force_reply?

У меня есть специальная клавиатура, но для обработки ответа мне нужен принудительный ответ, поэтому я верну вопрос в следующем сообщении. Я сделал это:

var opts = {
    reply_markup: JSON.stringify({ 
        keyboard: [['OK','Cancel']],
        one_time_keyboard: true,
        resize_keyboard: true,
        force_reply: true
    })
};

Клавиатура работает, но не работает force_reply. Принудительный ответ на собственные работы? Могу ли я не использовать его в сочетании с пользовательской клавиатурой?


person Peter Newman    schedule 18.07.2015    source источник
comment
согласно: stackoverflow.com/a/41841237/5320087 это невозможно   -  person Solivan    schedule 26.04.2018


Ответы (2)


Может быть поздно, чтобы помочь вам, но вот оно идет.

В настоящее время разрешено только одно поле reply_markup, и это поле должно содержать только один из следующих типов: ReplyKeyboardMarkup или ReplyKeyboardHide или ForceReply (см. документы)

В любом случае вы можете использовать ReplyKeyboardMarkup, который будет отображать пользовательскую клавиатуру напрямую в пользовательском приложении и кодировать вашего бота, чтобы он принимал только один из ответов на ваших собственных пользовательских клавиатурах.

Кроме того, если вы действительно хотите заставить пользователя ответить, вы можете продолжать отправлять один и тот же ReplyKeyboardMarkup после неверного ответа каждого пользователя.

person Ruben Bermudez    schedule 06.10.2015

Вам нужно указать свою разметку следующим образом:

$replyMarkup = array(
  'force_reply' => true,
  'selective' => true
);

Если вам нужно иметь custom keyboard, вы можете следовать этому:

$keyboradsValue = array(
   array("button 1","button 2"),
   array("button 3","button 4"),
);
$replyMarkup = array(
  'keyboard' => $keyboradsValue,
  'force_reply' => true,
  'selective' => true
);

После этого вам нужно закодировать ваш объект, используя json_encode

$encodedMarkup = json_encode($replyMarkup, true);

Наконец, вы просто помещаете приведенный выше код в строку запроса в остальной части sendMessage.

person Hamed    schedule 15.07.2017
comment
Вы действительно пробовали это? - person Ramazan Polat; 16.01.2018
comment
Если вы хотите что-то сделать, вы должны вызвать функцию. После того, как пользователь нажмет на клавиатуру, эта функция должна быть вызвана. После этого результат вернется к пользователю с помощью другой клавиатуры или отобразит что-то пользователю с помощью URL-запроса, который Telegram дал вам. - person Hamed; 13.05.2018