Битрикс24: Автоматическое переназначение сотрудников соисполнителями по задачам
История возникновения задачи: необходимость перераспределения ответственных сотрудников в рабочей смене
Однажды ко мне обратился один давний постоянный клиент с просьбой написать под внутренние нужды компании решение для распределения сотрудников по задачам. Компания работает в нескольких городах, имеет большую клиентскую базу и техническую поддержку. Техническая поддержка выезжает для работы с клиентами, за каждым районом и городом закреплены определенные исполнители. Сотрудники технической поддержки работают по сменам, приходя на работу в начале смены сотрудник узнает за каким районом он закреплен на сегодняшнюю смену, соответственно в течении своей рабочей смены он должен при появлении обращений выезжать к клиентам для решения проблем технического характера.
В организации есть своя внутренняя тикет - система, куда заносятся все обращения и указывается группа тикетов в которой фигурирует район. Когда создается тикет, через API Битрикс24 на портале клиента создается соответствующая задача, идентификатор задачи хранится в базе данных клиента привязанный к тикету. При создании задачи ей задается ответственный и соисполнители.
Но что делать, если сотрудники работают по сменам? Сотрудника назначили соисполнителем задачи, он отработал смену и ушел на выходные, в это время задачей никто не занимается, потому что никто о ней не знает. Срок решения клиентских задач увеличивается, что конечно - же не хорошо для работы компании в целом. Для решения этого вопроса и повышения эффективности работы было разработано решение для перераспределения открытых задач между сотрудниками находящимися на смене.
Решение задачи переназначения ответственных
- Чтобы перераспределять задачи между сотрудниками, мы должны знать какие задачи перераспределять и кому.
- Какие задачи - будем делать выборку из базы данных клиента, так как мы имеем сведения о том, по каким тикетам были созданы задачи на портале Битрикс24 и знаем группы таких тикетов.
- Какие сотрудники - для определения задействованных сотрудников нам нужно создать поле - выпадающий список с множественным выбором, назовем его Навыки. Из этого поля будем выбирать сотрудников задействованных в такой оперативной работе и далее отбирать их по второму навыку соответствующему району.
Далее решение сводится к тому, чтобы выбрать задачи с требуемыми группами, для каждой задачи по району и навыкам выбрать сотрудников у которых начат рабочий день, обновить соисполнителей.
Алгоритм работы решения
Алгоритм работы будет следующим:
- Выбрать сотрудников, находящихся на работе (тех, у кого начат рабочий день),
- Отобрать сотрудников с нужными навыками и назначить их ответственными на определенные задачи.
- Каждая задача имеет привязанный к ней тикет в базе, у каждого тикета указан район, к каждому району привязан определенный навык сотрудника. Нужно выбрать тикеты, их навыки, сопоставить их с навыками сотрудников и назначить указанных сотрудников соисполнителями. У каждого сотрудника будет входящий навык, по которому мы будем понимать что этого сотрудника можно назначать на наши задачи, и исходящий навык - по которому будет осуществляться отбор задач.
Создаем решение
Входящий вебхук
Создадим входящий вебхук. Для работы нашего скрипта потребуется создать входящий вебхук, чтобы Битрикс24 смог принимать от нас данные. Дадим нашему вебхуку права для работы с задачами.
Как создать входящий вебхук?
- Открыть портал, перейти в меню левой части главной страницы и выбрать вкладку Разработчикам - Другое
- В открывшемся разделе выбрать Входящий вебхук
- В окне настроек указать следующие параметры:
- Название вебхука
- Описание
- Права доступа к пользовательским данным (выбрать права только для Задач - Задачи(task), Задачи(tasks), можно еще указать расширенные права на задачи, но не обязательно)
После завершения настроек в поле «URL» появится ссылка, с помощью которой можно активировать действие по заданным настройкам.
Подробнее о том, как создать вебхук (входящий / исходящий) было описано в статье Битрикс24: Автоматизация заполнения пользовательских полей в задаче при помощи REST API
Поле навыков
Создать поле Навыки и требуемые значения. Тип поля - выпадающий список с набором значений.
Как создать поле в профиле сотрудника?
Чтобы создать поле в профиле сотрудника, нужно:
- Перейти в профиль сотрудника
- Нажать Создать поле
- Выбрать тип поля из предложенных вариантов.
- Ввести название поля и настроить параметры.
- Сохранить изменения. Поле появится в профиле сотрудника, и его можно будет заполнить.
Значения навыков
Чтобы отфильтровывать сотрудников и знать с кем работать создадим значение навыка к примеру "Техподдержка"
Так как тикеты во внутренней системе у нас делятся по районам, создадим такие значение навыков сотрудников "Техподдержка Район 1", "Техподдержка Район 2".
Значения поля Навыки:
- Техподдержка
- Техподдержка Район 1
- Техподдержка Район 2
- Техподдержка Район 3
Ищем идентификаторы
Найдем идентификатор поля "Навыки".
Найти идентификатор поля нам поможет инспектор кода в браузере. Для запуска инспектора нажмем по требуемому полю и в выпадающем списке выберем Исследовать элемент. Находим что-то похожее на то, что обведено зеленой рамочкой (см.скриншот): UF_USR_многоцифр[] - это и будет идентификатор поля, но без скобок [] - UF_USR_многоцифр.
Теперь найдем идентификаторы созданных значений "Техподдержка", "Техподдержка Район 1", "Техподдержка Район 2". Делаем это так-же с помощью инспектора кода, ищем описание значений data-items, в нашем случае значения будут следующими:
- Техподдержка = 284
- Техподдержка Район 1 = 286
- Техподдержка Район 2 = 288
- Техподдержка Район 3 = 290
Как все будет работать
- Выбираем список активных задач из тикет системы клиента по районам: сперва к примеру Техподдержка: Район 1
- Выбираем через API Битрикс24 всех сотрудников у которых начат рабочий день и в поле Навык сотрудника проставлено Техподдержка. Тех, у которых в поле Навык сотрудника присутствует значение Техподдержка Район 1 добавляем соисполнителями по активным задачам (идентификатор задачи в Битрикс24 сохраняется в тикет-системе клиента при выгрузке тикета в задачи Б24)
- Делаем тоже самое для всех требуемых групп (Техподдержка: Район 2, и т.д.)
- Ставим в крон задание скрипт на проверку и перепривязку сотрудников к задачам по районам на запуск к примеру раз в час.
Сопоставление/Трансляция данных
Во внутренней биллинг-системе требуемые тикеты, задачам которых нужно менять соисполнителей имеют три группы:
- Техподдержка: Район 1
- Техподдержка: Район 2
- Техподдержка: Район 3
Далее требуется к каждой группе в тикет - системе привязать наши навыки. Можно сделать это сопоставлением через какой-то промежуточный конфиг/файл/табличку - все зависит от системы. Эта часть в каждом решении индивидуальна, зависит от того в какую информационную систему приходится внедрять решение, поэтому все способы решений рассматривать не будем, остановимся на конкретной реализации. В нашей реализации мы просто добавляем поле в таблице справочника групп тикетов БД клиента, назовем его bitrix_area_skill_id. Прописываем соответствующие районам навыки.
После этого добавим пользователям навык - Техподдержка и навыки по районам. Для теста возьмем 3 пользователя, и каждому пропишем свой район.
На этом подготовительная часть закончена, осталось написать скрипт, который будет отрабатывать весь алгоритм.
Функционал скрипта
Скрипт для данного решения разрабатывался на Perl, поэтому примеры будут приведены на нем. По понятным причинам я не могу привести весь код скрипта, остановимся на основных моментах.
Весь код приведен из модуля, используемого для обмена с Битрикс24 и предназначен для примерного понимания работы.
checkUserIsWorkNow
Так как нам нужно выбирать пользователей, которые в данный момент находятся на работе, напишем функцию проверки того, начат ли рабочий день у сотрудника или нет checkUserIsWorkNow:
getObjectRelation
Функция, которая по навыку сотрудника и району выбирает тот навык, к которому привязан район действия getObjectRelation:
updateTaskAccomplices
Функция обновляющая список соисполнителей у задачи updateTaskAccomplices
FindUserBySkillId
Функция, которая ищет по навыку сотрудников у которых этот навык проставлен FindUserBySkillId:
reassignTasksForWorkedUsers
И наконец функция, которая переназначает активным работающим сотрудникам задачи в зависимости от навыков проставленных у них в профиле reassignTasksForWorkedUsers:
Итог работы
Скрипт переназначения запускаясь каждый час ищет сотрудников с начатым рабочим днем и назначает их соисполнителями в задачи соответственно навыкам и району задачи. Задачи решаются быстрее, клиенты становятся более довольными.
Благодаря решению переназначения задач на активных(работающих) сотрудников была повышена эффективность работы компании, за счет увеличения скорости реакции компании на обращения клиентов и за счет уменьшения срока решения задачи.