Выгрузка в CSV уносит карточки - имя, телефон, этап, бюджет. Переписку, звонки, задачи и структуру воронок строка таблицы не вмещает. Разбираем, что забирает подключение по API, почему приватная заметка менеджера не должна приехать как сообщение клиенту и почему импортированная история не будит AI-сотрудника.
Короткий ответ: через выгрузку CSV историю переписки перенести нельзя, через подключение по API - можно. Дело не в том, что кто-то поленился написать импорт получше. Дело в формате: строка таблицы описывает одну запись, а переписка - это сотни сообщений со своими датами, направлением и авторами. В ячейку они не складываются.
Вопрос возникает почти у всех, кто переезжает, и возникает поздно - когда выгрузка уже сделана, залита, и выясняется, что вся переписка осталась в старой системе. Дальше - что именно уезжает каким способом, и на что смотреть, чтобы история приехала в пригодном виде.
Это наша документация, и мы делаем CRAIM - читайте с поправкой на это. Всё, что здесь сказано про наш импорт, описывает то, как он работает сейчас.
Что на самом деле лежит в выгрузке CSV
Откройте выгрузку amoCRM и посмотрите на заголовки колонок. Обычно это полное имя контакта, мобильный, рабочий и домашний телефоны, рабочая и личная почта, компания, должность, этап сделки, канал трафика, бюджет, город, теги - и несколько колонок с примечаниями.
«Примечание», «Примечание 2», «Примечание 3» - вот на этом месте обычно и возникает недоразумение. Это не переписка. Это несколько текстовых полей, в которые кто-то когда-то что-то вписал. Диалог с клиентом за полтора года туда не поместится, и выгрузка не пытается его туда положить.
- История переписки - нет. Ни входящих, ни исходящих, ни дат.
- История звонков - нет. Ни записей, ни длительности, ни результата.
- Задачи - нет. Ни текста, ни сроков, ни ответственных.
- Структура воронок - нет. Этап приезжает строкой в колонке, а не как этап вашей новой воронки.
Что забирает подключение по API
Подключение работает иначе: это не файл, а доступ к аккаунту, откуда данные забираются по частям и складываются в соответствующие сущности. Из amoCRM забираются контакты, компании, сделки, задачи, воронки с сопоставлением этапов, история звонков и SMS с сообщениями, записанными примечаниями. Чаты мессенджеров не забираются: amoCRM хранит их в отдельном Chats API, и в этот путь они не попадают.
Сопоставление этапов стоит отдельного слова. Этап из старой системы не приезжает текстом в поле - он связывается с этапом вашей новой воронки. Это разница между «в карточке написано слово „Переговоры“» и «сделка стоит на этапе „Переговоры“ и попадает в фильтры, отчёты и процессы».
| Что переносим | Выгрузка CSV | Подключение по API |
|---|---|---|
| Контакты и компании | Да | Да |
| Сделки, суммы, бюджет | Да | Да |
| Этап сделки | Текстом в колонке | Связывается с этапом новой воронки |
| Структура воронок | Нет | Да |
| Задачи | Нет | Да |
| SMS и сообщения, записанные примечаниями | Нет | Да, как история, с направлением |
| Чаты мессенджеров | Нет | Нет: отдельный Chats API, импорт его не читает |
| История звонков | Нет | Да |
| Заметки менеджера | Несколько текстовых полей | Отдельно от переписки |
Приватная заметка - это не сообщение клиенту
Здесь прячется ошибка, которую видно не сразу, а её последствия живут долго.
amoCRM хранит и сообщение клиенту, и внутреннюю заметку менеджера в одной и той же сущности - примечании к сделке или контакту. Различаются они типом. Внутренняя ремарка - это примечание обычного типа, у которого нет признака входящего.
Если импортёр не разбирает типы, а сваливает все примечания в переписку и выводит направление из названия типа, происходит вот что: заметка, которую менеджер написал сам себе, приезжает как исходящее сообщение. То есть как будто компания это клиенту отправила.
Последствия не косметические. На эту историю потом смотрит новый менеджер, который решает, что клиенту уже отвечали. По ней же отвечает AI-сотрудник, если вы его подключите: для него это контекст разговора, и он будет исходить из того, что эти слова клиент видел.
В нашем импорте заметки уходят в свою таблицу и в переписку не попадают. Говорим об этом так подробно, потому что раньше было иначе: примечания обычного типа действительно приезжали в сообщения. Ошибка закрыта, и на обе её половины - что заметки попадают в свою таблицу и что они не попадают в сообщения - написаны тесты, чтобы это не вернулось.
История приезжает как история, а не как пачка новых входящих
Второй вопрос, который задают перед импортом: «я залью пять лет переписки - и что, AI-сотрудник всем этим людям сейчас ответит?»
Нет, и вот почему. Импортированная переписка кладётся в отдельный канал, который создаётся специально под импорт и помечен как архив: он отключён, неактивен и доступен только на чтение. В настройках канала записано, что им управляет импорт.
Из этого следует главное: импорт не порождает событий рантайма. Приехавшее сообщение не считается новым входящим, не будит AI-сотрудника, не запускает процессы и не создаёт автоматизаций. Историю можно читать, в неё нельзя отвечать - отвечают в живом канале, который вы подключаете отдельно.
Это и есть правильное поведение для переезда: вы получаете контекст, а не рассылку.
Повторный прогон не задваивает
Переезд редко получается с первого раза. Что-то не долилось, где-то не хватило прав, часть сделок приехала без контактов.
При импорте сохраняется соответствие между идентификатором записи в старой системе и записью у нас. Поэтому повторный запуск не создаёт вторые копии - он находит то, что уже приехало, и обновляет. Прогонять можно столько раз, сколько нужно, чтобы сойтись.
Чего не будет, и это решение, а не недоделка
Запуск ручной. Расписания нет, вебхуков нет - никто не следит за amoCRM в фоне и не подтягивает изменения каждые пять минут.
Обратно мы не пишем. Совсем. Нет двусторонней синхронизации, нет отправки изменений в старую систему.
И то и другое - следствие одного решения: переезд это разовое событие, а не постоянное состояние. Двусторонняя синхронизация нужна тому, кто собирается жить в двух системах сразу; это отдельная и довольно тяжёлая история, в которой всегда есть запись-победитель и конфликты. Если вы переезжаете - вы переезжаете, и через неделю старая система вам не нужна.
Перенос из Битрикс24 и HubSpot устроен так же однонаправленно, но уже: оттуда забираются контакты, компании, сделки и задачи; переписка, звонки и структура воронок из этих систем не переносятся.
В каком порядке это делать
Порядок не произвольный: каждый следующий шаг опирается на связи, созданные предыдущим. Сделка без контакта приедет сиротой, переписка без сделки не найдёт, к чему прикрепиться.
- Сначала воронки и этапы. До того как поедут сделки, у вас должно быть куда их ставить.
- Компании и контакты. Это основа, на которую ссылается всё остальное.
- Сделки. Проверьте на небольшой порции, что этапы сопоставились так, как вы ожидали.
- Переписка и звонки. Самая долгая часть: объём здесь на порядок больше, чем в карточках.
- Задачи.
- Сверка. Возьмите десяток сделок, которые знаете наизусть, и сравните их со старой системой вручную - это быстрее и надёжнее, чем сверять счётчики.
- Только после сверки подключайте живые каналы и AI-сотрудников.
Когда выгрузки CSV достаточно
Не всегда нужно API. Если переписка с клиентами у вас и так живёт в мессенджере, а в CRM лежат только карточки и этапы - CSV закроет задачу, и возиться с доступами незачем.
Импорт CSV принимает произвольный файл с ручным сопоставлением колонок: вы выбираете, какая колонка чем является, в какую воронку и на какой этап встают сделки. Для выгрузки amoCRM есть готовый набор соответствий под её русские заголовки, так что типовые колонки подставляются сами. Настройку сопоставления можно сохранить профилем и переиспользовать - полезно, когда файл приходится заливать в несколько заходов.
Простое правило: если история переписки нужна - подключение по API. Если нужны только карточки - хватит файла.