ДАРА
Разделы документации

ДокументацияРуководства

Импорт файлов

Загрузка каталога, профилей, заказов и событий из CSV и Excel в кабинете: шаблоны и колонки, кодировки и даты, проверка, отчёт об ошибках, повторные загрузки.

Импорт файлов — способ передать данные без интеграции с API: выгрузка из 1С, Битрикса или таблица Excel загружается в кабинете. Каждая строка файла обрабатывается так же, как соответствующий метод API, поэтому проверки, отказы и правила идемпотентности — те же.

Когда использовать

Задача Чем
Первая загрузка каталога, перенос истории заказов и событий, разовая загрузка профилей импорт файлов
Ежедневная синхронизация: новый объект, изменение цены, покупка, вход пользователя API

Файл и API можно сочетать: загрузите историю файлом, а дальше шлите изменения методами API. Повторная загрузка того же файла данные не удваивает.

Как загрузить

Проект → «Импорт».

  1. Выберите шаблон и загрузите файл. У каждого шаблона на странице есть описание колонок и пример файла.
  2. Проверьте сопоставление колонок. ДАРА сопоставляет колонки по заголовкам — подписи полей из таблиц ниже и привычные названия выгрузок 1С и Битрикса распознаются сами. Поправьте, что нужно: сопоставление сохраняется и предлагается при следующей загрузке этого шаблона.
  3. Запустите проверку. ДАРА показывает первые 20 строк файла и проверяет первые 1000 строк: ошибки по строкам и колонкам, предупреждения, определённые кодировку и разделитель.
  4. Запустите импорт. Он идёт в фоне, на странице виден прогресс: сколько строк обработано, принято и отклонено.
  5. Заберите итог: счётчики и отчёт об ошибках в CSV.

Один импорт в проекте одновременно. Незапущенных загрузок в проекте хранится не больше трёх: четвёртая вытесняет самую старую, и та помечается «заменён новой загрузкой». За сутки клиент загружает не больше 20 файлов.

Файлы

  • CSV — кодировка UTF-8 или Windows-1251, разделитель ;, , или табуляция. И то и другое определяется автоматически, BOM учитывается. Выгрузки 1С в Windows-1251 с точкой с запятой открываются как есть, перекодировать файл не нужно.
  • XLSX — первый лист книги. Формулы берутся сохранённым значением: если файл сохранён без значений формул, такие ячейки считаются пустыми.
  • .xls не принимается — пересохраните файл как .xlsx или CSV. Файл под паролем тоже не принимается.
  • Первая непустая строка — заголовок. Колонок в заголовке не больше 200.
  • Размер — до 100 МБ, до 1 000 000 строк в файле.

Кодировка определяется по всему файлу. Если начало файла выглядит как UTF-8, а дальше встречаются строки в Windows-1251 (так бывает у склеенных выгрузок), импорт останавливается до записи первой строки с кодом encoding_mismatch — выберите кодировку вручную на странице проверки и запустите снова. Отдельные нечитаемые строки кодировку не меняют: они отклоняются с кодом invalid_encoding.

Даты и время

Принимаются:

  • ГГГГ-ММ-ДД и ГГГГ-ММ-ДД ЧЧ:ММ[:СС], можно с Z или смещением;
  • ДД.ММ.ГГГГ и Д.М.ГГГГ, со временем или без — формат 1С 14.09.2026 0:00:00 читается как есть;
  • дата Excel — ячейка с форматом даты в XLSX.

Время без часового пояса в файле считается московским и переводится в UTC. Это отличие от API: там время без зоны отклоняется с кодом invalid_datetime. Дата без года (14.09), двузначный год и формат ММ/ДД/ГГГГ не распознаются — такая ячейка даёт invalid_date.

Значения в ячейках

  • Пустая ячейка — значение не передано. В каталоге это значит «поле пустое» (строка заменяет объект целиком), в профилях — «поле не меняется»: очистить поле профиля файлом нельзя, только методом API.
  • Списки (интересы, авторы, несколько медиа) — в одной ячейке через вертикальную черту: велоспорт|походы.
  • Да и нетда, истина, true, 1, yes, y и нет, ложь, false, 0, no, n, регистр не важен.
  • Числа — разделитель дробной части точка или запятая, пробелы и неразрывные пробелы внутри числа игнорируются: 1 234,50 — это тысяча двести тридцать четыре с половиной.
  • Пробелы по краям ячейки отбрасываются, в том числе у идентификаторов: 1С и Excel часто дописывают их.
  • Перечисления (тип объекта, статус заказа, пол) принимаются кодом или русским словом: video и видео, created и создан, female и женский.
  • Любую несопоставленную колонку можно записать в свойства объекта или строки заказа (properties.<заголовок>) либо в атрибуты пользователя (attributes.<заголовок>). Колонки с персональными данными в атрибуты не предлагаются: ДАРА их не принимает.
  • Относительные ссылки (/upload/iblock/… в выгрузках Битрикса) дополняются до абсолютных, если на странице проверки указан адрес сайта.

Шаблон «Каталог»

Строка файла — объект; загрузка равна PUT /items/{id}: объект заменяется целиком, поля без колонок очищаются. Загруженные объекты встают в очередь анализа, как переданные по API, и учитываются в месячном объёме анализа.

Колонка в файле Поле Обязательно Что писать
Идентификатор id да id объекта на вашей стороне — тот же, что в PUT /items/{id}
Тип type да video, image, audio, text или mixed; можно задать значением для всех строк
Заголовок title одно из: Текст объекта название объекта, до 1000 знаков
Описание description одно из: Текст объекта краткое описание
Текст body одно из: Текст объекта полный текст; в XLSX ячейка вмещает не больше 32 767 знаков
Автор author нет код или имя автора: по нему работают подписки и скрытые авторы
Ссылка url нет адрес страницы объекта
Дата публикации published_at нет дата или дата со временем
Доступен available нет нет — объект хранится, но не показывается
Медиа media одно из: Медиа ссылки https, несколько — списком
Вид медиа media_kind нет video, audio или image — одно значение на весь файл или списком по числу медиа
Версия медиа media_version нет ваша метка версии файла: смена версии заставляет переанализировать медиа

У объектов типа text нужен заголовок, описание или текст; у video, audio и image — хотя бы одно медиа своего вида.

Пример: items.csv, items.xlsx.

Шаблон «Профили»

Строка файла — пользователь; загрузка равна POST /users/profile: меняются только переданные поля.

Колонка в файле Поле Обязательно Что писать
Идентификатор пользователя user.user_id одно из: Пользователь id аккаунта на вашем сайте
Анонимный идентификатор user.anonymous_id одно из: Пользователь id браузера или устройства, печатные символы ASCII
DARA Fingerprint user.fingerprint_uuid одно из: Пользователь UUID посетителя, если DARA Fingerprint подключён
Пол gender нет male или female
Год рождения birth_year нет четыре цифры
Возраст age нет полных лет; вместе с годом рождения не передаётся
Интересы interests нет список, до 50 значений
Исключённые интересы excluded_interests нет список тем, которые показывать не нужно
Подписки на авторов followed_authors нет список идентификаторов авторов
Скрытые авторы hidden_authors нет список идентификаторов авторов
Город city нет название города
Страна country нет название или код страны
Персонализация personalization нет нет — профиль не строится и не используется

Персональные данные — имя, телефон, email, адрес, паспорт, дата рождения — не принимаются: строка получает отказ pii_not_allowed. Подробно — Данные о пользователях.

Пример: profiles.csv, profiles.xlsx.

Шаблон «Заказы»

Строка файла — строка заказа. Строки с одним номером собираются в заказ по всему файлу, поэтому порядок строк не важен, и заказ отправляется целиком, как POST /orders.

Колонка в файле Поле Обязательно Что писать
Номер заказа order_id да номер документа; строки с одним номером образуют один заказ
Идентификатор покупателя user.user_id одно из: Покупатель id аккаунта покупателя
Анонимный идентификатор user.anonymous_id одно из: Покупатель id браузера или устройства
DARA Fingerprint user.fingerprint_uuid одно из: Покупатель UUID посетителя
Дата заказа occurred_at нет дата документа; не старше 730 дней
Статус status нет created или cancelled; по умолчанию created
Товар item да id товара — тот же, что в каталоге
Количество quantity нет по умолчанию 1
Цена price нет цена за единицу
Наименование title нет название товара: по нему заводится карточка, если товара нет в каталоге
  • Поля заказа — покупатель, дата, статус — берутся из первой строки заказа. Если в другой строке того же номера стоит другое непустое значение, весь заказ отклоняется с кодом order_conflict.
  • Неразборчивые количество или цена («две», 1,2,3) отклоняют свою строку с кодом invalid_number — остальные строки заказа загружаются.
  • Повторная загрузка заменяет состав заказа: новые строки добавляются, пропавшие отменяются.
  • Если у проекта нет активного типа события с флагом «покупка», импорт заказов не запускается: код no_purchase_type.

Пример: orders.csv, orders.xlsx, выгрузка 1С в Windows-1251: orders-1c-cp1251.csv.

Номера документов 1С

order_id в API — до 64 печатных символов ASCII, а номера документов 1С выглядят как ЦБ-000123 или ТД00-000045. Номер, в котором есть символы вне печатного ASCII, переводится в ключ заказа: транслитерация номера, знак ~ и восемь шестнадцатеричных знаков хеша исходного номера.

ЦБ-000123TSB-000123~0a191c24

Ключ получается одинаковым у CSV в Windows-1251, CSV в UTF-8 и XLSX, поэтому повторная загрузка того же файла в другом формате заказ не удваивает. Этот ключ и есть order_id заказа в API: GET-сверка, POST /orders и события покупок работают с ним. Номер из файла сохраняется рядом и виден в кабинете.

Транслитерация — как в загранпаспортах (ICAO Doc 9303), заглавными буквами:

Буква Латиницей Буква Латиницей
А A Р R
Б B С S
В V Т T
Г G У U
Д D Ф F
Е E Х KH
Ё E Ц TS
Ж ZH Ч CH
З Z Ш SH
И I Щ SHCH
Й I Ъ IE
К K Ы Y
Л L Ь не пишется
М M Э E
Н N Ю IU
О O Я IA
П P

Номера, повторяющиеся по годам. В 1С нумерация документов часто начинается заново каждый год, и ЦБ-000123 за 2025 и 2026 год — разные заказы. Отметьте на странице проверки «Номера документов повторяются по годам»: к ключу добавится год даты заказа (TSB-000123~0a191c24@2025). Без отметки такие строки соберутся в один заказ и, скорее всего, отклонятся с кодом order_conflict — проверка предупреждает об этом кодом order_id_repeats_by_year.

То же преобразование применяется к колонке «Номер заказа» шаблона «События»: покупка из выгрузки событий и заказ из выгрузки заказов с одним номером получают один ключ. Отметка «Номера документов повторяются по годам» есть и у шаблона «События» — обе выгрузки загружайте с одинаковой отметкой, иначе ключи разойдутся и одна покупка учтётся дважды; строка с номером заказа, но без даты, при этой отметке отклоняется.

Шаблон «События»

Строка файла — событие; загрузка равна POST /events.

Колонка в файле Поле Обязательно Что писать
Идентификатор события id нет ваш id события: по нему отбрасываются повторы
Тип события type да код типа из проекта или его название; можно задать значением для всех строк
Объект item да id объекта из каталога
Идентификатор пользователя user.user_id одно из: Пользователь id аккаунта
Анонимный идентификатор user.anonymous_id одно из: Пользователь id браузера или устройства
DARA Fingerprint user.fingerprint_uuid одно из: Пользователь UUID посетителя
Значение value нет значение события: доля досмотра, оценка, да или нет — по виду значения типа
Время события occurred_at нет время действия; не старше 730 дней
Идентификатор выдачи recommendation_id нет recommendation_id выдачи или поиска, если событие пришло оттуда
Поверхность surface нет место показа: feed, search и подобные
Позиция position нет позиция объекта в выдаче, с 0
Номер заказа order_id нет номер заказа для событий покупки
Количество quantity нет количество в покупке
Цена price нет цена в покупке
  • Без колонки идентификатора повтор события узнаётся по хешу строки: те же поля — то же событие, повторная загрузка файла счётчики не удваивает.
  • Показы файлом не загружаются: строки типов с флагом «показ» отклоняются с кодом impression_not_importable. Дедупликация показов рассчитана на двое суток, и загрузка того же файла позже удвоила бы статистику.
  • Без колонки даты строки записываются временем загрузки — проверка предупреждает об этом кодом no_occurred_at.
  • События покупки, чьи заказы переданы шаблоном «Заказы» или методом заказов, отклоняются с кодом order_managed: один заказ — один способ.

Пример: events.csv, events.xlsx. В примере покупка ссылается на номер ЦБ-000301 — он не встречается в примере выгрузки 1С, поэтому оба примера можно загрузить в один проект.

Проверка и отчёт об ошибках

Проверка разбирает первые 1000 строк файла и останавливается раньше, если результат перестаёт помещаться — по объёму (8 МБ) или по времени (17 секунд). Тогда появляется предупреждение check_partial: проверена часть строк. На странице показываются первые 200 ошибок и сводка по кодам; остальные ошибки видны в отчёте после импорта.

Отчёт — файл report.csv со страницы импорта: UTF-8 с BOM, разделитель ;, перевод строки CRLF, заголовок Строка;Колонка;Код;Ошибка. Он открывается в Excel двойным щелчком.

  • «Строка» — номер строки файла, как его показывает Excel.
  • «Колонка» — заголовок колонки; у XLSX перед заголовком стоит её буква. Пусто — ошибка относится ко всей строке.
  • «Код» и «Ошибка» — код из таблиц ниже и его текст по-русски.
  • Значений ячеек в отчёте нет: файл есть у вас, а в отчёте могли бы оказаться персональные данные.
  • В отчёт попадает не больше 1 000 000 строк.

Коды: файл и проверка

Такая ошибка останавливает импорт целиком: ни одна строка не записывается.

Код Что означает
csv_unclosed_quote Незакрытая кавычка: запись продолжается до конца файла
disk_full Недостаточно места на сервере для разбора файла, попробуйте позже
encoding_mismatch Кодировка файла определилась по началу неверно: выберите её вручную на странице проверки
encrypted Файл защищён паролем: снимите пароль и сохраните файл как .xlsx
file_changed Файл импорта изменился после загрузки: загрузите его заново
file_missing Файл импорта не найден: загрузите его заново
mapping_invalid Сопоставление колонок не подходит к файлу: выберите колонки заново
no_header В файле нет строки заголовка
no_purchase_type В проекте нет активного типа события с флагом «покупка»
preview_timeout Проверка файла не уложилась в 20 секунд
preview_too_large Результат проверки файла слишком большой
project_inactive Проект в архиве или доступ клиента приостановлен
required_unmapped Не сопоставлено обязательное поле: выберите колонку или значение для всех строк
too_many_columns В заголовке больше 200 колонок
too_many_rows В файле больше строк, чем разрешено загрузить за раз (1 000 000)
unsupported_format Формат файла не поддерживается: загрузите CSV или XLSX
utf16_not_supported CSV в кодировке UTF-16 не поддерживается: сохраните как «CSV UTF-8» или «CSV (разделители — точка с запятой)»
xls_not_supported Файлы .xls не поддерживаются: сохраните файл как .xlsx или CSV
xml_doctype Файл XLSX содержит объявление DOCTYPE, которого не бывает в файлах Excel
xml_invalid Файл XLSX содержит повреждённый XML
zip_invalid Файл XLSX повреждён или устроен не так, как файлы Excel
zip_suspicious Файл XLSX распаковывается в подозрительно большой объём

Коды: разбор строки

Код Что означает
bad_row Число значений в строке не совпадает с заголовком или есть значения правее последней колонки заголовка
empty_profile В строке нет полей профиля: профиль не изменён
excel_error В ячейке ошибка Excel
impression_not_importable Показы файлом не загружаются
invalid_bool Ожидается да или нет (true/false, 1/0)
invalid_date Дата не распознана: ожидается ГГГГ-ММ-ДД, ДД.ММ.ГГГГ (можно со временем) или дата Excel
invalid_encoding Строка не читается в выбранной кодировке
invalid_number Не число
invalid_value Недопустимое значение
order_conflict Поля заказа отличаются в строках одного номера
required Пустое обязательное значение
too_large Свойства или атрибуты строки больше 16 КБ
too_long Значение длиннее допустимого
too_many В заказе больше строк или товаров, чем допустимо

Строки с кодом empty_profile считаются принятыми: это пометка, а не отказ.

Коды: отказ при записи

Те же коды, что у методов API: Объекты, События и заказы, Данные о пользователях, Ошибки и лимиты.

Код Что означает
conflict Возраст и год рождения переданы вместе
forbidden_host Адрес ведёт во внутреннюю сеть
inactive_type Тип события выключен
invalid_datetime Неверная дата
invalid_property_type Фильтруемое свойство другого типа
invalid_scheme Недопустимая схема адреса
invalid_type Значение другого типа
invalid_url Неверный адрес
invalid_user Неверный идентификатор пользователя
media_not_allowed У текстового объекта медиа не передаются
media_required Нет медиа нужного вида
no_user Пользователь не определён: нужен user_id или anonymous_id
order_managed Событие покупки заказа, переданного методом заказов
pii_not_allowed Персональные данные не принимаются
text_required У текстового объекта нужен заголовок, описание или текст
too_deep Слишком глубокая вложенность
too_old Старше 730 дней
unknown_field Неизвестное поле
unknown_item Объекта нет в каталоге проекта
unknown_type Тип события не найден в проекте

Предупреждения проверки

Не мешают запуску, но стоит прочитать.

Код Что означает
all_checked_rows_failed Все проверенные строки отклонены: запуск — только с подтверждением
analysis_queue_estimate Будет поставлено в анализ объектов
check_partial Проверена только часть строк: результат проверки ограничен по объёму или времени
encoding_mixed В файле есть строки в разных кодировках
formula_without_value У формул нет сохранённого значения: ячейки считаются пустыми
impressions_present Строки показов не загружаются файлом
no_occurred_at Колонка даты не сопоставлена: строки будут записаны временем загрузки
order_id_converted Номера заказов не из латиницы и цифр переведены в ключи заказов
order_id_repeats_by_year Один номер документа встречается в разных годах: отметьте «Номера документов повторяются по годам»
order_partial_in_check Заказ продолжается за проверенными строками и проверен частично
rows_estimate_over_limit В файле больше строк, чем разрешено загрузить за раз
too_old_share Строки старше 730 дней будут отклонены
undelete_count Будет восстановлено удалённых объектов

Итог импорта

Код Что означает
expired Импорт не завершился за 8 дней после загрузки
files_deleted Файлы импорта удалены
import_running В проекте уже идёт импорт: дождитесь окончания или отмените его
import_started Сопоставление запущенного импорта не меняется
invalid_state Действие недоступно в текущем состоянии импорта
job_failed Задание импорта завершилось с ошибкой
reader_failed Разбор файла несколько раз завершился сбоем
superseded Заменён новой загрузкой
too_many_checks Слишком много проверок файла подряд: повторите через минуту

Паузы

Импорт уступает дорогу выдаче и анализу и на время встаёт на паузу; причина видна на странице импорта.

Код Что означает
analysis_queue Пауза: очередь анализа проекта переполнена
api_latency Пауза: высокая нагрузка на выдачу
db_slow Пауза: база данных отвечает медленно

Повторная загрузка, сбой, отмена

  • Повторная загрузка не удваивает данные: объекты узнаются по идентификатору, заказы — по ключу заказа и товару, события — по идентификатору или хешу строки, профили заменяют переданные поля.
  • Строки пишутся пачками по 500 строк или 8 МБ данных — что раньше. Если импорт прервался — сбой, перезапуск службы, отмена, — записанное остаётся, а «Продолжить» на странице импорта дочитывает файл с последней подтверждённой строки.
  • «Продолжить» использует сохранённое сопоставление. Оно не меняется после первой записанной строки: иначе часть файла пришла бы по одним колонкам, а часть — по другим. Нужны другие колонки — загрузите файл заново.
  • Отмена останавливает импорт на ближайшей пачке. Уже записанные строки остаются: отката событий и заказов нет.

Хранение

  • Файл и отчёт удаляются через 7 дней после загрузки. «Продолжить» срок не продлевает.
  • Исходный файл удаляется сразу после успешного импорта; отчёт живёт до конца срока.
  • После удаления файлов история загрузки остаётся, а «Продолжить» и отчёт — нет.
  • Суммарный объём файлов импорта одного клиента — до 1 ГБ. Когда он исчерпан, новая загрузка не принимается: отмените незапущенные импорты или дождитесь удаления старых файлов.
  • Если на сервере мало свободного места, загрузка временно отклоняется с просьбой повторить позже — импорт не занимает место, нужное базе данных.