Расширение возможностей бизнес-процессов с помощью вебхуков: работа с задачами
Стандартные активити бизнес-процессов позволяют автоматизировать только часть функционала, который доступен на портале.
Например, из бизнес-процесса можно создать задачу, но завершить или делегировать ее встроенными средствами не получится.
Часть таких простых функций можно реализовать самостоятельно без программирования и сторонних приложений, но при условии, что на портале работают REST API и вебхуки - с 1 января 2021 года они стали доступны только на коммерческих тарифах.
Как это работает
В дизайнере бизнес-процессов в категории Прочее есть стандартное действие WebHook. Это действие отправляет запрос из поля Хендлер и не возвращает никаких данных.
Таким способом можно обратиться к какому-то внешнему сервису, а можно и к текущему порталу, на котором настраивается бизнес-процесс.
То есть по сути действие WebHook делает исходящий запрос, но в качестве параметра Хендлер мы укажем URL предварительно настроенного входящего вебхука.
В этой статье я приведу несколько примеров, которые расширяют возможности работы с задачами из бизнес-процессов.
Для начала нужно настроить входящий вебхук.
Входящий вебхук для работы с задачами
В разделе Разработчикам -> Другое -> Входящий вебхук нужно создать вебхук с правами доступа к задачам:
После этого можно переходить к примерам.
Завершить задачу из бизнес-процесса с помощью вебхука
Стандартным действием ставим задачу, из дополнительных результатов получаем ее ID и завершаем ее с помощью вебхука:
Для того чтобы закрыть задачу используем метод tasks.task.complete. У метода 1 параметр: taskId - это идентификатор задачи.
В итоге получаем URL: https://адрес_портала/rest/1/код_вебхука/tasks.task.complete?taskId=taskId и указываем его в качестве параметра Хендлер действия Webhook:
Задача поставлена и сразу же завершена. Всё работает правильно.
На что нужно обратить внимание: задача будет завершена под тем пользователем, под которым был настроен вебхук.
По такому же принципу можно выполнить и другие простые действия, например:
- принять задачу tasks.task.approve
- отклонить задачу tasks.task.disapprove
- отложить задачу tasks.task.defer
- удалить задачу tasks.task.delete
Делегировать задачу
Для того чтобы делегировать задачу используем метод tasks.task.delegate. У метода 2 параметра: taskId - идентификатор задачи и userId - идентификатор пользователя, на которого необходимо делегировать задачу.
URL будет выглядеть так: https://адрес_портала/rest/1/код_вебхука/tasks.task.delegate?taskId=taskId&userId=userId.
Бизнес-процесс будем использовать тот же, заменим только параметр Хендлер в действии Webhook:
В параметр userId в моем примере будет передан ID пользователя из константы user. Чтобы получить идентификатор использую преобразование типов данных.
По системному комментарию видно, что задача создана и сразу же делегирована.
Привязать задачу к произвольным сущностям CRM
Много раз сталкивалась с таким запросом: задачу нужно привязать не только к текущей сущности CRM (например, сделке), но и к связанным со сделкой контакту и компании.
Я для упрощения привяжу созданную задачу к контакту с ID=1 и компании с ID=1. Будем считать, что эти значения мы динамически получили в бизнес-процессе.
Для этого созданную задачу обновим методом tasks.task.update. У метода 2 параметра: taskId - идентификатор задачи и fields - обновляемые поля. За привязку к элементам CRM отвечает поле UF_CRM_TASK.
URL будет выглядеть так: https://адрес_портала/rest/1/код_вебхука/tasks.task.update?taskId=taskId&fields[UF_CRM_TASK][]=C_contact_id&fields[UF_CRM_TASK][]=CO_company_id.
На что нужно обратить внимание: для установки контакта с ID=1 используем синтаксис С_1, для компании с ID=1 - CO_1.
Как и в предыдущих примерах заменим параметр Хендлер в действии Webhook:
Запускаем процесс и получаем задачу с привязкой к произвольному контакту и компании:
Благодарю за этот пост, оказался полезным и актуальным. Но как можно добавить комментарий к задаче по API?
ОтветитьУдалитьДобрый день! А вот комментарий у меня добавить не получилось. Использовала метод task.commentitem.add, он корректно отрабатывал, если запустить его, например, в строке браузера, но из бизнес-процесса не работал. В техподдержке ответили, что да, такая проблема есть. Может быть сейчас уже что-то изменилось, я не проверяла.
УдалитьМы в итоге написали Активити для решения этой задачи.
УдалитьПочему-то штатными методами получалось сделать как вы описали - из адресной строки
👍
УдалитьСейчас добавление комментария вебхуком работает, описала пример тут
УдалитьЛюба добрый день! Может вы с таким сталкивались, запускаем с портала вебхук на отправку смс на вайбер, но сообщение не отправляются, сам вебхук когда запускаем в браузере работает
ОтветитьУдалитьИрина, добрый день!
УдалитьЯ с подобным сталкивалась, когда пыталась добавить комментарий в задачу с помощью вебхука. Тогда техподдержка мне ответила, что действительно такой вебхук из бизнес-процесса работать не будет, и в отделе разработки есть тикет на этот вопрос. Возможно, что в вашем случае то же самое, но я бы уточнила в техподдержке.
Спасибо Люба за ответ, техподдержка пока думает.
УдалитьКак с помощью вебхука добавить Компанию (не контакт, а компанию) к Сделке?
ОтветитьУдалитьЛюба, добрый день.
Я пробовал добавить Контакт (чтобы понять как работает вебхук) — не получается, ничего не добавляет.
Помогите, пожалуйста, понять принцип составления вебхука (я совсем новичок в вебхуке, но в БП хорошо разбираюсь).
что пробовал:
https://адрес.bitrix24.ru/rest/68/код/crm.deal.contact.add?id=380&fields=352
https://адрес.bitrix24.ru/rest/68/код/crm.deal.contact.add?id=380&fields[UF_CRM_TASK][]=C_352
- безрезультатно.
380 - id сделки
352 - id контакта
Александр, добрый день!
УдалитьНе проверяла, но вот тут https://адрес.bitrix24.ru/rest/68/код/crm.deal.contact.add?id=380&fields[UF_CRM_TASK][]=C_352 в скобках указываете UF_CRM_TASK, а надо CONTACT_ID. И я думаю, что С_ лишнее
Спасибо, Люба!
УдалитьПопробую.
Люба добрый день! Подскажите пожалуйста как правило использовать фунцию tasks.task.update для того чтобы изменить дату крайнего срока, или вообще такое возможно изменить
ОтветитьУдалитьИрина, добрый день!
УдалитьПока нет возможности проверить, но примерно так должно работать:
https://адрес_портала/rest/1/код_вебхука/tasks.task.update?taskId=taskId&fields[DEADLINE][]=YYYY-MM-DD
Спасибо Люба, работает, я неверно задавала формат даты
УдалитьЗдравствуйте. Подскажите, какой хендлер установит крайний срок задачи, равным дате создания задачи + 3 дня. Что-то типа этого : https://адрес_портала/rest/1/код_вебхука/tasks.task.update?taskId={{ID}}&fields[DEADLINE]={={{Дата создания}}+3d} , но он не работает
УдалитьЭтот комментарий был удален автором.
Удалитьhttps://адрес_портала/rest/1/код_вебхука/tasks.task.update.json?taskId={{ID}}&fields[DEADLINE]={{=WorkDateAdd({=System:Date}, '2d5h')}}
УдалитьСписок использованной литературы:
https://helpdesk.bitrix24.ru/open/5428897/
https://helpdesk.bitrix24.ru/open/1432772/
https://helpdesk.bitrix24.ru/open/1901923/
И отдельное спасибо 2 Тинаева Люба за ее полезный ресурс
Спасибо)
УдалитьОписывала установку крайнего срока в задаче с помощью вебхука тут.
Добрый день! можно ли с помощью WebHook ввести список клиентов, например если в лидах клиент переходить в определенный статус, то он должен попасть в список или в таблицу ( я имею ввиду определенные поля)
ОтветитьУдалитьДобрый день!
УдалитьМожно с помощью метода lists.element.add, как в комментарии ниже.
А почему не подходит стандартное активити "Создание элемента списка"?
Добрый день. Подскажите как настроить интеграцию с Яндекс формами чтобы создавался элемент списка
УдалитьДобрый день!
УдалитьПо настройкам интеграции со стороны Яндекс форм не подскажу, но добавить элемент в список/процесс можно с помощью lists.element.add
Добрый день, вопрос схож с комментарием выше
ОтветитьУдалитьесть список Id = 77, нужно заполнить поля "NAME" и "Sum"
https://адрес_портала/rest/1/код_вебхука/lists.element.add.json?IBLOCK_TYPE_ID=lists&IBLOCK_ID=77&ELEMENT_CODE='element_'.time()&FIELDS[NAME]=Имя
не получается заполнить второе поля, как правильно прописать? Подскажите пожалуйста)
Добрый день!
УдалитьНе получается заполнить поле "Sum"?
Если да, то попробуйте так:
- получить его код, можно посмотреть в адресной строке в настройках поля. Например, PROPERTY_728
- добавить в вебхук параметр FIELDS[PROPERTY_728][]=1000
Спасибо, помогло
УдалитьГде смотреть id списка?
УдалитьЗаходите в список/процесс. Для процесса в адресной строке будет URL /bizproc/processes/17/view/0/?list_section_id=. В моем примере ID списка равен 17.
УдалитьДобрый день, Люба.
ОтветитьУдалитьТакой момент по вебхуку. У нас есть квиз, по заполнению которого создаем сделку по вебхуку (два вебхука: 1) на контакт 2) на сделку). Сначала создаем Контакт. Все сработало. Потом создаем сделку. И здесь затык, как прикрутить созданный контакт к вебхуку сделки?
FIELDS[CONTACT_ID] = ?
Создал контакт зашел в CRM и посмотрел id. Внес в вебхук и сделка потянула контакт. Но это я руками сделал. Как вебхуку узнать id контакта автоматически, который был создан?
Возможно все еще проще и можно сделать сделку с контактом одним вебхуком?!
УдалитьДобрый день!)
УдалитьСтандартное активити для запуска вебхука не возвращает данные, поэтому ID созданного контакта не получится узнать.
Вариант одновременно создать контакт и сделку не проверяла.
Можно попробовать так:
1. Создать бизнес-процесс с параметрами. Параметры - это данные для создания контакта и сделки. Сам бизнес-процесс по полученным параметрам будет создавать контакт и сделку
2. Вебхуком создавать не контакт+сделку, а запускать бизнес-процесс из п.1 методом bizproc.workflow.start.
Но надо проверять.
Добрый день, Люба! У меня возникла именно такая задача, привязать к задаче несколько сущностей, но трижды пересмотрев список методов при создании вебхука - не нашла tasks.task.update . Оставила profile, вставила окончание вебхука Ваше- при сохранениии он подставляет метод profile. Подскажите, может сейчас метод уже как-то подругому называется?
ОтветитьУдалитьДобрый день!
УдалитьПроверила - тоже не нахожу. Как будет время, уточню в техподдержке.
Добрый день. Возникла задача, с помощью вебхука поменять в задаче Соисполнителей (и/или Наблюдателей). Подскажите, как будет выглядеть URL, когда поле задачи множественное значение?
ОтветитьУдалитьДобрый день!)
УдалитьУ меня получилось установить наблюдателей с ID=1 и ID=7 с помощью URL:
https://адрес_портала/rest/1/код_вебхука/tasks.task.update.json?taskId=1&fields[AUDITORS][]=1&fields[AUDITORS][]=7
Добрый день. Подскажите пожалуйста. если задачу в сделке мы создаём вручную, как нам найти её идентификатор задачи? Помогите пожалуйста.
ОтветитьУдалитьЗадача такая: меняться ответственного в задаче на ответственного за Сделку , которая была создана вручную из Сделки
Александра, добрый день!
УдалитьБез программной доработки думаю, что такую задачу не решить. Могу ошибаться.
Если программной доработкой, то можно сделать так:
- добавить исходящий вебхук на создание задачи
- в обработчике вебхука получить ID связанной сделки (метод tasks_task_get), по ID связанной сделки получить ID ответственного за сделку (метод crm_deal_get)
- с помощью входящего вебхука обновить задачу (метод tasks_task_update) и установить ID ответственного, полученный на предыдущем этапе
Подскажите как можно достать все комментарии из задачи?
ОтветитьУдалитьОтвечаю на свой вопрос.
Удалитьhttps://адрес_портала/rest/72/код_вебхука/task.commentitem.get.json?TASKID=31315&ITEMID=186110
Правда тут одно сообщение вытаскивается
Добрый день!
УдалитьВсе комментарии к задаче можно получить с помощью task.commentitem.getlist
Люба, добрый день! Не сталкивались с тем, что прикрепление вебхуком к сделке перестало работать? При этом к контакту и компании всё корректно прикрепляется. Но, у меня установлено приложение "Быстрая привязка задачи к CRM" и в нём отображается привязка, но при этом в самой задаче этого нет. Что это может быть, можете подсказать?
ОтветитьУдалитьДобрый день!
УдалитьПо приложению не смогу подсказать - не пользовалась.
В моем примере задача создается и автоматически привязывается к сделке в бизнес-процессе, а вебхуком добавляю привязку к контакту и компании.
добрый день!
ОтветитьУдалитьСлучайно не знаете, можно ли с помощью вебхука удалить комментарий из таймлайна сделки?
Добрый день! Не проверяла, но по описанию подходит метод crm.timeline.comment.delete
УдалитьЖаль, что картинки не отображаются(
ОтветитьУдалитьДобрый день!
УдалитьСейчас без VPN должны отображаться. Написала тут про картинки.
Добрый. Может подскажете, не выполняется такой хук из бизнес-процессов https://xxx.bitrix24.ru/rest/8/xxxx/tasks.task.complete?taskId={{iD ЗАДАЧИ ПРОСТАВИТЬ ДАТУ РАСПИЛА}} Что я не так делаю? Другой метод по закрытию задачи не работает как указано в тех. документации.
ОтветитьУдалитьДобрый день!
УдалитьПопробуйте сделать отладку URL вебхука, описала тут
Что то сломалось тут, картинки не отображаются. без них не информативно
ОтветитьУдалитьДобрый день!
УдалитьСейчас без VPN должны отображаться. Написала тут про картинки.
Здравствуйте!
ОтветитьУдалитьПодскажите, пожалуйста, почему не устанавливается флаг "Пропустить выходные и праздничные дни" https://xxx.bitrix24.ru/rest/xx/xxxxxxxxxxxx/tasks.task.update.json?taskId={=A71726_32309_61946_60557:TaskId}&fields[MATCH_WORK_TIME][]=Y
Спасибо.
Добрый день!
УдалитьПопробуйте fields[MATCH_WORK_TIME]=Y - нужно убрать []
Если не получится, то попробуйте проверить, какой ответ выдает вебхук. Описывала проверку вебхуков тут.
Здравствуйте!
ОтветитьУдалитьПодскажите, возможно ли информацию из комментария к задаче, перенести в пользовательское поле Сделки?
Добрый день!
УдалитьБез дополнительных доработок или плагинов из Маркета, думаю, что не сможете получить комментарий из задачи.
Здравствуйте!
ОтветитьУдалитьПодскажите, возможно ли чтобы одинаковые поля в Сделке и Контактах заполнялись одновременно при внесении изменений в поля в сделке или контакте?
Добрый день!
УдалитьПри внесении изменений в поле сделки - да, можно настроить:
1. Настраиваете БП на изменение сделки
2. На любое изменение проверяем: Если поле сделки НЕ равно соответствующему полю связанного контакта/контактов, то обновляем поле контакта.
При внесении изменений в контакт - нужны дополнительные доработки.
Контакт в бизнес-процессе не имеет информации о связи со сделкой/сделками.
Получить список связанных сделок можно так:
- с помощью своих доработок или с помощью плагинов из Маркета
- при создании/изменении сделки в пользовательское поле контакта записывать ID этой сделки
Полученный список сделок нужно обойти в итераторе и, если НЕ совпадает поле контакта с соответствующим полем сделки, то обновить сделку.
Здравствуйте, Люба!
ОтветитьУдалитьЕсть задача извлечь данные нескольких полей предложений (QUOTE), отфильтрованных по id сделки, к которым эти предложения привязаны, затем полученные данные записать в строковое поле в сделке.
Таким образом вижу использование двух вебхуков crm.quote.list (filter по DEAL_ID и select по TITLE, OPPORTUNITY, CURRENCY_ID), строковой переменной, куда записать результаты вебхука crm.quote.list и crm.deal.userfield.update для записи значения переменной в поле в сделке. Возникают следующие трудности:
1. crm.quote.list вне зависимости от параметра select возвращает данные по конкретным нескольким полям изложенным в примере, в случае запроса по select любых других полей я получаю либо ID предложений, либо те же заложенные в примере поля.
2. Присвоение локальной переменной значения полученного в результате выполнения вебхука crm.quote.list не получается сделать в бизнес-процессе, пробовал по id действия, но переменная превращает id в текст, что уже дальше используется в БП.
3. Рассчитывал изменять значение в поле с помощью crm.deal.userfield.update, но данный метод меняет название самого поля по его id, а не значение этого поля, в методе даже нет возможности обратиться к полю конкретной сделки. Других методов update полей в сделке нет.
Резюме: все похоже на то, что с помощью вебхуков в БП реализовать это невозможно. Стандартными действиями БП мы можем обращаться в рамках конкретных сущностей, то есть в БП для сделки я не могу обратиться к предложениям, чтобы получить данные для изменения поля, и наоборот в предложении я не могу получить id сделки, чтобы собрать данные предложений по фильтру id сделки.
Смогли импортировать данные из предложений в сделки стандартными действиями БП, но вопрос по присвоению данных переменной открытый.
УдалитьДобрый день!)
УдалитьКак я поняла, остался только вопрос, можно ли результат выполнения вебхука записать в переменную бизнес-процесса.
Стандартное активити Webhook в бизнес-процессе отправляет запрос на адрес, указанный в поле URL, но при этом не возвращает никаких данных.
Поэтому в бизнес-процессах использовать вебхуки без дополнительных доработок или приложений из маркета для получения данных не имеет смысла. Стандартным активити Webhook можно только изменить, добавить или удалить данные.
БК MelBet пользуется большой популярностью на российском рынке: -Деятельность компании лицензирована; - Пользователям предоставлен внушительный список ставок - в формате live и предматчевых; - Тут нет задержек с выплатами. Линия ставок неописуемо привлекательна. Для того, чтобы получить выгодный бонус на совершение ставок, требуется всего лишь использовать промокод MelBet RS777. Получить промокод вы можете на ставку либо на депозит. Каждое предложение имеет свои особенности отыгрыша - MelBet промокод при регистрации.
ОтветитьУдалитьЗдравствуйте, подскажите, пожалуйста, можно ли как-то в роботах отслеживать добавление комментария в задаче, а также изменения в задаче?
ОтветитьУдалитьДобрый день!
УдалитьВ разделе "Автоматизация задач" можно настроить триггер на изменение полей задачи https://joxi.ru/8235nkKC9Eo76r, так сможете отследить изменения в задаче. На добавление комментария триггера нет.
Если рассматриваете вариант с небольшими программными доработками, то можно написать обработчик, который будет запускаться на добавление комментария и/или изменение задачи https://joxi.ru/p27o653hKQMqE2
Люба, здравствуйте! Возникла потребность добавить комментарий в задачу с помощью вебхука, но от имени определенного пользователя. Подскажите, пожалуйста как это можно сделать?
УдалитьПодскажите, а пробовали вебхуком изменять (передавать) значение поля типа список? например в лиде или сделке, что-то не могу решить эту задачку. с портала на портал передаем лид и нужно чтобы значения в списочном поле заполнялись идетнтично
ОтветитьУдалитьДобрый день!
УдалитьДа, передать значение поля типа список можно. Например, https://адрес_портала/rest/1/код/crm.deal.add.json?fields[UF_CRM_1711690544]=45 - установит в сделке значение "Москва" (код опции 45) поле "Город" (код поля UF_CRM_1711690544) с типом "Список".