Перейти к основному содержимому

Очередь обмена

Обмен всегда проходит через три звена, и это объясняет большую часть поведения модуля:

  1. Триггер — событие в Битрикс24 или вебхук из МойСклад замечает изменение.
  2. Очередь — создаётся задача: только ссылка на сущность, без самих данных.
  3. Агент — фоновый планировщик берёт задачи порциями и выполняет обмен.

Очередь здесь не про ожидание, а про надёжность: изменение сначала записывается как задача и только потом выполняется. Поэтому сбой МойСклад не ломает работу менеджера, а неудачную задачу можно повторить.

Обмен идёт за секунды

Поставив задачу, модуль тут же запускает её фоновым прогоном, не дожидаясь расписания: обычно документ уезжает за несколько секунд. Запуск происходит уже после того, как Битрикс24 ответил менеджеру, поэтому ни сохранение сделки, ни сам хит от этого не замедляются. В обратную сторону так же: вебхук МойСклад ставит задачу, и она стартует сразу.

При массовых изменениях мгновенный запуск отключается: пока обмена ждут не больше десятка сущностей, каждая новая задача стартует сразу, а при наплыве (массовое обновление сделок, импорт, шторм вебхуков) всё разбирает агент по расписанию, порциями. Так пачка документов обменивается быстрее, чем десятками одновременных прогонов, и ничего не теряется.

Ритм и лимиты

ПараметрЗначениеЧто означает
Фоновый запусксразуПоставленная задача стартует, не дожидаясь агента.
Проход агента~1 минутаМаксимальная задержка, если фоновый запуск не сработал.
Задач за проход10Остальные ждут следующего прохода.
Попытки на задачу3После третьей неудачи задача переходит в «Ошибка».
Таймаут задачи5 минутЗависшую задачу подхватят заново.
Порог ошибок100 за часСтолько задач с ошибкой останавливают агент.
Хранение истории72 часаЗавершённые задачи удаляются автоматически.

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

Серия ошибок останавливает агент целиком

Сто задач с ошибкой за час — и агент деактивируется: обычно это значит, что сломалось что-то общее (истёк токен, недоступен МойСклад, разъехалась настройка), и повторять бессмысленно. Обмен встанет до вашего вмешательства: разберитесь с причиной, затем реактивируйте агент на дашборде.

Состояния задачи

СостояниеЧто значит
В очередиЗадача создана и ждёт обработки.
ВыполняетсяЗадачу взял агент; трогать её нельзя.
Повтор после ошибкиПопытка не удалась, задача вернулась в очередь.
ОтложенаЗадача запланирована на более позднее время.
ВыполненаЗадача отработала без ошибок.
ОшибкаПопытки исчерпаны; нужен разбор.
ОтмененаЗадача снята и выполняться не будет.
«Выполнена» не означает «документ уехал»

Состояние описывает судьбу задачи, а не результат обмена. Если модуль решил, что документ обменивать нельзя — не привязан тип документа, не хватает настроек, сделка не прошла фильтр, — задача честно отработает и станет «Выполнена», но в МойСклад ничего не появится. Ответ в таком случае ищется в журнале действий.

Почему правки не превращаются в лавину запросов

В задаче нет данных — только ссылка на сущность. Модуль не запоминает, как выглядела сделка в момент сохранения: он читает её заново, когда доходит до обработки. Отсюда три следствия:

  • десять правок подряд схлопываются в одну задачу и выгружают финальное состояние, а не десять промежуточных;
  • повтор после ошибки никогда не отправляет устаревшие данные;
  • задачи выполняются строго по одной — параллельных прогонов не бывает, поэтому гонок и двойных заказов не возникает.

Защита от зацикливания

Записи, которые модуль делает сам, не запускают встречный обмен: ни события CRM, ни уведомления МойСклад на них не срабатывают. Иначе каждая загрузка из учёта немедленно порождала бы выгрузку обратно.

Наблюдение и разбор проблем

Главное окно — страница Очередь обмена. Задачи разложены по двум разрезам: активные — те, что ещё в работе, и завершённые — история за последние 72 часа. Есть фильтр по направлению обмена, а по клику на задачу открывается карточка с таймингами, счётчиками, последней ошибкой и журналом попыток.

Над задачей доступны два действия, и ещё одно — над агентом:

  • выполнить принудительно — прогнать задачу немедленно, не дожидаясь агента;
  • удалить — убрать задачу: обмен по ней не состоится;
  • вызвать агент очереди — выполнить проход прямо сейчас, не дожидаясь минуты.
«Выполнить принудительно» — не просто «попробовать ещё раз»

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

Куда смотреть, если…

СимптомГде смотретьОбычная причина
Задач нет вообще, хотя сделку менялиСобытия модуляОтключено событие CRM — изменение не создаёт задачу.
Задачи копятся и не выполняютсяДашборд, карточка агентаАгент неактивен или не установлен: скорее всего, остановлен порогом ошибок.
Задача «Выполнена», а в МойСклад пустоЖурнал действийСработала проверка готовности или документ не прошёл фильтр.
Из МойСклад ничего не приходитВебхуки МойСкладХуки не установлены, устарели после смены ключа либо не настроен доступ к обработчику.