Closed kamuzon closed 3 years ago
Hello! Theare are a bunch of logic mistakes in your code. As I understand you are trying to use inline mode for your bot. Сorrect me if i'm wrong.
The first thing, in your case your update is callback_query
which is not related to inline mode:
if ($update->callback_query) {
// Your code here
}
If you working with inline mode, you should validate inline_query
(also I recommend to use immediate return for cleaner syntax):
if (!$update->inline_query) return;
// Your code here
The second thing is answer for the query. Your inline result is article which don't have message_text
field. In article
type you should send input_message_content
object. Your final code should look something like this:
// Validated that update is inline_query
if (!$query = $update->inline_query) return;
// There may be should be some more validations if your query have some complex logic
$results = [];
$results[] = [
'type' => 'article',
'id' => '001',
'title' => 'Test',
'input_message_content' => [
'message_text' => 'Text of the first message'
]
];
$message = $bot->answerInlineQuery([
'inline_query_id' => $query->id,
'results' => $results
]);
Please make sure that you are fully familiar with the bot api documentation for the functionality you need. This question does not concern the library's operation. I should not help you learning bot api documentation because its free and public to read.
I got from telegram json started like that: {"update_id":580720058,"callback_query":{"id":"882510546334388439","from":{"id": So I think this was callback_query.
With input_message_content in results[] I got this error: Forbidden: USER_BOT_INVALID
Thank you for your helping. I will read more about API and manual.
Вообще здесь какая-то путаница. Как я делаю. Пользователь мне присылает команду, например /stop. В обработке этого же $update->message я отправляю ему ответ, в котором есть Inline кнопка.
$message = $bot->sendMessage([
'chat_id' => $chat_id,
// 'reply_to_message_id' => $message_id,
'parse_mode' => 'HTML',
'text' => 'Ты <b>запретил</b> мне писать тебе. Теперь <b>только ты</b> сможешь снова возобновить наше общение. Напиши мне /start, чтобы снова начать.',
'reply_markup' => [
'inline_keyboard' => [[[
'text' => '/start',
'callback_data' => '/start',
]]]
]
]);
Там имеено inline keyboard https://core.telegram.org/bots/api#inlinekeyboardbutton У кнопки есть параметр callback_data, который работает через CallbackQuery. При нажатии на кнопку, я получаю от телеграма входящий с этим callback_query, с id который int64 и начинается на 88. Но в этом же запросе у меня не получается тут же ему (юзеру) ответить на этот callback_query. В итоге на кнопке недолго крутится индикатор, что что-то происходит, телеграм в течении двух минут 8 раз пытается забрать у меня ответ на callback_query, но ему это не удаётся сделать. И он забивает на конкретно этот callback_query.
В итоге при нажатии пользователем на кнопку ничего не происходит. Хотя я могу не пытаться изменить то изначальное сообщение с inline кнопкой, а просто при получении callback_query запроса слать пользователю следующее сообщение. Можно и так.
Я просто видел других ботов в работе и они как-то иначе "сбрасывают" вращение этого индикатора загрузки. В мануале написано, что можно ответить пустой результат, чтобы у пользователя ничего нигде не высвечивалось, но я пока не догоняю, в чём там дело. Почему-то какой-то разжёванной документации днём с огнём не сыщешь, не понимаю, почему так происходит.
Спасибо тебе за помощь и за библиотеку.
Всё. Кажется я разобрался. ;) Ещё раз спасибо тебе огромное за твою помощь и за твою библиотеку.
Hi. I can't send answerInlineQuery I got from Telegram this error: Bad Request: can't parse inline query result: Can't find field "message_text"
Here is the code. What wrong I do? I cant understand.
Please help. Thank you.