Я программирую бота на телеграмме, и я не делал специальную клавиатуру с помощью reply_mark. Кто-нибудь может мне помочь?
Мой код такой:
file_get_contents($website."/sendmessage?chat_id=".$myID."&text=keyTest&reply_markup={"keyboard":[["test"]]}");
Если я копирую&Вставьте ваши параметры в мой бот и выполните команду, которая работает. Но это потому, что я использую текст, который вы предоставляете, как часть моего URL.
api.telegram.org/bot[key]/sendMessage?chat_id=[id]&text=keyTest&reply_markup={"keyboard":[["test"]]}
То, что вы делаете, — это написание скрипта, который выполняет команду. Насколько я могу судить, вы используете точку .
объединить строки. Другая вещь, которую вы делаете, — это попытка записать JSON для reply_markup прямо в URL.
Ваша проблема, вероятно, заключается в следующем: вы не можете избежать "
знак или же неправильно объединяет переменные.
Так что если keyboard
а также test
переменные, которые нужно правильно объединить, используя точку:
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. Это просто, чтобы объяснить вашу ошибку. Если вам нужно избежать двойных кавычек в php любым другим способом, сделайте это так, как это должно быть.
ОК, я думаю, что у меня есть решение для вас!
Итак, это код:
$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
Так что замените мой глобальный var своим прямым 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 работает!
Надеюсь, это будет полезно! Пожалуйста!