Skip to content

inlineQuery

Метод inlineQuery в GramIO позволяет вашему боту отвечать на инлайн-запросы, отправленные пользователями. Инлайн-запрос - это особый тип сообщения, когда пользователи могут искать контент от вашего бота, введя запрос в поле ввода сообщения, не взаимодействуя напрямую с ботом.

предварительный просмотр функции

Документация Telegram

WARNING

Вам необходимо включить эту опцию через @BotFather. Отправьте команду /setinline, выберите бота и укажите текст-заполнитель, который пользователь увидит в поле ввода после ввода имени вашего бота.

Основное использование

Ответ на инлайн-запрос с использованием регулярного выражения

Вы можете настроить бота на прослушивание определенных инлайн-запросов, соответствующих регулярному выражению, и ответить результатами. Вот пример:

ts
bot.inlineQuery(/search (.*)/i, async (context) => {
    if (context.args) {
        await context.answer([
            InlineQueryResult.article(
                "id-1",
                `Результат для ${context.args.at(1)}`,
                InputMessageContent.text(
                    `Это результат сообщения для запроса ${context.args.at(1)}`
                )
            ),
        ]);
    }
});

В этом примере:

  • Бот прослушивает инлайн-запросы, соответствующие шаблону search (.*).
  • Если соответствие найдено, бот извлекает поисковый запрос и возвращает список результатов инлайн-запроса.

Параметры

  • trigger: Условие, которому должен соответствовать инлайн-запрос. Это может быть регулярное выражение, строка или пользовательская функция.
    • Регулярное выражение: Соответствует запросам, которые соответствуют определенному шаблону.
    • Строка: Соответствует точной строке запроса.
    • Функция: Оценивает запрос на основе пользовательской логики. Должна возвращать true для соответствия.
  • handler: Функция, которая обрабатывает инлайн-запрос. Она получает объект context, который включает детали о запросе и предоставляет методы для ответа.
  • options: Дополнительные опции для обработки выбора результата.
    • onResult: Функция, которая вызывается, когда пользователь выбирает результат инлайн-запроса. Она может использоваться для изменения или обновления сообщения после выбора. Использует ChosenInlineResult под капотом.

IMPORTANT

Вы можете изменять только сообщения, которые содержат InlineKeyboard. Подробнее о ChosenInlineResult.

Как работает inlineQuery

  1. Сопоставление запроса: Когда пользователь вводит инлайн-запрос, метод inlineQuery проверяет, соответствует ли запрос предоставленному trigger. Это может быть прямое соответствие (строка), соответствие шаблону (регулярное выражение) или проверка условия (функция).

  2. Обработка запроса: Если запрос соответствует, вызывается функция handler. Внутри этой функции вы можете получить доступ к параметрам запроса, сгенерировать результаты и отправить их обратно пользователю, используя context.answer().

  3. Реагирование на выбор результата: Если предоставлена опция onResult, бот прослушивает, когда пользователь выбирает один из результатов инлайн-запроса. Затем предоставленная функция может, например, изменить текст сообщения.

Пример: Пользовательский обработчик инлайн-запросов

Вот более подробный пример, демонстрирующий использование как триггера инлайн-запроса, так и обработки выбора результата:

ts
bot.inlineQuery(
    /search (.*)/i,
    async (context) => {
        if (context.args) {
            await context.answer(
                [
                    InlineQueryResult.article(
                        "result-1",
                        `Результат для ${context.args[1]}`,
                        InputMessageContent.text(
                            `Вы искали: ${context.args[1]}`
                        ),
                        {
                            reply_markup: new InlineKeyboard().text(
                                "Получить подробности",
                                "details-callback"
                            ),
                        }
                    ),
                ],
                {
                    cache_time: 0,
                }
            );
        }
    },
    {
        onResult: (context) => context.editText("Вы выбрали результат!"),
    }
);

В этом примере:

  • Бот прослушивает инлайн-запросы, которые начинаются с search , за которыми следует поисковый термин.
  • Бот отвечает результатом инлайн-запроса, который включает кнопку с надписью "Получить подробности."
  • Когда пользователь выбирает этот результат, бот редактирует сообщение, чтобы указать, что был сделан выбор.