Назад к списку кейсов

TouchLink

Хаб приёма и доставки лидов: собирает заявки из рекламных источников, нормализует их и раздаёт в CRM и аналитику. Более 50 активных клиентов.

Введение:

Заказчик — разработчик CRM для застройщиков. У клиентов компании стоял отдельный сервис: забирал заявки из рекламных кабинетов Facebook и складывал их в CRM. Вёл его подрядчик со стороны — известная на рынке студия.

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

Когда встал вопрос, что делать с этими клиентами, я взял три дня на первую версию.

Дальше — интерфейс той самой первой версии, которая принимает заявки до сих пор. Названия компаний, имена и телефоны на снимках скрыты: данные компаний и заявок не показываются.

Сводка первой версии TouchLink: счётчики заявок и таблица подключённых компаний
Сводка: счётчики заявок и таблица подключённых компаний — по строке на каждую.

Ход работы:

Первая версия не похожа на то, что работает сейчас. Я взял самые простые методы, проверенные временем — по сути вручную настраиваемый алгоритм. Плоский PHP, никакой сборки, клиент заводится директорией на диске. Создал папку — получил адрес для вебхука.

Звучит грубо. Зато клиент подключается за минуту, а не через миграцию базы.

Карточка подключения клиента в первой версии TouchLink: название, slug, источник, адрес установки CRM и действие
Карточка подключения: источник, выбор установки CRM и действие. Slug — это имя директории на диске, поменять его после создания нельзя.
Экран мониторинга TouchLink: прогресс очереди, счётчики состояний и три фоновые задачи с логами
Мониторинг: очередь и три фоновые задачи с логами — разбор очереди, повторные попытки и синхронизация форм.
Настройка UTM-меток, тегов и передачи данных в сквозную аналитику
Разметка кампаний: UTM-метки, теги и передача данных в сквозную аналитику.

Первые месяцы проект выглядел закрытой админкой для команды внедрения и сопровождения. У клиента не было ничего, кроме оповещений в Telegram. Так и задумывалось: сначала надо было, чтобы заявки просто ходили.

Попутно закрылись дыры, которые прежний подрядчик не трогал годами. Сквозная разметка кампаний, теги, передача причин отказа обратно в рекламу, выбор установки CRM по стране — у компании их пять.

Пожар потушили. Дальше сервис несколько месяцев превращался в то, что стоит в бою сегодня — простой движок, раскачанный на максималках.

Рабочий стол TouchLink в тёмной теме: счётчики лидов за сегодня, топ источников и список последних заявок
Рабочий стол: лиды за период, дубли, ошибки и топ источников.

Заявка любой формы. Рекламные формы у всех разные: поля называются так, как придумал маркетолог. Если имя и телефон лежат в понятных полях, заявка идёт напрямую. Если нет — её разбирает языковая модель.

Модель работает на моём сервере. Это принципиально: в заявке лежат имя и телефон живого человека, и такие данные не должны покидать контур. Никаких облачных сервисов в этой цепочке нет — заявка от рекламного кабинета до CRM не показывается никому третьему.

Если и модель не справилась, работает третья ступень — разбор регулярками по сырым данным.

Журнал лидов TouchLink: таблица заявок с источником, формой, получателем и статусом доставки
Журнал лидов: источник, форма, получатель и статус доставки по каждой заявке.
Монитор доставки лидов TouchLink в светлой теме: фильтры по периоду, источнику, назначению и статусу
Монитор доставки: фильтры по периоду, источнику, назначению и статусу.

Доставка без потерь. Заявку принимает вебхук и кладёт в очередь, разбирает крон раз в минуту. Если CRM не ответила, заявка не теряется: повторные попытки идут с нарастающим интервалом — 15 минут, полчаса, час, три часа, восемь. Отдельно есть догрузка: если авария случилась раньше, чем починка, пропущенные заявки доезжают задним числом.

Дублей я боялся больше всего. Позвонить человеку дважды хуже, чем не позвонить. На каждой заявке стоит отметка о доставке — повторная попытка её видит и проходит мимо.

Рабочий стол TouchLink в светлой теме: лиды за сегодня, дубли, ошибки и заявки в обработке
Тот же рабочий стол в светлой теме и на русском языке.

данные на 2 сентября 2026

57

подключённых компаний

77

рекламных страниц

3 423 формы сбора заявок

~1 950

заявок в сутки

около 78 000 в месяц

100%

доставка без потерь

успешных за последнюю неделю наблюдения


Результат:

Сервис работает седьмой месяц. Пятьдесят семь компаний, семьдесят семь рекламных страниц, три с половиной тысячи форм.

Через него прошло больше 459 000 заявок. В сутки около двух тысяч. За последнюю неделю наблюдения не потерялась ни одна.

Сейчас запущена вторая версия: автооплата, личные кабинеты с настройками, централизованное управление.


Стек:

Backend — Laravel, PostgreSQL, очереди на Redis. Frontend — Vue и TypeScript. Разворачивается в Docker.