← Назад к справке

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-вебхук или приложение, а не прямым коробочным кодом.

Источники