CRM
Роботы и триггеры CRM
Рабочая справка по роботам и триггерам CRM в коробочном Bitrix24: смена стадии через операции, включение и отключение автоматизации, webhook-триггер.
Роботы обычно выполняют действия после попадания карточки на стадию, а триггеры переводят карточку на стадию при наступлении события. В PHP чаще всего важно правильно изменить стадию и не отключить автоматизацию случайно.
Общее понимание
Роботы и триггеры относятся к автоматизации CRM, но работают по-разному.
Роботы
Роботы выполняют действия: отправляют письма, ставят задачи, меняют поля, создают документы, уведомляют сотрудников и делают другие операции.
Триггеры
Триггеры отслеживают событие и переводят CRM-карточку на нужную стадию. Например, оплата, входящее письмо, заполнение формы или входящий webhook.
Что важно для PHP
| Задача | Подход |
|---|---|
| Запустить роботов стадии | Изменить стадию через операцию CRM с включённой автоматизацией. |
| Массово исправить поля без роботов | Отключить автоматизацию в операции. |
| Вызвать webhook-триггер | Использовать crm.automation.trigger или готовый URL из интерфейса. |
| Создать своего робота | Чаще это отдельная тема про пользовательские действия/роботы, а не простой PHP-скрипт. |
Запуск через изменение стадии
Самый частый сценарий: PHP-код переводит сделку на стадию, а роботы этой стадии должны сработать.
Смена стадии через операцию
<?php
use Bitrix\Main\Loader;
use Bitrix\Crm\Service;
const CRM_DEAL_TYPE_ID = \CCrmOwnerType::Deal;
Loader::includeModule('crm');
/**
* Переводит сделку на стадию с запуском автоматизации.
*/
function moveDealWithAutomation(int $deal_id, string $stage_id): array
{
$factory = Service\Container::getInstance()->getFactory(CRM_DEAL_TYPE_ID);
if ($factory === null) {
return [
'is_success' => false,
'error_messages' => ['Фабрика сделок не найдена'],
];
}
$deal_item = $factory->getItem($deal_id);
if ($deal_item === null) {
return [
'is_success' => false,
'error_messages' => ['Сделка не найдена'],
];
}
$deal_item->setStageId($stage_id);
$operation = $factory->getUpdateOperation($deal_item);
$operation
->enableAutomation()
->enableBizProc()
->enableAfterSaveActions()
->enableSaveToHistory();
$operation_result = $operation->launch();
return [
'is_success' => $operation_result->isSuccess(),
'error_messages' => $operation_result->getErrorMessages(),
];
}
$result = moveDealWithAutomation($deal_id, $stage_id);
print_r($result); Если робот не сработал, сначала проверь: действительно ли изменилась стадия, подходит ли воронка, нет ли обязательных полей и не отключена ли автоматизация в операции.
Отключить автоматизацию
Для служебных массовых исправлений иногда нужно обновить карточку без роботов и бизнес-процессов.
$operation = $factory->getUpdateOperation($deal_item);
$operation
->disableAutomation()
->disableBizProc()
->disableAfterSaveActions();
$operation_result = $operation->launch(); Такой вариант подходит для технических скриптов, но его лучше не использовать в обычной бизнес-логике, где важны роботы, история и контроль изменений.
Webhook-триггер
В CRM есть триггер «Отследить входящий webhook».
Что вызывает crm.automation.trigger
Метод crm.automation.trigger запускает заранее настроенный webhook-триггер
и может перевести CRM-сущность на стадию, где этот триггер стоит.
Для вызова нужны target и code. code берётся из
URL триггера в настройках CRM-автоматизации.
Собрать target
/**
* Собирает target для webhook-триггера CRM.
*/
function buildCrmAutomationTarget(string $entity_name, int $entity_id): string
{
return $entity_name . '_' . $entity_id;
}
$deal_target = buildCrmAutomationTarget('DEAL', $deal_id);
$lead_target = buildCrmAutomationTarget('LEAD', $lead_id);
echo $deal_target;
Пример target для сделки с ID 25: DEAL_25. Сам HTTP-вызов
удобнее делать через REST-вебхук или приложение, а не прямым коробочным кодом.