При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Добавить обработчик службы доставки sale.delivery.handler.add», разберем архитектурные особенности и предоставим готовые к интеграции примеры кода.
Добавить обработчик службы доставки sale.delivery.handler.add
> Scope: sale
>
> Кто может выполнять метод: администратор CRM
Метод добавляет обработчик службы доставки.
Параметры метода
Названиетип | Описание |
|---|---|
NAMEstring | Название обработчика службы доставки |
CODEstring | Символьный код обработчика службы доставки |
SORTinteger | Сортировка |
DESCRIPTIONinteger | Описание обработчика службы доставки |
SETTINGSobject | Объект, содержащий информацию о настройках обработчика службы доставки (подробное описание приведено ниже) |
PROFILESobject[] | Массив, содержащий список объектов профилей доставки (подробное описание приведено ниже). Подразумевается, что у обработчика службы доставки должен быть как минимум 1 профиль |
Параметр SETTINGS
Названиетип | Описание |
|---|---|
CALCULATE_URLstring | URL для расчёта стоимости доставки. На данный URL приходят данные о посылке (что доставить, куда и как), стоимость доставки которой нужно рассчитать в ответе. Формат запроса и ответа детально описан в документации по веб-хуку Расчет стоимости доставки |
CREATE_DELIVERY_REQUEST_URLstring | URL для создания заказа на доставку. На данный URL приходят данные о посылке (что доставить, куда и как), заказ на которую нужно оформить в службе доставки. Формат запроса и ответа детально описан в документации по веб-хуку Создание заказа на доставку |
CANCEL_DELIVERY_REQUEST_URLstring | URL для отмены заказа на доставку На данный URL приходят данные о посылке (что доставить, куда и как), заказ на которую нужно отменить в службе доставки. Формат запроса и ответа детально описан в документации по веб-хуку Отмена заказа на доставку |
HAS_CALLBACK_TRACKING_SUPPORTstring | Индикатор того, будет ли служба доставки присылать оповещения о статусе заказа на доставку (см. метод sale.delivery.request.sendmessage).В случае, если поддержка событий указана, то в интерфейсе менеджера при заказе доставки будет создано дело на доставку, в которое могут транслироваться изменения, связанные с текущим статусом доставки. Возможные значения: |
CONFIGobject[] | Массив объектов с доступными настройками для службы доставки, создаваемой с использованием данного обработчика (подробное описание приведено ниже) |
Параметр CONFIG
Названиетип | Описание |
|---|---|
TYPEstring | Тип поля настройки Возможные значения: — STRING — строка— Y/N — чекбокс (да / нет)— NUMBER — число— ENUM — список— DATE — дата— LOCATION — местоположение |
CODEstring | Символьный код настройки |
NAMEstring | Название настройки |
OPTIONSobject | Список опций для выбора. Объект в формате ключ=значение. Где ключ — код опции, а значение — опция.Пример: Параметр актуален только для настройки типа |
Параметр PROFILES
Названиетип | Описание |
|---|---|
NAMEstring | Название профиля обработчика службы доставки |
CODEstring | Символьный код профиля обработчика службы доставки |
DESCRIPTIONstring | Описание профиля обработчика службы доставки |
Примеры кода
- 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"
}
}Возвращаемые данные
Названиетип | Описание |
|---|---|
resultsale_delivery_handler.ID | Идентификатор обработчика службы доставки |
timetime | Информация о времени выполнения запроса |
Обработка ошибок
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 и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru