Блог Горошко Андрея 1C-Битрикс,Bitrix24 Добавить обработчик службы доставки sale.delivery.handler.add

Добавить обработчик службы доставки sale.delivery.handler.add

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Добавить обработчик службы доставки sale.delivery.handler.add», разберем архитектурные особенности и предоставим готовые к интеграции примеры кода.

Добавить обработчик службы доставки sale.delivery.handler.add

> Scope: sale
>
> Кто может выполнять метод: администратор CRM

Метод добавляет обработчик службы доставки.

Параметры метода

Название
тип
Описание
NAME
string
Название обработчика службы доставки
CODE
string
Символьный код обработчика службы доставки
SORT
integer
Сортировка
DESCRIPTION
integer
Описание обработчика службы доставки
SETTINGS
object
Объект, содержащий информацию о настройках обработчика службы доставки (подробное описание приведено ниже)
PROFILES
object[]
Массив, содержащий список объектов профилей доставки (подробное описание приведено ниже).

Подразумевается, что у обработчика службы доставки должен быть как минимум 1 профиль

Параметр SETTINGS

Название
тип
Описание
CALCULATE_URL
string
URL для расчёта стоимости доставки.

На данный URL приходят данные о посылке (что доставить, куда и как), стоимость доставки которой нужно рассчитать в ответе.

Формат запроса и ответа детально описан в документации по веб-хуку Расчет стоимости доставки

CREATE_DELIVERY_REQUEST_URL
string
URL для создания заказа на доставку.

На данный URL приходят данные о посылке (что доставить, куда и как), заказ на которую нужно оформить в службе доставки.

Формат запроса и ответа детально описан в документации по веб-хуку Создание заказа на доставку

CANCEL_DELIVERY_REQUEST_URL
string
URL для отмены заказа на доставку

На данный URL приходят данные о посылке (что доставить, куда и как), заказ на которую нужно отменить в службе доставки.

Формат запроса и ответа детально описан в документации по веб-хуку Отмена заказа на доставку

HAS_CALLBACK_TRACKING_SUPPORT
string
Индикатор того, будет ли служба доставки присылать оповещения о статусе заказа на доставку (см. метод sale.delivery.request.sendmessage).

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

Возможные значения:
— Y — есть поддержка
— N — нет поддержки

CONFIG
object[]
Массив объектов с доступными настройками для службы доставки, создаваемой с использованием данного обработчика (подробное описание приведено ниже)

Параметр CONFIG

Название
тип
Описание
TYPE
string
Тип поля настройки
Возможные значения:
— STRING — строка
— Y/N — чекбокс (да / нет)
— NUMBER — число
— ENUM — список
— DATE — дата
— LOCATION — местоположение
CODE
string
Символьный код настройки
NAME
string
Название настройки
OPTIONS
object
Список опций для выбора. Объект в формате ключ=значение. Где ключ — код опции, а значение — опция.

Пример:

{
   "Option1Code": "Option1Value",
   "Option2Code": "Option2Value",
   "Option3Code": "Option3Value"
}

Параметр актуален только для настройки типа ENUM

Параметр PROFILES

Название
тип
Описание
NAME
string
Название профиля обработчика службы доставки
CODE
string
Символьный код профиля обработчика службы доставки
DESCRIPTION
string
Описание профиля обработчика службы доставки

Примеры кода

  • cURL (Webhook)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"CODE":"uber","NAME":"Uber","DESCRIPTION":"Uber Description","SORT":250,"SETTINGS":{"CALCULATE_URL":"http://gateway.bx/calculate.php","CREATE_DELIVERY_REQUEST_URL":"http://gateway.bx/create_delivery_request.php","CANCEL_DELIVERY_REQUEST_URL":"http://gateway.bx/cancel_delivery_request.php","HAS_CALLBACK_TRACKING_SUPPORT":"Y","CONFIG":[{"TYPE":"STRING","CODE":"SETTING_1","NAME":"String Example"},{"TYPE":"Y/N","CODE":"SETTING_2","NAME":"Checkbox Example"},{"TYPE":"NUMBER","CODE":"SETTING_3","NAME":"Number Example"},{"TYPE":"ENUM","CODE":"SETTING_4","NAME":"Enum Example","OPTIONS":{"Option1Code":"Option1Value","Option2Code":"Option2Value","Option3Code":"Option3Value","Option4Code":"Option4Value","Option5Code":"Option5Value"}},{"TYPE":"DATE","CODE":"SETTING_5","NAME":"Date Example"},{"TYPE":"LOCATION","CODE":"SETTING_6","NAME":"Location Example"}]},"PROFILES":[{"NAME":"Taxi","CODE":"TAXI","DESCRIPTION":"Taxi Delivery"},{"NAME":"Cargo","CODE":"CARGO","DESCRIPTION":"Cargo Delivery"}]}' \
    https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/sale.delivery.handler.add
  • cURL (OAuth)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"CODE":"uber","NAME":"Uber","DESCRIPTION":"Uber Description","SORT":250,"SETTINGS":{"CALCULATE_URL":"http://gateway.bx/calculate.php","CREATE_DELIVERY_REQUEST_URL":"http://gateway.bx/create_delivery_request.php","CANCEL_DELIVERY_REQUEST_URL":"http://gateway.bx/cancel_delivery_request.php","HAS_CALLBACK_TRACKING_SUPPORT":"Y","CONFIG":[{"TYPE":"STRING","CODE":"SETTING_1","NAME":"String Example"},{"TYPE":"Y/N","CODE":"SETTING_2","NAME":"Checkbox Example"},{"TYPE":"NUMBER","CODE":"SETTING_3","NAME":"Number Example"},{"TYPE":"ENUM","CODE":"SETTING_4","NAME":"Enum Example","OPTIONS":{"Option1Code":"Option1Value","Option2Code":"Option2Value","Option3Code":"Option3Value","Option4Code":"Option4Value","Option5Code":"Option5Value"}},{"TYPE":"DATE","CODE":"SETTING_5","NAME":"Date Example"},{"TYPE":"LOCATION","CODE":"SETTING_6","NAME":"Location Example"}]},"PROFILES":[{"NAME":"Taxi","CODE":"TAXI","DESCRIPTION":"Taxi Delivery"},{"NAME":"Cargo","CODE":"CARGO","DESCRIPTION":"Cargo Delivery"}],"auth":"**put_access_token_here**"}' \
    https://**put_your_bitrix24_address**/rest/sale.delivery.handler.add
  • JS
    try
    {
    	const response = await $b24.callMethod(
    		'sale.delivery.handler.add', {
    			CODE: "uber",
    			NAME: "Uber",
    			DESCRIPTION: "Uber Description",
    			SORT: 250,
    			SETTINGS: {
    				CALCULATE_URL: "http://gateway.bx/calculate.php",
    				CREATE_DELIVERY_REQUEST_URL: "http://gateway.bx/create_delivery_request.php",
    				CANCEL_DELIVERY_REQUEST_URL: "http://gateway.bx/cancel_delivery_request.php",
    				HAS_CALLBACK_TRACKING_SUPPORT: "Y",
    				CONFIG: [{
    						TYPE: "STRING",
    						CODE: "SETTING_1",
    						NAME: "String Example",
    					},
    					{
    						TYPE: "Y/N",
    						CODE: "SETTING_2",
    						NAME: "Checkbox Example",
    					},
    					{
    						TYPE: "NUMBER",
    						CODE: "SETTING_3",
    						NAME: "Number Example",
    					},
    					{
    						TYPE: "ENUM",
    						CODE: "SETTING_4",
    						NAME: "Enum Example",
    						OPTIONS: {
    							"Option1Code": "Option1Value",
    							"Option2Code": "Option2Value",
    							"Option3Code": "Option3Value",
    							"Option4Code": "Option4Value",
    							"Option5Code": "Option5Value",
    						},
    					},
    					{
    						TYPE: "DATE",
    						CODE: "SETTING_5",
    						NAME: "Date Example",
    					},
    					{
    						TYPE: "LOCATION",
    						CODE: "SETTING_6",
    						NAME: "Location Example",
    					},
    				],
    			},
    			PROFILES: [{
    					NAME: "Taxi",
    					CODE: "TAXI",
    					DESCRIPTION: "Taxi Delivery",
    				},
    				{
    					NAME: "Cargo",
    					CODE: "CARGO",
    					DESCRIPTION: "Cargo Delivery",
    				},
    			],
    		}
    	);
    	
    	const result = response.getData().result;
    	console.info(result);
    }
    catch( error )
    {
    	console.error(error);
    }
  • PHP
    try {
        $response = $b24Service
            ->core
            ->call(
                'sale.delivery.handler.add',
                [
                    'CODE'        => "uber",
                    'NAME'        => "Uber",
                    'DESCRIPTION' => "Uber Description",
                    'SORT'        => 250,
                    'SETTINGS'    => [
                        'CALCULATE_URL'                => "http://gateway.bx/calculate.php",
                        'CREATE_DELIVERY_REQUEST_URL'  => "http://gateway.bx/create_delivery_request.php",
                        'CANCEL_DELIVERY_REQUEST_URL'  => "http://gateway.bx/cancel_delivery_request.php",
                        'HAS_CALLBACK_TRACKING_SUPPORT' => "Y",
                        'CONFIG'                       => [
                            [
                                'TYPE' => "STRING",
                                'CODE' => "SETTING_1",
                                'NAME' => "String Example",
                            ],
                            [
                                'TYPE' => "Y/N",
                                'CODE' => "SETTING_2",
                                'NAME' => "Checkbox Example",
                            ],
                            [
                                'TYPE' => "NUMBER",
                                'CODE' => "SETTING_3",
                                'NAME' => "Number Example",
                            ],
                            [
                                'TYPE'    => "ENUM",
                                'CODE'    => "SETTING_4",
                                'NAME'    => "Enum Example",
                                'OPTIONS' => [
                                    "Option1Code" => "Option1Value",
                                    "Option2Code" => "Option2Value",
                                    "Option3Code" => "Option3Value",
                                    "Option4Code" => "Option4Value",
                                    "Option5Code" => "Option5Value",
                                ],
                            ],
                            [
                                'TYPE' => "DATE",
                                'CODE' => "SETTING_5",
                                'NAME' => "Date Example",
                            ],
                            [
                                'TYPE' => "LOCATION",
                                'CODE' => "SETTING_6",
                                'NAME' => "Location Example",
                            ],
                        ],
                    ],
                    'PROFILES'    => [
                        [
                            'NAME'        => "Taxi",
                            'CODE'        => "TAXI",
                            'DESCRIPTION' => "Taxi Delivery",
                        ],
                        [
                            'NAME'        => "Cargo",
                            'CODE'        => "CARGO",
                            'DESCRIPTION' => "Cargo Delivery",
                        ],
                    ],
                ]
            );
    
        $result = $response
            ->getResponseData()
            ->getResult();
    
        echo 'Success: ' . print_r($result, true);
    
    } catch (Throwable $e) {
        error_log($e->getMessage());
        echo 'Error adding delivery handler: ' . $e->getMessage();
    }
  • BX24.js
    BX24.callMethod(
        'sale.delivery.handler.add', {
            CODE: "uber",
            NAME: "Uber",
            DESCRIPTION: "Uber Description",
            SORT: 250,
            SETTINGS: {
                CALCULATE_URL: "http://gateway.bx/calculate.php",
                CREATE_DELIVERY_REQUEST_URL: "http://gateway.bx/create_delivery_request.php",
                CANCEL_DELIVERY_REQUEST_URL: "http://gateway.bx/cancel_delivery_request.php",
                HAS_CALLBACK_TRACKING_SUPPORT: "Y",
                CONFIG: [{
                        TYPE: "STRING",
                        CODE: "SETTING_1",
                        NAME: "String Example",
                    },
                    {
                        TYPE: "Y/N",
                        CODE: "SETTING_2",
                        NAME: "Checkbox Example",
                    },
                    {
                        TYPE: "NUMBER",
                        CODE: "SETTING_3",
                        NAME: "Number Example",
                    },
                    {
                        TYPE: "ENUM",
                        CODE: "SETTING_4",
                        NAME: "Enum Example",
                        OPTIONS: {
                            "Option1Code": "Option1Value",
                            "Option2Code": "Option2Value",
                            "Option3Code": "Option3Value",
                            "Option4Code": "Option4Value",
                            "Option5Code": "Option5Value",
                        },
                    },
                    {
                        TYPE: "DATE",
                        CODE: "SETTING_5",
                        NAME: "Date Example",
                    },
                    {
                        TYPE: "LOCATION",
                        CODE: "SETTING_6",
                        NAME: "Location Example",
                    },
                ],
            },
            PROFILES: [{
                    NAME: "Taxi",
                    CODE: "TAXI",
                    DESCRIPTION: "Taxi Delivery",
                },
                {
                    NAME: "Cargo",
                    CODE: "CARGO",
                    DESCRIPTION: "Cargo Delivery",
                },
            ],
        },
        function(result) {
            if (result.error()) {
                console.error(result.error());
            } else {
                console.info(result.data());
            }
        }
    );
  • PHP CRest
    require_once('crest.php');

    $result = CRest::call(
        'sale.delivery.handler.add',
        [
            'CODE' => "uber",
            'NAME' => "Uber",
            'DESCRIPTION' => "Uber Description",
            'SORT' => 250,
            'SETTINGS' => [
                'CALCULATE_URL' => "http://gateway.bx/calculate.php",
                'CREATE_DELIVERY_REQUEST_URL' => "http://gateway.bx/create_delivery_request.php",
                'CANCEL_DELIVERY_REQUEST_URL' => "http://gateway.bx/cancel_delivery_request.php",
                'HAS_CALLBACK_TRACKING_SUPPORT' => "Y",
                'CONFIG' => [
                    ['TYPE' => "STRING", 'CODE' => "SETTING_1", 'NAME' => "String Example"],
                    ['TYPE' => "Y/N", 'CODE' => "SETTING_2", 'NAME' => "Checkbox Example"],
                    ['TYPE' => "NUMBER", 'CODE' => "SETTING_3", 'NAME' => "Number Example"],
                    [
                        'TYPE' => "ENUM",
                        'CODE' => "SETTING_4",
                        'NAME' => "Enum Example",
                        'OPTIONS' => [
                            "Option1Code" => "Option1Value",
                            "Option2Code" => "Option2Value",
                            "Option3Code" => "Option3Value",
                            "Option4Code" => "Option4Value",
                            "Option5Code" => "Option5Value",
                        ],
                    ],
                    ['TYPE' => "DATE", 'CODE' => "SETTING_5", 'NAME' => "Date Example"],
                    ['TYPE' => "LOCATION", 'CODE' => "SETTING_6", 'NAME' => "Location Example"],
                ],
            ],
            'PROFILES' => [
                ['NAME' => "Taxi", 'CODE' => "TAXI", 'DESCRIPTION' => "Taxi Delivery"],
                ['NAME' => "Cargo", 'CODE' => "CARGO", 'DESCRIPTION' => "Cargo Delivery"],
            ],
        ]
    );

    echo '<PRE>';
    print_r($result);
    echo '</PRE>';

Ответ в случае успеха

HTTP-статус: 200

{
   "result":14,
   "time":{
      "start":1713872092.378366,
      "finish":1713872092.691408,
      "duration":0.31304192543029785,
      "processing":0.015096187591552734,
      "date_start":"2024-04-23T14:34:52+03:00",
      "date_finish":"2024-04-23T14:34:52+03:00"
   }
}

Возвращаемые данные

Название
тип
Описание
result
sale_delivery_handler.ID
Идентификатор обработчика службы доставки
time
time
Информация о времени выполнения запроса

Обработка ошибок

HTTP-статус: 400, 403

{
   "error":"ERROR_CHECK_FAILURE",
   "error_description":"Parameter CODE is not defined"
}

Возможные коды ошибок

КодОписаниеСтатус
ERROR_CHECK_FAILUREОшибка валидации входящих параметров (детали в описании ошибки)400
ERROR_HANDLER_ADDОшибка при попытке добавления обработчика службы доставки400
ERROR_HANDLER_ALREADY_EXISTОбработчик службы доставки с указанным кодом CODE уже существует400
ACCESS_DENIEDНедостаточно прав для добавления обработчика службы доставки403
  • [](./sale-delivery-handler-update)
  • [](./sale-delivery-handler-delete)
  • [](./sale-delivery-handler-list)
  • [](../../../../tutorials/sale/delivery-in-crm)

💡 Экспертное мнение и рекомендации

Советы эксперта по интеграции:

  • Всегда используйте кэширование при частых запросах к sale.delivery.handler.add, чтобы разгрузить базу данных.
  • Соблюдайте стандарты PSR при написании обработчиков для «Добавить обработчик службы доставки sale.delivery.handler.add».
  • Регулярно проводите аудит производительности системы с помощью встроенного монитора 1С-Битрикс.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Событие при изменении правила округления цен CATALOG.ROUNDING.ON.UPDATEСобытие при изменении правила округления цен CATALOG.ROUNDING.ON.UPDATE

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Событие при изменении правила округления цен CATALOG.ROUNDING.ON.UPDATE». Вы узнаете экспертные методики работы с

Счета (старые)Счета (старые)

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Счета (старые)». Вы узнаете экспертные методики работы с счета (старые) и научитесь избегать

Добавить универсальное дело crm.activity.todo.addДобавить универсальное дело crm.activity.todo.add

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Добавить универсальное дело crm.activity.todo.add». Мы подготовили подробный разбор принципов работы и развернутые примеры интеграции. Добавить