Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Импортировать одну запись crm.item.import». Мы подготовили подробный разбор принципов работы и развернутые примеры интеграции.
Импортировать одну запись crm.item.import
> Scope: crm
>
> Кто может выполнять метод: любой пользователь с правом «импорта» элемента объекта CRM
Универсальный метод для импорта объектов в CRM.
Об отличиях логики импорта от логики обычного добавления элементов можно прочитать в статье [](./index).
Параметры метода
Названиетип | Описание |
|---|---|
| entityTypeId [ integer][3] | Идентификатор системного или пользовательского типа, для которого нужно создать элемент |
| fields [ object][3] | Объект формата:— Для мультиполей, например — У каждого объекта CRM свой набор полей. Это значит, что набор полей для создания Лида не обязан подходить набору полей для создания Контакта или Смарт-процесса. Список доступных полей для каждого типа объектов описан ниже. Некорректное поле в Узнать набор полей также можно универсальным методом crm.item.fields или методами для конкретных объектов CRM: |
| useOriginalUfNames [ boolean][1] | Параметр для управления форматом имен пользовательских полей в запросе и ответе. Возможные значения: — По умолчанию — |
Чтобы загрузить файл, в качестве значения пользовательского поля необходимо передать массив, где первый элемент — это имя файла, а второй — это закодированный в base64 контент файла.
Примеры кода
1. Как импортировать сделку
- cURL (Webhook)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"entityTypeId":2,"fields":{"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}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/crm.item.import- cURL (OAuth)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"entityTypeId":2,"fields":{"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},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/crm.item.import- BX24.js
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]
`;
BX24.callMethod(
'crm.item.import',
{
entityTypeId: 2,
fields:
{
"Новая сделка (специально для примера 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,
},
},
(result) =>
{
result.error()
? console.error(result.error())
: console.info(result.data())
;
}
);- PHP CRest
require_once('crest.php');
$result = CRest::call(
'crm.item.import',
[
'entityTypeId' => 2,
'fields' => [
'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,
],
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';2. Как создать элемент смарт-процесса с набором пользовательских полей
- cURL (Webhook)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"entityTypeId": 1302,
"fields": {
"ufCrm44_1721812760630": "Строка для пользовательского поля типа Строка",
"ufCrm44_1721812814433": 81,
"ufCrm44_1721812853419": "'"$(date '+%Y-%m-%d')"'",
"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
}
}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/crm.item.import- cURL (OAuth)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"entityTypeId": 1302,
"fields": {
"ufCrm44_1721812760630": "Строка для пользовательского поля типа Строка",
"ufCrm44_1721812814433": 81,
"ufCrm44_1721812853419": "'"$(date '+%Y-%m-%d')"'",
"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
},
"auth": "**put_access_token_here**"
}' \
https://**put_your_bitrix24_address**/rest/crm.item.import- BX24.js
const greenPixelInBase64 = "iVBORw0KGgoAAAANSUhEUgAAAIAAAAAMCAYAAACqTLVoAAAALklEQVR42u3SAQEAAAQDsEsuOj3YMqwy6fBWCSCAAAIgAAIgAAIgAAIgAAJw3QLOrRH1U/gU4gAAAABJRU5ErkJggg==";
BX24.callMethod(
'crm.item.import',
{
entityTypeId: 1302,
fields: {
ufCrm44_1721812760630: "Строка для пользовательского поля типа Строка",
ufCrm44_1721812814433: 81,
ufCrm44_1721812853419: (new Date()).toISOString().slice(0, 10),
ufCrm44_1721812885588: [
"example.com",
"second-example.com",
],
ufCrm44_1721812898903: [
"green_pixel.png",
greenpixelBase64,
],
ufCrm44_1721812915476: "300|RUB",
ufCrm44_1721812935209: "Y",
ufCrm44_1721812948498: 9999.9,
},
},
(result) =>
{
result.error()
? console.error(result.error())
: console.info(result.data())
;
}
);- PHP CRest
require_once('crest.php');
$result = CRest::call(
'crm.item.import',
[
'entityTypeId' => 1302,
'fields' => [
'ufCrm44_1721812760630' => "Строка для пользовательского поля типа Строка",
'ufCrm44_1721812814433' => 81,
'ufCrm44_1721812853419' => date('Y-m-d'),
'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,
],
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';Обработка ответа
Метод вернет массив item с идентификатором созданного элемента в случае успеха, либо сообщение об ошибке.
HTTP-статус: 200
{
"result": {
"item": {
"id": 4
}
},
"time": {
"start": 1722940215.145257,
"finish": 1722940217.94124,
"duration": 2.795983076095581,
"processing": 2.4315829277038574,
"date_start": "2024-08-06T10:30:15+00:00",
"date_finish": "2024-08-06T10:30:17+00:00",
"operating": 2.4314892292022705
}
}Возвращаемые данные
Названиетип | Описание |
|---|---|
| result [ object][3] | Корневой элемент ответа. Содержит единственный ключ — |
| item [ object][3] | Информация о созданном элементе. Содержит единственный ключ — |
| id [ int][3] | Идентификатор созданного элемента |
| time [ time][3] | Информация о времени выполнения запроса |
По умолчанию имена пользовательских полей передаются и возвращаются в camelCase, например ufCrm2_1639669411830.
При передаче параметра useOriginalUfNames со значением Y пользовательские поля будут возвращаться с оригинальными именами, например UF_CRM_2_1639669411830.
Обработка ошибок
HTTP-статус: 401, 400, 403
{
"error": "NOT_FOUND",
"error_description": "Смарт-процесс не найден"
}Возможные коды ошибок
| Статус | Код | Описание | Значение |
|---|---|---|---|
400 | NOT_FOUND | Смарт-процесс не найден | Возникает, при передаче невалидного entityTypeId |
400 | ACCESS_DENIED | Доступ запрещен | У пользователя нет прав на добавление элементов типа entityTypeId |
400 | CRM_FIELD_ERROR_VALUE_NOT_VALID | Неверное значение поля «field« | Передано неправильное значения поля field.Для системных полей типа |
400 | 100 | Expected iterable value for multiple field, but got type instead | В одно из множественных полей было передано значения типа type, хотя ожидался итерируемый тип. Также может возникать при некорректном запросе (некорректный JSON или заголовки запроса) |
400 | CREATE_DYNAMIC_ITEM_RESTRICTED | Вы не можете создать новый элемент из-за ограничений вашего тарифа | Ограничения тарифа не позволяют создавать элементы смарт-процессов |
401 | INVALID_CREDENTIALS | Неверные данные авторизации для запроса | Некорректный ID пользователя и/или код для в пути запроса |
403 | allowed_only_intranet_user | Действие разрешено только интранет-пользователям | Пользователь не является интранет-пользователем |
- [](./index)
- [](./crm-item-batch-import)
[3]: ../../data-types.md
💡 Экспертное мнение и рекомендации
Ключевые выводы по теме «Импортировать одну запись crm.item.import»:
Использование современных стандартов D7 при работе с crm.item.import позволяет писать чистый, масштабируемый и безопасный код. Не забывайте обрабатывать исключения (try/catch) и проверять права доступа текущего пользователя перед выполнением критических операций.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru