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

Заметки

Как отправлять несколько сообщений с задержкой в ОЛ

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

Если нужно отправить несколько сообщений в открытую линию с паузами, не стоит строить это только на роботах. Надёжнее положить сообщения в очередь и разбирать её агентом или отдельным обработчиком.

Задача

Иногда после обращения клиента нужно отправить не одно сообщение, а цепочку: приветствие, уточнение, инструкцию и напоминание.

Паузы в роботах и БП могут сработать не так точно, как ожидается, а несколько параллельных роботов сложно контролировать. Для управляемой отправки лучше сделать очередь.

Очередь сообщений

Очередь хранит chat ID, текст, время отправки и статус обработки.

[
    'CHAT_ID' => 789,
    'MESSAGE' => 'Спасибо за обращение. Оператор скоро ответит.',
    'SEND_AT' => '2026-07-04 17:10:00',
    'STATUS' => 'new',
]

В таблицу или HL-блок добавляются будущие сообщения. Агент периодически выбирает записи, где время отправки наступило, отправляет сообщение и меняет статус.

Отправка сообщения

Для обычного чата можно использовать im.message.add, а для собственного коннектора — логику исходящего канала.

BX24.callMethod(
    'im.message.add',
    {
        DIALOG_ID: 'chat789',
        MESSAGE: 'Напоминание по обращению',
    },
    function (result) {
        console.log(result.error() || result.data());
    }
);

Если сообщение должно идти от имени бота, смотрите методы чат-ботов. Если это сообщение во внешний канал, коннектор должен отправить его через API внешнего сервиса.

Агент вместо sleep

Не используйте sleep в обработчике запроса, особенно на проде.

sleep держит PHP-процесс и плохо масштабируется. Агент или cron-задача работают устойчивее: запрос быстро завершился, а отправка произошла позже отдельной итерацией.