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

Опознание звонящего перед открытием

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

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

Сначала найти аренду — и поиск идёт по всем шкафам​

Звонящий обычно не знает, у какого шкафа он стоял: он знает адрес улицы и номер на дверце. Поэтому на «Арендах и кодах» поиск по умолчанию идёт по всему парку, а не по шкафу, выбранному наверху. Над формой стоит переключатель «Где искать»: «во всех шкафах» и «только в выбранном вверху».

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

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

  • «Ничего не нашлось» — это утверждение, и цена у него разная. При поиске по всему парку оно значит «такой аренды нет ни у одного шкафа», и вот тогда названный клиентом номер — повод насторожиться. При суженном поиске оно не значит почти ничего: у соседнего шкафа аренда могла бы найтись. Панель пишет это прямо под пустым ответом, и при суженном поиске там же стоит кнопка «Искать по всем шкафам» — одно нажатие, а не набор заново;
  • у каждой находки первым полем написан постамат, раньше ячейки — а ⛔ до 6 сентября шкафа на карточке не было вовсе. Это не мелочь оформления: подпись «26» есть у каждого шкафа парка, и без имени шкафа она половина адреса;
  • аренда чужого шкафа помечена громко: «Эта аренда НЕ у выбранного вверху постамата, а у «имя»». Прежде чем открывать дверцу или называть адрес — убедитесь, что клиент стоит именно у этого шкафа;
  • если список шкафов не приехал, панель так и говорит: «НЕ МОЖЕТ сказать, тот ли это шкаф», и показывает хвост идентификатора вместо названия. Отсутствие пометки «чужой» в этом случае означает «не знаем», а не «ваш».

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

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

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

⛔ Здесь стояло два утверждения, и оба устарели 6 сентября.

  1. «🔴 На экране при этом сегодня видна общая фраза «Сервер не принял запрос.» — своих слов у панели для этого отказа пока нет». Слова появились (строка name_search_too_wide в apps/panel/src/lib/api/result.ts), и оставленная запись работала бы наоборот задуманного: оператор читает на экране подробный разбор, сверяется с руководством, видит «панель скажет общую фразу» — и решает, что перед ним что-то другое, не тот отказ, про который здесь написано.
  2. Рычаг назывался галкой «только активные». Такой подписи на экране НЕТ вовсе — галка называется «только действующие». Это хуже первой ошибки: руководство отправляло оператора искать несуществующую галку, и происходило это в разговоре с человеком, который стоит у шкафа и ждёт.

🔴 Сверка вслепую: порядок нельзя менять местами​

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

Оператору эти две цифры не показываются никогда: ни до сверки, ни после.

Порядок ровно такой:

  1. Вы спрашиваете: «назовите последние две цифры вашего кода».
  2. Вводите в панель то, что услышали.
  3. Панель отвечает: «сошлось» или «не сошлось».
Почему нельзя показать цифры оператору

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

Что означает ответ панели​

ОтветЧто это значитЧто делать
Сошлось, код годенэто тот самый человек, и его код действуетможно открывать
Сошлось, код просрочен или отозванчеловек опознан верно, а вот его код уже не работаетоткрыть можно: человек тот самый. Но выпустите ему новый код, а не открывайте руками каждый раз
Не сошлосьназванные цифры не подходят ни к одному коду этой аренды🔴 не открывать
Сверять не с чему аренды нет ни одного кодане открывать, эскалировать

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

⚠️ Во второй строке здесь стояло «открывать по этому коду нельзя», и это уводило не туда. Речь про клиента: его собственный код у клавиатуры уже не сработает. А оператору панель в этом случае открыть разрешает и прямо советует выпустить новый код вместо ручных открытий каждый раз (apps/panel/src/lib/rentals/identify.ts, ветка match при usable: false: кнопка доступна, рядом предупреждение). Отправлять человека «разбираться с арендой» и не открывать — значит держать его у шкафа дольше, чем нужно.

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

Сверка вслепую — не единственный способ, и это надо знать заранее​

Опознание в панели — обязательное поле со списком, а не свободная строка, и способов там шесть (packages/contracts/src/panel-ops.ts, identificationMethodSchema):

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

🔴 Открытие без опознания панель не запрещает — и это решение, а не дыра. Запрет был бы фикцией: у оператора бывают законные причины (дверцу заклинило, приехал курьер, идёт объезд), и панель, которая говорит «нельзя», получает в ответ обходной путь. Вместо запрета — обязательное объяснение не короче десяти знаков и отдельная пометка в аудите: такие открытия разбирают потом поимённо.

🔴 И вот чего на этой странице не хватало: окно ОТКРЫВАЕТСЯ на способе «назвал последние две цифры кода». Это значение по умолчанию (apps/panel/src/components/open-cell-dialog.tsx, useState<IdentificationMethod>('code_hint')). Значит при открытии не по звонку — заклинило дверцу, приехал курьер, техник у шкафа, идёт объезд — вы увидите серую кнопку «открыть» и просьбу ввести две цифры звонящего, которого нет. Это не поломка: смените способ в списке на «человек рядом», «наш сотрудник» или «опознать не удалось». Выдумывать две цифры за несуществующего звонящего нельзя — см. следующий абзац.

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

🔴 Код не диктовать. Никогда​

В обычной работе полного кода в панели нет ни в каком виде — его нет даже в данных, которые панель получает: в системе лежит только отпечаток и две последние цифры. Это сделано специально.

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

Если клиент потерял код — код перевыпускается, а не диктуется.

Одно исключение появилось 4 сентября, и знать о нём надо

⚠️ Здесь стояло «полного кода нет НИ В КАКОМ ВИДЕ» без оговорок. Это больше не вся правда.

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

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

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

🔴 Ящик один на весь парк, и с 7 сентября каждая строка называет шкаф. Это не украшение: выбор шкафа в шапке панели сюда не переносится, сообщения всех шкафов лежат вперемешку, а внутри — открытые коды. Раньше в строке стояли только телефон, текст и номер аренды; номером шкаф не назовёшь — это двадцать шесть знаков, да ещё и повторяющиеся у разных шкафов. Две неотличимые строки с двумя разными кодами означают ровно одно: названный вслух код чужого клиента, и ошибки при этом не видно.

Теперь в строке стоит одно из четырёх, и читать их надо по-разному:

  • «шкаф „Название“» — шкаф известен, строку можно сверить с арендой;
  • «шкаф №…J7QK2M — в панели такого шкафа больше нет» — шкаф забыли уже после отправки. Сверить строку не с чем; хвост из шести знаков нужен, чтобы найти её в журнале;
  • «проба из настроек, она не о шкафе» — это сообщение с кнопки «Отправить пробное», оно ни о каком шкафе и не сообщает;
  • «отправлено до того, как ящик стал запоминать шкаф» — сообщение легло в ящик до 7 сентября. Связать его со шкафом задним числом не по чему, и додумывать нельзя. ⛔ Здесь стояло «шкаф не назван: сообщение старше этой пометки» — слова на экране изменились 7 сентября. Причина не в красоте: если шкаф у владельца один, эта подпись стоит у всего прежнего ящика сверху донизу, а «не назван» читается как поломка — на экране, где лежат открытые коды. Подпись говорит про возраст строки, а не про недостачу.

Что ещё требуется на открытие​

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

Что происходит после нажатия «открыть»​

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

⛔ Здесь стояло «и может быть без связи час или неделю» — как будто команда дождётся шкафа в любом случае. Она не дождётся: срок годности у открытия пятнадцать минут (apps/api/src/panel/postamats.service.ts, openCell). Шкаф, вернувшийся позже, эту команду уже не получит. Для разговора по телефону это ровно тот срок, за который разговор и заканчивается; шкафу, который лежит дольше, команду надо повторить.

Настоящее подтверждение — событие «ячейка открыта» в журнале. Подробнее — как открыть ячейку.