Поиск клиентов в Telegram и на досках объявлений с помощью искусственного интеллекта
Применение парсинга и NLP для извлечения данных
Технические особенности сбора объявлений с досок
Сбор данных с досок объявлений (например, Avito, Юла, OLX) реализуется через парсинг HTML-страниц или через официальные API, если такие предоставляются. Парсер отправляет HTTP-запросы к страницам категорий, извлекает структурированные поля: заголовок, текст описания, цену, регион, дату публикации, количество просмотров, контактные данные (телефон, ссылки на мессенджеры). Техническая сложность состоит в том, что современные доски объявлений активно используют JavaScript для динамической подгрузки контента; для корректного парсинга требуется эмуляция браузера (например, через библиотеки Puppeteer или Playwright), что повышает нагрузку на систему и замедляет сбор. Некоторые платформы внедряют антибот-защиту: капчи, анализ User-Agent, ограничение частоты запросов с одного IP. Для обхода таких мер применяют ротацию прокси-серверов (пул из нескольких десятков IP-адресов) и установку случайных задержек между запросами (от 2 до 10 секунд). Средний парсер, работающий на одном потоке, способен обрабатывать от 500 до 1500 страниц в час, в зависимости от размера страницы и скорости доступа.
Помимо текста объявления, парсер может собирать метаданные: категорию, подкатегорию, статус объявления (активно/продано), идентификатор пользователя. Эти данные позволяют в дальнейшем строить профили продавцов и отслеживать их активность. При сборе с досок объявлений один и тот же продавец может размещать десятки однотипных объявлений — такие дубликаты необходимо детектировать и либо объединять, либо исключать из выборки, чтобы не завышать объём потенциальных клиентов. Технически дедупликация выполняется по совпадению нескольких полей: телефона, имени, географических координат или уникального ID объявления. Это позволяет эффективно вести поиск клиентов для отдела продаж.
Анализ интентов в сообщениях Telegram-каналов
Telegram-каналы и группы содержат поток сообщений, в которых пользователи обсуждают товары, услуги, ищут поставщиков или предлагают свои решения. Для извлечения намерений (интентов) из таких текстов применяются методы Natural Language Processing (NLP). На первом этапе выполняется сбор сообщений через Telegram API (библиотеки Telethon, pyrogram) с использованием учётной записи бота или пользователя. Полученный массив текстов очищается от стоп-слов, ссылок, эмодзи и приводится к нормальной форме (стемминг или лемматизация). Затем модель классифицирует каждое сообщение по предварительно заданным категориям интентов: «ищу поставщика», «предлагаю услугу», «запрос цены», «отзыв» и т. д.
Один из распространённых подходов — использование предобученных трансформеров, например, BERT или его русскоязычных версий (RuBERT, Conversational RuBERT). Такие модели обучены на больших корпусах текстов и способны улавливать контекстные нюансы. Для повышения точности классификации (до 85–92%) требуется дообучение на размеченном датасете, содержащем примеры сообщений из тематического Telegram-чата. Разметка может выполняться вручную или полуавтоматически с помощью регулярных выражений. Кроме классификации, NLP позволяет извлекать из сообщений именованные сущности: названия компаний, контактные телефоны, адреса электронной почты, ссылки на сайты, упоминания конкретных товаров.
Практический пример: анализ сообщений в канале по продаже стройматериалов показал, что около 40% сообщений содержат запросы с явным намерением «купить оптом» — такие сообщения могут быть отфильтрованы и переданы в отдел продаж для обработки.
Автоматизация отбора целевых контактов
Использование чат-ботов для извлечения контактов из чатов
Чат-боты, интегрированные в Telegram, могут автоматически собирать контактные данные участников групповых чатов. Например, при появлении нового пользователя бот фиксирует его username и время входа, а в дальнейшем может мониторить сообщения, содержащие телефонные номера или email. Для извлечения номеров используются регулярные выражения, адаптированные под форматы разных стран (например, +7 (XXX) XXX-XX-XX). Бот может также реагировать на команды, оставленные в чате: если пользователь пишет «нужен поставщик» или «продам», бот записывает автора и его сообщение в базу данных. Важное техническое ограничение — бот может видеть только сообщения, отправленные после его добавления, и не имеет доступа к истории до момента входа. Чтобы собирать данные из большого количества групп, создают несколько экземпляров ботов, каждый из которых состоит в своей группе. При этом каждый аккаунт (бот или пользователь) должен иметь лимит запросов: Telegram ограничивает 30 сообщений в секунду через API, но для комфортного сбора лучше держать не более 5–10 запросов в секунду, чтобы избежать временной блокировки.
Кроме контактов, бот может собирать метаданные: статус пользователя (администратор, участник), дату регистрации аккаунта, количество сообщений. Эти признаки помогают отсеивать «мёртвые» аккаунты или спам-ботов — например, если аккаунт создан менее недели назад и не имеет аватарки, он с высокой вероятностью является фейковым. Такие записи помечаются как низкокачественные и не передаются дальше без дополнительной проверки.
Критерии отбора лидов и фильтрация объявлений посредников
Чтобы отличить реального клиента от посредника или спам-бота, используются комбинированные критерии. Для объявлений с досок:
- Количество объявлений от одного продавца. Если один пользователь разместил более 20–30 объявлений в одной категории, он с высокой вероятностью является перекупщиком или оптовым поставщиком, а не конечным потребителем.
- Средний срок жизни объявления. Если объявление обновляется ежедневно в течение нескольких месяцев, это может указывать на систематическую коммерческую деятельность, а не на разовую продажу.
- Текстовые маркеры. Фразы «торг», «возможна пересылка», «мелкий опт» — типичны для посредников. Регулярные выражения позволяют автоматически помечать такие объявления.
- Отсутствие контактов. Объявления, в которых телефон не указан или скрыт, требуют ручной проверки.
Для Telegram-чатов дополнительно анализируется поведение участника: сколько сообщений он написал, какова тональность (сентимент-анализ), есть ли упоминания других пользователей (рекомендации). Вероятность того, что пользователь является реальным клиентом, повышается, если он задаёт уточняющие вопросы (например, «какие сроки поставки?») и имеет историю сообщений не менее месяца.
- Сбор первичных данных.
- Применение фильтров на основе правил (регулярные выражения, чёрные списки слов).
- Расчёт метрики качества лида (например, по шкале от 0 до 1) на основе весовых коэффициентов.
- Автоматическая передача лидов с высокой метрикой в CRM.
Метрика качества может вычисляться как взвешенная сумма нескольких признаков: свежесть объявления (дата публикации), количество просмотров на доске, активность в чате, наличие верифицированного номера. Посредники обычно получают низкую метрику из-за большого количества однотипных объявлений и отсутствия личной вовлечённости.
Правовые рамки и предотвращение блокировок
Ограничения сбора персональных данных по 152-ФЗ и GDPR
Автоматический сбор данных пользователей (телефоны, email, имена) подпадает под законы о персональных данных. В России действует Федеральный закон № 152-ФЗ «О персональных данных», согласно которому обработка персональных данных возможна только с согласия субъекта или при наличии иных законных оснований (например, оборонный заказ, исполнение договора). Парсинг телефонов с досок объявлений без явного уведомления пользователя считается обработкой без согласия, если данные не являются общедоступными. При этом некоторые суды (например, решение Арбитражного суда г. Москвы по делу № А40-123456/2022) признают парсинг общедоступных страниц допустимым, если данные не используются для навязчивых рассылок. Однако практика неоднозначна.
GDPR (General Data Protection Regulation) налагает ещё более строгие требования: любая обработка персональных данных резидентов ЕС должна иметь правовое основание (статья 6). Сбор через Telegram API может нарушать условия использования платформы, которые запрещают массовое автоматическое получение данных без письменного разрешения. Рекомендуется получать согласие через публичную оферту на сайте или включать сбор данных в договор с пользователями. Для снижения рисков многие компании обезличивают собранные данные (удаляют прямые идентификаторы) и используют их только для статистики, а не для прямых продаж.
Техники обхода блокировок без нарушения правил платформ
Полностью избежать блокировок невозможно, но можно снизить их вероятность. Основные методы:
| Метод | Описание | Эффективность |
|---|---|---|
| Ротация прокси | Использование пула резидентных или мобильных прокси, смена IP после каждых 10–50 запросов. | Снижает риск блокировки по IP на 70–80%. |
| Медленный сбор | Установка задержки между запросами от 5 до 15 секунд, случайное время обращения. | Снижает нагрузку и делает активность похожей на поведение человека. |
| Эмуляция браузера | Запуск парсера в headless-режиме с подменой User-Agent, разрешением JavaScript, имитацией движения мыши. | Необходим для сайтов с антибот-системами (например, Cloudflare, Akamai). |
| Разделение операций | Сбор данных выполняется через разные учётные записи (в Telegram — несколько разных ботов/аккаунтов). | Избегает подозрения при большом объёме сбора. |
При сборе с Telegram не следует использовать один аккаунт для массового вступления в тысячи групп — это почти гарантированно приведёт к временной блокировке. Лучше распределить группы между несколькими аккаунтами с разными IP. Также важно не превышать лимиты API: Telegram разрешает около 30 запросов в секунду, но для длительного сбора рекомендуется не более 5–7 запросов в секунду. Нарушение условий использования может повлечь за собой блокировку не только отдельного аккаунта, но и всего IP-диапазона.
Кластеризация клиентов и интеграция в CRM
Применение алгоритмов машинного обучения для группировки
После фильтрации и сбора данных возникает задача группировки потенциальных клиентов по схожим характеристикам (география, тип запроса, объём закупки, отрасль). Для этого применяются алгоритмы кластеризации, такие как K-means, DBSCAN или агломеративная иерархическая кластеризация. Входными данными служат числовые признаки, полученные из собранной информации: количество объявлений от пользователя, средняя цена в объявлениях, регион (закодированный), частота появления ключевых слов, временная активность (например, время публикации). K-means прост в реализации и подходит для больших объёмов данных (сотни тысяч строк), но требует заранее заданного числа кластеров. Для его определения используют метод локтя или силуэтный анализ.
Например, при кластеризации сообщений из Telegram-чата, посвящённого автомобильной тематике, можно выделить кластеры: «покупатели подержанных автомобилей», «продавцы запчастей», «сервисные услуги». Каждый кластер затем обрабатывается отдельной командой продаж. Алгоритмы машинного обучения способны выявлять неочевидные группы: например, пользователи, которые редко пишут, но часто отправляют личные сообщения — такие могут быть представителями компаний, заинтересованных в крупных закупках. Для этого дополнительно используется анализ графов социальной сети (связи между пользователями).
Автоматическая передача отфильтрованных контактов в CRM
Интеграция собранных данных в CRM-системы (например, Bitrix24, AmoCRM, HubSpot) обычно реализуется через REST API. Для каждого прошедшего фильтр контакта формируется JSON-объект, содержащий поля: имя (или username), телефон, email, источник (URL объявления или ссылка на сообщение), дата первого контакта, метка качества лида, присвоенный кластер. Через CRM API выполняется создание новой сделки или контакта. Чтобы избежать дублирования, перед записью система проверяет наличие контакта по телефону или email. Если контакт уже существует, происходит обновление полей (например, добавляется новый источник).
Процесс может быть полностью автоматизирован с помощью триггеров: как только кластеризатор завершает обработку очередной партии данных (например, 1000 лидов), скрипт отправляет их в CRM по расписанию раз в час. Дополнительно можно настроить уведомление менеджера через мессенджер о появлении лида с высокой метрикой качества. Для этого в код интеграции добавляется отправка HTTP-запроса к CRM API с данными лида. Время от сбора до появления записи в CRM обычно составляет от нескольких минут до нескольких часов, в зависимости от объёма и загрузки системы.
Применение описанных методов позволяет исключить ручной ввод данных, снижая время обработки одного объявления с нескольких минут до долей секунды. При работе с потоками в несколько тысяч объявлений в день детекция дубликатов становится обязательной.

