Почему не работает keyboard в telegram bot api?

227
28 марта 2018, 06:36

Я ввожу в telegram сообщение "message", но в результате он не присылает мне ничего. Помогите, пожалуйста исправить

https://api.telegram.org/bot".$token;

$updates = file_get_contents("php://input");
$result = (array)json_decode($updates, true);
$text = $result["message"]["text"];
$chatId = $result["message"]["from"]["id"];
if($text == "message") {
    $url = $website;
    $url .= "/sendMessage?chat_id=".$chat_id."&text=".urlencode($text);
    $current_board = array(array("1", "2"), array("3", "4"));
    sendMessageKeyboard($url, $current_board);
} else if($text == "платёж") {
    $provider_token = "381764678:TEST:5058"; 
    $product_name = "Свежие мандарины"; //title
    $product_description = "Доставляем недорогие мандарины по приемлемой цене"; //description
    $payload = "67192"; //payload  это shopId
    $start_parameter = "352780"; //это shopArticleId
    $currency = "RUB"; //currency
    $prices = json_encode(array("label" => "мандарин", "amount" => 45));
    $url = $website;
    $url .= "/sendInvoice?chatId=".$chatId."&title=".$product_name."&description=".$product_description;
    $url .= "&payload=".$payload."&provider_token=".$provider_token.="&start_parameter=".$start_parameter;
    $url .= "&currency=".$currency."&prices=".$prices;
    file_get_contents($url);
} else if($text == "/startgame") {
    $url = $website;
    $url .= "/sendMessage?chat_id=".$chat_id."&text=".urlencode($message);
    $current_board = array(array("Физика", "Химия"), array("Физика", "Химия"));
    sendMessageKeyboard($url, $current_board);
} else { 
    sendMessage($website, $chatId, $text);
}
/*$fp = fopen('file.txt', 'a');
$writing = fwrite($fp, $error);
if($writing) {
    echo 'Данные успешно занесены';
} else {
    echo "Ошибка загрузки файла";
}
fclose($fp);
*/

function sendMessage($site, $chat_id, $message) {
    $url = $site;
    $url .= "/sendMessage?chat_id=".$chat_id."&text=".urlencode($message);
    file_get_contents($url);
}
function sendMessageKeyboard($curl, $keyboard) {
    $reply = json_encode(array("keyboard" => $keyboard, "resize_keyboard" => true, "one_time_keyboard" => true));
    $add_url = $curl;
    $add_url .= "&reply_markup=";
    $add_url .= $reply;
    file_get_contents($add_url);
}

?>введите сюда код

Answer 1

с виду всё верно, но нет возможности проверить. если ответа от бота нет - произошла ошибка на стороне php, в этом случае поможет функция для отладки:

function debug($arg){
        if($arg==""){$arg="empty variable...";}
        die(self::sendMessage(*id вашего чата*, print_r(json_decode(json_encode($arg),true),true)));
    }

перепишите её под свой стиль. функция работает по образу var_dump(), но в чат бота, таким образом можно находить места где работа скрипта ломается (если сообщения от функции приходят, а после переноса на 10 строк ниже уже не приходят - проблема в этом промежутке).

так же советую переписать немного логику, ваша sendMessage принимает $url который никогда не меняется, а так же есть переменные, которые много где используются и везде их надо передавать (по хорошему под это надо сделать отдельный класс).

так же может быть и такая ситуация: вебхуки иногда просто отваливаются (из за черезмерного количества ошибок php) и его надо ставить заново. вам об этом никак не сообщат.

READ ALSO
Проверка существования таблицы на Postgresql

Проверка существования таблицы на Postgresql

Добрый день, я новичок в разработке! Имя базы Shop, таблица usersСтолкнулся со сложностью, в том, что не могу понять, какой нужен скрипт, чтоб проверить...

222
Как обновить кучу сайтов разом?

Как обновить кучу сайтов разом?

Есть много сайтов на одном сервереВсе на php (причем по большей части на голом php без фреймворков - они очень старые), но неизвестно какой версии

184
Файлы из папки только по внутреннему запросу через Apache

Файлы из папки только по внутреннему запросу через Apache

Пытаюсь реализовать раздачу файлов из защищённой папки средствами apache по внутреннему запросу через скрипт на phpNginx использовать не могу...

183