PHP电报机器人reply_mark

I'm programming a bot on telegram and I didn't make the special keyboard via reply_mark up someone can help me? My code is this:

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

If I copy&paste your parameters to my bot and execute the command it works. But that's because I use the Text you provide as parts of my url.

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

What you are doing is writing a script that executes the command. As far as I can tell you're using the dot . to concatenate strings. Another thing you're doing is trying to write the JSON for the reply_markup directly into the url.

What your problem probably is, is one of the following: You're not escaping the " sign or not concatenating variables correctly.

So if keyboard and test are variables you need to concatenate them correctly using the dot:

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

but if you just want to write your test keyboard into the string you need to escape the " so your string does not end:

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

Note: I have no idea if this is the correct way to escape " in php. This is just to explain your error. If you need to escape double quotes in php any other way, do it how it is supposed to be.

OK, I think that I have the solution for you! So, this is the code:

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

Variable $GLOBALS[API_URL] = https://api.telegram.org/bot123456789:AAf6g4fr4rt5y67hadsffaerafasfasf So replace my global var with your direct url or whatever :D Other function that should be interesting for you is this:

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);
}

This function close your custom keyboard, and other my personal function is this:

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);
}

Prototype of this function is build_keyboard(array(), String, String) Example:

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

Remember that $message is always needed or reply_doesntt work!

Hope this will be usefull! You're welcome!