Запуск бизнес процесса в сделках Битрикс24 из PHP

запуск бизнес процесса Битрикс24 из PHP

Иногда по ходу построения интеграции по REST API с Битрикс24, появляется необходимость запустить бизнес процесс в сделках, при наступлении какого-то события из скрипта или сервера.

Данный пример построен на основе входящего хука. Последовательность действий получения URL для запроса на картинках ниже. Для выполнения действий необходимо иметь права администратора или же попросить администратора сделать эти действия и дать вам URL для вызова входящего вебхука. А потом описание функций.


Шаг 1. В меню находим пункт «разработчикам» если его нет, то в поиске вводим «разработчикам».

меню битрикс24

Шаг 2. Из предложенных вариантов выбираем «Другое».


разработчикам выбор вебхука

Шаг 3. Из предложенных вариантов выбираем «Входящий вебхук».


выбираем входящий вебхук

Шаг 4. Выбираем Генератор запросов — метод «bizproc.workflow.start» что соответствует запуску бизнес процесса.

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


генератор запросов

Шаг 5. Настраиваем разрешения, исходя из потребностей вебхука, как минимум как на картинке ниже.


настройка прав для вебхука

Шаг 6. Получаем строку запроса, данные из нее используем в функциях, описанных ниже.


данные строки запроса вебхука битрикс24

Шаг 7. Читаем описание функция и выбираем наиболее удобный способ.


Ниже пример функции, ее Вы можете модифицировать, под свои нужды. В примере ниже, у нас есть в системе бизнес процесс, с параметром Parameter1, куда необходимо для его работы передать id сделки. Функция принимает 2 параметра, название метода, в данном случае ‘bizproc.workflow.start’, вторым параметром массив необходимых данных для запроса.

Рассмотрим массив $params, первый элемент TEMPLATE_ID — идентификатор бизнес процесса. Прошу обратить внимание, что бизнес процесс запускаемый в сделках требует передачи параметров, относящихся именно к этому варианту, DOCUMENT_ID => array(‘crm’,’CCrmDocumentDeal’,2837), иначе метод не сработает, где 2837 — это идентификатор сделки, необходимо заменить его на Ваш. Затем PARAMETERS — это параметры самого бизнес процесса, в нашем битрикс24, в Вашем случае он скорее всего будет называться по другому.


function restapirequest($method,$params)
{

    $queryUrl = "https://.ваш-адрес-битрикс24.bitrix24.ru/rest/29/jzlxr8oajobhw5nm/$method.json?".http_build_query($params);
    $curltob24 = curl_init();
    curl_setopt_array($curltob24, array(
        CURLOPT_SSL_VERIFYPEER => 0,
        CURLOPT_POST => 1,
        CURLOPT_HEADER => 0,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_URL => $queryUrl,
    ));
    $resulttmp = curl_exec($curltob24);
    curl_close($curltob24);
    $result =  json_decode($resulttmp,true);
    return $result;

}

$params = array(
    'TEMPLATE_ID' => 757,
    'DOCUMENT_ID' => array('crm','CCrmDocumentDeal',2837),
    'PARAMETERS'  => array('Parameter1'=>2837)
);

$res = restapirequest('bizproc.workflow.start',$params);

print_r($res);

В результате будет что-то подобное :»Array ( [result] => 616d8c974a9c78.92375257 [time] => Array ( [start] => 1634569367.2573 [finish] => 1634569367.5295 [duration] => 0.27224898338318 [processing] => 0.23702692985535 [date_start] => 2021-10-18T18:02:47+03:00 [date_finish] => 2021-10-18T18:02:47+03:00 ) )» Что свидетельствует о удачном выполнении запроса.

Если допустить ошибку, например в элементе DOCUMENT_ID, заполнить его неправильно, то уже будет сообщение, подобного типа «Array ( [error] => [error_description] => Template type and DOCUMENT_ID mismatch! )». В случае вопросов, пишите в комментариях, попробуем разобраться.

Реализация этого же запроса с использованием Guzzle, но немного с другой обработкой, с получением статуса и выводом сообщения. Только нужно будет установить библиотеку, через composer. Пример кода:

require 'vendor/autoload.php';
use GuzzleHttp\Client;

    /**
     *
     * Если передать в new Client ['http_errors' => false] - это отключает большое сообщение об ошибке,
     * ориентируемся на код ответа, метод getStatusCode()
     * 200 - ок, 400 - не ок проверка после запроса.
     *
     */

$params = array(
    'TEMPLATE_ID' => 757,
    'DOCUMENT_ID' => array('crm','CCrmDocumentDeal',2837),
    'PARAMETERS'  => array('Parameter1'=>2837)
);

function requestb24hook($params,$method)
{
    $client = new Client(['http_errors' => false]);
    $response = $client->request('POST', "https://.ваш-адрес-битрикс24.bitrix24.ru/rest/29/jzlxr8oajobhw5nm/$method.json",['json'=>$params]);
    return $response->getStatusCode();
}

$resultrequest = requestb24hook($params,'bizproc.workflow.start');

if($resultrequest)
{
    if($resultrequest == 200)
    {
        echo "Все ок, БП вызвался";
    }
    else
    {
        echo "Что-то пошло не так!";
    }
}

Функция requestb24hook() также принимает аналогичные параметры, как и в первом примере. Что позволит Вам использовать ее для других запросов, меняя название метода и массив параметров, необходимых для запроса к REST API Битрикс24. Не забудьте поменять адрес на Ваш и саму строку, где содержится id пользователя, в данном случае 29, а также токен, который идет после.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *