> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hubtalk.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Отчёт по загрузке номеров

> Что вернулось по каждой строке файла и построчные коды замечаний.

# Отчёт по загрузке номеров

| Метод и путь                                                   | Что отдаёт                                                                                                                                                                                       |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `GET /v1/imports/{import_id}`                                  | сводку по загрузке (тот же объект, что `import` в ответе на создание) плюс живую/зафиксированную `dnc_screen`                                                                                    |
| `GET /v1/imports/{import_id}/report?format=csv`                | отчёт по строкам: `csv` (по умолчанию) или `xlsx` (иное — `422 report_format_invalid`); имя файла `import-<id>-report.<ext>`                                                                     |
| `GET /v1/imports/{import_id}/report?only=dnc_match&format=csv` | только точные совпадения с реестром; имя файла `import-<id>-dnc.<ext>`. Любое другое значение `only` — `422 report_filter_invalid`; загрузка без записанной проекции — `409 dnc_screen_required` |

Загрузки видны только через кампании вашей организации (иначе `404 import_not_found`).

### Объект сводки по загрузке

| Поле                                                              | Тип     | Что означает                                                                                                                                                                                                                                                                                                 |
| ----------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `import_id`                                                       | string  |                                                                                                                                                                                                                                                                                                              |
| `status`                                                          | string  | `accepted` \| `refused`.                                                                                                                                                                                                                                                                                     |
| `rows_seen`, `accepted`, `warned`, `rejected`, `duplicates_found` | integer | Счётчики строк. У отклонённой партии добавляемых звонков `rejected`/`warned` считаются из замечаний.                                                                                                                                                                                                         |
| `dnc_matched`                                                     | integer | `matched_rows` сверки (`0`, когда она недоступна).                                                                                                                                                                                                                                                           |
| `refusal_code`                                                    | string  | `""` у принятой загрузки; иначе одно из `unreadable_file`, `no_rows`, `no_phone_column`, `ambiguous_phone_column`, `too_many_rows`, `no_usable_rows`, `missing_required_column`, `calls_rejected`, `calls_dnc_matched` (файловые коды вроде `unsupported_format`, `file_too_large` на `/v1` не встречаются). |
| `issues`                                                          | object  | **С ключами по коду замечания**: `{"<код>": {"severity": "error"\|"warning", "count": n, "rows": [номера строк, первые 10]}}`. Пустой объект, когда замечаний нет.                                                                                                                                           |
| `dnc_screen`, `dnc_matches`                                       |         | См. [Поля кампании](/ru/v4/web-api/campaign-fields).                                                                                                                                                                                                                                                         |

<Warning>
  `issues` в сводке — **объект с ключами по коду**, а не массив. Массив (элементы `{"row_number", "code", "severity"}`, первые 50) приходит только внутри `error.import` на отклонённой партии.
</Warning>

### Построчные коды замечаний

Колонка `code` в отчёте и ключи `issues`:

| Код                                                                                                                | Серьёзность | Что означает                                                                       |
| ------------------------------------------------------------------------------------------------------------------ | ----------- | ---------------------------------------------------------------------------------- |
| `phone_unreadable`                                                                                                 | error       | Нет читаемого телефона (меньше десяти цифр).                                       |
| `row_empty`                                                                                                        | error       | Пустая строка.                                                                     |
| `duplicate_row`                                                                                                    | error       | Дубль номера при `duplicate_action: "reject"`.                                     |
| `duplicate_ignored`                                                                                                | warning     | Дубль пропущен или заменён (`keep_first` / `keep_last`).                           |
| `timezone_invalid`                                                                                                 | warning     | Неизвестное значение `timezone` (используется зона кампании).                      |
| `timezone_required`                                                                                                | error       | Только партия `calls`: нет `timezone` в кампании с зоной контакта под профилем kz. |
| `group_role_invalid`, `group_key_missing`, `group_key_too_long`                                                    | error       | Колонки договорных групп несогласованы.                                            |
| `variable_name_collision`                                                                                          | warning     | Две колонки отображаются в одну переменную.                                        |
| `dnc_match`                                                                                                        | warning     | Номер есть в реестре «не звонить».                                                 |
| `state_mismatch`, `state_invalid`, `zip_invalid`, `city_mismatch`, `timezone_override`, `state_only`, `multi_zone` | warning     | Пакет рынка США: флаги разрешения локации.                                         |
| `unresolvable_location`, `non_callable_geography`                                                                  | error       | Пакет рынка США: строку набрать нельзя.                                            |

### Файл отчёта

Колонки отчёта: `row_number`, `severity`, `code`, `supplied`, `duplicate_of_row` (`supplied` — JSON-объект с присланными значениями). Колонки с текстом сообщения **нет**: машиночитаемый контракт отчёта — это `code`, а превращать его в человеческий текст — задача потребителя.

Итоговый блок в конце файла (`import_summary`) подписан именами полей — `filename, format, encoding, phone_column, rows_seen, accepted, warned, rejected, duplicates_found, status` плюс `refusal` с кодом отказа у отклонённой загрузки; для источников `planned_calls` и `calls` поля `filename` и `encoding` пусты, а `format` равен `json`. У отчёта `dnc_match` колонки `row_number, phone, contact_name, phone_key, dnc_entry_id, source, reason, recorded_at` и блок `dnc_screen_summary` (`checked_rows, unscreened_rows, matched_rows, suppressed_contacts`).

Два соглашения общего механизма загрузок действуют на всех путях одинаково — и для файла в кабинете, и для `planned_calls` при создании кампании, и для добавляемой партии `calls`:

* **нумерация строк считает заголовок первой строкой**, поэтому первый planned call — это `row_number` 2, а N-й — N+1: и в `issues`, и в `error.import`, и в файле отчёта;
* **CSV — это UTF-8 с BOM и переводами строк CRLF** (чтобы Excel корректно открывал кириллицу): декодируйте как `utf-8-sig`, иначе первая ячейка заголовка прочитается как `﻿row_number`.

Итоговые строки вместо числового `row_number` несут имена полей и строками данных не являются.
