← Назад к заметкам

Заметки

Как ITR-боту отправлять сообщения через заданное время

Как построить отложенную отправку сообщений ITR-ботом: очередь, агенты и event-driven схема.

ITR-боту не нужно ждать внутри текущего обработчика. Он должен сохранить будущую отправку в очередь, а отдельный агент или воркер отправит сообщение, когда наступит время.

Задача

Боту нужно написать клиенту через 5 минут, через час или на следующий день после события.

Типичный пример — напоминание, контроль ответа, повторный вопрос или мягкое завершение диалога.

Очередь вместо ожидания

Обработчик события должен быстро завершаться, поэтому задержку лучше хранить как запись в очереди.

[
    'BOT_ID' => 42,
    'DIALOG_ID' => 'chat789',
    'MESSAGE' => 'Вы ещё на связи?',
    'SEND_AT' => time() + 300,
    'STATUS' => 'new',
]

Агент выбирает записи со статусом new и временем SEND_AT меньше текущего момента. После успешной отправки статус меняется на done.

Event-driven схема

Событие только создаёт будущую работу, а отправка выполняется отдельно.

Такой подход устойчивее: если внешний API временно недоступен, запись можно оставить в статусе ошибки и попробовать повторить позже.

Отправка от имени бота

Для бота используются методы чат-ботов, а для обычного чата — методы IM.

BX24.callMethod(
    'imbot.message.add',
    {
        BOT_ID: 42,
        DIALOG_ID: 'chat789',
        MESSAGE: 'Вы ещё на связи?',
    },
    function (result) {
        console.log(result.error() || result.data());
    }
);

Выбор метода зависит от того, где работает бот: в обычном чате, в открытой линии или через собственный коннектор.