Подписки на задачи

Несколько лет назад в directCRM была добавлена нотификация пользователей о создаваемых ими задачах. Например, отправляете вы рассылку потребителям, а вам приходят письма — рассылка поставлена в очередь, рассылка завершена. Или ставите задачу импорта потребителей, а в письме — импорт был почти успешным, не обработалось 99 строк из 100.
Все было хорошо, до тех пор, пока не возникла потребность отслеживать ошибки в задачах, заведенных другими пользователями.
Простое условие после обсуждения вылилось в серьезную доработку, и в итоге у нас появилась достаточно мощная система подписок.
Подписка теперь происходит по фильтру (т. е. можно собрать фильтр любой сложности — на эти задачи хочу подписываться, на те не хочу и пр.) и использует систему событий.
В частности, это означает то, что если в будущем появится задача, подходящая под ранее созданный фильтр, то подписчик будет также на нее подписан.
Как всё это выглядит лучше показать на примере.
Допустим, я хочу подписаться на все события, связанные с импортом потребителей. Для этого в фильтре я выбираю тип массовой операции «Стандартный импорт (добавляем новых)»:
Стандартный импорт (добавляем новых)
После этого в блоке Действия вызываю специальный попап:
Попап
и явно отмечаю, что хочу подписаться на все события:
Хочу подписаться на все события
Однако часто надо следить только за задачами, завершенными с ошибками (теми самыми, где не обработано 99 строк из 100 или которые просто поломались совсем), для этого в списке необходимо выбрать событие «Ошибка в задаче»
Ошибка в задаче
Можно выбирать несколько событий одновременно:
Можно выбирать несколько событий одновременно
События задач, на которые можно подписаться:
  • БД недоступна длительное время (больше 10 незапусков задачи подряд) — например, сложный триггер пытается запуститься несколько раз подряд и не может.
  • Долгая приостановка задачи (больше 1 дня) — кто-то приостановил задачу и забыл про это.
  • Долгое выполнение задачи (больше 30 минут) — сложное условие задачи, одна транзакция больше 30 минут, это непорядок
  • Задача завершена
  • Задача запущена
  • Задача отменена
  • Задача приостановлена
  • Ошибка в задаче — когда есть ошибки валидации и/или когда задача решила помереть в процессе выполнения.
Само собой, события срабатывают, когда в принципе кто-то что-то делает с задачей (например Вася останавливает задачу Пети), а не только автор.
Все подписки отображаются на странице «Мои подписки», которая доступна с быстрого старта и около граватарки:
Мои подписки
Мои подписки
Сама страница подписок:
Сама страница подписок
Везде, где раньше можно было подписываться, кликнув по переключателю (кампании и задачи) эта возможность сохранилась:
Возможность подписаться или отписаться
Возможность подписаться или отписаться
При создании задачи, как и раньше, автор подписывается на все события, кроме события создания (незачем слать дополнительное письмо, автор и так знает, что он задачу создал).
Подписка на остатки призов также интегрирована в общую систему:
Подписка на остатки призов
Подписка на остатки призов
Внешний вид нотификационного письма остался неизменным:
Внешний вид нотификационного письма
Не всё получилось, как мы хотели изначально (например, уже есть идеи, как доработать страницу подписок), но система работает и нотифицирует третьих лиц об ошибках в задачах — чего мы, собственно, и добивались в первом релизе.
Требуйте новую систему подписок на своем проекте у наших менеджеров!

Вас заинтересуют следующие материалы