Бизнес-процессы: как привязать задачу одновременно к сделке, компании и контактам с помощью вебхука

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

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

Будем считать, что на портале уже создан входящий вебхук с правами доступа к задачам.

Создаем бизнес-процесс для сделки и ставим в нем задачу с помощью стандартного активити Задача. При этом параметр Привязать к текущей сущности CRM оставим установленным в значение Нет - привяжем задачу самостоятельно на следующем этапе.

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

Для обновления задачи используем метод rest api tasks.task.update. У метода 2 параметра: taskId - идентификатор задачи и fields - обновляемые поля. За привязку к элементам CRM отвечает поле UF_CRM_TASK.

В общем видеURL будет выглядеть так: https://адрес_портала/rest/1/код_вебхука/tasks.task.update?taskId=taskId&fields[UF_CRM_TASK][]=D_dealId&fields[UF_CRM_TASK][]=CO_companyId&fields[UF_CRM_TASK][]=C_contact1Id&fields[UF_CRM_TASK][]=C_contact2Id&fields[UF_CRM_TASK][]=C_contact3Id:

  1. https://адрес_портала/rest/1/код_вебхука/ - это то, что мы получаем автоматически при создании вебхука
  2. tasks.task.update - метод rest api
  3. taskId=taskId - параметр, в который нужно передать идентификатор задачи
  4. fields[UF_CRM_TASK][]=D_dealId - параметр, в который нужно передать идентификатор сделки. Для сделки перед идентификатором нужно добавить D_
  5. fields[UF_CRM_TASK][]=CO_companyId - параметр, в который нужно передать идентификатор компании. Для компании перед идентификатором нужно добавить CO_
  6. fields[UF_CRM_TASK][]=C_contact1Id, fields[UF_CRM_TASK][]=C_contact2Id, fields[UF_CRM_TASK][]=C_contact3Id - параметры, в которые нужно передать идентификаторы связанных контактов. Сколько контактов - столько раз и добавляем параметры. Для контактов перед идентификатором нужно добавить C_
Для формирования строк с параметрами из п. 4, 5, 6 создадим 3 строковые переменные для каждой из сущностей:



С помощью стандартного действия Изменение переменных заполним их значения:



С параметрами для сделки и компании всё просто, так как сделка одна и компания тоже одна, для них подставляем идентификаторы через Вставку значений:

fields[UF_CRM_TASK][]=D_{{ID}}
fields[UF_CRM_TASK][]=CO_{{Компания}}

Контактов может быть произвольное количество, поэтому использую функцию implode чтобы собрать из них итоговую строку:

fields[UF_CRM_TASK][]=C_{{=implode('&fields[UF_CRM_TASK][]=C_',{{Контакты}})}}

Если не хочется разбираться с функцией implode, то можно просто скопировать эту строку в свой бизнес процесс и всё будет работать 😉

В бизнес-процесс добавляем стандартное действие Webhook:



С подстановками значений переменных и идентификатора задачи у меня параметр Хендлер получился таким:

https://адрес_портала/rest/1/код_вебхука/tasks.task.update?taskId={=A93347_21175_76370_48938:TaskId}&{=Variable:deal_parameters > printable}&{=Variable:company_parameters > printable}&{=Variable:contact_parameters > printable}

Всё, можно запускать и проверять:


Задача поставилась, привязка ко всем сущностям CRM сработала.

Комментарии

  1. Люба, спасибо Вам большое за полезные статьи! ��

    ОтветитьУдалить
  2. Интересно. Никогда не пробывал запихать в три сущности.)
    И корректно вяжется со всеми тремя?

    ОтветитьУдалить
    Ответы
    1. да) выглядит так же, как если бы вручную сделали привязку задачу к нескольким сущностям CRM

      Удалить
  3. У вас как всегда интересный подход. А можно ли проверять контакты на дубли, через хуки? Например создается лид, идет проверка контактов по телефону, если контакт находят, то телефон крепится к лиду?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Проверять дубли вебхуком можно, методом crm.contact.list можно найти контакты, совпадающие по номеру телефона.

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

      Нужно написать свой обработчик, адрес которого указать в действии Webhook, а уже в обработчике получать и обрабатывать список контактов.

      Удалить
    2. День добрый, я понял, спасибо. Есть конечно приложение Контроль дубликатов. Робот для лидов, но думал хуками проще реализовать.

      Удалить
  4. Добрый день! Большое спасибо за статью

    ОтветитьУдалить
  5. Люба добрый день! Метод user.userfield.update, может вы с ним сталкивались. Не могу выполнить, пишет доступ закрыт

    ОтветитьУдалить
  6. Спасибо!
    Долго искал, очень выручили))

    ОтветитьУдалить
  7. Добрый день. А как привязать задачу к элементу Смарт Процесса? Подскажите пожалуйста. В документации вижу связь с CRM (L - лид, C - контакт, CO - компания, D - сделка). НО, там нет Смарт-Процесса.

    ОтветитьУдалить
    Ответы
    1. Сергей, добрый день!
      Не вижу такой возможности по документации.

      Удалить
    2. Связал эту задачу вручную с несколькими сущностями, вытащил данные через rest, получил это: [UF_CRM_TASK] => Array
      (
      [0] => T86_4
      [1] => C_10
      [2] => D_13
      )

      T86_4 - это оказался мой Смарт-Процесс.

      Удалить
    3. 👍

      А вебхуком получилось связать со смарт-процессом?

      Удалить
    4. Чтобы получить код смарт-процесса, для привязки к задачам можно использовать метод \CCrmOwnerTypeAbbr::ResolveByTypeID(161); где 161 - идентификатор типа смарт процесса

      Удалить
  8. Добрый день! подскажите пожалуйста пытаюсь к задаче прикрепить несколько сделок из 1С пробую так
    &fields[UF_CRM_TASK][]=D_274207&fields[UF_CRM_TASK][]=D_275061&fields[UF_CRM_TASK][]=D_275062 и
    вот так &fields[UF_CRM_TASK][]=D_274207,fields[UF_CRM_TASK][]=D_275061,fields[UF_CRM_TASK][]=D_275062 не получается
    в первом варианте прикрепляется только последняя сделка, а во втором ни одной. Вообще можно ли прикрепить массив сделок?

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

      Если ещё актуально, то у меня к существующей задаче три сделки прикрепились:
      https://адрес_портала/rest/1/код/tasks.task.update.json?taskId=4&fields[UF_CRM_TASK][]=D_2&fields[UF_CRM_TASK][]=D_4&fields[UF_CRM_TASK][]=D_6

      Сравнила с Вашим первым вариантом - по-моему они одинаковые.

      Удалить
  9. не могу создать вэбхук с указанным методом. Его просто нет в списке. Какой метод использовали для примера?

    ОтветитьУдалить
    Ответы
    1. Все получилось, немного сама накосячила. Спасибо большое!
      Но появился другой вопрос. Привязала благодаря вам задачу к сделке, в задаче висит привязка, но в карточке сделки не указано что есть привязка к задаче. Как вывести ее в карточку сделки?

      Удалить
    2. Добрый день!
      При создании вебхука действительно в списке доступных методов метода tasks.task.update нет. Можно в поле Метод в таком случае ничего не менять, главное дать права на работу с задачами.

      Проверила - у меня привязанная задача отображается в карточке сделки.

      Удалить
  10. Обновления в учебном курсе: Дата изменения: 03.08.2022
    Особенностью привязки элемента смарт-процесса является то, что у каждого смарт-процесса имеется свой уникальный префикс. В настоящий момент автоматически этот префикс пока не определяется, но вы можете определить его самостоятельно и выполнить привязку аналогично другим элементам CRM.
    Сначала определите Идентификатор типа смарт-процесса. Самый быстрый способ, это перейти на страницу списка Смарт-процессов (CRM > Настройки > Список смарт-процессов) и посмотреть в таблице в колонке Идентификатор типа смарт-процесса. Например, он может быть равен 174.
    Cконвертируйте данное число из десятичной системы в шестнадцатеричную . В случае с идентификатором равным 174, получаем значение ae.
    Берем полученное значение в нижнем регистре (это важно!) и к полученному значению дописываем латинскую букву T в начале. Таким образом получаем префикс для конкретного смарт-процесса - Tae.
    Данный код используем в привязке в формате ="Tae_"&{{ID}}, где {{ID}} - числовой ID элемента смарт-процесса.

    Примечание: Также проверьте, чтобы для смарт-процесса была включена привязка к Задачам . Если привязка выключена - то и через действие бизнес-процесса привязка выполнена не будет.

    ОтветитьУдалить
    Ответы
    1. Нашел конкретный метод для получения первой части "Tae_"&{{ID}}, - это \CCrmOwnerTypeAbbr::ResolveByTypeID(161);
      161 - идентификатор типа смарт процесса

      Удалить
  11. Кто нибудь знает как привязать смарт-процесс к задаче так, чтобы уже связанные сущности не отвязывались?

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

      Если привязывали сущности к задаче так, как описано в статье, то, думаю, что стоит выполнить вебхук с методом update со всеми сущностями, которые добавлялись ранее, при этом добавить к ним новые.
      Например, если на предыдущем этапе обновляли задачу с помощью URL https://адрес_портала/rest/1/код_вебхука/tasks.task.update?taskId={=A93347_21175_76370_48938:TaskId}&{=Variable:deal_parameters > printable}&{=Variable:company_parameters > printable}&{=Variable:contact_parameters > printable}, то на следующем этапе обновить ее с помощью https://адрес_портала/rest/1/код_вебхука/tasks.task.update?taskId={=A93347_21175_76370_48938:TaskId}&{=Variable:deal_parameters > printable}&{=Variable:company_parameters > printable}&{=Variable:contact_parameters > printable}&{=Variable:sp_parameters > printable}, где {=Variable:sp_parameters > printable} - это переменная, в которой сформировали привязку к смарт-процессу.

      Удалить
  12. Здравствуйте! А как сделать так: в смарт-процессе я создаю поле компания, где выбираю компанию из списка.
    Как мне сделать так, что если в реквизитах компании есть заполненный адрес доставки, то это значение автоматически подставляется в поле отдельное "адрес"?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Не сталкивалась с подобной задачей. А с помощью "Информация о реквизите" получилось прочитать адрес доставки из реквизитов Компании?

      Удалить
  13. Никогда не пишу комменты, но тут прям мегаспасибо!!!

    ОтветитьУдалить

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

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

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