Почему не удается обработать inline-запрос в бота telegram

Рейтинг: 1Ответов: 1Опубликовано: 13.01.2023

Нужно чтобы бот удаленно выполнял функции по вводимому тексту. Для этого попытался использовать inline-запросы. Код взял из примера:

func ChangedInlineKeyboardHandler(bot *tgbotapi.BotAPI, update tgbotapi.Update) {
    if update.InlineQuery != nil {
        query := update.InlineQuery.Query
        fmt.Println(query + "#################################################")
        data := "sdasdasdadas"
        callback := tgbotapi.NewCallback(update.InlineQuery.ID, data)
        if _, err := bot.Request(callback); err != nil {
            panic(err)
        }
    }
}

Сам бот был создан помощью BotFather, inline-запросы включены. Через update данные поступают и видно как меняется query-параметр с каждымм вводом символа. Однако обработка не проискодит. Пример данных, которые приходят:

"inline_query":{"id":"number","from":{"id":number,"is_bot":false,"first_name":"user_name","username":"user_name","language_code":"ru"},"chat_type":"group","query":"ddsasdwas","offset":""}}]}

При этом, в самом приложении телеграма происходит следующая ситуация: введите сюда описание изображения

т.е. запрос отправляется, но ответа - нет. Почему так происходит? Как исправить этот код чтобы в результате inline-запроса возвращался текст?

Ответы

▲ 1Принят

Нет, этот код неверно написан.

  1. Он использует tgbotapi.NewCallback() для создания объекта, который должен использоваться для обработки CallbackQuery, а не InlineQuery. Он использует bot.Request() для отправки ответа, который должен использоваться для обработки запросов от сервера, а не отправки ответа на inline-запрос.
  2. Вместо этого вы должны использовать tgbotapi.NewInlineQueryResultArticle() или tgbotapi.NewInlineQueryResultText() для создания объекта с данными, а затем использовать bot.AnswerInlineQuery() для отправки ответа.
// create a inline query result
result := tgbotapi.NewInlineQueryResultArticle("1", "Hello", "world")
// create a inline query config
config := tgbotapi.InlineConfig{
    InlineQueryID: update.InlineQuery.ID,
    IsPersonal:    true,
    Results:       tgbotapi.Results{Results: []interface{}{result}},
}
// send the result
bot.AnswerInlineQuery(config)