Eleirbag89 / TelegramBotPHP

A very simple PHP Telegram Bot API for sending messages.
http://eleirbag89.github.io/TelegramBotPHP
MIT License
814 stars 343 forks source link

Calback Round #142

Closed shell1986 closed 6 years ago

shell1986 commented 6 years ago

Hello, when using the callback function, I get the error "MESSAGE_TOO_LONG" And a constant premise begins in a cycle.

Here is the code, The most interesting is that the message is less than 4000 byte.

$textpos = strpos($text, " ");
$textcommand = substr($text, 0, $textpos);

if ($textcommand == '/вопрос' || $textcommand == 'вопрос') {
    $ask = substr($text, $textpos+1);
    $reply = 'По вашему запросу "'.$ask.'" «Спартак» преодолел «военный полигон» в Казани';
    $option = array( array( $telegram->buildInlineKeyboardButton($text="Получить ответ","","Callback",""), $telegram->buildInlineKeyboardButton("Посмотреть все ответы", $url="http://google.it") ) );
    $keyb = $telegram->buildInlineKeyBoard($option);
    $content = ['chat_id' => $chat_id, 'reply_markup' => $keyb, 'text' => $reply];
    $telegram->sendMessage($content);
}
if ($callback_query !== null && $callback_query != "") {

    $reply = 'К началу встречи термометр в Казани показывал «-16» градусов, но главный судья Владислав Безбородов принял решение провести матч. Перед ее началом главный тренер красно-белых Массимо Каррера на вопрос журналиста о желании перенести встречу, как это было в Самаре в матче на Кубок, отметил, что такое желание должно быть у арбитра, а ему надо думать об игре. Плохие погодные условия привели не только к некомфортным условиям для футболистов и болельщиков – поле на стадионе «Казань Арена» было больше похоже на военный полигон для боевых машин.';
    $content = array('chat_id' => $telegram->Callback_ChatID(), 'text' => $reply);
    $test=$telegram->sendMessage($content);
         $content = array('callback_query_id' => $telegram->Callback_ID(), 'text' => $reply);
    $telegram->answerCallbackQuery($content);  
    }

Error log

============[Date]============ [ 2018-03-18 11:40:52 Europe/Moscow ] ==========[Response]========== ok: False error_code: 400 description: Bad Request: MESSAGE_TOO_LONG =========[Sent Data]========== [ref] ref.update_id= 222672611 ref.callback_query.id= 375024580354217753 ref.callback_query.from.id= 87317214 ref.callback_query.from.is_bot= false ref.callback_query.from.first_name= Артём ref.callback_query.from.username= IonovAG ref.callback_query.from.language_code= ru ref.callback_query.message.message_id= 577 ref.callback_query.message.from.id= 552403102 ref.callback_query.message.from.is_bot= true ref.callback_query.message.from.first_name= ref.callback_query.message.from.username= ref.callback_query.message.chat.id= 87317214 ref.callback_query.message.chat.first_name= ref.callback_query.message.chat.username= ref.callback_query.message.chat.type= private ref.callback_query.message.date= 1521362427 ref.callback_query.message.text= По вашему запросу "авава" «Спартак» преодолел «военный полигон» в Казани ref.callback_query.chat_instance= 6544742423263352994 ref.callback_query.data= Callback

[ref] ref.callback_query_id= 375024580354217753 ref.text= К началу встречи термометр в Казани показывал «-16» градусов, но главный судья Владислав Безбородов принял решение провести матч. Перед ее началом главный тренер красно-белых Массимо Каррера на вопрос журналиста о желании перенести встречу, как это было в Самаре в матче на Кубок, отметил, что такое желание должно быть у арбитра, а ему надо думать об игре. Плохие погодные условия привели не только к некомфортным условиям для футболистов и болельщиков – поле на стадионе «Казань Арена» было больше похоже на военный полигон для боевых машин.

============[Trace]===========

0 /home/hosting//www/htdocs/bot/Telegram.php(3067): TelegramErrorLogger::log(Array, Array)

1 /home/hosting//www/htdocs/bot/Telegram.php(97): Telegram->sendAPIRequest('https://api.tel...', Array)

2 /home/hosting//www/htdocs/bot/Telegram.php(1422): Telegram->endpoint('answerCallbackQ...', Array)

3 /home/hosting//www/htdocs/bot/hook.php(82): Telegram->answerCallbackQuery(Array)

4 {main}

emobin commented 6 years ago

try sending message with $content = array('chat_id' => $telegram->ChatID(), 'text' => $reply); $telegram->sendMessage($content);

instead of :

$content = array('callback_query_id' => $telegram->Callback_ID(), 'text' => $reply); $telegram->answerCallbackQuery($content);

Eleirbag89 commented 6 years ago

https://core.telegram.org/bots/api#answercallbackquery:

text: Text of the notification. If not specified, nothing will be shown to the user, 0-200 characters