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

Клиент не может ввести код

Код клиента — семь цифр. После нескольких ошибок подряд терминал начинает тормозить ввод, а после десяти — блокируется целиком. Это защита от подбора, и её надо уметь объяснить человеку у шкафа.

Числа настраиваемые, и теперь они в одном месте

⚠️ Здесь стояло: «пороги заданы в двух частях системы по-разному, поэтому панель настройку антибрута намеренно не показывает». Это устарело. Расхождение (десять ошибок против пяти, пятнадцать минут против пяти) сведено: умолчания в обоих местах теперь одни и те же — десять ошибок и блокировка на пятнадцать минут, — а настройка постамата передаётся в антибрут по-настоящему.

Поэтому она и появилась в панели: раздел настроек постамата, поля «Ошибок до блокировки» и «Длительность блокировки». Рядом с ними панель словами пересказывает, что получится, — чтобы число не меняли вслепую.

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

⚠️ Посмотреть дежурный может, поменять — нет. Раздел «Настройки» открывается по праву postamat.view (оно у роли «оператор» есть), а сохранение требует postamat.config — его нет, и сервер откажет. Читайте фразы вида «поставите „5 ошибок“ — запрёт на пятой» как разбор чужого решения: что произойдёт, если эти числа кто-то поменял, а не как предложение поменять их самому.

🔴 Настройки принадлежат ОДНОМУ шкафу — тому, что выбран наверху. Здесь правятся имя шкафа, часовой пояс, телефон поддержки на экране киоска и пороги антибрута, и уехать они не в тот шкаф не должны. С 6 сентября: пока настройки выбранного шкафа не пришли, форма не сохраняется, а если шкаф переключили с заполненной формой, панель отвечает «Настройки НЕ сохранены: шкаф переключился» и объясняет, что в форме были значения другого постамата. Номер версии настроек тоже показывается только свой: чужой рядом с именем выбранного шкафа читался бы как подтверждение, что видите его настройки.

⚠️ Настройка действует только в сторону «строже». У шкафа два счётчика: один читает настройки постамата, второй — встроенный в сценарий экрана — запирает на десятой ошибке и ровно на пятнадцать минут, чем бы ни были заполнены поля (по коду: packages/domain/src/kiosk-machine.ts, гуард lockoutReached и задержка lockout берут константы, а не настройки). Поставите «5 ошибок» — запрёт на пятой. Поставите «15 ошибок» или «две минуты» — всё равно запрёт на десятой и на пятнадцать минут. На живом шкафу это не проверялось; это чтение кода.

🔴 Сначала: доехал ли код до шкафа​

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

С 7 сентября на этот вопрос отвечает панель. В таблице кодов (карточка аренды на «Арендах и кодах») есть столбец «У шкафа»:

Что стоит в столбцеЧто это значитЧто делать
код у шкафашкаф сам подтвердил, что дочитал список кодов вместе с этимвести клиента к дверце: для проверки кода связь шкафу больше не нужна
должен быть у шкафашкаф выходил на связь уже после выпуска, но подтверждение приходит следующим кругомклиент уже у шкафа — пусть пробует; обещать заранее нечего
ещё едетпосле выпуска шкаф не приходил ни разуподождать: панель называет такт этого шкафа и примерный остаток
шкаф молчитшкаф не на связи, а код выпущен позжеждать бесполезно — тревоги, раздел «Шкаф офлайн»
неизвестнопанель не получила настройки шкафаэто факт про панель, а не про шкаф; над находками панель объясняет, что случилось

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

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

⚠️ Такт у каждого шкафа свой — он стоит в настройках этого шкафа, и на пилоте его меняли. Поэтому панель пишет число, а не «примерно минуту»; в уме не считайте.

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

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

Как это выглядит​

Сколько ошибок подрядЧто происходит
1–2ничего, вводите дальше
3-яждать 5 секунд
4-яждать 15 секунд
5-яждать 30 секунд
6-я … 9-яждать минуту после каждой
10-ятерминал заблокирован на 15 минут

Ошибки складываются в пределах получаса. Если человек ошибся дважды час назад — эти ошибки уже не считаются.

🔴 Блокировка — на весь терминал, а не на один код​

Это надо понимать, потому что выглядит несправедливо. Счётчик ошибок общий для шкафа, а не для конкретного кода.

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

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

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

Что делать оператору​

Если клиент говорит «терминал не принимает код»:

🔴 Сначала — столбец «У шкафа» (раздел выше). Если там не «код у шкафа», дальше по этому списку идти незачем: код правильный, его просто ещё нет на шкафу, и ни блокировка, ни перевыпуск тут ни при чём.

  1. Уточните, сколько раз он пробовал. Три-четыре раза — это задержка, надо просто подождать столько, сколько написано на экране.
  2. Уточните, какой код он вводит. Частая причина — старый код от предыдущей аренды или код от другого постамата.
  3. Посмотрите в панели тревогу «Клавиатура заперта после неверных кодов». В ней — когда заперли и на сколько (в примечании: «заперта после 10 неверных кодов подряд, на 900 с»). До какого времени — панель не считает, сложите сами. ⚠️ Здесь стояло «там же видно, до какого времени» — это было не так. 🔴 Отметка «происходит сейчас» у этой тревоги не гаснет сама. Шкаф не сообщает «отпустило», и сервер такую тревогу по времени не снимает: она висит с этой отметкой, пока её не погасит оператор, — и через час, и через сутки. Заперт ли терминал прямо сейчас, судите по времени события плюс длительность, а не по отметке. Сам клиент видит на экране шкафа, сколько минут ждать: «Попробуйте снова через N мин.»
  4. Если клиент спешит, а терминал заблокирован — выдайте вещь вручную, но не сразу из панели. ⚠️ Здесь стояло «заблокированный ввод не мешает открыть ячейку из панели» — по коду это не так: первые пятнадцать минут после десятой ошибки шкаф считает, что у него стоит человек, и команду открытия отклоняет с ответом «постамат занят клиентом — открытие оператором отложено». Отклонённая команда сама не повторяется — отправьте её заново, когда пятнадцать минут пройдут, либо откройте ячейку аварийным ключом на месте. На живом шкафу этот отказ не воспроизводили; это чтение кода (apps/kiosk/src/runtime/commands.ts, ветка open_cell, и KioskEngine.isBusyWithPerson: занят — всё, что не простой).

Если блокировки случаются регулярно и без объяснения (клиенты жалуются, а ошибок у них не было), — это повод эскалировать: либо коды рассылаются неверно, либо кто-то действительно подбирает.

Чего делать не надо​

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