Расширение возможностей бизнес-процессов с помощью вебхуков: работа с задачами

Стандартные активити бизнес-процессов позволяют автоматизировать только часть функционала, который доступен на портале.

Например, из бизнес-процесса можно создать задачу, но завершить или делегировать ее встроенными средствами не получится.

Часть таких простых функций можно реализовать самостоятельно без программирования и сторонних приложений, но при условии, что на портале работают REST API и вебхуки - с 1 января 2021 года они стали доступны только на коммерческих тарифах.

Как это работает

В дизайнере бизнес-процессов в категории Прочее есть стандартное действие WebHook. Это действие отправляет запрос из поля Хендлер и не возвращает никаких данных. 

Таким способом можно обратиться к какому-то внешнему сервису, а можно и к текущему порталу, на котором настраивается бизнес-процесс.

То есть по сути действие WebHook делает исходящий запрос, но в качестве параметра Хендлер мы укажем URL предварительно настроенного входящего вебхука.

В этой статье я приведу несколько примеров, которые расширяют возможности работы с задачами из бизнес-процессов.

Для начала нужно настроить входящий вебхук.

Входящий вебхук для работы с задачами

В разделе Разработчикам -> Другое -> Входящий вебхук нужно создать вебхук с правами доступа к задачам:



После этого можно переходить к примерам.

Завершить задачу из бизнес-процесса с помощью вебхука

Стандартным действием ставим задачу, из дополнительных результатов получаем ее ID и завершаем ее с помощью вебхука:



Для того чтобы закрыть задачу используем метод tasks.task.complete. У метода 1 параметр: taskId - это идентификатор задачи.

В итоге получаем URL: https://адрес_портала/rest/1/код_вебхука/tasks.task.complete?taskId=taskId и указываем его в качестве параметра Хендлер действия Webhook:



В параметр taskId передаем идентификатор созданной задачи, который можно получить из дополнительных результатов.

Запускаем бизнес-процесс и проверяем, что получилось:


Задача поставлена и сразу же завершена. Всё работает правильно. 

На что нужно обратить внимание: задача будет завершена под тем пользователем, под которым был настроен вебхук.

По такому же принципу можно выполнить и другие простые действия, например:

Все эти действия принимают в качестве параметра только taskId - идентификатор задачи.

Делегировать задачу

Для того чтобы делегировать задачу используем метод 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:



Запускаем процесс и получаем задачу с привязкой к произвольному контакту и компании:




Вообще, с помощью метода tasks.task.update поменять/доустановить можно любые доступные для записи поля задачи из списка в зависимости от того, какой функционал требуется реализовать в бизнес-процессе.

Комментарии

  1. Благодарю за этот пост, оказался полезным и актуальным. Но как можно добавить комментарий к задаче по API?

    ОтветитьУдалить
    Ответы
    1. Добрый день! А вот комментарий у меня добавить не получилось. Использовала метод task.commentitem.add, он корректно отрабатывал, если запустить его, например, в строке браузера, но из бизнес-процесса не работал. В техподдержке ответили, что да, такая проблема есть. Может быть сейчас уже что-то изменилось, я не проверяла.

      Удалить
    2. Мы в итоге написали Активити для решения этой задачи.
      Почему-то штатными методами получалось сделать как вы описали - из адресной строки

      Удалить
    3. Сейчас добавление комментария вебхуком работает, описала пример тут

      Удалить
  2. Люба добрый день! Может вы с таким сталкивались, запускаем с портала вебхук на отправку смс на вайбер, но сообщение не отправляются, сам вебхук когда запускаем в браузере работает

    ОтветитьУдалить
    Ответы
    1. Ирина, добрый день!
      Я с подобным сталкивалась, когда пыталась добавить комментарий в задачу с помощью вебхука. Тогда техподдержка мне ответила, что действительно такой вебхук из бизнес-процесса работать не будет, и в отделе разработки есть тикет на этот вопрос. Возможно, что в вашем случае то же самое, но я бы уточнила в техподдержке.

      Удалить
    2. Спасибо Люба за ответ, техподдержка пока думает.

      Удалить
  3. Как с помощью вебхука добавить Компанию (не контакт, а компанию) к Сделке?

    Люба, добрый день.
    Я пробовал добавить Контакт (чтобы понять как работает вебхук) — не получается, ничего не добавляет.
    Помогите, пожалуйста, понять принцип составления вебхука (я совсем новичок в вебхуке, но в БП хорошо разбираюсь).

    что пробовал:
    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 контакта

    ОтветитьУдалить
    Ответы
    1. Александр, добрый день!

      Не проверяла, но вот тут https://адрес.bitrix24.ru/rest/68/код/crm.deal.contact.add?id=380&fields[UF_CRM_TASK][]=C_352 в скобках указываете UF_CRM_TASK, а надо CONTACT_ID. И я думаю, что С_ лишнее

      Удалить
  4. Люба добрый день! Подскажите пожалуйста как правило использовать фунцию tasks.task.update для того чтобы изменить дату крайнего срока, или вообще такое возможно изменить

    ОтветитьУдалить
    Ответы
    1. Ирина, добрый день!

      Пока нет возможности проверить, но примерно так должно работать:

      https://адрес_портала/rest/1/код_вебхука/tasks.task.update?taskId=taskId&fields[DEADLINE][]=YYYY-MM-DD

      Удалить
    2. Спасибо Люба, работает, я неверно задавала формат даты

      Удалить
    3. Здравствуйте. Подскажите, какой хендлер установит крайний срок задачи, равным дате создания задачи + 3 дня. Что-то типа этого : https://адрес_портала/rest/1/код_вебхука/tasks.task.update?taskId={{ID}}&fields[DEADLINE]={={{Дата создания}}+3d} , но он не работает

      Удалить
    4. Этот комментарий был удален автором.

      Удалить
    5. 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 Тинаева Люба за ее полезный ресурс

      Удалить
    6. Спасибо)
      Описывала установку крайнего срока в задаче с помощью вебхука тут.

      Удалить
  5. Добрый день! можно ли с помощью WebHook ввести список клиентов, например если в лидах клиент переходить в определенный статус, то он должен попасть в список или в таблицу ( я имею ввиду определенные поля)

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Можно с помощью метода lists.element.add, как в комментарии ниже.

      А почему не подходит стандартное активити "Создание элемента списка"?

      Удалить
    2. Добрый день. Подскажите как настроить интеграцию с Яндекс формами чтобы создавался элемент списка

      Удалить
    3. Добрый день!
      По настройкам интеграции со стороны Яндекс форм не подскажу, но добавить элемент в список/процесс можно с помощью lists.element.add

      Удалить
  6. Добрый день, вопрос схож с комментарием выше
    есть список Id = 77, нужно заполнить поля "NAME" и "Sum"

    https://адрес_портала/rest/1/код_вебхука/lists.element.add.json?IBLOCK_TYPE_ID=lists&IBLOCK_ID=77&ELEMENT_CODE='element_'.time()&FIELDS[NAME]=Имя

    не получается заполнить второе поля, как правильно прописать? Подскажите пожалуйста)

    ОтветитьУдалить
    Ответы
    1. Добрый день!

      Не получается заполнить поле "Sum"?
      Если да, то попробуйте так:
      - получить его код, можно посмотреть в адресной строке в настройках поля. Например, PROPERTY_728
      - добавить в вебхук параметр FIELDS[PROPERTY_728][]=1000

      Удалить
    2. Где смотреть id списка?

      Удалить
    3. Заходите в список/процесс. Для процесса в адресной строке будет URL /bizproc/processes/17/view/0/?list_section_id=. В моем примере ID списка равен 17.

      Удалить
  7. Добрый день, Люба.
    Такой момент по вебхуку. У нас есть квиз, по заполнению которого создаем сделку по вебхуку (два вебхука: 1) на контакт 2) на сделку). Сначала создаем Контакт. Все сработало. Потом создаем сделку. И здесь затык, как прикрутить созданный контакт к вебхуку сделки?
    FIELDS[CONTACT_ID] = ?
    Создал контакт зашел в CRM и посмотрел id. Внес в вебхук и сделка потянула контакт. Но это я руками сделал. Как вебхуку узнать id контакта автоматически, который был создан?

    ОтветитьУдалить
    Ответы
    1. Возможно все еще проще и можно сделать сделку с контактом одним вебхуком?!

      Удалить
    2. Добрый день!)

      Стандартное активити для запуска вебхука не возвращает данные, поэтому ID созданного контакта не получится узнать.
      Вариант одновременно создать контакт и сделку не проверяла.

      Можно попробовать так:
      1. Создать бизнес-процесс с параметрами. Параметры - это данные для создания контакта и сделки. Сам бизнес-процесс по полученным параметрам будет создавать контакт и сделку
      2. Вебхуком создавать не контакт+сделку, а запускать бизнес-процесс из п.1 методом bizproc.workflow.start.

      Но надо проверять.

      Удалить
  8. Добрый день, Люба! У меня возникла именно такая задача, привязать к задаче несколько сущностей, но трижды пересмотрев список методов при создании вебхука - не нашла tasks.task.update . Оставила profile, вставила окончание вебхука Ваше- при сохранениии он подставляет метод profile. Подскажите, может сейчас метод уже как-то подругому называется?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Проверила - тоже не нахожу. Как будет время, уточню в техподдержке.

      Удалить
  9. Добрый день. Возникла задача, с помощью вебхука поменять в задаче Соисполнителей (и/или Наблюдателей). Подскажите, как будет выглядеть URL, когда поле задачи множественное значение?

    ОтветитьУдалить
    Ответы
    1. Добрый день!)

      У меня получилось установить наблюдателей с ID=1 и ID=7 с помощью URL:
      https://адрес_портала/rest/1/код_вебхука/tasks.task.update.json?taskId=1&fields[AUDITORS][]=1&fields[AUDITORS][]=7

      Удалить
  10. Добрый день. Подскажите пожалуйста. если задачу в сделке мы создаём вручную, как нам найти её идентификатор задачи? Помогите пожалуйста.
    Задача такая: меняться ответственного в задаче на ответственного за Сделку , которая была создана вручную из Сделки

    ОтветитьУдалить
    Ответы
    1. Александра, добрый день!
      Без программной доработки думаю, что такую задачу не решить. Могу ошибаться.

      Если программной доработкой, то можно сделать так:
      - добавить исходящий вебхук на создание задачи
      - в обработчике вебхука получить ID связанной сделки (метод tasks_task_get), по ID связанной сделки получить ID ответственного за сделку (метод crm_deal_get)
      - с помощью входящего вебхука обновить задачу (метод tasks_task_update) и установить ID ответственного, полученный на предыдущем этапе

      Удалить
  11. Подскажите как можно достать все комментарии из задачи?

    ОтветитьУдалить
    Ответы
    1. Отвечаю на свой вопрос.
      https://адрес_портала/rest/72/код_вебхука/task.commentitem.get.json?TASKID=31315&ITEMID=186110
      Правда тут одно сообщение вытаскивается

      Удалить
    2. Добрый день!
      Все комментарии к задаче можно получить с помощью task.commentitem.getlist

      Удалить
  12. Люба, добрый день! Не сталкивались с тем, что прикрепление вебхуком к сделке перестало работать? При этом к контакту и компании всё корректно прикрепляется. Но, у меня установлено приложение "Быстрая привязка задачи к CRM" и в нём отображается привязка, но при этом в самой задаче этого нет. Что это может быть, можете подсказать?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      По приложению не смогу подсказать - не пользовалась.
      В моем примере задача создается и автоматически привязывается к сделке в бизнес-процессе, а вебхуком добавляю привязку к контакту и компании.

      Удалить
  13. добрый день!
    Случайно не знаете, можно ли с помощью вебхука удалить комментарий из таймлайна сделки?

    ОтветитьУдалить
    Ответы
    1. Добрый день! Не проверяла, но по описанию подходит метод crm.timeline.comment.delete

      Удалить
  14. Жаль, что картинки не отображаются(

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Сейчас без VPN должны отображаться. Написала тут про картинки.

      Удалить
  15. Добрый. Может подскажете, не выполняется такой хук из бизнес-процессов https://xxx.bitrix24.ru/rest/8/xxxx/tasks.task.complete?taskId={{iD ЗАДАЧИ ПРОСТАВИТЬ ДАТУ РАСПИЛА}} Что я не так делаю? Другой метод по закрытию задачи не работает как указано в тех. документации.

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Попробуйте сделать отладку URL вебхука, описала тут

      Удалить
  16. Что то сломалось тут, картинки не отображаются. без них не информативно

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Сейчас без VPN должны отображаться. Написала тут про картинки.

      Удалить
  17. Здравствуйте!
    Подскажите, пожалуйста, почему не устанавливается флаг "Пропустить выходные и праздничные дни" https://xxx.bitrix24.ru/rest/xx/xxxxxxxxxxxx/tasks.task.update.json?taskId={=A71726_32309_61946_60557:TaskId}&fields[MATCH_WORK_TIME][]=Y
    Спасибо.

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Попробуйте fields[MATCH_WORK_TIME]=Y - нужно убрать []

      Если не получится, то попробуйте проверить, какой ответ выдает вебхук. Описывала проверку вебхуков тут.

      Удалить
  18. Здравствуйте!

    Подскажите, возможно ли информацию из комментария к задаче, перенести в пользовательское поле Сделки?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Без дополнительных доработок или плагинов из Маркета, думаю, что не сможете получить комментарий из задачи.

      Удалить
  19. Здравствуйте!

    Подскажите, возможно ли чтобы одинаковые поля в Сделке и Контактах заполнялись одновременно при внесении изменений в поля в сделке или контакте?

    ОтветитьУдалить
    Ответы
    1. Добрый день!

      При внесении изменений в поле сделки - да, можно настроить:
      1. Настраиваете БП на изменение сделки
      2. На любое изменение проверяем: Если поле сделки НЕ равно соответствующему полю связанного контакта/контактов, то обновляем поле контакта.

      При внесении изменений в контакт - нужны дополнительные доработки.
      Контакт в бизнес-процессе не имеет информации о связи со сделкой/сделками.
      Получить список связанных сделок можно так:
      - с помощью своих доработок или с помощью плагинов из Маркета
      - при создании/изменении сделки в пользовательское поле контакта записывать ID этой сделки

      Полученный список сделок нужно обойти в итераторе и, если НЕ совпадает поле контакта с соответствующим полем сделки, то обновить сделку.

      Удалить
  20. Здравствуйте, Люба!
    Есть задача извлечь данные нескольких полей предложений (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 сделки.

    ОтветитьУдалить
    Ответы
    1. Смогли импортировать данные из предложений в сделки стандартными действиями БП, но вопрос по присвоению данных переменной открытый.

      Удалить
    2. Добрый день!)

      Как я поняла, остался только вопрос, можно ли результат выполнения вебхука записать в переменную бизнес-процесса.

      Стандартное активити Webhook в бизнес-процессе отправляет запрос на адрес, указанный в поле URL, но при этом не возвращает никаких данных.

      Поэтому в бизнес-процессах использовать вебхуки без дополнительных доработок или приложений из маркета для получения данных не имеет смысла. Стандартным активити Webhook можно только изменить, добавить или удалить данные.

      Удалить
  21. БК MelBet пользуется большой популярностью на российском рынке: -Деятельность компании лицензирована; - Пользователям предоставлен внушительный список ставок - в формате live и предматчевых; - Тут нет задержек с выплатами. Линия ставок неописуемо привлекательна. Для того, чтобы получить выгодный бонус на совершение ставок, требуется всего лишь использовать промокод MelBet RS777. Получить промокод вы можете на ставку либо на депозит. Каждое предложение имеет свои особенности отыгрыша - MelBet промокод при регистрации.

    ОтветитьУдалить
  22. Здравствуйте, подскажите, пожалуйста, можно ли как-то в роботах отслеживать добавление комментария в задаче, а также изменения в задаче?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      В разделе "Автоматизация задач" можно настроить триггер на изменение полей задачи https://joxi.ru/8235nkKC9Eo76r, так сможете отследить изменения в задаче. На добавление комментария триггера нет.

      Если рассматриваете вариант с небольшими программными доработками, то можно написать обработчик, который будет запускаться на добавление комментария и/или изменение задачи https://joxi.ru/p27o653hKQMqE2

      Удалить
    2. Люба, здравствуйте! Возникла потребность добавить комментарий в задачу с помощью вебхука, но от имени определенного пользователя. Подскажите, пожалуйста как это можно сделать?

      Удалить
  23. Подскажите, а пробовали вебхуком изменять (передавать) значение поля типа список? например в лиде или сделке, что-то не могу решить эту задачку. с портала на портал передаем лид и нужно чтобы значения в списочном поле заполнялись идетнтично

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Да, передать значение поля типа список можно. Например, https://адрес_портала/rest/1/код/crm.deal.add.json?fields[UF_CRM_1711690544]=45 - установит в сделке значение "Москва" (код опции 45) поле "Город" (код поля UF_CRM_1711690544) с типом "Список".

      Удалить

Отправить комментарий

Популярные сообщения