首页 > 解决方案 > 电报机器人键盘 PHP

问题描述

我已经用 PHP 为我的电报机器人编写了这个函数,但它不起作用:

if($text == "t"){
    $keyboard = array(
        "inline_keyboard" => array(
            array(
                array(
                    "text" => "My Button Text", 
                    "callback_data" => "myCallbackData"
                )
            )
        )
    );
    $key = array(
        "keyboard" => $keyboard,
    );
    keyboard($chatId, "asadsd", $key);
}
function keyboard($chatID, $text, $t)
{
    $t2 = $t;
    $t3 = json_encode($t2);

    api("sendMessage?chat_id=$chatId&text=$text&parse_mode=HTML&reply_markup=$t3");        
}

它应该工作,但它没有这样做。

我怎样才能解决这个问题?(我的机器人

标签: phptelegramtelegram-botphp-telegram-bot

解决方案


您的代码不起作用,因为您试图将 inline_keyboard 数组放入经典键盘数组中。所以:

  • $key = array(...);当你调用键盘函数 put而$keyboard不是$key.
  • $chatID而不是$chatId放在键盘函数中,因为 php 变量名区分大小写。
  • 删除$t2and$t3因为它们没用。
  • 我建议放置一个 arguments 变量并http_build_query用于构建 args,因此它会自动 urlencode 并构建 vars。

你的代码应该是这样的:

if($text == "t"){
    $keyboard = array(
        "inline_keyboard" => array(
            array(
                array(
                    "text" => "My Button Text", 
                    "callback_data" => "myCallbackData"
                )
            )
        )
    );

    keyboard($chatId, "asadsd", $keyboard);
}
function keyboard($chatID, $text, $t)
{
    $args = array(
        "chat_id" => $chatID,
        "text" => $text,
        "parse_mode" => "HTML",
        "reply_markup" => json_encode($t),
    );
    api("sendMessage?".http_build_query($args));        
}

假设一切都设置好了,代码应该可以正常工作。下次请详细点


推荐阅读