Розробка 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%.

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

Розпізнавання та синтез мовлення: перша лінія проблеми

Ми стикаємося із замовником, який має 40 000 годин записів кол-центру й хоче транскрибувати їх за тиждень — це типова задача розпізнавання мови ASR. Штатний хмарний 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 обрізає короткі вставки. Рішення — збільшити min_duration_on до 0.3 та додати overlap detection через pyannote-overlap-detection.

Клонування голосу — латентність чи якість. XTTS v2 (Coqui) дає натуральний голос, але при потоковій генерації stream_chunk_size=20 перший аудіочанк прилітає через 1.4–2.0 с — неприйнятно для інтерактивних сценаріїв. StyleTTS2 та Kokoro швидші, але вимагають точного підготовки референсного аудіо. Ми навчилися вирішувати цю дилему за допомогою гібридного підходу: на старті використовуємо Silero TTS (50–100 мс TTFB), а після отримання перших 3 секунд аудіо перемикаємо на XTTS для кращої натуральності.

Як вибрати ASR-модель під ваші дані?

Модель WER (українська, чистий запис) WER (PSTN, кодек G.711) Швидкість інференсу (фактор real-time) Вартість інференсу (1 год аудіо, A10G)
Whisper large-v3 8–10% 25–35% ~0.1x (55 с на 40 хв) ~$0.50
Whisper medium 12–15% 30–40% ~0.3x ~$0.15
Wav2Vec2 XLSR-53 15–18% 28–35% ~0.8x ~$0.08
Whisper large-v3 + fine-tune 4–7% 10–15% ~0.1x ~$0.50

faster-whisper (CTranslate2) швидший за оригінальний Whisper у 4 рази при однаковому WER. Для продакшену ми завжди використовуємо його.

Практичний приклад: fine-tuning Whisper на доменній лексиці

Фінтех-компанія з 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.50 за годину аудіо, що в 6 разів дешевше за хмарне рішення. Проєкт виконано за 6 тижнів, включаючи підготовку даних і валідацію.

Техніка fine-tuning описана в офіційній документації Whisper на Hugging Face.

Як донавчити 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 обов’язково заморожуйте 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. Ми гарантуємо, що підібрана модель відповідатиме вашим вимогам до латентності та якості — це підтверджено на 50+ реалізованих проєктах.

Наш досвід та гарантії

10+ років досвіду в NLP та speech processing. 50+ успішних проєктів для fintech, telecom, медицини. Сертифіковані моделі (Model Card + bias audit). Ми гарантуємо зниження WER до цільового рівня, інакше повертаємо кошти.

Що входить у роботу з нами?

Клієнт отримує:

  • Документацію: model card, інструкцію з розгортання, API-специфікацію (OpenAPI 3.0)
  • Код: готові скрипти для інференсу, пайплайни обробки (Docker Compose + Kubernetes маніфести за потреби)
  • Доступи: до self-hosted інстансів, графіки моніторингу (Grafana + Prometheus)
  • Навчання: 2 сесії для вашої команди (налаштування, експлуатація, troubleshooting)

Ми також надаємо сертифікат відповідності моделі (Model Card + bias report), що підсилює довіру до рішення.

Процес роботи та терміни

  1. Аудит-сесія – беремо 2–4 години ваших записів, проганяємо через кілька моделей, вимірюємо WER/CER, дивимося на розподіл помилок (лексичні, акустичні, мова). Займає 1–2 дні.
  2. Вибір архітектури – під ваш throughput: один GPU для 1000 хв/день або кластер з балансувальником для 100 000+ хв/день.
  3. Реалізація – Docker-контейнер з FastAPI або Triton Inference Server для батчованого інференсу. Інтеграція з чергою Kafka.
  4. Тестування – A/B тест на продакшн-даних, порівняння з baseline (Google/Azure STT).
  5. Деплой – CI/CD (GitHub Actions + ArgoCD), моніторинг (Grafana + WER/CER алерти).

Терміни:

  • Базова інтеграція готової моделі – 1–2 тижні.
  • Fine-tuning з підготовкою даних та валідацією – 4–8 тижнів.
  • Повна розробка голосового пайплайну (ASR + діаризація + TTS + моніторинг) – 2–4 місяці.

Зв'яжіться з нами для безкоштовної консультації — оцінимо ваш проєкт за 2 дні. Або замовте пілотний fine-tuning на 20 годинах ваших даних і отримайте перші результати вже за 2 тижні.