Перейти к содержанию

Уведомления

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

Клиенты никогда не получают уведомления в колокольчик. Они получают несколько писем, описанных в разделе Исходящая почта. Чтобы публиковать события в общем месте для всей команды, см. Каналы уведомлений.

Кого уведомляют

На каждое событие каждый сотрудник получает не более одного уведомления — самого конкретного вида, который к нему относится. Авторы никогда не узнают о собственных действиях, а заявка с отключёнными уведомлениями не отправляет ничего.

Событие Кто Вид Срочность
Клиент ответил Исполнитель; наблюдатели; когда заявка не назначена — агенты уровня 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}) не дают отправлять по почте уведомления одного вида.

Когда уходит письмо

  1. Уведомление срочности now должно уйти через notifications.grace_seconds (60) после создания. Уведомление срочности batch — через desk.batch_minutes (10) минут.
  2. Следующее событие того же вида по той же заявке попадает в уже ожидающее уведомление (счётчик растёт, срок не меняется), поэтому занятая заявка даёт одно уведомление и одно письмо. Массовое редактирование складывается так же по разным заявкам.
  3. Одно задание notify.deliver на человека выполняется в его ближайший срок.
  4. Уведомление, прочитанное в колокольчике за это время, пропускается. Если человек был активен в рабочей области последние две минуты и включён notifications.hold_while_active, его уведомления задерживаются ещё на пять минут, но никогда дольше notifications.hold_max_minutes после создания.
  5. Всё, что ещё подлежит отправке, становится одним письмом: 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 Ежечасно: ежедневные дайджесты и страховка.