элементы

Отправить Webhook

Webhook — метод расширения функционала веб-приложения с помощью обратных вызовов. Эти обратные вызовы могут поддерживаться, изменяться и управляться сторонними пользователями и разработчиками, которые не обязательно связаны с исходным приложением.

Sensei позволяет добавить в процесс запуск веб-хуков. В конструкторе элемент называется «Отправить Webhook». Вы можете настроить HTTP адрес вашего приложения в этом элементе. Когда работа процесса дойдет до него, то элемент «Отправить Webhook» отправит запрос на указанный в элементе URL. Запрос может содержать GET и POST параметры. Этот элемент может быть без ожидания результата и в этом случае процесс продолжит работу сразу после отправки сообщения. Также может быть с ожиданием результата и иметь бесконечное множество результатов-связей. В этом случае процесс будет ждать одного из результатов, который элемент должен получить от удалённого ресурса.

В настройках элемента можно включить флажок «Ждать результат выполнения». В этом случае, после отправки данных на ваше приложение, процесс приостановится. Чтобы продолжить работу процесса, необходимо отправить на специальный адрес результат работы webhook’a:

https://api.sensei.plus/webhook?result=<result>&hash=<hash>

Где <result> — результат работы. Строковый параметр, значение должно соответствовать результату, указанному в настройках элемента webhooks.

<hash> — хэш-значение, соответствующее запущенному процессу. Данный hash-параметр отправляется вместе с информацией о сделке в заголовке параметром HTTP_X_HASH.

Пример 1

Мы хотим уведомить стороннее приложение, что сделка дошла до определенного этапа в процессе. Для этого будем отправлять веб-хук на адрес https://domain.ru/myapp.php, без ожидания результата от приложения процессом.

В этом случае настройка веб-хука в процессе будет выглядеть следующим образом:
В приложение myapp. php, которое мы настроили в примере, придет POST-запрос, содержащий данные о сделке. Структура массива с данными идентична структуре webhook’s в amoCRM:

{
    "sensei":
        [
            {
                "id":"118261",
                "name":"Бытовая техника онлайн",
                "date_create":"1545042870",
                "created_user_id":"2368945", 
                "last_modified":"1545135210",
                "price":"1000000",
                "responsible_user_id":"1320969",
                "linked_company_id":"456127",
                "pipeline_id":"1509766",
                "date_close":"0",
                "closest_task":"1545135209",
                "status_id":"23300671"
            }

Пример 2

Настроим второй webhook, который бы ожидал результат от нашего приложения:
Приложение, также как и в первом примере, получит информацию о сделке. Но работа процесса будет приостановлена. Процесс будет возобновлен, когда приложение отправит результат обратно в процесс Сенсея. Результат может быть отправлен сразу или через какое-то время.

Рассмотрим для примера, что приложение отправило ответ сразу, чтобы процесс продвинулся дальше:

<?php
// получаем информацию о сделке
$lead = $_POST['sensei'][0];
// делаем необходимую обработку ...
// и получаем результат работы
$result = 'result1';
// в заголовке запроса также получаем hash-значение, запущенного процесса
$hash = $_SERVER['HTTP_X_HASH'];
// продолжаем работу Сенсея с результатом result1
$link = 'https://api.sensei.plus/webhook?hash='.$hash.'&result='.$result;
$curl = curl_init();
curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl,CURLOPT_USERAGENT, 'sensei-API-client/1.4');
curl_setopt($curl,CURLOPT_URL, $link);
curl_setopt($curl,CURLOPT_HEADER, false);
$out = curl_exec($curl);
curl_close($curl);

Пример 3

Передача параметров методами GET и POST:
GET-параметры передаются URL после символа «?» по принципу параметр = значение. Разделителем между параметрами выступает символ «&». Для передами POST-параметров потребуется включить флажок «POST-параметры». Элемент поддерживает передачу масок в значениях параметров.

Пример 4

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

$localParams = [
    'name1' => ‘valeu1’,
    'name2' => ‘value2’
];
senseiSend($result, $localParams);
function senseiSend($result, $localParams = [])
{
    $hash = $_SERVER['HTTP_X_HASH'];
    $body = [
        'params' => [
            'local' => $localParams
        ]
    ];
    $body = json_encode($body);
    $link = 'https://api.sensei.plus/webhook?hash=' . $hash . '&result=' . $result;
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_USERAGENT, 'sensei-API-client/1.4');
    curl_setopt($curl, CURLOPT_URL, $link);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
    $out = curl_exec($curl);
    curl_close($curl);
}