在阅读了 botman telegram 驱动程序的源代码后,我发现 botman/driver-telegram ^1.6 不支持键盘。(或者我不知道它是如何开箱即用的)
我通过覆盖所有驱动程序代码来解决这个问题。像这样。将所有原始代码复制到我自己的 CustomTelegramDriver.php 并加载它
DriverManager::loadDriver(CustomTelegramDriver::class);
然后在 buildServicePayload 方法reply_markup中检查 $additionalParameters 中的键
像这样:
if ($message instanceof Question) {
self::getLogger()->info("message instanceoff Question", ["custom_telegram_driver"]);
$parameters['text'] = $message->getText();
// Where reply_markup passed from additionalParameters!
// this line of code is my fix and it get to work keyboard
if(isset($additionalParameters['reply_markup'])) {
$parameters['reply_markup'] = $additionalParameters['reply_markup'];
} else {
$parameters['reply_markup'] = json_encode([
'inline_keyboard' => $this->convertQuestion($message)
], true);
}
}
然后在我的机器人代码中问我通过了这个
$keyboard = Keyboard::create(Keyboard::TYPE_KEYBOARD)
->oneTimeKeyboard()
->addRow(KeyboardButton::create(OnboardingConversation::translate("btn_lang_en", "en"))->callbackData('en'))
->addRow(KeyboardButton::create(OnboardingConversation::translate("btn_lang_ru", "en"))->callbackData('ru'))
->toArray();
在我的询问代码中
$question = Question::create("test");
$this->ask($question, function (Answer $answer) {
// some stuff
}, $keyboard);