Как считать заявки из WhatsApp и Telegram
Обращение из мессенджера считается почти так же, как звонок: у каждого сообщения есть отправитель, канал и время, а телефон отправителя привязывает переписку к человеку в базе. Разница одна, и она ломает весь учёт: у звонка есть начало и конец, а переписка не заканчивается никогда. Тред в WhatsApp - это не разговор, а вся история отношений с человеком, иногда на год и тысячу с лишним сообщений.
Поэтому минимальный рабочий набор по каждому обращению выглядит так: телефон, канал, время первой реплики клиента, время первого живого ответа и итог. Из этих пяти полей собирается всё остальное - количество обращений по каналам, время первого ответа, список тех, кто написал и не дождался. Считать заявки из мессенджеров без времени ответа бессмысленно: главные деньги теряются не там, где плохо ответили, а там, где не ответили вовсе.
Почему заявки из мессенджеров не попадают в отчёты
Первая причина техническая. Тексты сообщений идут не через CRM, а через сервис, который владеет подключением к WhatsApp или Telegram. CRM видит факт разговора и часто только входящие реплики, а ответы администратора лежат у владельца канала под своим ключом. Если данные брать из одного места, половина диалога просто не существует.
Вторая причина в единице учёта. В CRM сделка нередко заводится в момент записи, а не в момент обращения: человек написал, спросил цену, ушёл - следа не осталось, потому что сделку заводить было не на что. Отчёт в итоге показывает записи, а не обращения, и мессенджеры в нём выглядят маленькими.
Третья причина арифметическая. Один человек пишет в WhatsApp, потом звонит, потом дублирует вопрос в Telegram, а номер компании общий для нескольких мессенджеров - и при наивном счёте получается три обращения вместо одного. Конверсия в запись после такого занижена в разы, и бюджет уезжает в канал, где учёт настроен лучше, а не туда, где на самом деле клиенты.
Что связывается автоматически: телефон, канал и тред
Ключей ровно три, и первый из них - телефон. Номер приводится к единому виду: десятизначный считается российским и получает +7, номер с кодом страны проходит как есть. Важнее того, что матчер склеивает, то, что он обязан отбрасывать: строка короче десяти цифр - это не номер, и превращать её в подобие телефона нельзя. Два разных мусорных значения однажды совпадут и сольют двух человек в одного - ошибка тихая и правдоподобная, худший её вид.
Второй ключ - канал. Его определяют по техническому признаку источника, который приходит вместе с сообщением: в нём видно whatsapp, telegram, instagram и так далее. Незнакомый признак честнее пометить как не определённый, чем обрезать до первого куска: обрезок выглядит как настоящее название канала и молча засоряет отчёт строкой, которой не существует.
Третий ключ - тред, то есть идентификатор переписки с конкретным человеком. Он нужен, чтобы собрать реплики в одну ленту, но за обращение его принимать нельзя - об этом ниже. И отдельное правило поверх всех трёх: звонок и переписка с одним человеком в один день считаются одним обращением, а не двумя. Человек обратился один раз, просто разными способами.
Почему после подключения мессенджера нет старой переписки
Когда мессенджер подключают к аналитике, история приезжает не вся. Из CRM её не достать вовсе: доступ к чатам там выдаётся только той интеграции, которая сама зарегистрирована как канал, со своим идентификатором и подписью запросов. Чужой канал читать нельзя в принципе, а вебхук CRM работает только вперёд, с момента включения, и приносит одни входящие.
Часть истории отдаёт владелец канала: поток листается страницами назад, и глубина зависит от того, сколько страниц вы готовы прочитать. Поэтому у каждого канала есть своя граница загруженной истории, и знать её обязательно. Условия доступа у CRM и у сервисов-владельцев меняются, так что при подключении глубину истории стоит выяснять заново, а не полагаться на прошлогоднюю статью.
Из этого следуют три рабочих правила. Первое: полными считаются только периоды после подключения, и сравнивать месяц подключения с предыдущим нельзя. Второе: переписку старше загруженной истории нельзя помечать как оставшуюся без ответа - ответ мог быть, мы его просто не выгрузили, и молчание в данных не равно молчанию администратора. Третье: если по клиенту в этом канале за всю историю нет ни одной вашей реплики, диалог лучше не судить вовсе.
Здесь же решается вопрос, что вообще считать разговором. Бесконечный тред режут на отдельные разговоры по паузе между сообщениями, и порог выбирают не на глаз, а по гистограмме пауз - метод описан в работе Halfaker et al. «User Session Identification Based on Strong Regularities in Inter-activity Time» (arxiv.org/abs/1411.2878). На наших данных распределение пауз оказалось двугорбым: живой разговор с интервалами в секунды и возвращение на следующий день, а провал между горбами пришёлся примерно на четыре часа.
Четыре часа - не универсальная константа, а настройка проекта. У стоматологии и у автосервиса ритм переписки разный, поэтому порог считают по своим паузам, а не переносят из чужой статьи. Тридцать минут - это про синхронные каналы вроде чата на сайте, а сутки склеили бы вчерашний разговор с сегодняшним.
Что считать ответом клиенту, а что автоответом
Автоответ - не ответ. Строка «Благодарим! Ваша запись подтверждена» приходит от робота и человеку не отвечает, поэтому служебные врезки и рассылки надо отделять от живых реплик на уровне данных, а не глазами в конце месяца. Иначе работа автоматики засчитывается администратору, и отчёт показывает идеальную скорость реакции при полном молчании людей.
Ответом честно считать три вещи:
- исходящее сообщение клиенту в том же или соседнем канале, написанное человеком;
- звонок, в котором был разговор - то есть с длительностью больше нуля;
- две и более попытки дозвона: обращение взяли в работу, просто человек не берёт трубку.
Одна попытка дозвона ответом не считается. Именно так выглядит потерянная заявка: набрали один раз в пустоту, поставили галочку и забыли. И наоборот, ругать администратора за то, что клиент не берёт трубку после двух звонков, - способ быстро получить приписки вместо работы.
Как мерить время первого ответа и сколько на самом деле ждут клиенты
Первое, что портит эту метрику, - астрономические часы. Заявка, оставленная в 04:55, к семи утра «ждёт два часа», хотя никто ещё не открылся. Считать надо только время внутри рабочего окна: если приём идёт с 9 до 21, ожидание такой заявки начинается с девяти утра, а часы здесь для примера - окно у каждого своё. Второе - среднее значение: один диалог, до которого добрались через неделю, утягивает среднее так, что оно перестаёт описывать хоть что-нибудь.
Порядок расчёта по шагам, на условных числах (это пример, а не результат клиента):
- Возьмите первые входящие сообщения новых разговоров за месяц: пусть 200.
- Выбросьте те, что старше загруженной истории канала: остаётся, скажем, 180.
- Для каждого найдите первый живой ответ - без автоответов и рассылок.
- Посчитайте разницу в рабочих минутах: 12 разговоров остались без ответа вовсе, у остальных 168 время есть.
- Постройте распределение: до 15 минут - 96 разговоров, от 15 минут до часа - 42, позже часа - 30.
- Медиана по 168 разговорам - 22 минуты, среднее из-за хвоста - около трёх часов. Публикуйте медиану и долю ответов до 15 минут (96 ÷ 168 = 57 %), среднее не публикуйте вовсе.
Дальше цифры переводятся в деньги тем же способом, что и пропущенные звонки. Двенадцать оставшихся без ответа при условной стоимости обращения 800 ₽ - это 9 600 ₽ уже потраченного бюджета, а при условной конверсии обращения в запись 40 % - примерно пять несостоявшихся записей. Список из двенадцати человек обзванивается за один заход, и в этом вся разница между метрикой и действием.
Отдельно стоит отличать две ситуации. Одна реплика клиента без ответа - обычно вежливое «спасибо, всё хорошо» в конце разговора, отвечать там не на что. Несколько реплик подряд без ответа - человек спрашивал и не дождался; такие строки и есть рабочий список на утро.
Instagram Direct в учёте обращений
Instagram Direct в учёте обращений ведёт себя не так, как остальные каналы, и об этом стоит знать до того, как по нему примут решение о бюджете. Переписка в нём - обычный канал с телефоном и текстами, если она приходит через CRM. Но источник клиента по Instagram часто держится не на машинном сигнале, а на галочке «откуда вы о нас узнали», которую ставит администратор на ресепшене.
Это значит, что два канала в одной таблице измерены разными приборами: один термометром, другой опросом. Опрос системно смещён в пользу узнаваемого бренда - человек называет то, что запомнил, а не последний клик. Сравнивать такие строки в лоб нельзя, и лечится перекос не отчётом, а размеченной ссылкой в шапке профиля: как только по ней пойдут переходы, у канала появится собственный машинный след.
Что делать с перепиской, которую не удалось связать с клиентом
Часть диалогов останется без клиента всегда, и причин обычно три. В переписке нет телефона и нет совпадения с базой. CRM отдаёт факт разговора, а текстов сообщений в нём нет - привязывать не по чему. Человек написал, спросил и никогда не записался, поэтому карточки клиента у него нет: это вопрос модели учёта, а не сбой.
Главное правило здесь звучит неудобно, но экономит месяцы разбирательств: выдуманная привязка хуже её отсутствия. Не нашли человека по телефону - оставьте переписку как есть, отдельной строкой, и покажите её в списке. Такие диалоги не попадают в разрезы по клиентам и в расчёт источников, и это честнее, чем приписать обращение случайному однофамильцу.
Полезно завести долю таких переписок как отдельный показатель здоровья данных. Растёт - значит сломалась привязка или провайдер перестал отдавать тексты; держится на месте - значит это постоянный фон, с которым живут. И ещё один фильтр, без которого список бесполезен: сотрудники, поставщики и курьеры пишут на тот же общий номер, их карточки заводятся как клиентские. Когда мы в первый раз собирали такой список на одном из проектов, заметная его часть оказалась рабочей перепиской персонала - внутренние номера надо помечать один раз и навсегда.
Что из этого делает VM Analytics
Своего подключения к мессенджерам мы не продаём: тексты приходят из вашей CRM и от сервиса, который владеет каналом. Со стороны переписок система читает WhatsApp, Telegram и Instagram Direct. Рядом в одной картине живут звонки из виртуальной АТС МегаФона и коллтрекинга Гудок, реклама из Яндекс Директа и Метрики, записи из YCLIENTS, сделки из amoCRM, формы Tilda и Яндекс Бизнес.
В кабинете переписка выглядит так: список диалогов с каналом и оценкой, а по клику - сам разговор обеими сторонами, как в мессенджере. Видно паузы и то, на чём разговор оборвался. Оценка переписки считается по своему чек-листу, а не по звонковому: там важна скорость ответа, а не приветствие голосом.
Отдельный блок собирает тех, кто написал последним и до сих пор не получил ответа: канал, сколько сообщений подряд написал человек и сколько часов он ждёт. Сейчас порог ожидания - час, свежие сообщения в список не попадают. Вкладка «Переписки», оценка и этот блок входят в подписку «Рост» за 12 900 ₽ в месяц, а данные обновляются несколько раз в день, а не в реальном времени.
Если клиенты пишут вам реже, чем звонят, начинать надо не с этого - сначала звонки и записи. Учёт переписок окупается там, где мессенджеры уже стали основным входом, и где никто в компании не может назвать, сколько человек за прошлый месяц написали и не дождались ответа.
Instagram принадлежит компании Meta Platforms Inc., деятельность которой признана экстремистской и запрещена на территории РФ.
Что почитать дальше
Покажем, что видно снаружи: счётчики, коллтрекинг, онлайн-запись, метки источников. Без доступов и без контактов.
Проверить сайт