Очередь обмена
Обмен всегда проходит через три звена, и это объясняет большую часть поведения модуля:
- Триггер — событие в Битрикс24 или вебхук из МойСклад замечает изменение.
- Очередь — создаётся задача: только ссылка на сущность, без самих данных.
- Агент — фоновый планировщик берёт задачи порциями и выполняет обмен.
Очередь здесь не про ожидание, а про надёжность: изменение сначала записывается как задача и только потом выполняется. Поэтому сбой МойСклад не ломает работу менеджера, а неудачную задачу можно повторить.
Обмен идёт за секунды
Поставив задачу, модуль тут же запускает её фоновым прогоном, не дожидаясь расписания: обычно документ уезжает за несколько секунд. Запуск происходит уже после того, как Битрикс24 ответил менеджеру, поэтому ни сохранение сделки, ни сам хит от этого не замедляются. В обратную сторону так же: вебхук МойСклад ставит задачу, и она стартует сразу.
При массовых изменениях мгновенный запуск отключается: пока обмена ждут не больше десятка сущностей, каждая новая задача стартует сразу, а при наплыве (массовое обновление сделок, импорт, шторм вебхуков) всё разбирает агент по расписанию, порциями. Так пачка документов обменивается быстрее, чем десятками одновременных прогонов, и ничего не теряется.
Ритм и лимиты
| Параметр | Значение | Что означает |
|---|---|---|
| Фоновый запуск | сразу | Поставленная задача стартует, не дожидаясь агента. |
| Проход агента | ~1 минута | Максимальная задержка, если фоновый запуск не сработал. |
| Задач за проход | 10 | Остальные ждут следующего прохода. |
| Попытки на задачу | 3 | После третьей неудачи задача переходит в «Ошибка». |
| Таймаут задачи | 5 минут | Зависшую задачу подхватят заново. |
| Порог ошибок | 100 за час | Столько задач с ошибкой останавливают агент. |
| Хранение истории | 72 часа | Завершённые задачи удаляются автоматически. |
Между повторами нет нарастающей паузы: неудачная попытка возвращает задачу в очередь, и она повторится ближайшим проходом агента. Три попытки укладываются в пару минут, поэтому кратковременная недоступность МойСклад лечится сама.
Сто задач с ошибкой за час — и агент деактивируется: обычно это значит, что сломалось что-то общее (истёк токен, недоступен МойСклад, разъехалась настройка), и повторять бессмысленно. Обмен встанет до вашего вмешательства: разберитесь с причиной, затем реактивируйте агент на дашборде.
Состояния задачи
| Состояние | Что значит |
|---|---|
| В очереди | Задача создана и ждёт обработки. |
| Выполняется | Задачу взял агент; трогать её нельзя. |
| Повтор после ошибки | Попытка не удалась, задача вернулась в очередь. |
| Отложена | Задача запланирована на более позднее время. |
| Выполнена | Задача отработала без ошибок. |
| Ошибка | Попытки исчерпаны; нужен разбор. |
| Отменена | Задача снята и выполняться не будет. |
Состояние описывает судьбу задачи, а не результат обмена. Если модуль решил, что документ обменивать нельзя — не привязан тип документа, не хватает настроек, сделка не прошла фильтр, — задача честно отработает и станет «Выполнена», но в МойСклад ничего не появится. Ответ в таком случае ищется в журнале действий.
Почему правки не превращаются в лавину запросов
В задаче нет данных — только ссылка на сущность. Модуль не запоминает, как выглядела сделка в момент сохранения: он читает её заново, когда доходит до обработки. Отсюда три следствия:
- десять правок подряд схлопываются в одну задачу и выгружают финальное состояние, а не десять промежуточных;
- повтор после ошибки никогда не отправляет устаревшие данные;
- задачи выполняются строго по одной — параллельных прогонов не бывает, поэтому гонок и двойных заказов не возникает.
Защита от зацикливания
Записи, которые модуль делает сам, не запускают встречный обмен: ни события CRM, ни уведомления МойСклад на них не срабатывают. Иначе каждая загрузка из учёта немедленно порождала бы выгрузку обратно.
Наблюдение и разбор проблем
Главное окно — страница Очередь обмена. Задачи разложены по двум разрезам: активные — те, что ещё в работе, и завершённые — история за последние 72 часа. Есть фильтр по направлению обмена, а по клику на задачу открывается карточка с таймингами, счётчиками, последней ошибкой и журналом попыток.
Над задачей доступны два действия, и ещё одно — над агентом:
- выполнить принудительно — прогнать задачу немедленно, не дожидаясь агента;
- удалить — убрать задачу: обмен по ней не состоится;
- вызвать агент очереди — выполнить проход прямо сейчас, не дожидаясь минуты.
Задача выполняется в обход очереди и после этого удаляется независимо от результата. Если причина ошибки не устранена, вы получите тот же сбой, но задача из очереди исчезнет и сама уже не повторится. Сначала исправьте настройку, потом запускайте.
Куда смотреть, если…
| Симптом | Где смотреть | Обычная причина |
|---|---|---|
| Задач нет вообще, хотя сделку меняли | События модуля | Отключено событие CRM — изменение не создаёт задачу. |
| Задачи копятся и не выполняются | Дашборд, карточка агента | Агент неактивен или не установлен: скорее всего, остановлен порогом ошибок. |
| Задача «Выполнена», а в МойСклад пусто | Журнал действий | Сработала проверка готовности или документ не прошёл фильтр. |
| Из МойСклад ничего не приходит | Вебхуки МойСклад | Хуки не установлены, устарели после смены ключа либо не настроен доступ к обработчику. |