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

Тревоги: что делать

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

Ниже — только те из шестнадцати, у которых первое действие не угадывается и которые стоит знать до того, как окажешься перед экраном.

Уйдёт ли тревога наружу — смотрите на экране, а не здесь

⚠️ Прежняя запись «ни писем, ни SMS, ни всплывающих: отправку делает сервер, а он ещё пишется» устарела. Отправка написана: письма уходят, уведомления в браузер тоже.

Но работают они только там, где серверу выданы настройки: адрес почтового сервера — в панели, ключи уведомлений — в конфигурации машины. Без них сервер честно не объявляет такой канал, и панель пишет об этом прямо на экране «Доставка уведомлений».

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

⚠️ Тридцать секунд — у администратора. Экран «Доставка уведомлений» требует права alerts.configure, и у роли «оператор» его нет: раздела не будет в меню, а по прямому адресу панель ответит «Раздел недоступен». Дежурный этот вопрос не проверяет, а задаёт заранее — и записывает ответ туда, куда ночью смотрит.

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

SMS наружу не уходит вовсе: шлюза нет. Режим имитации кладёт «сообщение» в ящик внутри системы — для показа, а не для дежурства.

⚠️ И про письма на сегодняшнем сервере — то же самое, только это менее заметно. Почта настроена на приёмник, стоящий на той же машине (127.0.0.1:1025): письмо формируется, уходит туда, панель честно пишет «отправлено» — и наружу, в ящик дежурного, не попадает ничего, пока владелец не впишет настоящий SMTP. Признак — предупреждение панели про петлевой адрес на экране «Доставка уведомлений»; там же ссылка «открыть ящик» (/mail/). ⛔ Здесь стояло «вход тот же, что в панель», и на этом фраза кончалась — дежурный читал её как «значит, посмотрю сам». Вход тот же (второго пароля нет), но пускают по правам: экран со ссылкой — администраторский, а сам ящик писем с 7 сентября требует права sms.outbox.read, которого у роли «оператор» нет. В письме лежит код клиента целиком — это то же самое, что показывает «SMS (имитация)», и закрыто оно так же. Дежурный по прямому адресу получает страницу «Экран писем закрыт: в письмах лежат коды доступа клиентов». 🔴 Это не поломка входа: входить заново бесполезно, нужен администратор.

То есть на дежурстве прямо сейчас работает уведомление в браузер, а письмо — это проверяемая заготовка, а не доставка.

Коротко​

ТревогаПервое действиеЕхать?
Дверь не закрытапосмотреть, подтверждался ли датчик этой ячейки хоть разда, если ячейка исправная и занята
Ячейка не открыласьпроверить, отвечает ли шкаф вообщеда, если шкаф отвечает, а ячейка одна такая
Шкаф офлайнподождать 5–7 минутне сразу
Дверь открылась без командыпроверить журнал обслуживанияда, если ячейка занята

Ещё пять, у которых первое действие неочевидно​

ТревогаЧто легко понять неправильно
Клавиатура заперта после неверных кодов🔴 Это чаще всего ваш клиент, а не взломщик. Различает их журнал: причина «такого кода нет» подряд — подбор, надо ехать; «срок истёк» или «код отозван» — клиент, выпустите новый код и скажите, что клавиатура откроется сама. ⚠️ Новый код доезжает до шкафа не мгновенно — проверьте по столбцу «У шкафа», прежде чем обещать клиенту, что теперь получится. ⚠️ Снять блокировку из панели нельзя и отметка «происходит сейчас» у этой тревоги не гаснет сама — подробности в коде клиента и блокировке
Вещь легла не в ту ячейку🔴 Шкаф поступил правильно, но сервер и шкаф разошлись в том, где лежит инструмент. Само не рассосётся: без правки следующий клиент откроет по коду пустую дверцу
Клиент позвал на помощьЭто не авария, а человек. ⚠️ Смотрите время события, а не время приёма: без связи просьба лежит в очереди, и человек мог давно уйти
Открыли по отозванному кодуТяжесть решает всё. Warning — отзыв не доехал (связь). 🔴 Critical — отзыв ДОЕХАЛ, а ячейка открылась: это неисправность, и она повторится
Шкаф давно не спрашивал про обновленияОтсутствие вопросов выглядит ровно как отсутствие проблем. ⛔ Прежняя запись «это выезд» устарела: манифест киоск спрашивает только при запуске, поэтому лекарство — перезапустить киоск из панели («Обновления» → строка шкафа → «Перезапустить киоск»). Ехать нужно, только если и после перезапуска шкаф за обновлениями не приходит

🔴 Значок в шапке и таблица на экране считают РАЗНОЕ​

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

  • Кружок с числом рядом с «Тревогами» в шапке — непогашенные тревоги по всему парку. Наведите: всплывёт «неразобранные уведомления по всем шкафам, а не только по выбранному». ⛔ Раньше он считал только выбранный шкаф. Критическая тревога на шкафу Б была не видна оператору, который работал со шкафом А, — о ней узнавали от клиента. ⚠️ Если панель открыли сразу на разделе без выбора шкафа («Обновления», «Пользователи», «Данные и приватность», «Доставка уведомлений», «SMS (имитация)»), списка шкафов у неё ещё нет, и в кружке стоит счёт выбранного шкафа. Подсказка тогда так и говорит — «неразобранные уведомления выбранного шкафа».
  • Таблица на экране «Уведомления» — тревоги выбранного шкафа, и так было всегда: запрос уходит на сервер вместе с постаматом.

Значит числа сходиться не обязаны, и расхождение — это не сбой, а сообщение: «где-то ещё горит». Чтобы увидеть где, переберите шкафы в списке наверху.

⚠️ В таблице есть колонка «Постамат», и она стоит там всегда, даже когда шкаф один. День, когда она впервые понадобится, — это день, когда на улице появился второй шкаф; разбираться с незнакомой разметкой в этот день не надо. Заодно снимок экрана, пересланный в мессенджер, ничем другим шкаф не называет.

🔴 Гашение идёт по номеру тревоги, и про выбранный шкаф сервер не спрашивает. Поэтому окно подтверждения называет шкаф словами: «Отмечаются разобранными уведомления шкафа «имя» — N. Отменить нельзя». Читайте эту строку перед нажатием: погашенная тревога не оставляет следа на экране — она просто уходит из непогашенных, и никто туда не едет.

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

🔴 У каждого адреса доставки свой шкаф — он выбирается в строке​

Экран «Доставка уведомлений» решает, кого и чем будить. В каждой строке получателя есть поле «Каких шкафов»: либо «Весь парк — все шкафы», либо один конкретный шкаф. Дежурному по объекту заводят его адрес и выбирают его шкаф — чужие ночные тревоги ему приходить не будут.

⚠️ Заводит не он сам: экран администраторский (право alerts.configure, у роли «оператор» его нет). Дежурный называет администратору две вещи — адрес и шкаф, — и проверить потом может только одним способом: попросив прислать пробное сообщение. Читать этот раздел как список своих действий не надо; читать его надо как список того, о чём имеет смысл попросить.

⛔ Здесь стояло «Разделить получателей по шкафам нельзя: у маршрута доставки постамата нет вовсе». Это было правдой до 7 сентября и снято вместе с самой дырой. Оставленная запись успокаивала бы в опасную сторону: человек прочитал бы «нельзя» и не стал искать поле, которое стоит прямо в строке.

Что из этого следует на дежурстве:

  • умолчание — «весь парк», и адреса, заведённые раньше, остались парковыми. Обновление ничего не переписывало: кто получал тревоги всех шкафов, тот и получает. Хотите сузить — выберите шкаф в строке и сохраните;
  • «весь парк» — это правда все, включая шкафы в других городах. Какого шкафа тревога, видно и из самого письма: название постамата стоит и в теме, и в первой строке;
  • маршруты складываются, а не перекрывают друг друга. Один и тот же адрес, заведённый и на весь парк, и на отдельный шкаф, — это два правила, и для тревог этого шкафа сработает любое из них. Сделать «на весь парк, кроме одного шкафа» добавлением строки нельзя: получится обратное задуманному;
  • флажок «молчать ночью» — у каждой строки свой, и ночь считается по времени того шкафа, у которого случилась тревога, а не по вашему и не по выбранному в шапке. У паркового маршрута это каждый раз разный шкаф. 🔴 И молчит она даже на критических — это отдельное решение, панель предупреждает о нём у самого флажка;
  • выбор шкафа в шапке на доставку не влияет никак — раздел «Доставка уведомлений» и не получает его в адрес страницы, в отличие от «Тревог»: на одном экране здесь стоят строки разных шкафов сразу, и шкаф выбирается у самой строки;
  • шкаф в строке помечен «шкаф не найден» — значит его забыли, а строка осталась. Такой маршрут не сработает ни разу: выберите шкаф заново или «весь парк», иначе сервер не примет сохранение.

⚠️ Если шкаф в парке один, выбирать нечего — экран так и пишет, и оставить во всех строках «весь парк» правильно.

🔴 «Push в браузер»: шкаф выбирается так же, а вместо адреса — человек​

Заголовок выше — про почту, и у полоски в браузере поле «Каких шкафов» работает ровно так же. Разница в соседнем поле: у push вместо адреса выбирается человек панели. Адреса у полоски не бывает вовсе — её получает браузер, а браузеров у человека несколько, — поэтому строка называет дежурного, а сервер сам разворачивает его во все браузеры, где тот нажал «Подписаться».

⛔ Здесь стоял целый раздел «Кроме одного канала: „Push в браузер“ по шкафам НЕ делится», и в нём — «У строки с каналом „Push в браузер“ поле „Каких шкафов“ заперто на „весь парк“». Это было правдой до 7 сентября и снято вместе с причиной: тогда push-маршрут не называл никого, сервер рассылал по всем подпискам разом, и привязка к шкафу работала обратно задуманному. Оставить такую запись — худший сорт вранья: человек прочитал бы «нельзя» и не стал бы искать настройку, которая стоит прямо в строке. ⛔ Оттуда же снята красная строка «строка push, привязанная к шкафу, глушит тревоги остальных шкафов совсем». Для владельца ОДНОГО шкафа она была неправдой даже тогда, когда описывала настоящую дыру: остальных шкафов у него нет, доставка работала, а он читал «сломано» там, где всё цело.

Что про эту строку надо знать на дежурстве — три вещи, и все три про доставку:

  • выбранный человек получает полоску во ВСЕ свои браузеры и профили, где он нажимал «Подписаться». Где он сидит в эту минуту, сервер не знает, поэтому шлёт во все. Сколько их сейчас — написано тут же, у строки;
  • 🔴 ноль браузеров — самое опасное состояние на этом экране. Строка сохраняется, выглядит рабочей и не доставляет ничего: подписка живёт в браузере, и включить её может только сам человек — открыть панель и нажать «Подписаться» на этой же странице. Панель говорит это красным, и читать её надо до того, как понадеетесь на строку;
  • 🔴 отключённый в панели человек получателем не считается. По такой строке не уходит ничего и никому, и это выбрано намеренно: тот, кто уже не работает, не должен ночами получать «дверь открыта, ячейка 26» вместе с адресом объекта. Строка помечена красным — выберите действующего дежурного.

⚠️ Строки, заведённые раньше 7 сентября, работают как работали, и переписывать их не нужно. В поле «Кому» у них стоит прежняя пометка — например, «дежурная смена». Человека она не называет, и сервер по такой строке шлёт всем подписанным браузерам, ровно как вчера. Панель говорит об этом вслух и предлагает выбрать человека, но ничего не требует: настройка, потребовавшая правки в день обновления, — это тревога, не доехавшая до дежурного той же ночью. То же значит и выбор «Все подписанные браузеры»: он стоит в списке первым, и для одной смены на один шкаф он правильный.

⚠️ SMS каналом доставки тревог сервер не заявляет вовсе (шлюза нет), и строка с ним стоит выключенной. Не путать с имитацией SMS для показа: та про код клиенту, а не про тревогу дежурному.

Дверь не закрыта​

Что значит. Ячейку открыли, и она остаётся открытой дольше, чем нужно человеку, чтобы забрать или положить вещь.

Что проверить по порядку:

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

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

На месте: посмотрите, не мешает ли что-то закрытию (вещь торчит, мусор в проёме, дверца перекошена), дожмите дверцу до щелчка и убедитесь в панели, что состояние сменилось на «закрыта».

Чего не делать. Не пытайтесь «закрыть удалённо» — такой команды не существует. Не выдавайте эту ячейку клиентам, пока она не закрылась.

Ячейка не открылась​

Что значит. Команду отправили, а состояние ячейки не изменилось.

Что проверить по порядку:

  1. Отвечает ли шкаф вообще. Если молчит весь шкаф — это другая тревога, смотрите «шкаф офлайн» ниже.
  2. Повторите команду один раз через две-три секунды. Одиночный сбой связи по проводу внутри шкафа — обычное дело.
  3. Откройте соседнюю ячейку. Если соседняя открывается, а эта нет — проблема в конкретном замке или в его проводе.
  4. Проверьте, подтверждался ли датчик этой ячейки. Это важно: если датчика нет, «состояние не изменилось» не означает, что дверца не открылась. Она могла открыться, а сказать об этом некому. К такой ячейке надо ехать смотреть глазами.

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

🔴 И сразу выведите дверцу из оборота — «Ячейки» → дверца → «вывести из оборота». Пока она в обороте, сервер продолжает назначать её новым арендам: один сгоревший замок собирает десяток жалоб подряд, каждый следующий клиент приезжает к дверце, которая не откроется, и звонит. ⚠️ Кнопка появилась 4 сентября и доступна администратору; до этого сделать это можно было только полным обрядом привязки на месте. ⚠️ Порядок здесь важен: сначала достаньте вещь, потом выводите. По выведенной дверце кнопка «Открыть удалённо» гаснет, и сервер отвечает «сначала верните её в оборот» (apps/api/src/panel/postamats.service.ts, openCell), а вернуть в оборот может только администратор — состояния ячейки. Открыть выведенную умеет один мастер привязки, а его шаг «закройте дверцу рукой» рассчитан на человека у шкафа.

Чего не делать. Не давить «открыть» очередью: импульс на замок длится треть секунды, и очередь нажатий только запутает картину.

Шкаф офлайн​

Что значит. Панель не получает ответов от постамата. Причин две: пропала связь (интернет, роутер, Wi-Fi) или зависла программа на планшете.

Что проверить по порядку:

  1. Подождите 5–7 минут. Если зависла программа, плата перезагрузится сама — так задумано, см. почему шкаф перезагружается сам. Очень часто шкаф возвращается в строй без всякого вмешательства.
  2. Проверьте, не пропала ли связь у всей точки — другие устройства на том же адресе, роутер, оплата интернета. Постамат ходит только до нашего сервера и никуда больше, поэтому его отключают заодно с любой ошибкой в сети точки.
  3. Посмотрите, не повторяется ли это по кругу. Если шкаф появляется и снова пропадает примерно каждые пять минут — это не связь. Это значит, что программа на планшете не поднимается, и плата раз за разом перезагружается. Такое чинится не на месте: эскалируйте.

Что при этом с ячейками. ⚠️ Здесь стояло «пока связи нет, система не даёт выдавать вещи из этого шкафа». Это неверно, и понять это важно: панель ничего не запрещает. Аренда заводится и код выпускается как обычно — сервер при этом на связь не смотрит (проверено по коду: apps/api/src/codes/codes.service.ts, issueCode и createRental проверяют ячейку, окно, аренду и ключ — и ни разу lastSeenAt). На связь смотрит только подпись «· зарегистрирован, но сейчас не на связи» рядом с названием шкафа в выборе постамата и жёлтая метка вместо зелёной.

⛔ Здесь стояло «· не на связи» и «серая точка вместо зелёной». Подпись переписана 6 сентября, когда панель научилась различать три разных молчания: не на связи (зарегистрирован, шкаф просто не отвечает), ожидает регистрации (планшет о нём ещё не знает) и отозван (доступ платы прекращён навсегда). Прежняя одна подпись на все три случая стоила выезда: оператор читал «не на связи» и ехал чинить связь у шкафа, у которого её и не было.

Что происходит на самом деле — два разных случая, и различать их будете вы:

  • Код выпущен ДО обрыва связи. Шкаф его примет: он проверяет коды по своему списку, скачанному заранее, а гасит по датчику двери — сервер для этого не нужен. Событие о выдаче приедет на сервер после восстановления связи; до этого момента панель честно считает аренду невыданной, а ячейку — свободной. Клиента с таким кодом отправляйте к шкафу. ⚠️ В таблице кодов у него стоит «код у шкафа» и приписка: на сам код молчание шкафа не влияет, но открыть дверцу из панели, если код всё-таки не подойдёт, будет нечем — команда уедет той же дорогой.
  • Код выпущен ПОСЛЕ обрыва. Шкаф узнаёт о новых кодах только сеансом связи, и пока он молчит, на клавиатуре такой код даст «код не найден» — тот же ответ, что на выдуманный. ⛔ Здесь стояло: «Панель об этом не предупредит: выпуск пройдёт, письмо уйдёт, а код не заработает, пока шкаф не вернётся». С 7 сентября панель предупреждает: в таблице кодов у такого кода стоит «шкаф молчит», а под таблицей сказано словами, что ждать бесполезно. Выпуск и письмо по-прежнему проходят — сервер при выпуске на связь не смотрит, — но молча это больше не происходит. Такого клиента надо обслужить вручную или предупредить, что код оживёт вместе со связью. Разбор всех пяти подписей столбца — код клиента и блокировка.

Удалённое открытие из панели в это время тоже не выполняется сразу: команда встаёт в очередь и уедет на очередном сеансе связи — см. открыть ячейку удалённо. 🔴 Но ждать она будет только пятнадцать минут. Дальше команда протухает и шкафу не выдаётся вовсе, даже когда связь вернётся. То есть «поставил в очередь и пошёл дальше» на офлайновом шкафу означает «не открыл»: вернувшемуся шкафу команду надо отправить заново.

Чего не делать. Не дёргайте питание несколько раз подряд, «чтобы наверняка»: если в этот момент шкаф что-то дописывает, станет хуже. Одно выключение на 10 секунд — максимум, и только если разработчик подтвердил.

Дверь открылась без команды​

Что значит. Датчик сообщил, что дверца открыта, а команды на открытие не было.

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

Что проверить по порядку:

  1. Журнал обслуживания. Ячейку могли открыть аварийным ключом. Это самая частая причина, и она безобидная — если запись есть.
  2. Занята ли ячейка. Если внутри чужая вещь — это срочный выезд.
  3. Не «прыгает» ли состояние. Ячейка, которая раз в несколько минут показывает то «открыто», то «закрыто», без людей рядом — это плохой контакт в проводе датчика, а не посетители.
  4. Не показывает ли она «открыто» постоянно с какого-то момента. Оборванный провод датчика читается системой как «открыто» и таким и остаётся. Это ремонт, а не взлом.

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

Чего не делать. Не закрывайте тревогу, не выяснив причину: «наверное, кто-то дёрнул» — это не причина. Если объяснения не нашлось, эскалируйте с точным временем события.