Уведомления¶
Сотрудники узнают о заявках сначала в рабочей области: каждое уведомление попадает в колокольчик. Почта — запасной вариант для того, что никто не прочитал вовремя, поэтому человек, который весь день в рабочей области, получает мало писем, а человек в отъезде — одно письмо на всплеск активности вместо письма на каждое событие.
Клиенты никогда не получают уведомления в колокольчик. Они получают несколько писем, описанных в разделе Исходящая почта. Чтобы публиковать события в общем месте для всей команды, см. Каналы уведомлений.
Кого уведомляют¶
На каждое событие каждый сотрудник получает не более одного уведомления — самого конкретного вида, который к нему относится. Авторы никогда не узнают о собственных действиях, а заявка с отключёнными уведомлениями не отправляет ничего.
| Событие | Кто | Вид | Срочность |
|---|---|---|---|
| Клиент ответил | Исполнитель; наблюдатели; когда заявка не назначена — агенты уровня everything в проекте |
client_replied |
Сразу исполнителю, пакетно остальным |
| Сотрудник ответил или добавил заметку | Наблюдатели | staff_replied или note_added |
Пакетно |
| Кого-то упомянули через @ | Упомянутый сотрудник, если он работает с проектом | mention |
Сразу |
| Заявка назначена | Новый исполнитель | assigned |
Сразу |
| Заявка создана | Агенты уровня everything в проекте; сотрудники, которые могут сортировать, когда она ждёт в сортировке; исполнитель, когда она создана назначенной |
ticket_new, triage_needed, assigned |
Пакетно (assigned: сразу) |
| Изменились статус, поля или проект | Наблюдатели | status_changed или field_changed |
Пакетно |
| Заявку объединили или отсортировали | Наблюдатели | merged или triaged |
Пакетно |
| Клиент оценил обращение как «Not good» | Сотрудник, которому засчитана оценка, когда включён csat.notify_not_good |
rated |
Сразу |
| Действие Notify правила | Исполнитель, все, кто работает с проектом, или один сотрудник — как указано в правиле | rule |
Сразу |
| Срок SLA скоро или просрочен | Исполнитель; когда заявка не назначена — все, кто работает с проектом | sla_warning или sla_breached |
Сразу исполнителю, пакетно сотрудникам проекта |
Порядок конкретности: упоминание, затем назначение, затем sla_breached, rated и rule, затем client_replied, затем sla_warning, затем staff_replied и note_added, затем виды изменений полей.
Каждый получатель должен работать с проектом заявки (то же правило, что позволяет читать внутренние заметки), быть активным и не отключить уведомления по заявке. Внутреннее событие никогда не дойдёт до того, кто не смог бы прочитать его в рабочей области.
Наблюдение¶
Сотрудники наблюдают за заявкой, потому что участвовали в ней: создали её от чьего-то имени, были назначены, упомянуты, ответили или добавили заметку. Никто не наблюдает за целым проектом. Watch в заявке добавляет или убирает вас вручную, а Mute отключает всё о ней — и колокольчик, и почту.
Уровни¶
Каждый сотрудник выбирает уровень. Уровень сайта по умолчанию — notifications.default_level.
| Уровень | В колокольчике | По почте |
|---|---|---|
everything |
Всё из таблицы выше, включая каждую новую заявку и ответы клиентов по неназначенным заявкам, в проектах, где он работает | Всё из колокольчика |
aimed (по умолчанию) |
То же, минус новые заявки и ответы клиентов по неназначенным заявкам, за которыми он не наблюдает | Упоминания, назначения, уведомления правил, оценки «Not good», засчитанные ему, предупреждения и нарушения SLA и ответы клиентов по назначенным ему заявкам. Остальная активность по наблюдаемым заявкам остаётся в колокольчике. |
nothing |
Только упоминания, назначения и уведомления правил | Ничего, кроме дайджеста, когда он его включает |
Режимы почты¶
| Режим | Что происходит |
|---|---|
fallback (по умолчанию) |
Уведомление отправляется по почте, только если его не прочитали в колокольчике к сроку отправки. |
digest |
Ни письма на каждое уведомление; вместо этого один ежедневный дайджест. |
off |
Никакой почты. Колокольчик продолжает работать. |
Выбор дайджеста в предпочтениях также включает ежедневный дайджест для человека в режиме fallback. Переключатели по видам (types, например {"field_changed": false}) не дают отправлять по почте уведомления одного вида.
Когда уходит письмо¶
- Уведомление срочности
nowдолжно уйти черезnotifications.grace_seconds(60) после создания. Уведомление срочностиbatch— черезdesk.batch_minutes(10) минут. - Следующее событие того же вида по той же заявке попадает в уже ожидающее уведомление (счётчик растёт, срок не меняется), поэтому занятая заявка даёт одно уведомление и одно письмо. Массовое редактирование складывается так же по разным заявкам.
- Одно задание
notify.deliverна человека выполняется в его ближайший срок. - Уведомление, прочитанное в колокольчике за это время, пропускается. Если человек был активен в рабочей области последние две минуты и включён
notifications.hold_while_active, его уведомления задерживаются ещё на пять минут, но никогда дольшеnotifications.hold_max_minutesпосле создания. - Всё, что ещё подлежит отправке, становится одним письмом:
staff-notificationдля одного уведомления,staff-batch(сгруппированный по заявкам) для нескольких.
Прочтение уведомления в колокольчике или открытие его заявки в рабочей области отменяет письмо. Открытие заявки через API (GET /helpdesk-pro/tickets/{id}?include=timeline или GET /helpdesk-pro/tickets/{id}/timeline?mark_read=1) делает то же. Перед отправкой письма доступ человека проверяется снова.
Важно
Письмо-уведомление никогда не должно уходить в запросе, который его создал, поэтому ему нужен фоновый процесс в cron. На сайте без cron догоняющая обработка запускает его после следующего веб-запроса, когда срок наступил, поэтому письмо запаздывает на всё время, пока сайт молчит. См. Задания и cron.
Ежедневный дайджест¶
Ежечасное задание digest.sweep отправляет письмо staff-digest каждому сотруднику, который хочет дайджест, когда его местное время (его часовой пояс, иначе серверный) достигает notifications.digest_hour. В нём указано, сколько обращений ждёт в сортировке, сколько назначенных ему заявок требуют ответа и его непрочитанные уведомления с прошлого дайджеста. Не более одного дайджеста в день, и ничего не отправляется, когда сказать нечего.
Тот же обход заново назначает notify.deliver всем, чьи уведомления ждут слишком долго, на случай, если задание потерялось.
Настройки¶
На вкладке Email & Notifications настроек плагина:
| Ключ | По умолчанию | Что делает |
|---|---|---|
notifications.default_level |
aimed |
Уровень тех, кто не выбрал свой: everything, aimed или nothing. |
notifications.default_email |
fallback |
Режим почты тех, кто не выбрал свой: fallback, digest или off. |
notifications.grace_seconds |
60 |
Сколько уведомление now ждёт прочтения в приложении перед отправкой по почте. |
desk.batch_minutes |
10 |
Сколько ждёт уведомление batch, чтобы несколько изменений стали одним письмом. |
notifications.hold_while_active |
true |
Задерживать почту для людей, активных в рабочей области. |
notifications.hold_max_minutes |
60 |
Максимальное время задержки уведомления. |
notifications.digest_hour |
7 |
Местный час отправки ежедневного дайджеста. |
notifications.keep_read_days |
90 |
Прочитанные уведомления старше этого удаляются заданием maintenance.prune. Непрочитанные сохраняются. |
Предпочтения хранятся в записи человека, поэтому следуют за человеком, а не за учётной записью Grav.
API и MCP¶
| Маршрут | Право | Что делает |
|---|---|---|
GET /helpdesk-pro/notifications |
desk | Колокольчик вызывающего, сначала новые. ?unread=1 — только непрочитанные, page, per_page (до 100). В каждой строке type, sentence, ticket_id, message_id, link, actor, item_count, read, email_state и время. meta.unread — счётчик колокольчика. |
POST /helpdesk-pro/notifications/read |
desk | {ids: [...]} отмечает эти строки прочитанными; {ticket_id} отмечает прочитанными все строки об этой заявке. 204. |
POST /helpdesk-pro/notifications/read-all |
desk | Отмечает прочитанной каждую строку. 204. |
GET /helpdesk-pro/me/preferences |
desk | {level, email, digest, types}. |
PATCH /helpdesk-pro/me/preferences |
desk | Любое из четырёх. types сопоставляет вид с true или false и объединяется с сохранённым. |
Инструменты MCP: list_notifications, mark_notifications_read, mark_all_notifications_read, get_preferences и update_preferences.
Задания¶
| Задание | Что делает |
|---|---|
notify.deliver |
Письмо-запасной вариант для одного человека. Одно на человека; пока уведомления ждут, задание откладывает себя до следующего срока. |
digest.sweep |
Ежечасно: ежедневные дайджесты и страховка. |