crm.item.batchImport
Импортировать группу записей
Описание
Универсальный метод для импорта объектов в CRM. Отличия от добавления объекта описаны подробнее тут.
Логика добавления элементов работает по аналогии с методом crm.item.import.
Внимание!
В одном запросе допустимо импортировать максимум — 20 элементов
Параметры
entityTypeId
integer
обязательный
Идентификатор системного или пользовательского типа, для которого нужно создать элемент.
Числовые значения для системных типов (Лид — 1, Сделка — 2, Контакт — 3, Компания — 4, Счёт — 31 и др.) приведены в справочнике типов объектов CRM. Идентификатор смарт-процесса можно узнать методом crm.type.list
data
array
обязательный
Массив значений полей элементов. Можно рассматривать его как массив, каждый элемент которого содержит набор полей fields, описанный в методе crm.item.import
useOriginalUfNames
boolean
необязательный
Параметр для управления форматом имен пользовательских полей в запросе и ответе.
Возможные значения:
Y— оригинальные имена пользовательских полей, напримерUF_CRM_2_1639669411830N— имена пользовательских полей в camelCase, напримерufCrm2_1639669411830
По умолчанию — N
Примеры запроса
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"entityTypeId":2,"data":[{"title":"Новая сделка (специально для примера REST методов)","typeId":"SERVICE","categoryId":9,"stageId":"C9:UC_KN8KFI","isReccurring":"Y","probability":50,"currencyId":"RUB","isManualOpportunity":"Y","opportunity":999.99,"taxValue":99.9,"companyId":5,"contactId":4,"contactIds":[4,5],"quoteId":7,"begindate":"formatDate(monthAgo)","closedate":"formatDate(twelveDaysInAdvance)","opened":"N","comments":"commentsExample","assignedById":6,"sourceId":"WEB","sourceDescription":"Тут должно быть дополнительное описание об источнике","leadId":102,"additionalInfo":"Тут должна быть дополнительная информация","observers":[2,3],"utmSource":"google","utmMedium":"CPC","ufCrm_1721244707107":1111.1,"parentId1220":2},{"title":"Новая сделка (специально для примера REST методов)","typeId":"SERVICE","categoryId":4,"stageId":"C9:UC_KN8KFI","isReccurring":"Y","probability":50,"currencyId":"RUB","isManualOpportunity":"Y","opportunity":999.99,"taxValue":99.9,"companyId":5,"contactId":4,"contactIds":[4,5],"quoteId":7,"begindate":"formatDate(monthAgo)","closedate":"formatDate(twelveDaysInAdvance)","opened":"N","comments":"commentsExample","assignedById":6,"sourceId":"WEB","sourceDescription":"Тут должно быть дополнительное описание об источнике","leadId":102,"additionalInfo":"Тут должна быть дополнительная информация","observers":[2,3],"utmSource":"google","utmMedium":"CPC","ufCrm_1721244707107":1111.1,"parentId1220":2}]}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.item.batchImport
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"entityTypeId":2,"data":[{"title":"Новая сделка (специально для примера REST методов)","typeId":"SERVICE","categoryId":9,"stageId":"C9:UC_KN8KFI","isReccurring":"Y","probability":50,"currencyId":"RUB","isManualOpportunity":"Y","opportunity":999.99,"taxValue":99.9,"companyId":5,"contactId":4,"contactIds":[4,5],"quoteId":7,"begindate":"formatDate(monthAgo)","closedate":"formatDate(twelveDaysInAdvance)","opened":"N","comments":"commentsExample","assignedById":6,"sourceId":"WEB","sourceDescription":"Тут должно быть дополнительное описание об источнике","leadId":102,"additionalInfo":"Тут должна быть дополнительная информация","observers":[2,3],"utmSource":"google","utmMedium":"CPC","ufCrm_1721244707107":1111.1,"parentId1220":2},{"title":"Новая сделка (специально для примера REST методов)","typeId":"SERVICE","categoryId":4,"stageId":"C9:UC_KN8KFI","isReccurring":"Y","probability":50,"currencyId":"RUB","isManualOpportunity":"Y","opportunity":999.99,"taxValue":99.9,"companyId":5,"contactId":4,"contactIds":[4,5],"quoteId":7,"begindate":"formatDate(monthAgo)","closedate":"formatDate(twelveDaysInAdvance)","opened":"N","comments":"commentsExample","assignedById":6,"sourceId":"WEB","sourceDescription":"Тут должно быть дополнительное описание об источнике","leadId":102,"additionalInfo":"Тут должна быть дополнительная информация","observers":[2,3],"utmSource":"google","utmMedium":"CPC","ufCrm_1721244707107":1111.1,"parentId1220":2}],"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/crm.item.batchImport
from b24pysdk.errors import BitrixAPIError, BitrixSDKException
try:
bitrix_response = client.crm.item.batch_import(
entity_type_id=1302,
data=[
{
"ufCrm44_1721812760630": "Строка для пользовательского поля типа Строка",
"ufCrm44_1721812814433": 81,
"ufCrm44_1721812853419": "2024-08-21",
"ufCrm44_1721812885588": [
"example.com",
"second-example.com",
],
"ufCrm44_1721812898903": [
"green_pixel.png",
"iVBORw0KGgoAAAANSUhEUgAAAIAAAAAMCAYAAACqTLVoAAAALklEQVR42u3SAQEAAAQDsEsuOj3YMqwy6fBWCSCAAAIgAAIgAAIgAAIgAAJw3QLOrRH1U/gU4gAAAABJRU5ErkJggg==",
],
"ufCrm44_1721812915476": "300|RUB",
"ufCrm44_1721812935209": "Y",
"ufCrm44_1721812948498": 9999.9,
}
,
{
"ufCrm44_1721812760630": "Строка для пользовательского поля типа Строка",
"ufCrm44_1721812814433": 45,
"ufCrm44_1721812853419": "2024-08-21",
"ufCrm44_1721812885588": [
"example.com",
"second-example.com",
],
"ufCrm44_1721812898903": [
"green_pixel2.png",
"iVBORw0KGgoAAAANSUhEUgAAAIAAAAAMCAYAAACqTLVoAAAALklEQVR42u3SAQEAAAQDsEsuOj3YMqwy6fBWCSCAAAIgAAIgAAIgAAIgAAJw3QLOrRH1U/gU4gAAAABJRU5ErkJggg==",
],
"ufCrm44_1721812915476": "300|RUB",
"ufCrm44_1721812935209": "Y",
"ufCrm44_1721812948498": 9999.9,
}
],
).response
result = bitrix_response.result
print(result)
except BitrixAPIError as error:
print(
"Ошибка Bitrix API",
f"error: {error.error}",
f"error_description: {error.error_description}",
sep="\n",
)
except BitrixSDKException as error:
print(f"Ошибка Bitrix SDK: {error.message}")
except Exception as error:
print(f"Непредвиденная ошибка: {error}")
const formatDate = (date) => {
return date.toISOString().slice(0, 10);
};
const day = 60 * 60 * 24 * 1000;
const now = new Date();
const twelveDaysInAdvance = new Date(now.getTime() + 12 * day);
const monthAgo = new Date(now.getTime() - 30 * day);
const commentsExample = `
Пример комментария внутри сделки
[B]Жирный текст[/B]
[I]Курсив[/I]
[U]Подчеркнутый[/U]
[S]Зачеркнутый[/S]
[B][I][U][S]Микс[/S][/U][/I][/B]
[LIST]
[*]Элемент списка #1
[*]Элемент списка #2
[*]Элемент списка #3
[/LIST]
[LIST=1]
[*]Нумерованный элемент списка #1
[*]Нумерованный элемент списка #2
[*]Нумерованный элемент списка #3
[/LIST]
`;
const deal = {
title: "Новая сделка (специально для примера REST методов)",
typeId: "SERVICE",
categoryId: 9,
stageId: "C9:UC_KN8KFI",
isReccurring: "Y",
probability: 50,
currencyId: "RUB",
isManualOpportunity: "Y",
opportunity: 999.99,
taxValue: 99.9,
companyId: 5,
contactId: 4,
contactIds: [4, 5],
quoteId: 7,
begindate: formatDate(monthAgo),
closedate: formatDate(twelveDaysInAdvance),
opened: "N",
comments: commentsExample,
assignedById: 6,
sourceId: "WEB",
sourceDescription: "Тут должно быть дополнительное описание об источнике",
leadId: 102,
additionalInfo: "Тут должна быть дополнительная информация",
observers: [2, 3],
utmSource: "google",
utmMedium: "CPC",
ufCrm_1721244707107: 1111.1,
parentId1220: 2,
};
const secondDeal = {
title: "Новая сделка (специально для примера REST методов)",
typeId: "SERVICE",
categoryId: 4,
stageId: "C9:UC_KN8KFI",
isReccurring: "Y",
probability: 50,
currencyId: "RUB",
isManualOpportunity: "Y",
opportunity: 999.99,
taxValue: 99.9,
companyId: 5,
contactId: 4,
contactIds: [4, 5],
quoteId: 7,
begindate: formatDate(monthAgo),
closedate: formatDate(twelveDaysInAdvance),
opened: "N",
comments: commentsExample,
assignedById: 6,
sourceId: "WEB",
sourceDescription: "Тут должно быть дополнительное описание об источнике",
leadId: 102,
additionalInfo: "Тут должна быть дополнительная информация",
observers: [2, 3],
utmSource: "google",
utmMedium: "CPC",
ufCrm_1721244707107: 1111.1,
parentId1220: 2,
};
BX24.callMethod(
'crm.item.batchImport',
{
entityTypeId: 2,
data: [
deal,
secondDeal
]
},
(result) =>
{
result.error()
? console.error(result.error())
: console.info(result.data())
;
}
);
require_once('crest.php');
$deal = [
'title' => "Новая сделка (специально для примера REST методов)",
'typeId' => "SERVICE",
'categoryId' => 9,
'stageId' => "C9:UC_KN8KFI",
'isReccurring' => "Y",
'probability' => 50,
'currencyId' => "RUB",
'isManualOpportunity' => "Y",
'opportunity' => 999.99,
'taxValue' => 99.9,
'companyId' => 5,
'contactId' => 4,
'contactIds' => [4, 5],
'quoteId' => 7,
'begindate' => formatDate(monthAgo),
'closedate' => formatDate(twelveDaysInAdvance),
'opened' => "N",
'comments' => $commentsExample,
'assignedById' => 6,
'sourceId' => "WEB",
'sourceDescription' => "Тут должно быть дополнительное описание об источнике",
'leadId' => 102,
'additionalInfo' => "Тут должна быть дополнительная информация",
'observers' => [2, 3],
'utmSource' => "google",
'utmMedium' => "CPC",
'ufCrm_1721244707107' => 1111.1,
'parentId1220' => 2
]
$secondDeal = [
'title' => "Новая сделка (специально для примера REST методов)",
'typeId' => "SERVICE",
'categoryId' => 4,
'stageId' => "C9:UC_KN8KFI",
'isReccurring' => "Y",
'probability' => 50,
'currencyId' => "RUB",
'isManualOpportunity' => "Y",
'opportunity' => 999.99,
'taxValue' => 99.9,
'companyId' => 5,
'contactId' => 4,
'contactIds' => [4, 5],
'quoteId' => 7,
'begindate' => formatDate(monthAgo),
'closedate' => formatDate(twelveDaysInAdvance),
'opened' => "N",
'comments' => $commentsExample,
'assignedById' => 6,
'sourceId' => "WEB",
'sourceDescription' => "Тут должно быть дополнительное описание об источнике",
'leadId' => 102,
'additionalInfo' => "Тут должна быть дополнительная информация",
'observers' => [2, 3],
'utmSource' => "google",
'utmMedium' => "CPC",
'ufCrm_1721244707107' => 1111.1,
'parentId1220' => 2
]
$result = CRest::call(
'crm.item.batchImport',
[
'entityTypeId' => 2,
'data' => [
$deal,
$secondDeal,
],
],
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "crm.item.batchImport", b24.Params{
"entityTypeId": 2,
"data": []b24.Params{
{
"title": "Новая сделка (специально для примера REST методов)",
"typeId": "SERVICE",
"categoryId": 9,
"stageId": "C9:UC_KN8KFI",
"isReccurring": "Y",
"probability": 50,
"currencyId": "RUB",
"isManualOpportunity": "Y",
"opportunity": 999.99,
"taxValue": 99.9,
"companyId": 5,
"contactId": 4,
"contactIds": []int{4, 5},
"quoteId": 7,
"begindate": "formatDate(monthAgo)",
"closedate": "formatDate(twelveDaysInAdvance)",
"opened": "N",
"comments": "commentsExample",
"assignedById": 6,
"sourceId": "WEB",
"sourceDescription": "Тут должно быть дополнительное описание об источнике",
"leadId": 102,
"additionalInfo": "Тут должна быть дополнительная информация",
"observers": []int{2, 3},
"utmSource": "google",
"utmMedium": "CPC",
"ufCrm_1721244707107": 1111.1,
"parentId1220": 2,
},
{
"title": "Новая сделка (специально для примера REST методов)",
"typeId": "SERVICE",
"categoryId": 4,
"stageId": "C9:UC_KN8KFI",
"isReccurring": "Y",
"probability": 50,
"currencyId": "RUB",
"isManualOpportunity": "Y",
"opportunity": 999.99,
"taxValue": 99.9,
"companyId": 5,
"contactId": 4,
"contactIds": []int{4, 5},
"quoteId": 7,
"begindate": "formatDate(monthAgo)",
"closedate": "formatDate(twelveDaysInAdvance)",
"opened": "N",
"comments": "commentsExample",
"assignedById": 6,
"sourceId": "WEB",
"sourceDescription": "Тут должно быть дополнительное описание об источнике",
"leadId": 102,
"additionalInfo": "Тут должна быть дополнительная информация",
"observers": []int{2, 3},
"utmSource": "google",
"utmMedium": "CPC",
"ufCrm_1721244707107": 1111.1,
"parentId1220": 2,
},
},
})
if err != nil {
return fmt.Errorf("crm.item.batchImport: %w", err)
}
// Метод заворачивает ответ в объект с ключом "items".
raw, ok := b24.Unwrap(res.Result, "items")
if !ok {
return fmt.Errorf("в ответе нет ключа items")
}
fmt.Printf("%s\n", raw)
Ответ
HTTP-статус: 200
{
"result": {
"items": [
{
"item": {
"id": 15
}
},
{
"error": "CRM_FIELD_ERROR_REQUIRED",
"error_description": "Поле \"Название\" обязательно для заполнения"
}
]
},
"time": {
"start": 1723414961.913589,
"finish": 1723414964.652124,
"duration": 2.738534927368164,
"processing": 2.376383066177368,
"date_start": "2024-08-11T22:22:41+00:00",
"date_finish": "2024-08-11T22:22:44+00:00",
"operating": 2.3762991428375244
}
}
Возвращаемые данные
result
object
Корневой элемент ответа.
Содержит единственный ключ item
items
array
Массив содержащих объекты item или ошибки
item
object
Информация о созданном элементе.
Содержит единственный ключ id
id
integer
Идентификатор созданного элемента
time
time
Информация о времени выполнения запроса
Обработка ошибок
HTTP-статус: 401
{
"error": "NOT_FOUND",
"error_description": "Смарт-процесс не найден"
}
| Код | Описание | Значение |
|---|---|---|
400 |
NOT_FOUND |
Смарт-процесс не найден |
400 |
ACCESS_DENIED |
Доступ запрещен |
400 |
CRM_FIELD_ERROR_VALUE_NOT_VALID |
Неверное значение поля "field" |
400 |
100 |
Expected iterable value for multiple field, but got type instead |
400 |
CREATE_DYNAMIC_ITEM_RESTRICTED |
Вы не можете создать новый элемент из-за ограничений вашего тарифа |
400 |
MAX_IMPORT_BATCH_SIZE_EXCEEDED |
Вы не можете импортировать больше 20 элементов |
401 |
INVALID_CREDENTIALS |
Неверные данные авторизации для запроса |
403 |
allowed_only_intranet_user |
Действие разрешено только интранет-пользователям |

