Люди и конфиденциальность¶
Каждый, кого знает Helpdesk Pro, — человек: сотрудники, клиенты, входящие с учётной записью Grav, и люди, которые только писали по почте или через гостевую форму. Эта страница описывает управление людьми, объединение, юридические удержания и удаление, а также то, что Helpdesk Pro хранит о каждом.
Для чтения людей нужно helpdesk-pro.desk. Для всего, что меняет человека, нужно helpdesk-pro.people.manage.
Экран «Люди»¶
People (#/people, в разделе Library) перечисляет всех с полем поиска (имя или адрес электронной почты), фильтром вида (все, клиенты, сотрудники) и фильтром состояния (активные, заблокированные, удалённые). Все три входят в адрес, поэтому отфильтрованный список — ссылка. В меню ⋯ строки есть Send sign-in link и Block или Unblock. Add person создаёт клиента только с почтой, когда вы хотите открыть заявку для человека, который ещё не писал.
Страница человека (#/people/<id>) показывает:
- его имя, сотрудник он или клиент, его состояние и юридическое удержание, а также его адрес и учётную запись Grav;
- его обращения, начиная с новых;
- детали: адрес (с «not verified», когда его учётная запись его не подтвердила), связанную учётную запись Grav, язык, часовой пояс и когда его впервые и последний раз видели;
- для сотрудников, управляющих людьми, What Helpdesk Pro holds about them: количество строк по запросу субъекта данных (обращения, ответы, заметки, файлы, уведомления, ожидающие письма, ссылки для входа, поиски в справочном центре…), а также примечание о каждой другой записи с тем же адресом с Merge it into для этого человека.
Меню ⋯ содержит Edit, Block или Unblock, Link a Grav account или Unlink it, Merge into…, Place или Release legal hold и Erase. Erase не предлагается, пока действует юридическое удержание.
Что могут делать сотрудники¶
- Edit имя или адрес. Адрес должен быть свободен: два человека никогда не могут владеть одним.
- Block и unblock. Заблокированный человек не может отправлять обращения, отвечать в вебе или по почте, получать ссылки для входа, а почта от него записывается в журнал и отбрасывается. Его заявки остаются и продолжают работать для всех остальных.
- Send a sign-in link. Отправляет клиенту ссылку для входа. Сотрудникам ссылка никогда не показывается. В ней отказывают сотрудникам, заблокированным и удалённым людям, людям без адреса, при выключенном
portal.magic_linksи после пяти ссылок одному человеку за час. - Link или unlink учётную запись Grav. Свяжите существующую учётную запись по её имени пользователя, когда знаете, что она его: тогда учётная запись видит обращения человека в портале. Учётная запись, уже принадлежащая другому, отклоняется (вместо этого объедините двух людей). Отвязка сохраняет человека и его заявки. Учётная запись, чей адрес подтверждён и совпадает, снова связывается сама при следующем входе, поэтому отвяжите и смените адрес, если это действительно разные люди. Связывание также выдаёт учётной записи группы Grav из
portal.client_groups(клиенты) илиdesk.staff_groups(сотрудники), которых у неё ещё не было.
Один адрес — один заявитель¶
Один адрес может оказаться на двух записях: человек только с почтой, который написал, и учётная запись, чей владелец зарегистрировался с этим адресом, но не подтвердил его. Helpdesk Pro держит их раздельно, потому что при регистрации любой может ввести чужой адрес.
Рабочая область скрывает это от сотрудника, открывающего заявку:
- Поиск заявителя в форме новой заявки показывает одну запись на адрес: человека, которому достанется заявка для этого адреса. Это учётная запись, как только её адрес подтверждён, и человек только с почтой до этого.
- Когда у учётной записи есть адрес, но он не подтверждён, запись говорит account not verified. Выбор её отправляет адрес, а не учётную запись, поэтому заявка достаётся человеку только с почтой для этого адреса.
Когда клиент позже подтверждает адрес (ссылкой для входа или пунктом «Verify your email to see earlier requests» в портале), две записи соединяются сами. Список People показывает каждую запись, поэтому вы можете найти обе и объединить их, когда это один и тот же человек.
Объединение двух людей¶
Объединяйте, когда две записи — один и тот же человек: два адреса, с которых он пишет, или запись только с почтой и учётная запись, созданная без подтверждения адреса.
- Откройте человека, которого нужно присоединить.
- Выберите Merge into… и введите человека, которого нужно сохранить (его адрес или номер, например
#42). - Подтвердите.
Всё, что указывает на присоединённого человека, переходит к сохранённому: обращения, сообщения, строки копий и наблюдателей, назначения, уведомления, поставленная в очередь и отправленная почта, загруженные файлы, ссылки для входа, членство в проектах, активность, история справочного центра, сохранённые представления и ответы, полученная почта. После этого присоединённая запись удаляется.
- Сохранённый человек сохраняет свои имя, адрес и учётную запись и берёт только то, чего у него нет.
- Когда присоединённая запись владела адресом, который сохранённая учётная запись не подтвердила, адрес становится подтверждённым.
- Сохранённый человек сохраняет свою организацию или берёт организацию присоединённого, когда у него её нет.
- Если присоединённая запись была заблокирована, сохранённая тоже блокируется, а юридическое удержание переходит к сохранённому.
- Каждая заявка, сменившая владельца, получает внутреннюю строку «person merged» в активности.
Две записи, у каждой из которых есть своя учётная запись Grav, никогда не объединяются. Объединение себя с другим, объединение с собой и объединение удалённого человека тоже отклоняются. Объединение нельзя отменить.
То же объединение выполняется само, когда учётная запись подтверждает адрес, уже принадлежащий человеку только с почтой: запись учётной записи складывается в человека только с почтой, который сохраняет свой id и историю и получает учётную запись.
Юридические удержания¶
Юридическое удержание не даёт удалить записи человека, например во время спора или по решению суда. Пока человек под удержанием, удаление отклоняется, а уже поставленное в очередь удаление останавливается при выполнении задания (его отчёт говорит held).
Удержание записывает причину, кто его наложил и когда. Снятие удаляет его, поэтому храните причину в своих записях, если она понадобится позже.
Удаление человека¶
Удаление предназначено для запроса «право быть забытым» (GDPR). Есть два режима:
| Режим | Что происходит |
|---|---|
anonymize (по умолчанию) |
Имя и адрес становятся «Erased person #id». Связь с учётной записью Grav, язык, часовой пояс, предпочтения, хеш IP и ссылки для входа исчезают; колокольчик и история справочного центра удаляются; исходные письма, хранившиеся за его сообщениями, удаляются; его убирают со всех заявок, за которыми он только наблюдал, и снимают с назначений; почта, ждущая его, отменяется. Написанное им остаётся как ваша запись переписки. |
delete_content |
Всё, что делает anonymize, плюс каждое написанное им сообщение становится «[removed]», тема каждого открытого им обращения становится «[removed]», а каждый загруженный им файл удаляется. |
- Откройте страницу человека.
- Выберите Erase в меню ⋯ и режим.
- Подтвердите.
Удаление выполняется как задание people.erase, обычно в течение минуты, в одной транзакции базы данных, и его нельзя отменить. Страница человека показывает удаление, пока оно ждёт, и его отчёт после выполнения. Чтобы удалить сразу с сервера, выполните bin/plugin helpdesk-pro erase <id> (см. CLI).
Повторять безопасно: повторный запуск ничего не меняет, а delete_content после anonymize удаляет оставшееся. Его учётная запись Grav не удаляется, поскольку учётная запись принадлежит сайту; удалите её в Accounts в Admin Next, если он просил и об этом. Если он снова войдёт с ней, он начнёт как новый пустой человек.
Что удаляет удаление¶
| Данные | anonymize |
delete_content добавляет |
|---|---|---|
| Почта, ждущая его | Отменяется; адрес, переменные и заголовки в её строках очищаются | |
| Его колокольчик | Удаляется. Уведомления других сотрудников о нём называют «Erased person #id». | |
| Ссылки для входа и адреса ответа | Удаляются | |
| Файлы | Неотправленные загрузки удаляются | Каждый файл в его сообщениях и каждый загруженный им файл удаляется |
| Сообщения | Исходное письмо, хранившееся за его сообщениями, удаляется | Тело каждого написанного им сообщения становится «[removed]» |
| Заявки | Его снимают со всех назначений. Его обращения остаются его и показывают «Erased person #id». | Тема каждого открытого им обращения становится «[removed]» |
| Участие в заявках | Он перестаёт наблюдать за каждой заявкой; его строки заявителя отключаются | |
| Проекты | Он покидает каждый проект и перестаёт быть исполнителем по умолчанию любого проекта | |
| История справочного центра | Его поиски и просмотры статей удаляются | «Before writing in» в его обращениях удаляется |
| Присутствие и живые слушатели | Удаляются | |
| Сохранённые представления и ответы | Его личные удаляются; общие остаются | |
| Журнал входящей почты | Адрес отправителя очищается, исходное сообщение удаляется | Тема и детали тоже очищаются |
| Оценки | Его ссылки на оценку удаляются; данные им оценки теряют комментарий и связь с ним | Данные им оценки удаляются |
| Организация | Он покидает её; открытые им обращения сохраняют её | |
| Пользовательские поля | Публичные значения полей в его обращениях очищаются; readonly и внутренние остаются | |
| Человек | Имя становится «Erased person #id»; адрес, подтверждение, связь с учётной записью, язык, часовой пояс, предпочтения, копия прав, последний визит и хеш IP очищаются; состояние становится erased |
|
| Активность | Каждая заявка, где он был, получает внутреннюю строку «erased» с указанием режима |
Файлы никогда не удаляются внутри транзакции. Файл, который больше никто не использует, помечается для сбора, и задание attachments.gc удаляет его с диска и из бакета сразу после. Те же байты, прикреплённые кем-то другим, сохраняют файл для него.
Имена в чужих словах¶
Сотрудники пишут имя клиента: сохранённый ответ подставляет «Hi Nia,», заметка говорит «Nia Long called again». Поэтому удаление также проходит по каждой заявке, где был человек, и заменяет его имя на «Erased person #id» в обоих режимах. Заявки, где его не было, никогда не затрагиваются.
Что заменяется, как целые слова в любом сочетании верхнего и нижнего регистра:
- Его адрес электронной почты в том виде, в каком он был до удаления.
- Его полное отображаемое имя («Nia Long»).
- Его имя отдельно, когда оно не короче трёх букв и не является также обычным словом.
- Короткое или обычное имя («Al», «Will», «May», «Grace» и ещё около сотни) только сразу после приветствия или благодарности: «Hi», «Hello», «Hey», «Dear», «Thanks», «Thank you», «Cheers», «Welcome» или «Good morning/afternoon/evening».
Его фамилия отдельно остаётся, как и псевдоним, которым он подписался. Коллега с тем же именем тоже теряет его в этих заявках. Форматирование сохраняется, а повторное удаление ничего не меняет.
Письма строятся при отправке, поэтому почта об обращениях человека, ушедшая после удаления, уже читает «[removed]» и «Erased person #id». Поисковый индекс перестраивает каждую заявку, где был человек, а открытые рабочие области обновляют их. Чёрный список сохраняет любую запись, сделанную сотрудниками с его адресом.
Что хранит Helpdesk Pro¶
Человек — это имя, адрес, подтверждён ли адрес, связанная учётная запись Grav, язык и часовой пояс, предпочтения уведомлений, когда он был последний раз активен (и хеш его IP-адреса, см. ниже), а для сотрудников — копия их прав и групп. What Helpdesk Pro holds about them на странице человека — отправная точка для запроса субъекта данных.
Гостевое обращение хранит то, что ввёл гость: его имя (необязательно), адрес электронной почты и обращение. Адрес становится человеком только с почтой без учётной записи Grav, пока он не воспользуется ссылкой для входа. С обращением не хранится ничего о браузере или IP-адресе гостя.
Ссылки для входа хранятся только как хеш SHA-256, с тем, для кого они, что открывают, когда истекают и когда были использованы, плюс хеш IP-адреса, запросившего их. Строки удаляются через день после истечения или использования ссылки.
Ограничения частоты гостевой формы и ссылок для входа считаются по хешированным ключам: IP-адрес или адрес электронной почты никогда не записываются как есть. Счётчики удаляются через пару часов.
Чёрный список хранит ровно то, что положили в него сотрудники.
Проверки спама читают форму и ничего больше. Приманка — пустое поле, которого люди не видят, а временная ловушка — подписанная отметка времени в форме, а не cookie.
Cookie. Гостевой форме и странице входа нужен сессионный cookie Grav для nonce формы. Справочный центр ставит один функциональный cookie hd_kb, чтобы связать обращение с поисками перед ним (см. Базу знаний). Вход по ссылке не добавляет ничего сверх обычной сессии плагина Login.
Капча. По умолчанию Cap работает целиком на вашем сайте. Cloudflare Turnstile и Google reCAPTCHA, если выбрать их в portal.captcha, загружают скрипт этих компаний и отправляют им ответ посетителя и IP-адрес. Упомяните это в уведомлении о конфиденциальности, если используете их.
Каналы уведомлений копируют факты заявок в Slack, Discord, webhook или почтовый ящик. Заметки, внутренние поля, ответы сотрудников и переписка никогда не уходят, а слова самого клиента — только когда вы включаете Include the first lines of a client's message. После публикации сообщение живёт по правилам хранения этого сервиса, а не вашим: удаление человека не достаёт до истории канала Slack. См. Каналы уведомлений.
Сроки хранения¶
| Что | Хранится | Настройка |
|---|---|---|
| Последний IP-адрес человека | Хранится как хеш SHA-256 или как есть, когда выключено | privacy.ip_hashing (true) |
| Поиски, просмотры и ответы справочного центра | 90 дней | privacy.kb_events_days |
| Исходная копия каждого полученного письма | 90 дней (0 хранит) |
privacy.inbound_raw_days |
| Прочитанные уведомления | 90 дней | notifications.keep_read_days |
| Отправленные, неудачные и отменённые строки почты, завершённые задания | 30 дней | jobs.retention_days |
| Журналы доставок каналов | 14 дней | channels.log_days |
| Ссылки для входа и истёкшие ссылки на оценку | Через день после истечения или использования |
Удаляет ежедневное задание maintenance.prune.
API и MCP¶
Основные маршруты людей находятся в REST API. Им нужно helpdesk-pro.people.manage:
| Маршрут | Тело | Ответ | Инструмент MCP |
|---|---|---|---|
GET /helpdesk-pro/people/{id}/privacy |
{person, account, legal_hold, erasure, holdings, same_email, sign_in_link} |
get_person_privacy |
|
POST /helpdesk-pro/people/{id}/magic-link |
{sent: true}; 409 с причиной, когда ссылку нельзя отправить |
send_sign_in_link |
|
POST /helpdesk-pro/people/{id}/merge |
{into_id} |
Сохранённый человек; 409 для двух учётных записей; 422 без into_id |
merge_person |
POST /helpdesk-pro/people/{id}/erase |
{mode: anonymize or delete_content} |
202 {job_id, mode}; 409 под юридическим удержанием или для себя |
erase_person |
POST /helpdesk-pro/people/{id}/account |
{username} |
Человек; 409, когда учётная запись принадлежит другому |
link_person_account |
DELETE /helpdesk-pro/people/{id}/account |
Человек | unlink_person_account |
|
PUT /helpdesk-pro/people/{id}/legal-hold |
{reason} |
Удержание | place_legal_hold |
DELETE /helpdesk-pro/people/{id}/legal-hold |
204; 404, когда его нет |
release_legal_hold |
В сводке конфиденциальности holdings — количество строк по областям, erasure — новейшее удаление (job_id, mode, state, requested_at, report), same_email перечисляет другие записи с тем же адресом, а sign_in_link говорит, можно ли отправить ему ссылку и, если нет, почему.