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

Что на самом деле происходит при удалении

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

Неочевидное начинается дальше. Ваша услуга в витрине - это не та же самая запись. Это отдельная строка с собственным названием, описанием и ценой, которая лишь ссылается на позицию поставщика парой «поставщик + идентификатор услуги». Ссылается именно строкой, а не жёсткой связью на уровне базы, поэтому удаление одной записи не тянет за собой другую.

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

Ровно то же случается и без удаления. Поставщик пересобрал каталог и выдал тем же самым услугам новые идентификаторы: снаружи «ничего не изменилось», а по факту все ваши привязки указывают в пустоту. С точки зрения панели это неотличимо от удаления.

Почему панель об этом молчит

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

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

Во что это обходится

Дальше события идут по одному сценарию, и он неприятный:

Последний пункт выглядит как сокрытие, а на деле это осознанный компромисс: сбой отправки обычно дожимают повторные попытки за несколько минут, и слово «Ошибка» в кабинете плодило бы тикеты про заказы, которые уйдут сами. Поэтому клиенту показывается pending, а настоящий статус виден оператору в админке - подробнее об этом в статье про то, почему заказ висит в Pending.

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

Как найти битые позиции

Проверка сводится к одному действию: сверить свои услуги с копией каталога поставщика по паре «поставщик + идентификатор услуги» и забрать те, у которых пары не нашлось. Это одна выборка, её не надо изобретать каждый раз - достаточно один раз сохранить и запускать.

Несколько практических деталей:

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

Что делать с найденным

Как не попадать в это снова

Итог

Удалённая у поставщика услуга не исчезает из вашей витрины - она превращается в ловушку, которая выглядит как обычный товар и срабатывает на первом же клиенте. Автоматического сигнала об этом у панелей, как правило, нет, поэтому сверка каталогов должна быть вашей привычкой, а не разовой реакцией на жалобу. Пятнадцать минут раз в неделю дешевле одного разбора с клиентом, у которого списали деньги и ничего не сделали.

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