Форма запроса и гости¶
Форма запроса — то, через что люди отправляют вам новое обращение с сайта. Она находится по адресу {mount}/new (обычно /help/new), за кнопкой Contact us в справочном центре, и её можно встроить в любую страницу с помощью helpdesk_ticket_form() (см. Справочный центр и портал). Эта страница описывает форму, гостевые обращения и проверки, которые не пускают спам.
Что спрашивает форма¶
- What is this about?: проект, показывается, только когда человек может отправлять больше чем в один.
- Summary: несколько слов, до 255 символов.
- Your message: обычный текст, любой нужной длины.
- Attach files, когда вложения включены.
- Публичные пользовательские поля выбранного проекта под сообщением. Когда человек выбирает проект, форма показывает поля этого проекта и скрывает остальные. Их отрисовывает partial
helpdesk/partials/form-extra.html.twig.
У вошедшего человека не спрашивают имя и почту: вместо этого форма пишет «Sending as Maria Lopez · Not you? Sign out». Статьи, совпадающие с введённым текстом, показываются в панели «You may be looking for» под сообщением (см. Базу знаний).
Форма предлагает только проекты, в которых человек может открывать обращения: проекты с открытым приёмом, видимость которых позволяет ему отправлять (см. Проекты и права). Если таких нет, форма сообщает об этом. Заблокированный человек видит короткое сообщение «you can't send requests right now».
Заполнение формы по ссылке¶
| Параметр | Что делает |
|---|---|
?q= |
Заполняет summary, например из поиска, не давшего результатов (/help/new?q=Can't sign in). |
?project= |
Выбирает проект по id или слагу (/help/new?project=billing). |
?from= |
Страница, которая привела сюда; передаётся для записи «уже прочитано» в базе знаний. |
Что происходит при отправке¶
Обращение создаётся в выбранном проекте для вошедшего человека как веб-запрос, и он попадает на него с сообщением «Thanks! We've got your request». Ждёт ли оно сначала в сортировке, зависит от настройки проекта; в любом случае человек видит его сразу.
Если чего-то не хватает, форма возвращается с введённым текстом и сообщением под каждым полем, требующим внимания («Please add a short summary.»), а браузер переходит к первому из них. Обязательное пользовательское поле, оставленное пустым, или ответ, который поле не принимает, объясняются так же. Форма, открытая слишком долго (её nonce истёк), возвращается с просьбой отправить снова; ничего не создаётся дважды.
Гостевые обращения¶
Когда portal.guest_submissions включён и хотя бы у одного проекта видимость public и открыт приём, форму получают и посетители без входа, с двумя дополнительными полями сверху: Your name (необязательно) и Your email (обязательно). Им предлагаются только публичные проекты. Если гостевые обращения выключены или публичных проектов нет, форма просит войти.
Гостевое обращение проходит проверки по порядку:
- Поля. Отсутствие summary, сообщения или почты либо неверный адрес возвращаются с сообщением под полем.
- Капча (
portal.captcha). Отсутствующий или неверный ответ возвращается как «We couldn't confirm this came from a person. Please try sending it again.» - Ограничения частоты (
portal.limits): 5 обращений с одного IP-адреса в час, 5 с одного адреса электронной почты в час и 60 от всех гостей вместе в час. После лимита форма возвращается с «We've had a lot of requests from here in the last hour» (HTTP 429). Счётчики хранят хеши, а не адреса или IP. - Чёрный список. Заблокированный адрес, домен или IP-адрес получает ту же страницу «Thanks, check your email», что и настоящее обращение, и ничего не создаётся, поэтому отправитель ничего не узнаёт. С человеком, которого заблокировали сотрудники, поступают так же.
- Оценка спама (ниже).
Затем обращение создаётся для человека с этим адресом электронной почты. Гость здесь никогда не связывается с учётной записью Grav: неизвестный адрес становится человеком только с почтой, а адрес уже известного человека получает обращение в свою запись, и на экране об этом ничего не говорится. Файлы, приложенные гостем, присоединяются к первому сообщению обращения.
Гость попадает на {mount}/new/thanks: «Thanks, we've got your request. Check your email.» Письмо client-received несёт ссылку для входа, которая открывает обращение; при первом использовании создаётся его учётная запись Grav и выполняется вход. Страница благодарности одинакова для каждого гостя, что бы ни случилось с обращением.
Спам¶
Каждое гостевое обращение получает оценку спама:
| Признак | Баллы |
|---|---|
Заполнено скрытое поле-приманка (website) |
100 |
Отправлено раньше чем через portal.min_submit_seconds после отрисовки формы |
60 |
| Нет действительной отметки времени (скрипт, который не загружал форму) | 60 |
| Каждая ссылка после второй | 15 |
| Каждое заблокированное слово из чёрного списка | 25 |
| Номер телефона | 20, плюс 15, если сообщение почти целиком из него состоит |
| Каждое обращение с того же адреса за последний час с тем же текстом (не более 3) | 30 |
Сумма решает, что произойдёт:
- 60 и больше — спам. Обращение всё равно создаётся, чтобы не потерять присланное настоящим человеком, но ждёт в сортировке с меткой
spam, и письмо-подтверждение не отправляется. - 30 и больше — ждёт в сортировке, как любое обращение на сортировке, и подтверждается.
- Меньше 30 — следует настройке сортировки проекта.
Временная ловушка использует подписанную отметку в скрытом поле формы form_ts, поэтому скрипт не может отправить старое время, чтобы выглядеть терпеливым. Приманка скрыта от людей и от скринридеров.
Чёрный список¶
Заблокированные слова добавляют баллы к оценке спама, а не отбрасывают обращение, поэтому настоящее обращение, случайно использующее такое слово, попадает в сортировку, а не исчезает. Заблокированные адреса, домены и IP-адреса отбрасывают его.
Управляйте чёрным списком из командной строки:
bin/plugin helpdesk-pro blocklist # список всех записей
bin/plugin helpdesk-pro blocklist list domain # список одного типа
bin/plugin helpdesk-pro blocklist add domain spam.example --note="bulk spam"
bin/plugin helpdesk-pro blocklist add ip 203.0.113.0/24
bin/plugin helpdesk-pro blocklist remove word casino
Типы — email, domain (также блокирует поддомены), ip (адрес или диапазон CIDR) и word. Значения хранятся в нижнем регистре.
Капча¶
portal.captcha выбирает одного из провайдеров капчи плагина Form:
| Значение | Что делает |
|---|---|
cap (по умолчанию) |
Cap — невидимая проверка proof-of-work, которую сам плагин Form обслуживает по /forms-cap/. Без внешнего сервиса и без головоломки. |
turnstile |
Cloudflare Turnstile с site key и секретом из настроек плагина Form. |
recaptcha |
Google reCAPTCHA (флажок v2) с настройками плагина Form. |
none |
Без капчи. |
Без плагина Form (или выбранного провайдера) форма остаётся без капчи, а не отталкивает каждого гостя. Вошедших клиентов не спрашивают, если не включён portal.captcha_signed_in. Turnstile и reCAPTCHA отправляют ответ посетителя и его IP-адрес этим компаниям; упомяните это в уведомлении о конфиденциальности, если используете их.
Настройки¶
На вкладке Portal & Access настроек плагина:
| Ключ | По умолчанию | Что делает |
|---|---|---|
portal.guest_submissions |
true |
Могут ли гости вообще отправлять форму. Гостевые обращения принимают только проекты public. |
portal.client_groups |
[] |
Группы Grav, в которых состоит каждая учётная запись клиента. Клиент добавляется при входе или открытии справочного центра, и группы только добавляются, никогда не удаляются. Несуществующая группа или группа, дающая доступ к админке или рабочей области, пропускается. См. Справочный центр и портал. |
portal.client_store_groups |
[] |
Группы клиентов KahunaCart, в которых состоит покупатель магазина, пока он клиент службы поддержки (Client Store Groups, выбираются из групп клиентов KahunaCart; настройка появляется, только когда KahunaCart установлен и включён). Выдаются на лету и никогда не сохраняются: исчезают, когда человека отвязывают, блокируют или удаляют, а также когда вы убираете группу из списка. Сотрудники их никогда не получают. Группа клиентов также даёт групповые цены, скидки и доступ к страницам. См. Справочный центр и портал. |
portal.captcha |
cap |
none, cap, turnstile или recaptcha. |
portal.captcha_signed_in |
false |
Спрашивать капчу и у вошедших клиентов. |
portal.min_submit_seconds |
3 |
Гостевое обращение, отправленное раньше этого времени после открытия формы, получает баллы спама. |
portal.limits.ip_per_hour |
5 |
Гостевых обращений с одного IP-адреса в час. 0 отключает ограничение. |
portal.limits.email_per_hour |
5 |
Гостевых обращений с одного адреса электронной почты в час. |
portal.limits.guest_per_hour |
60 |
Гостевых обращений от всех вместе в час. |