@inviziblll

Как создать в Битрикс24 вебхук на свой кастомный обработчик?

У меня коробочная версия портала Битрикс24. Мне необходимо реализовать поиск по элементам инфоблока (спискам) Битркис24 так чтобы можно было отправлять со стороннего сайта на мой Битрикс24 запрос по вебхук с параметрами и получать нужный список элементов из инфоблоков Битркис24. Проблема в том что в стандартном REST API нет возможности делать поиск по полям или своствам элементов инфоблока а через стандартный REST FILTER результат возвращается не правильным

Я хочу написать свой скрипт который будет размещен на стороне Битркис24, он будет принимать внешний запрос и запускать поиск по нужному инфоблоку через Битрикс API и затем возвращать полученный результат в виде json.
Далее я хочу сделать веб-хук который будет привязан к этому обработчику.

Но я не знаю как правильно сделать такой вебхук, помогите разобраться!

Есть инструкция как можно сделать кастомный обработчик REST

Я сделал по данной иструкции обработчик и привязал к нему вебхук, но вебхук возвращает такое сообщение:{"error":"ERROR_METHOD_NOT_FOUND","error_description":"Method not found!"}

Вот код обработчика:
public static function OnRestServiceBuildDescription()
    {
        return array(
            'apitest' => array(
                'api.test.list' => array(
                    'callback' => array(__CLASS__, 'getList'),
                    'options' => array(),
                ),
            )
        );
    }

    public static function getList($query, $nav, \CRestServer $server)
    {
        $navData = static::getNavData($nav, true);

        $res = \Bitrix\Main\UserTable::getList(
            [
                'filter' => $query['filter']?:[],
                'select' => $query['select']?:['*'],
                'order' => $query['order']?:['ID' => 'ASC'],
                'limit' => $navData['limit'],
                'offset' => $navData['offset'],
                'count_total' => true,
            ]
        );

        $result = array();
        while($user = $res->fetch())
        {
            $result[] = $user;
        }

        return static::setNavData(
            $result,
            array(
                "count" => $res->getCount(),
                "offset" => $navData['offset']
            )
        );
    }
}

AddEventHandler('rest', 'OnRestServiceBuildDescription', array('\ApiTest', 'OnRestServiceBuildDescription'));


В инструкции к методу возвращается массив пользователей у меня по ходу вообще веб-хук не ведет на этот метод или я что-тоне правильно делаю?
  • Вопрос задан
  • 2706 просмотров
Пригласить эксперта
Ответы на вопрос 3
@kudis
Bitrix developer
Идеально сделать модуль и зарегистрировать один раз хэндлер при установке
EventManager::getInstance()->registerEventHandler(
    'rest',
    'OnRestServiceBuildDescription',
    $this->MODULE_ID,
    'ApiTest',
    'OnRestServiceBuildDescription'
);

Либо регистрировать его каждый раз в `/local/php_interface/init.php` через:
AddEventHandler(
    'rest',
    'OnRestServiceBuildDescription',
    ['ApiTest', 'OnRestServiceBuildDescription'],
    false,
    $_SERVER['DOCUMENT_ROOT'] . '/habr/ApiTest.php'
);

только не забудьте полный путь к классу прописать (в примере: `/home/bitrix/www/habr/ApiTest.php`)

А потом добавьте ваш scope (Вы его названи `apitest`) в разрешения хука.
Ответ написан
@VadimGeg
У меня почему то в настройках вэбхука мои методы не отображаются и в правах scope тоже не отображатеся, сделал по инструкции
Ответ написан
@sanshung
1С-Битрикс программист
Чтобы метод появился в списке вебхуков нужно сбросить кэш
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы