Из-за ограничений мессенджеров в России многим приходится возвращаться к SMS-рассылкам. При этом в привычной воронке можно убрать целый этап: номер получателя уже есть в базе, поэтому незачем ждать, пока юзер повторно оставит его в форме на сайте.

Каждому номеру можно назначить персональную ссылку, чтобы по переходу определять, кто заинтересовался предложением, и передавать данные в CRM. Юзер продолжит изучать страницу, а его интерес уже будет зафиксирован. Даже если он закроет сайт, не заполнив заявку, лид не потеряется.

Обычная рассылка ведёт юзера через всю воронку:

SMS → сайт → форма → ввод телефона → CRM

С персональной ссылкой форма для получения номера больше не нужна:

SMS → проверка перехода → данные в CRM
                       ↘ страница предложения

Для такой схемы достаточно внутреннего микросервиса, который создаёт ссылки, хранит их связь с номерами и обрабатывает переходы. В SMS получатель видит короткий адрес:

https://{domain}/Ab7k

За кодом Ab7k стоит запись на сервере с телефоном, кампанией и адресом целевой страницы:

{
  "code": "Ab7k",
  "url": "https://example.com/offer",
  "meta": {
    "phone": "+7XXXXXXXXXX",
    "campaign": "september_offer",
    "handler": "crm"
  }
}

Телефон в URL не передаётся. При подготовке рассылки сервис нормализует номера, удаляет дубликаты и создаёт для каждого получателя свою ссылку. Ниже упрощённый пример; названия функций обозначают соответствующие операции:

foreach ($phones as $phone) {
    $link = createShortLink([
        'phone' => $phone,
        'campaign' => $campaign,
        'target' => $target
    ]);

    createSms($phone, $message . ' ' . $link);
}

Здесь createSms() готовит запись для загрузки в сервис рассылки. Сам микросервис SMS не отправляет: он готовит персональные ссылки, а затем обрабатывает запросы по ним.

На первый взгляд обработчик перехода помещается в три строки: найти номер по коду, создать лид и перенаправить юзера на сайт.

$record = findByCode($code);
createLead($record['meta']['phone']);
redirect($record['url']);

Но такой код будет создавать лиды и без участия получателя. Сокращатель может открыть адрес для проверки ещё при создании ссылки, антивирус загружает страницу, чтобы проверить её содержимое. Приложения сообщений на iOS и Android тоже могут обращаться к ссылкам для загрузки превью.

На сервер приходит HTTP-запрос, хотя юзер ничего не нажимал. Если создавать лид по каждому такому запросу, в CRM попадут ложные обращения. Поэтому готовую персональную ссылку нельзя бездумно пропускать через сторонний сокращатель, а первый запрос нельзя считать лидом.

Проверка начинается с User-Agent. Часть автоматических клиентов можно отсеять по характерным строкам:

$suspiciousPatterns = [
    'AndroidDownloadManager',
    'iPhonePreview',
    'bot',
    'crawler',
    'spider',
    'curl',
    'Wget',
    'python-requests'
];

Если User-Agent попадает под фильтр и проверочной cookie нет, сервер отвечает кодом 403 и не передаёт данные в CRM. Остальные клиенты без cookie получают промежуточную страницу с JavaScript:

document.cookie = "real_visitor=1; path=/; max-age=3600";

setTimeout(function () {
    window.location.reload();
}, 100);

Браузер сохраняет cookie и повторно запрашивает тот же адрес. Загрузчик превью, который не выполняет JavaScript, останавливается на первом запросе. Юзер видит короткую загрузку перед открытием целевой страницы.

Это не гарантирует, что ссылку открыл юзер: бот с полноценным браузером тоже умеет выполнять JavaScript и сохранять cookie. Но проверка отсекает часть технических загрузок, которые иначе попали бы в CRM как лиды. Первые запросы остаются в журнале отдельно от событий, переданных в CRM.

После проверки сервис берёт данные из записи ссылки и формирует лид:

$lead = [
    'phone' => $record['meta']['phone'],
    'source' => 'sms',
    'campaign' => $record['meta']['campaign'],
    'target' => $record['url']
];

Браузер получает редирект на целевую страницу, а отправка webhook продолжается отдельно, поэтому юзеру не приходится ждать ответа CRM. Нужна и защита от дублей: повторные клики одного контакта в одной кампании не должны создавать новые лиды. С пересылкой ссылки другой нюанс: даже если её откроет кто-то ещё, она останется связана с первоначальным получателем.

Переход показывает интерес к предложению, но сам по себе не означает, что получатель ждёт звонка. Рост конверсии до десяти раз здесь относится к зафиксированным лидам, а не к продажам. Из воронки исчезает форма, на которой раньше терялась часть конверсий. Дальше результат зависит от предложения и работы с лидами. Задача сервиса здесь простая: передать данные и не заполнить CRM автоматическими запросами.

Комментарии (0)