0

我正在电报上编写机器人程序,但我没有通过回复标记制作特殊键盘,有人可以帮助我吗?我的代码是这样的:

file_get_contents($website."/sendmessage?chat_id=".$myID."&text=keyTest&reply_markup={"keyboard":[["test"]]}");
4

2 回答 2

0

如果我将您的参数复制并粘贴到我的机器人并执行它可以工作的命令。但那是因为我使用您提供的文本作为我的网址的一部分。

api.telegram.org/bot[key]/sendMessage?chat_id=[id]&text=keyTest&reply_markup={"keyboard":[["test"]]}

你正在做的是编写一个执行命令的脚本。据我所知,您正在使用点.来连接字符串。您正在做的另一件事是尝试将 reply_markup 的 JSON 直接写入 url。

您的问题可能是以下情况之一:您没有转义"符号没有正确连接变量。

因此,如果keyboardtest是变量,您需要使用点正确连接它们:

file_get_contents($website."/sendmessage?chat_id=".$myID."&text=keyTest&reply_markup={".$keyboard.":[[".$test."]]}");

但是,如果您只想将测试键盘写入字符串,则需要转义,"这样您的字符串就不会结束:

file_get_contents($website."/sendmessage?chat_id=".$myID."&text=keyTest&reply_markup={\"keyboard\":[[\"test\"]]}");

注意:我不知道这是否是在 php.ini 中转义的正确方法"。这只是为了解释你的错误。如果您需要以任何其他方式在 php 中转义双引号,请按照应有的方式进行操作。

于 2015-10-05T07:45:10.203 回答
0

好的,我想我有你的解决方案!所以,这是代码:

$key = "{\"keyboard\":[ [\"OPTION1\"], [\"OPTION2\"], [\"OPTION3\"] ]}";
$url = $GLOBALS[API_URL]."/sendmessage?chat_id=$id&text=Choose%20your%20action&reply_markup=".urlencode($key);
file_get_contents($url);

变量 $GLOBALS[API_URL] = https://api.telegram.org/bot123456789:AAf6g4fr4rt5y67hadsffaerafasfasf 所以用你的直接 url 或任何东西替换我的全局变量 :D 其他你应该感兴趣的函数是这样的:

function close_keyboard($id, $message)
{       
    //$text = "Keyboard_closed!";
    $message = str_replace(" ", "%20", $message);
    $key = "{\"hide_keyboard\":true}";
    $url = $GLOBALS[API_URL]."/sendmessage?chat_id=$id&text=$messagge&reply_markup=".urlencode($key);
    file_get_contents($url);
}

此功能关闭您的自定义键盘,我个人的其他功能是这样的:

function build_keyboard($elements, $message, $chat_id)
{
    //Get length of array
    $len = count($elements);

    //Build custom keyboard
    $keyboard = "{\"keyboard\":[ [\"";
    for($i = 0; $i < $len; ++$i)
    {
        if($i < $len-1)
            $keyboard .= $elements[$i]."\"],[\"";
        else
            $keyboard .= $elements[$i]."\"] ]}";
    }

    $url = $GLOBALS[API_URL]."/sendmessage?chat_id=$chat_id&text=".urlencode($message)."&reply_markup=".urlencode($keyboard);
    file_get_contents($url);
}

这个函数的原型是 build_keyboard(array(), String, String) 例子:

$messagge = "Wrong choise";
$keyboard = array("OPT1", "OPT2", "OPT3");
build_keyboard($keyboard, $message, $chat_id);

请记住,始终需要 $message 或 reply_doesntt 工作!

希望这会有用!别客气!

于 2016-04-13T22:26:04.460 回答