Триггер на создание нового счета из регулярного в коробочном Битрикс24

Давно в моем блоге не было статей. Моя маленькая дочка немного подросла и теперь, я надеюсь, времени будет побольше 😀

Сегодня будет пример реализации небольшой задачи для коробочного Битрикс24.

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

В этой статье я опишу небольшой кейс из этой задачи: как изменить статус сделки при создании нового счета из регулярного.


Идеально для этого подойдет функционал роботов и триггеров. Но в Битрикс24 нет триггера на создание нового счета, тем более нет триггера на создание нового счета из регулярного. Поэтому будем использовать триггер Webhook, вызов URL которого переключит сделку на нужную стадию. Остается отследить событие создания нового счета из регулярного и сделать вызов этого URL.

Добавляем триггер Webhook и получаем URL для вызова

В интерфейсе настройки роботов выбираем направление сделок Инфраструктурные - именно оно используется для сделок с регулярными счетами. На стадии Ожидание оплаты добавляем триггер Webhook и получаем URL:


  1. URL формируется автоматически, нам нужно его скопировать.
  2. Для данной задачи нужно установить Разрешить переходить на предыдущий статус, так как сделка при выставлении нового счета будет проходить этапы обработки заново.

Регистрируем обработчик события создания нового счета из регулярного

В файле /bitrix/php_interface/init.php добавляем код для регистрации события создания нового счета из регулярного, это событие OnAfterCrmInvoiceRecurringExpose:
AddEventHandler("crm", "OnAfterCrmInvoiceRecurringExpose","OnAfterCrmInvoiceRecurringExposeHandler");

Соответственно,  OnAfterCrmInvoiceRecurringExposeHandler - это название обработчика. Параметры обработчика:

  • ID - значение идентификатора записи в таблице настроек регулярного счета
  • RECURRING_INVOICE_ID - значение идентификатора шаблона регулярного счета;
  • INVOICE_ID - значение ID нового счета, созданного на основе регулярного.


В этой задаче используется только параметр INVOICE_ID.

Прописываем вызов URL вебхука в обработчике

function OnAfterCrmInvoiceRecurringExposeHandler($Id, $Recurring_id, $Invoice_id)
{
$invoice = CCrmInvoice::GetById($Invoice_id, false); // получаем счет по его идентификатору
if ($invoice["UF_DEAL_ID"]) { // проверяем, связана ли со счетом сделка
$deal = CCrmDeal::GetById($invoice["UF_DEAL_ID"], false); // получаем сделку по ее идентификатору
if ($deal["CATEGORY_ID"]==5) { // проверяем направление сделки
$queryUrl = 'https://myb24portal.ru/rest/1/aaabbbcccdddeeef/crm.automation.trigger/?target=DEAL_'.$deal["ID"].'&code=ffggh'; // прописываем URL из настроек вебкука, вместо {{ID}} подставляем идентификатор связанной со счетом сделки
  $queryData = http_build_query(array());
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $queryUrl,
CURLOPT_POSTFIELDS => $queryData,
));
$result = curl_exec($curl);
curl_close($curl); // с помощью curl делаем вызов URL вебхука
}
}
}

В комментариях кода коротко описала что для чего нужно. 

Не придирайтесь к коду - его можно и нужно написать лучше. Я не разработчик 😉.

Как будет работать вся эта схема:
  1. Как только будет создан новый счет из регулярного, выполнится код из нашего обработчика
  2. В коде обработчика будет вызван URL вебхука
  3. В результате вызова URL вебхука сработает триггер, который переключит сделку в стадию Ожидание оплаты.
Это всё, функционал можно тестировать 😀

Комментарии

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

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