Разработка AI-системы холодных звонков с квалификацией лида

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
Разработка AI-системы холодных звонков с квалификацией лида
Сложный
~2-4 недели
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1360
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    957
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929

Разработка AI-системы холодных звонков с квалификацией лида

Отдел продаж тратит 80% времени на обзвон «холодных» номеров, из которых только 5% превращаются в сделки. Ручная квалификация — десятки часов на сортировку базы, усталость операторов и потеря лидов. Каждый менеджер тратит до 20 часов в неделю на скрининг, а 60% контактов — заведомо неперспективные. Мы автоматизировали этот процесс: AI-система совершает до 2000 звонков в день, оценивает каждый диалог по BANT-критериям и передаёт менеджеру только горячих лидов. Методология BANT (Budget, Authority, Need, Timeline) разработана в IBM и описана в книге «Solution Selling» (см. Wikipedia). Экономия на квалификации одного лида достигает 70% — стоимость квалификации значительно ниже ручного труда. При потоке 2000 звонков в месяц экономия бюджета составляет до 2 млн рублей в год.

Над решением работала команда MLOps-инженеров с опытом в NLP и голосовых интерфейсах. Система использует OpenAI GPT-4o-mini для понимания контекста, LangChain для сценариев и pgvector для векторной памяти. Опыт внедрения — 30+ проектов в B2B-секторе, от телекома до финтеха. Получите консультацию — мы подберём архитектуру под ваш объём звонков.

Проблемы, которые решаем

  • Low contact rate: ручной обзвон даёт 15–25% дозвонов, AI стабильно 25–35%.
  • Высокая стоимость лида: операторы тратят 15–30 минут на неперспективный контакт, AI — 2–5 минут.
  • Неоднородная квалификация: разные менеджеры оценивают по-разному, BANT-баллы стандартизируют процесс.
  • Потеря контекста: при передаче «тёплого» лида забываются детали разговора — AI генерирует полную выжимку.

Как работает динамическая квалификация по BANT

BANT (Budget, Authority, Need, Timeline) — классический фреймворк квалификации, стандартизированный в enterprise-продажах. Система на лету извлекает из диалога баллы по каждому измерению. Если ответов не хватает, AI задаёт уточняющие вопросы. Результат — структурированный JSON с весом каждого аспекта и флагом is_qualified.

@dataclass
class BANTScore:
    budget: int = 0      # 0-3: нет/возможно/да/высокий
    authority: int = 0   # 0-2: рядовой сотрудник/влияет/ЛПР
    need: int = 0        # 0-3: нет потребности/есть интерес/активный поиск/срочно
    timeline: int = 0    # 0-3: >12 мес/6-12 мес/1-6 мес/<1 мес

    @property
    def total(self) -> int:
        return self.budget + self.authority + self.need + self.timeline

    @property
    def is_qualified(self) -> bool:
        return self.total >= 6 and self.authority >= 1 and self.need >= 1


class BANTQualifier:
    QUALIFICATION_QUESTIONS = {
        "need": [
            "Вы сейчас используете [решение] для [задача]?",
            "Какие основные сложности возникают с текущим решением?"
        ],
        "authority": [
            "Кто принимает финальное решение о [закупке] в вашей компании?",
            "Вы участвуете в выборе поставщиков?"
        ],
        "budget": [
            "Есть ли у вас выделенный бюджет на данное решение?",
            "В каком ценовом диапазоне вы рассматриваете решения?"
        ],
        "timeline": [
            "В какие сроки вы планируете принять решение?",
            "Есть ли у вас дедлайны по внедрению?"
        ]
    }

    async def qualify_live(
        self,
        dialog_context: dict
    ) -> BANTScore:
        """Извлекаем BANT из диалога"""
        full_dialog = format_dialog(dialog_context["history"])

        response = await client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[
                {
                    "role": "system",
                    "content": """Оцени квалификацию лида по BANT.
                Budget (0-3): 0=нет, 1=неизвестно, 2=есть, 3=большой
                Authority (0-2): 0=не ЛПР, 1=влияет, 2=ЛПР
                Need (0-3): 0=нет, 1=слабый, 2=есть, 3=срочно
                Timeline (0-3): 0=>12мес, 1=6-12мес, 2=1-6мес, 3=<1мес
                JSON: {budget, authority, need, timeline, reasoning}"""
                },
                {"role": "user", "content": full_dialog}
            ],
            response_format={"type": "json_object"}
        )

        data = json.loads(response.choices[0].message.content)
        return BANTScore(**{k: data[k] for k in ["budget", "authority", "need", "timeline"]})

Адаптивная стратегия вопросов эффективнее фиксированного скрипта

Фиксированный скрипт часто упускает критичные данные — например, если лид скрывает бюджет. Адаптивная стратегия динамически подсвечивает «слабые» измерения BANT и задаёт вопросы именно по ним. Это повышает точность квалификации на 15–20% по сравнению с линейным опросником.

class AdaptiveQuestionStrategy:
    def __init__(self, qualifier: BANTQualifier):
        self.qualifier = qualifier
        self.asked_dimensions = set()

    async def get_next_question(self, bant: BANTScore) -> str | None:
        """Задаём вопросы по наиболее слабым измерениям BANT"""
        priority_order = [
            ("need", bant.need, 2),           # нужда важнее всего
            ("authority", bant.authority, 1),
            ("timeline", bant.timeline, 2),
            ("budget", bant.budget, 2)
        ]

        for dimension, current_score, threshold in priority_order:
            if current_score < threshold and dimension not in self.asked_dimensions:
                self.asked_dimensions.add(dimension)
                questions = self.qualifier.QUALIFICATION_QUESTIONS[dimension]
                return questions[0]  # или случайный из списка

        return None  # все измерения достаточно квалифицированы

Передача квалифицированного лида

Отметим: когда BANT-балл достигает порога (total >= 6, authority >= 1, need >= 1), AI-система переводит разговор на менеджера с полным контекстом: сгенерированным саммари, баллами по каждому измерению и рекомендацией следующего шага.

async def transfer_qualified_lead(
    call: ActiveCall,
    lead_data: dict,
    bant: BANTScore
) -> None:
    """Передаём горячий лид менеджеру с контекстом"""
    summary = await generate_lead_summary(lead_data, bant)

    # Уведомляем менеджера
    await crm.create_lead({
        **lead_data,
        "bant_score": bant.total,
        "qualification_summary": summary,
        "hot": bant.is_qualified,
        "source": "ai_cold_call"
    })

    # Соединяем с доступным менеджером
    await call.say(
        "Отлично! Соединяю вас с нашим специалистом, который ответит на все детальные вопросы."
    )
    available_agent = await get_available_sales_agent()
    await call.transfer(available_agent.extension)

Как интегрировать AI-систему с CRM за 4 шага

  1. Аудит скриптов и CJM. Разбираем текущие сценарии, выделяем ключевые точки квалификации.
  2. Проектирование диалогового графа. Строим дерево разговора с BANT-ветками и адаптивными переходами.
  3. Настройка интеграции. Реализуем вебхуки или API для создания лидов в вашей CRM (Bitrix24, amoCRM, Salesforce).
  4. Тестовый прогон. Проводим 500+ тестовых звонков, корректируем модель по метрикам.

Весь цикл занимает 4–6 недель до MVP. Закажите пилот — мы проведём квалификацию на вашей базе за 2 недели.

Сравнение AI-квалификации и ручного обзвона

Параметр AI-система Ручной обзвон
Contact rate 25–35% 15–25%
Qualified lead rate 8–15% 3–8%
Cost per qualified lead -70% база
Время на одного лида 2–5 минут 15–30 минут
Точность квалификации 85% 60–70%

AI-квалификация в 3 раза быстрее ручного труда и на 20% точнее. При потоке 2000 звонков в месяц экономия бюджета составляет до 2 млн рублей в год. Для стабильной точности 85% требуется регулярное дообучение на новых диалогах — мы включаем это в SLA.

Типовые ошибки при внедрении AI-обзвона

Ошибка Последствие Решение
Неадаптированная TTS Отторжение у клиентов Подбор голоса под ЦА
Плохой VAD (Voice Activity Detection) Обрывы диалога Настройка thresholds
Отсутствие fallback на оператора Потеря лида Внедрение эскалации
Игнорирование отраслевой лексики Неверная квалификация Доработка словаря
Дорожная карта проекта
  1. Неделя 1–2: Аудит скриптов и дизайн диалогового графа.
  2. Неделя 3–4: Разработка BANT-квалификатора и интеграция TTS/STT.
  3. Неделя 5–6: Интеграция с CRM и тестирование на 500+ звонках.
  4. Неделя 7–8: Оптимизация latency и дообучение модели.

Что входит в разработку под ключ

  • Аудит текущих скриптов и CJM
  • Проектирование диалогового графа с BANT-фреймворком
  • Выбор и интеграция TTS/STT моделей под отраслевую лексику
  • Разработка пайплайна квалификации (LangChain + OpenAI)
  • Настройка интеграции с вашей CRM (вебхуки, API)
  • Развёртывание на сервере или в облаке (Kubernetes, vLLM)
  • Документация, обучение операторов, 3 месяца поддержки

Сроки: MVP квалификатора — 4–6 недель. Полная система с интеграцией — 2–3 месяца. Стоимость рассчитывается индивидуально под объём звонков и сложность интеграции.

Опыт нашей команды — более 5 лет на рынке AI-решений, сертифицированные специалисты по OpenAI, PyTorch, MLOps. Гарантируем стабильную работу с uptime 99.5%.

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

Распознавание и синтез речи: ASR, TTS, клонирование голоса

Заказчик приходит с задачей: транскрибировать 40 000 часов колл-центра за неделю. Штатный облачный ASR (Google Speech-to-Text) выдаёт WER 28% на отраслевой лексике и стоит ощутимо дорого при таких объёмах. Задача — снизить WER ниже 10% и перейти на self-hosted инференс.

Типовые проблемы, с которыми приходят

WER не сходится к нужной метрике. Чаще всего виновата не архитектура, а данные: шумные аудио без нормализации уровня (-23 LUFS вместо стандарта), смешанные языки в одном канале, акцент, специфическая доменная лексика. Whisper large-v3 из коробки даёт WER 8–12% на чистом русском и проваливается до 25–35% на записях с PSTN-артефактами и узкополосным кодеком G.711.

Диаризация ломается при больше двух спикеров. pyannote/speaker-diarization-3.1 работает стабильно при 2–3 говорящих, но DER (Diarization Error Rate) растёт с 6% до 18–22% при 5+ участниках конференции. Проблема усугубляется перекрёстными репликами: по умолчанию min_duration_on=0.1 срезает короткие вставки.

Клонирование голоса — латентность или качество. XTTS v2 (Coqui) даёт натуральный голос, но при потоковой генерации stream_chunk_size=20 первый аудиочанк прилетает через 1.4–2.0 с — неприемлемо для интерактивных сценариев. StyleTTS2 и Kokoro быстрее, но требуют точной подготовки референсного аудио.

Как это решается на практике

Базовый стек для production-пайплайна:

  • ASR: openai/whisper-large-v3 или faster-whisper (CTranslate2-бэкенд, x4 скорость vs оригинал)
  • Диаризация: pyannote.audio 3.x + интеграция через whisperx для выравнивания по словам
  • TTS: XTTS v2 для качества, Edge-TTS или Silero для низкой латентности
  • Клонирование: XTTS v2 (3–6 с референсного аудио) или OpenVoice v2

Типичный пайплайн для колл-центра выглядит так: аудио из очереди Kafka → нормализация ffmpeg -af loudnorm до -23 LUFS → faster-whisper с beam_size=5, vad_filter=Truepyannote диаризация → постпроцессинг (пунктуация через deepmultilingualpunctuation) → запись в PostgreSQL с временными метками.

Кейс из практики. Финтех-компания с 12 000 звонков/день. Исходный WER на русском с банковской лексикой — 22% (Google STT). После fine-tuning whisper-medium на 200 часах размеченных записей через Hugging Face transformers + Seq2SeqTrainer с learning_rate=1e-5, warmup_steps=500 — WER упал до 7.3%. Инференс на одной A10G через faster-whisper с compute_type=float16 обрабатывает 40-минутный звонок за 55 секунд. Итоговая стоимость инференса — $0.0008/мин против $0.016/мин у облачного провайдера.

Дообучение Whisper на доменных данных

Когда общая модель не справляется, fine-tuning — первый инструмент. Минимальный датасет для заметного улучшения — 20–30 часов размеченного аудио в целевом домене. Разметку можно получить через итеративный процесс: прогнать через базовую модель → вручную исправить 10–15% ошибок → переобучить → повторить.

training_args = Seq2SeqTrainingArguments(
    per_device_train_batch_size=16,
    gradient_accumulation_steps=2,
    learning_rate=1e-5,
    warmup_steps=500,
    max_steps=5000,
    fp16=True,
    predict_with_generate=True,
    generation_max_length=225,
)

Важно: при fine-tuning Whisper нужно замораживать encoder первые 1000 шагов (model.freeze_encoder()), иначе акустические признаки разъедутся раньше, чем decoder адаптируется к новой лексике.

Синтез речи: выбор под задачу

Модель Латентность (TTFB) Натуральность MOS Клонирование Языки
XTTS v2 1.2–2.0 с 4.1–4.3 Да, 3 с референса 17
StyleTTS2 0.3–0.6 с 4.0–4.2 Да, требует адаптации en, + fine-tune
Kokoro-82M 0.08–0.15 с 3.7–3.9 Нет en, ja
Silero TTS 0.05–0.1 с 3.4–3.6 Нет ru, en, de, и др.
Edge-TTS ~0.4 с (cloud) 4.0 Нет 100+

Для интерактивных ботов с требованием TTFB < 300 мс — Silero или Kokoro. Для озвучки контента, где важна натуральность — XTTS v2 с потоковой отдачей через WebSocket.

Процесс работы

Начинаем с аудит-сессии: берём 2–4 часа ваших записей, прогоняем через несколько моделей, замеряем WER/CER, смотрим на распределение ошибок по типам (лексические, акустические, язык). Это занимает 1–2 дня и сразу показывает, нужен ли fine-tuning или достаточно пост-обработки.

Далее — выбор архитектуры под ваш throughput: один GPU для 1000 мин/день или кластер с балансировщиком для 100 000+ мин/день. Деплой через Docker-контейнер с FastAPI или Triton Inference Server для батчированного инференса.

Сроки зависят от сложности: базовая интеграция готовой модели — 1–2 недели. Fine-tuning с подготовкой данных и валидацией — 4–8 недель. Полная разработка голосового пайплайна (ASR + диаризация + TTS + мониторинг) — 2–4 месяца.