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

Важно принять исходную мысль: отказ поставщика — не аварийная ситуация, а нормальный режим работы, заранее посчитанный в его собственных обещаниях. Доступность 99,9 % означает право быть недоступным 8,8 часа в год, доступность 99,5 % — уже 43,8 часа. Эти часы не выбирают удобное время: они приходятся на рабочие дни ровно в той же пропорции, что и всё остальное.

Разбираем на модельном примере: интернет-магазин, оформление заказа зависит от внешнего сервиса расчёта стоимости доставки. В пиковый час через оформление проходит 12 заказов, средний чек 3 800 ₽, маржа 22 % — то есть 836 ₽ с заказа. Дальше считаем, во что обходится час без плана и час с планом.

Четыре линии поведения при отказе

Линии не заменяют друг друга, а накладываются. Буфер спасает то, что можно доставить позже. Повторы закрывают короткие сбои. Режим пониженной функциональности позволяет продолжать работу без внешнего сервиса вообще. Ручной обход нужен там, где всё предыдущее не сработало, и он же — самая дешёвая строка, которую пропускают чаще всего.

ЛинияЧто делаетГде применимаЦена в смете
Буфер и отложенная отправкаСобытие складывается в очередь и уходит, когда получатель ответитВсё, что можно доставить позже: заказ в учёт, документ, уведомление54 000 ₽
Повтор с нарастающей паузойПовторяет отправку через 5 секунд, 1, 5 и 15 минут, 1 и 4 часаКороткие сбои от минут до нескольких часов46 000 ₽ вместе с ключом операции
Режим пониженной функциональностиПроцесс идёт без внешнего сервиса на резервных данных: фиксированный тариф, вчерашний остаток, ручное подтверждениеТо, что нельзя остановить: оформление заказа, касса, запись клиента38 000 ₽
Ручной обходной путьЛюди выполняют операцию по регламенту, данные догоняют после восстановленияРедкие и дорогие операции: платёж, бронь, срочная отгрузка12 000 ₽ на регламент и обучение

Все четыре линии вместе — 150 000 ₽ в смете интеграции. Первые две строки подробно разобраны в материале про очередь и повторные попытки, поэтому здесь остановимся на двух последних: именно они отличают обмен, который переживает час простоя, от обмена, который его переживает вместе с вашими менеджерами.

схема процессаchto-delat-esli-servis-ne-otvechaet--01
Схема четырёх линий поведения: буфер, повтор, режим деградации и ручной обход

Схема потоков данных. Слева блок «Событие в вашей системе», от него стрелка к развилке «Внешний сервис отвечает?». Ветка «Да» ведёт в «Готово». Ветка «Нет» расходится на четыре подписанные дорожки, идущие сверху вниз: «1. Буфер — событие в очереди, 54 000 ₽»; «2. Повтор — 5 с, 1 мин, 5 мин, 15 мин, 1 ч, 4 ч, 46 000 ₽»; «3. Режим пониженной функциональности — резервный тариф из справочника, 38 000 ₽»; «4. Ручной обход — регламент на час, 12 000 ₽». Все четыре дорожки сходятся в правый блок «Процесс продолжается» и далее в блок «Догон данных после восстановления». Внизу подпись: «Итого 150 000 ₽ в смете». Чертёжный стиль, подписи по-русски.

Четыре линии накладываются друг на друга, а не заменяют одна другую

Таймаут: почему долгое ожидание опаснее быстрого отказа

Что это значитТаймаут

Время, после которого ваша система перестаёт ждать ответа и считает попытку неудачной. Это не техническая мелочь, а решение о том, чей простой видит ваш клиент: чужой или ваш.

Отсутствие таймаута или таймаут в 30 секунд на странице оформления заказа означает, что покупатель тридцать секунд смотрит на крутящийся индикатор. Для него это не «поставщик доставки недоступен», а «магазин сломался», и уходит он не к поставщику, а от вас. Быстрый честный отказ на третьей секунде с подстановкой резервного тарифа покупатель, как правило, вообще не замечает.

  • Синхронный вызов в момент действия клиента — 3 секунды. Расчёт доставки, проверка промокода, показ остатка. Дальше — резервное значение и пометка «уточним при подтверждении».
  • Фоновая операция без ожидающего человека — 30 секунд. Передача заказа в учёт, отправка документа, обновление статуса. Здесь ожидание никому не мешает, потому что за ним стоит очередь.
  • Ночная выгрузка большого объёма — до 5 минут на пакет. Тут длинный таймаут оправдан: собеседник действительно долго собирает ответ, и обрыв означает повтор всей работы.
Один медленный сервис умеет останавливать всю систему

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

Предохранитель: перестать добивать упавший сервис

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

Что это значитПредохранитель

Правило вида «после 5 отказов подряд перестать обращаться к сервису на 2 минуты, затем пропустить одну пробную операцию: прошла — работаем дальше, не прошла — снова пауза». Всё это время события копятся в очереди и не теряются.

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

Что нельзя откладывать ни при каких условиях

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

  1. 1Платёж. Деньги либо списаны, либо нет, и повтор вслепую создаёт второе списание. Правильное поведение — запросить статус операции по её номеру и только потом решать. Если статус получить нельзя, платёж уходит в карантин и разбирается человеком.
  2. 2Бронь ограниченного ресурса. Слот записи, последний товар на складе, окно доставки. Повтор создаёт вторую бронь на то же место, и разбирать её будет администратор при живом клиенте. Здесь нужен ключ операции — тот же механизм, что защищает от задвоенных заказов.
  3. 3Ответ клиенту. Человек ждёт сейчас, и тишина для него хуже отказа. Если подтверждение записи не ушло, клиенту отправляется честное «заявка принята, подтвердим в течение часа», а задача ставится на менеджера. Молчание в этот час стоит дороже любой технической ошибки.

Сколько стоит один час без плана и с планом

Возвращаемся к модельному магазину: 12 заказов в пиковый час, средний чек 3 800 ₽, маржа 22 %, то есть 836 ₽ с заказа. Сервис расчёта доставки недоступен ровно час. Сравниваем два поведения: система показывает ошибку и оформление прерывается — или система подставляет резервный тариф из собственного справочника и принимает заказ.

Один час недоступности сервиса расчёта доставки, 12 заказов в час
Без плана: оформление прерывается, часть покупателей возвращается позже самавернулись 4 из 12
Потеряно 8 заказов × маржа 836 ₽6 688 ₽
Звонки «у вас сайт не работает»: 40 минут оператора × 700 ₽/час467 ₽
Итого без плана7 155 ₽
С планом: все 12 заказов приняты по резервному тарифу0 ₽ потерь по заказам
Расхождение резервного тарифа с фактическим у 3 заказов × 180 ₽540 ₽
Сверка 12 заказов после восстановления: 30 минут × 700 ₽/час350 ₽
Итого с планом890 ₽
ИтогоРазница 6 265 ₽ за один час — и это без учёта отзывов и повторных обращений

Теперь годовая арифметика. Поставщик с обещанной доступностью 99,9 % имеет право быть недоступным 8,8 часа в год. При разнице 6 265 ₽ за час это 55 132 ₽ в год, то есть около 4 594 ₽ в месяц. Режим пониженной функциональности стоил в смете 38 000 ₽ разово — он окупается на девятом месяце и дальше работает бесплатно. Если же поставщик обещает 99,5 %, то есть 43,8 часа в год, окупаемость сокращается примерно до двух месяцев.

графикchto-delat-esli-servis-ne-otvechaet--02
Сравнение потерь за час: 7 155 ₽ без плана против 890 ₽ с планом

Два столбца в рублях. Левый «Без плана — 7 155 ₽» разбит на два сегмента: «8 потерянных заказов × 836 ₽ = 6 688 ₽» и «звонки клиентов 467 ₽». Правый «С планом — 890 ₽» разбит на «расхождение тарифа 540 ₽» и «сверка после восстановления 350 ₽». Между столбцами вертикальная выноска «разница 6 265 ₽ за час». Под диаграммой строка: «8,8 часа в год при доступности 99,9 % = 55 132 ₽». Ось подписана в рублях.

Час чужого простоя стоит в восемь раз дороже, если у вас нет резервного режима

План на час простоя: что делают люди

Техническая часть закрывает поток данных, но не закрывает работу компании. План на час простоя — это половина страницы текста, которая лежит у ответственного и содержит пять шагов с конкретными именами. Без него даже безупречно спроектированный обмен даёт картину «система что-то сама делает, а сотрудники не знают, отгружать или ждать».

  1. 1
    0–2 минуты: обнаружение

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

  2. 2
    2–5 минут: оповещение

    Сообщение уходит конкретному человеку в компании и дежурному подрядчика, а не «на общую почту». В плане записано имя, должность и запасной контакт. Если человек в отпуске, указан второй.

  3. 3
    5–15 минут: переключение в резервный режим

    Названо, кто вправе включить режим пониженной функциональности, и по какому признаку. Обычно это одно действие в админке и одно сообщение в рабочий чат: «доставка считается по резервному тарифу, подтверждайте заказы как обычно».

  4. 4
    Весь простой: работа руками по регламенту

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

  5. 5
    После восстановления: догон и сверка

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

этапыchto-delat-esli-servis-ne-otvechaet--03
Лента времени часа простоя: обнаружение, оповещение, резервный режим, ручная работа, догон

Горизонтальная лента времени длиной в один час с пятью отметками: «0–2 мин — датчик заметил молчание обмена», «2–5 мин — оповещение ответственному и дежурному подрядчика», «5–15 мин — включён режим резервного тарифа», «15–60 мин — менеджеры работают по регламенту, номера заказов записываются», «после восстановления — выпуск очереди с ограничением скорости и сверка». Под лентой две параллельные дорожки: верхняя «Что делает система», нижняя «Что делают люди». Чертёжный стиль, подписи по-русски.

План на час простоя умещается на половине страницы и содержит имена, а не роли

Когда всё это не нужно

Полный набор из четырёх линий оправдан не везде. Есть три ситуации, где достаточно одной очереди или вообще ничего, и платить за остальное смысла нет.

  • Внешний сервис не в критическом пути. Отправка отзыва в агрегатор, выгрузка статистики, синхронизация карточек по ночам. Здесь хватит буфера: доедет через час — ничего не изменится. Режим пониженной функциональности для таких задач — потраченные 38 000 ₽.
  • Меньше 30 операций в день. При таком объёме дешевле написать регламент на бумаге и один раз обучить двух человек. Автоматический резервный режим окупится за годы, а регламент работает с первого дня и стоит 12 000 ₽.
  • Резервных данных не существует. Курс валют или тариф доставки можно подставить из справочника, а результат банковского скоринга или ответ государственной системы подставить нечем. В этих случаях честнее остановить процесс и сказать клиенту, что решение будет позже, чем выдумывать значение и потом его отзывать.

И отдельная честная оговорка про деньги: сама по себе устойчивость к чужим сбоям не приносит выручки и не видна на демонстрации. Она проявляется только в те 8,8 часа в год, когда поставщик молчит. Поэтому решение принимается арифметикой: если ваш час простоя стоит меньше тысячи рублей, обходитесь очередью и регламентом. Если больше пяти тысяч — считайте по формуле выше и закладывайте резервный режим в смету сразу, а не после первого инцидента.