Почему ваш отчёт Salebot → amoCRM врёт: 6 ловушек в данных, которые съедают доверие руководителя
Разбор без магии — какие ошибки в данных ломают отчёт и как их отловить до того, как цифры увидит руководитель.
Коротко
- Ручная сверка чат-бота и CRM занимала около часа в день, теперь — несколько минут.
- В данных нашлось шесть ловушек: перезапись дат, «вечные» метки, сотрудники, дубли эфиров, теги вместо сделок, пустое поле продукта.
- Сверка идёт по уровням надёжности: Telegram ID, затем телефон и email, затем имя и время.
- Главная польза — не скорость, а цифры, которым верит руководитель и с которыми не спорят продажи
Каждое утро у меня начиналось одинаково. Выгрузка клиентов из Salebot, выгрузка сделок из amoCRM, две таблицы рядом и вопрос руководителя: сколько вчера было обращений, сколько дошло до сделок и что с ними сейчас.
На бумаге это пять минут. На практике — около часа: сверить людей по двум системам, отсеять мусор, понять, почему в CRM 41 сделка, а реальных продуктовых ноль. Пять часов в неделю на то, чтобы просто узнать, что произошло вчера.
В этой статье — как я перевёл этот отчёт на автоматическую сборку и, главное, какие ловушки в данных пришлось найти по дороге. Если у вас заявки идут через чат-бота в CRM, почти все они есть и у вас
Где теряются заявки между ботом и CRM
Схема типичная. Человек пишет в чат-бота в Telegram или Max. Бот собирает контакт, вешает теги интереса и в какой-то момент ставит метку «Контакт передан в АМО». В amoCRM создаётся сделка, её подхватывает менеджер.
В этой цепочке три точки, где отчёт начинает врать:
- Обращение есть, передачи нет. Человек написал, но до передачи в CRM не дошёл. Это нормальная воронка, но её надо видеть.
- Передача есть, сделки нет. Бот отметил передачу, а сделки в CRM не нашлось. Это и есть потерянный лид — или ложная тревога, о чём ниже.
- Сделка есть, но она не про продукт. Регистрации на эфир, дубли, тесты, пропущенные звонки без имени. В CRM это выглядит как поток лидов, а продажам работать не с чем.
Ручной отчёт обычно видит только количество. Чтобы увидеть эти три разрыва, нужно сопоставить каждого человека в боте с его сделкой в CRM. Вот здесь и начинаются сюрпризы.
Шесть ловушек, на которые я наступил
- Дата последнего контакта перезаписывается
В выгрузке Salebot есть поле «Дата последнего контакта». Кажется логичным резать по нему срез за день. Но поле обновляется при каждом новом сообщении: если человек написал во вторник и снова в четверг, во вторнике его уже нет.
Вывод: срез за день делается по свежей выгрузке в тот же или на следующий день. Восстановить прошлую неделю задним числом нельзя — максимум новых клиентов по «Дате первого контакта». Строки, посчитанные вовремя, я больше не переписываю: они точнее. - Метка «передан в CRM» остаётся навсегда
Клиента передали в CRM месяц назад, сегодня он вернулся в бота с вопросом. Метка на нём висит, и в дневной цифре он считается как новая передача. Лид учитывается дважды, конверсия плывёт.
Решение: считать передачей дня только метки, появившиеся в этот день. Возвраты — отдельно. - Сотрудники выглядят как потерянные лиды
Коллеги тестируют бота, проходят воронку, получают метку передачи. Их сделки в CRM потом удаляют. В отчёте это превращается в «передан, сделки нет» — то есть в потерю, которой не было.
Решение: список сотрудников, которых скрипт исключает из статистики всегда. Мелочь, но без неё каждую неделю приходилось объяснять руководителю, почему «потеряли» лида, который сидит в соседнем кабинете. - Эфирный бот плодит дубли
В дни вебинаров бот регистрации создаёт по две сделки на человека с разницей в одну-две секунды, плюс пустые сделки без контакта. В один такой день в CRM было 41 сделка, из них 37 эфирных, уникальных людей среди них — около 21. Продуктовых — ноль.
Если не отделять шум, цифра «сделок в CRM» в эфирные дни вырастает втрое, и динамику по неделям сравнивать невозможно. Теперь в отчёте всегда две цифры: «37 сделок, уникальных ~21», а уникальность считается по Telegram ID. - Тег в боте — это интерес, а не сделка
Бот вешает продуктовые теги по тому, что человек нажал или прочитал. Соблазнительно считать по ним спрос. Но тег — это интерес, сделкой он становится только в CRM. В продуктовые колонки отчёта идут только сделки по полю интереса в CRM.
При этом разрыв сам по себе — ценный вывод. «7 меток интереса к направлению в боте против 0 сделок» — это сигнал, что люди интересуются, а до менеджера не доходят. - Менеджеры не проставляют тег продукта
Сделка заведена, менеджер с клиентом работает, а поле продукта пустое. В отчёте по направлениям её нет. Я не выбрасываю такие сделки: беру Telegram ID из CRM, нахожу человека в боте и смотрю его теги. Если там явный продуктовый интерес — сделка уходит в список «уточнить» с пометкой источника.
Важно: если тег в боте расходится с тем, что вписал менеджер, ничего не перезаписывается. Расхождение помечается для проверки — менеджер знает клиента лучше.
Как устроен отчёт сейчас
От логики на бумаге к Python-скрипту за вечер
Сразу оговорюсь: я не программист, и разработчика у меня не было. Сначала я просто описал правила обычным текстом — что считаем, что выкидываем, как отличить дубль от нового лида. Это и есть главная работа, и её можно сделать в любой таблице.
Дальше этот текст стал инструкцией для ИИ-ассистента. По описанию он написал небольшие Python-скрипты для арифметики, а я проверял результат на реальных выгрузках и дописывал правила каждый раз, когда находил новую ловушку. Код с нуля я не писал ни строчки — я писал логику.
Теперь утром я загружаю две выгрузки и получаю готовый результат. Цикл из четырёх шагов:
- Срез бота за день. Скрипт считает обращения, разбивку по мессенджерам, новых клиентов и новые передачи в CRM, отделяет возвраты и исключает сотрудников.
- Разбор CRM. Сделки по воронкам и стадиям, отдельно продуктовые, отдельно шум. Дубли схлопываются по Telegram ID. Формат выгрузки amoCRM бывает с английскими и с русскими заголовками — скрипт понимает оба.
- Сверка бота и CRM. Каждый переданный лид ищется в сделках.
- Итог. Короткий пост для руководителя в Telegram и строка в сводной таблице.
Сверка в третьем шаге идёт по уровням надёжности, и это главное, чему я научился:
- Подтверждено по ID — Telegram ID в сделке совпал с ID в боте. Это факт.
- Вероятное совпадение — совпали имя и время: передача и сделка в один день, сделка позже. Так и пишется в отчёте, с предложением уточнить у менеджера.
- Сделки нет — только после проверки, что это не сотрудник, сделка не создана в другой день и не закрыта сразу как дубль. Только тогда это потеря.
Как именно ищется совпадение
В комментариях к таким статьям всегда спрашивают: а если в CRM телефон +7916…, а в боте 8916…? Именно поэтому сравнивать «как есть» нельзя. Перед сверкой каждый идентификатор приводится к одному виду:
- Telegram ID — самый надёжный ключ. Нюанс: в выгрузках он часто читается как дробное число (468970848.0), хвост приходится отрезать, иначе совпадений не будет вовсе.
- Телефон — из номера убирается всё, кроме цифр, а российские номера с ведущей 8 переводятся на 7. Без этого 89161234567 и +7 916 123-45-67 считаются разными людьми.
- Email — в нижний регистр, без пробелов. Значения без @ отбрасываются: в полях попадаются заглушки вроде «нет».
- Имя и время — последний уровень, только как «вероятное совпадение», никогда как факт.
Ещё один момент: телефон и email в amoCRM лежат не в одном поле, а в нескольких — рабочий, мобильный, личный, плюс кастомные поля интеграций. Скрипт собирает их все, а совпадение хотя бы по одному значит, что человек в базе есть. А заголовки выгрузки amoCRM бывают то на русском, то на английском, поэтому столбцы ищутся по смыслу, а не по точному имени.
Про персональные данные: для сверки мы используем Telegram ID как технический ключ. Сами выгрузки хранятся на корпоративном портале. По 152-ФЗ Telegram ID в связке с ФИО и телефоном является персональными данными, поэтому доступ к итоговой таблице строго ограничен
Отдельно помечаются сделки, которые менеджер завёл вручную без связи с ботом. Это рабочий сценарий, но автоматически такие не сверить.
Ещё одна деталь, которая окупилась: в сводной таблице у каждой неочевидной цифры есть примечание с раскладкой. Например: «41 сделка = 37 эфирных (уникальных ~21) + …». Через месяц никто не вспомнит, почему в колонке «сделок» стоит 41, а продуктовых ноль.
Что это дало
Отчёт, который занимал около часа, теперь собирается за несколько минут. Но экономия времени оказалась не главным.
Главное — изменилось качество цифр. Руководитель видит не «41 сделка», а «0 продуктовых, остальное — эфир». Видит, сколько людей интересуется направлением в боте и не доходит до менеджера. Видит конкретных переданных лидов без сделки — и можно спросить с ответственного, а не гадать.
Три вывода, которые подойдут любой связке бота и CRM:
- Считайте людей, а не записи. Дубли и эфирный шум съедают сравнимость сильнее, чем кажется.
- Отделяйте интерес от сделки. Тег в боте и сделка в CRM — разные события, и разрыв между ними — самая полезная цифра.
- Не выдавайте вероятное за факт. Сверка с уровнями надёжности спасает от ложных «потерь» и неловких разговоров.
Вопрос к вам. У меня связка Salebot + amoCRM. Если у вас другая — BotHelp и Битрикс24, Senler и RetailCRM, напишите в комментариях, где у вас главная боль со сверкой. Самые частые случаи разберу в следующей статье. А готовые шаблоны, куски кода и идеи для маркетологов я выкладываю в своем Telegram-канале.