Заметки
Как 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());
}
); Выбор метода зависит от того, где работает бот: в обычном чате, в открытой линии или через собственный коннектор.