
Задача: обновлять элементы бизнес-процесса Живой ленты (далее БП ЖЛ) при изменении сделки.
Связь со сделкой организована в виде поля типа Привязка к элементам CRM.
Содержание
В дизайнере бизнес-процессов есть действие Изменение элемента списка, но ID элемента нам взять негде. Какие варианты выхода из этой ситуации?
- Создадим множественное строковое поле в сделке, куда с помощью вебхука будем записывать ID элементов БП ЖЛ, при их создании;
- Создадим бизнес-процесс изменения элемента БП ЖЛ при изменении сделки.
Как автоматически записывать ID элементов БП ЖЛ при создании в сделку?
Для этого воспользуемся вебхуком.
Создание пользовательского поля в сделке
Заходим в любую сделку и нажимаем Создать поле —> Строка.
Отмечаем что поле множественное. Показывать в карточке его необязательно, разве что для проверки в начале. Сохраняем.


Теперь нам нужно посмотреть код поля, переходим CRM —> Настройки —> Настройки CRM —> Настройки форм и отчетов —> Пользовательские поля —> Сделка —> Список полей.

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

Создание вебхука на портале
В левом меню нажмите Приложения —> Разработчикам —> Другое —> Входящий вебхук.


Установите настройки. Просто начните набирать значение и оно отфильтруется в списке.
Метод — crm.deal.update;
Настройка прав — CRM(crm), Пользовательские поля. пользователя (user userfield).

Вебхук на стороннем ресурсе
Теперь нам нужно разместить код обновления сделки на стороннем ресурсе, где есть php. Можно создать папку на имеющемся у вас сайте.
1,
'time' => array(
'start' => 1,
'finish' => 1,
'duration' => 1,
'processing' => 1,
'date_start' => 1,
'date_finish' => 1,
'operating' => 1,
)
);
// Если есть оба IDа -работаем
if ($deal_id > 0 && $element_id > 0)
{
// Запрос текущего состояния сделки
$hook = 'https://b24-tnkxpm.bitrix24.ru/rest/1/ulueqn7xnl3pwuln/crm.deal.get.json?id='.$deal_id;
$rc = curl_request($hook);
// Если запрос удался - работаем
if ($rc['json']->result->ID == $deal_id)
{
// Добавили к нужному полю указанный элемент
$rc['json']->result->UF_CRM_1651137034550[] = (string)$element_id;
$request = array(
'id'=> $deal_id,
'fields'=> array(
"UF_CRM_1651137034550"=> array_unique($rc['json']->result->UF_CRM_1651137034550) // строго уникальные значения
),
);
// Запишем в сделку новое значение поля
$hook = 'https://b24-tnkxpm.bitrix24.ru/rest/1/ulueqn7xnl3pwuln/crm.deal.update.json?';
$hook .= http_build_query($request);
$rc = curl_request($hook);
}
else
{
$result = array(
'error' => '',
'error_description' => 'Deal "'.$_REQUEST['deal'].'" not found'
);
}
}
else
{
$result = array(
'error' => '',
'error_description' => 'Wrong parameters "deal" or "element"'
);
}
print json_encode($result);
// Функция отправки запроса в Битрикс24
function curl_request($current_url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $current_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$output = curl_exec($ch);
$x = curl_getinfo($ch);
$rc = array(
//'result' => $output,
'json' => json_decode($output),
//'info' => $x
);
curl_close($ch);
return $rc;
}
UF_CRM_1651137034550 — пользовательское поле ID элементов в сделке. Не забудьте поменять на свое, а также адрес битрикса.

Бизнес-процесс при создании элемента БП ЖЛ
Переходим в бизнес-процесс Живой ленты, Действия —> Настроить бизнес-процессы.

Создать последовательный бизнес-процесс.

В параметрах укажите автоматически запускать при добавлении.

Добавьте действие Webhook.

Вставьте адрес php-файла с параметрами: https://путь к файлу/deal-update.php?deal={{Сделка}}&element={{ID элемента}}
- {{Сделка}} — поле сделки;
- {{ID элемента}} — ID элемента.

Теперь при добавлении элемента в список в сделку будет записываться его ID.

Обновление элемента бизнес-процесса Живой ленты при изменении сделки
Для создания БП переходим CRM —> Настройки —> Настройки CRM —> Роботы и бизнес-процессы —> Бизнес-процессы —> Сделка —> Список шаблонов —> Добавить шаблон.

Вводим название, устанавливаем автоматический запуск при изменении.

Итератор
Т.к. элементов может быть несколько, воспользуемся итератором:
- Заголовок — Итератор;
- Источник — Поля документа: ID элементов.


Значение
Действие Запись в отчет
- Заголовок — Значение;
- Текст — {=A63295_44386_37616_55855:Value}
Изменение элемента списка
Действие Изменение элемента списка.
- Заголовок — Изменение элемента списка;
- ID элемента —{=A63295_44386_37616_55855:Value};
- Тип документа — Бюджет.
Поля — выбираем поля, которые надо изменить и устанавливаем значения.


где:
{=A63295_44386_37616_55855:Value} — вставка значения из действия Итератор.
Готово! Теперь при изменении сделки элементы бизнес-процесса Живой ленты будут обновляться. Эту же схему можно применить к универсальному списку.
Понятное и доступное описание. Было полезно.
Благодарю!)