2015-10-03 3 views
0

Я программирую бота на телеграмме, и я не сделал специальную клавиатуру через reply_mark, кто-то может мне помочь? Мой код заключается в следующем:PHP telegram bot reply_mark

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

и какой именно вопрос? – RamRaider

+0

Код не работает! И я не знаю, как это сделать! – user3649959

+0

@ user3649959 здесь недостаточно контекста, чтобы понять проблему. Что значит «не работает»? Вы получили сообщение об ошибке? Вы вообще что-то получаете? Вы уверены, что эта линия виновата; Есть ли какой-нибудь другой код, который может помочь? Каковы значения в переменных? и т. д. и т. д. и т. д. ... вам нужно предоставить дополнительную информацию, прежде чем кто-нибудь сможет вам помочь. – Spudley

ответ

0

Если скопировать & вставить параметры моего бота и выполнить команду он работает. Но это потому, что я использую текст, который вы предоставляете как часть моего URL-адреса.

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

Что вы делаете, это написать скрипт, выполняющий команду. Насколько я могу судить, вы используете точку . для конкатенации строк. Другое дело, что вы пытаетесь написать JSON для answer_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 любым другим способом, сделайте так, как это должно быть.

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 (массив(), String, String) Пример:

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

Помните, что $ сообщение всегда необходимо или reply_doesntt работу!

Надеюсь, это будет полезно! Пожалуйста!