snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 3s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,242 @@
---
title: Импорт контактов через CSV
description: Полное пошаговое руководство по импорту людей/контактов в Twenty.
---
## Обзор
Это руководство проведет вас через процесс импорта ваших контактов (People) в Twenty.
## Перед началом
### Контрольный список предварительных требований
<Check>
Ваш файл в формате CSV, XLSX или XLS
</Check>
<Check>
В файле менее 10 000 записей
</Check>
<Check>
В вашем файле нет повторяющихся адресов электронной почты
</Check>
<Check>
**Компании импортированы первыми** (если вы связываете Людей с Компаниями)
</Check>
<Check>
Все пользовательские поля созданы в **Настройки → Модель данных**
</Check>
<Warning>
**Импортируйте Компании перед импортом Людей**
Если вы хотите связать Людей с Компаниями, сначала импортируйте Компании. Компания должна существовать до того, как вы сможете на неё сослаться.
</Warning>
## Шаг 1: Подготовьте данные контактов
### Обязательные и рекомендуемые поля
| Поле | Обязательно? | Формат | Заметки |
| ------------------------- | ------------- | ------------------ | ----------------------------------- |
| **Электронная почта** | Рекомендуется | `name@domain.com` | Должен быть уникальным |
| **Имя** | Рекомендуется | Текст | |
| **Фамилия** | Рекомендуется | Текст | |
| **Компания** | Необязательно | Домен или ID | Связывает с существующей Компанией |
| **Телефон** | Необязательно | Несколько столбцов | См. ниже |
| **Должность** | Необязательно | Текст | |
| **Пользовательские поля** | Необязательно | Различается | Должны существовать в модели данных |
### Формат электронной почты
* Должен быть корректный формат электронной почты: `name@domain.com`
* **Должен быть уникальным** — без дубликатов в вашем файле или в Twenty
* Для дополнительных адресов используйте столбец **Emails / Additional Emails**:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### Формат телефона
Телефон — это **вложенное поле**, требующее нескольких столбцов:
| Столбец | Пример |
| --------------------------------------- | ------------ |
| **Phones / Primary Phone Number** | `4159095555` |
| **Phones / Primary Phone Country Code** | `US` |
| **Phones / Primary Phone Calling Code** | `+1` |
### Связывание с компаниями
Добавьте столбец с уникальным идентификатором компании:
| Название столбца | Формат | Пример |
| ---------------- | ---------- | -------------------------------------- |
| `companyDomain` | Формат URL | `https://acme.com` |
| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
<Note>
**Используйте формат URL домена** (`https://acme.com`), а не метку. Это соответствует тому, как Компании хранятся в Twenty.
</Note>
### Пример структуры CSV
```csv
firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
```
<Note>
**Совет профессионала:** Нажмите **Download sample file** во время импорта или экспортируйте несколько существующих Людей, чтобы увидеть точные названия столбцов, которые ожидает Twenty.
</Note>
## Шаг 2: Откройте функцию импорта
**Вариант 1: Из представления Люди**
1. Перейдите к разделу **Люди** в левой боковой панели
2. Нажмите значок **⋮** в правом верхнем углу
3. Выберите **Импорт записей**
**Вариант 2: Через командное меню**
1. Нажмите `Cmd + K` (Mac) или `Ctrl + K` (Windows)
2. Введите "import"
3. Выберите **Импорт записей**
4. Выберите **Люди**
## Шаг 3: Загрузите свой файл
1. Нажмите **Выбрать файл**
2. Выберите свой файл CSV, XLSX или XLS
3. Подождите, пока Twenty проанализирует ваш файл
## Шаг 4: Сопоставьте ваши столбцы
Twenty автоматически пытается сопоставить ваши столбцы с полями. Проверьте и при необходимости скорректируйте:
1. **Проверьте автоматические сопоставления** — убедитесь, что они верны
2. **Исправьте неверные сопоставления** — нажмите на раскрывающийся список, чтобы выбрать нужное поле
3. **Пропустите столбцы** — выберите **Do not map** для столбцов, которые вы не хотите импортировать
### Важные правила сопоставления
| Тип столбца | Сопоставить с | Заметки |
| --------------------------------------- | ------------------------------ | --------------------------------- |
| Ссылка на Компанию | Поле связи **Компания** | Используйте домен ИЛИ id, не оба |
| Электронная почта | **Электронная почта** | Основной адрес электронной почты |
| Дополнительные адреса электронной почты | **Emails / Additional Emails** | Формат массива |
| Телефон | Отдельные столбцы | Номер, код страны, телефонный код |
<img src="/images/user-guide/import-export-data/match-columns.png" style={{width:'100%'}} />
### Сопоставление связи с Компанией
При сопоставлении столбца компании:
1. Найдите столбец ссылки на компанию (например, `companyDomain`)
2. Сопоставьте его с полем связи **Компания**
3. Twenty свяжет каждого человека с соответствующей Компанией
<Warning>
**Сопоставляйте только ОДИН уникальный идентификатор для связей.**
Не сопоставляйте одновременно `companyId` И `companyDomain`. Выберите один — предпочтительно домен, так как он понятен человеку.
</Warning>
## Шаг 5: Сопоставление значений полей Select
Если у вас есть поля Select или Multi-Select (например, Lead Source):
1. Twenty показывает ваши значения рядом с существующими вариантами
2. Сопоставьте каждое значение в вашем файле с вариантом Twenty
3. Или при необходимости создайте новые варианты
<Note>
Для вариантов Select используются **имена API**, а не отображаемые метки. Перейдите в **Настройки → Модель данных** → включите **Расширенный режим**, чтобы увидеть имена API.
</Note>
## Шаг 6: Проверьте и исправьте ошибки
Перед завершением импорта Twenty проверяет ваши данные:
1. Нажмите **Следующие шаги**
2. Строки с ошибками выделены **желтым**
3. **Исправляйте ошибки напрямую** — нажмите на ячейку и отредактируйте значение
4. **Удалите проблемные строки** — нажмите X, чтобы пропустить эту строку
### Распространенные ошибки импорта контактов
| Ошибка | Причина | Решение |
| ------------------------------------------------ | ----------------------------------------------------------- | -------------------------------------------------- |
| **Дублирующийся адрес электронной почты** | Адрес электронной почты уже существует в Twenty или в файле | Удалите дубликат или обновите существующую запись |
| **Недопустимый формат адреса электронной почты** | Неверный формат адреса электронной почты | Исправьте на `name@domain.com` |
| **Связь не найдена** | Компания не существует | Сначала импортируйте Компании или исправьте ссылку |
| **Отсутствует обязательное поле** | Обязательное поле пусто | Заполните значение или удалите строку |
## Шаг 7: Завершите импорт
1. Просмотрите сводку импорта
2. Нажмите **Подтвердить**, чтобы импортировать
3. Дождитесь завершения импорта
4. Проверьте, открыв несколько записей и их ссылки на Компанию
## После импорта контактов
Ваши контакты теперь в Twenty! Следующие шаги:
1. **Проверьте связи с Компанией** — откройте несколько записей Людей, чтобы убедиться, что они связаны с нужной Компанией
2. **Импортируйте Сделки** — при необходимости свяжите их с Людьми и Компаниями
3. **Настройте синхронизацию электронной почты** — подключите свой почтовый ящик, чтобы видеть историю писем в записях контактов
## Обновление существующих контактов
Чтобы обновлять контакты вместо создания новых:
1. Добавьте в файл столбец `email` или `id`
2. Twenty сопоставляет записи по этому уникальному идентификатору
3. Существующие контакты обновляются; новые создаются
См. [Как обновить существующие записи](/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import) для подробностей.
## Часто задаваемые вопросы
<AccordionGroup>
<Accordion title="Почему у двух Людей не может быть один и тот же адрес электронной почты?">
Адрес электронной почты — уникальный идентификатор в Twenty. Это предотвращает дубли контактов и обеспечивает корректную привязку писем к нужному контакту при синхронизации электронной почты.
</Accordion>
<Accordion title="Что делать, если у некоторых Людей нет адреса электронной почты?">
Вы можете оставить поле email пустым. Однако мы рекомендуем по возможности добавлять адреса электронной почты для лучшего качества данных и корректной работы синхронизации электронной почты.
</Accordion>
<Accordion title="Как связать Людей с Компаниями при импорте?">
Добавьте столбец с доменом Компании (например, `https://acme.com`) или ID. При сопоставлении свяжите этот столбец с полем связи с Компанией.
</Accordion>
<Accordion title="Что, если Компания еще не существует?">
Сначала импортируйте Компании, затем импортируйте Людей. Компания должна существовать до того, как вы сможете на нее сослаться.
</Accordion>
<Accordion title="Можно ли импортировать ID из предыдущей CRM?">
Да! Создайте настраиваемое поле с пометкой "уникальное" в вашей модели данных для хранения внешнего ID. Примечание: имя поля `id` зарезервировано для внутреннего ID Twenty.
</Accordion>
<Accordion title="Как исправить ошибки 'relation not found'?">
Компания, на которую вы ссылаетесь, не существует. Либо сначала импортируйте Компанию, либо проверьте, что домен/ID в точности совпадает с существующей Компанией.
</Accordion>
</AccordionGroup>
## Устранение неполадок
Возникли проблемы? Проверьте:
* [Как исправить ошибки импорта](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)
* [Как импортировать связи](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
* [Справочник по сопоставлению полей](/l/ru/user-guide/data-migration/capabilities/field-mapping)