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

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка AI-системы холодных звонков с квалификацией лида
Сложная
~2-4 недели
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

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

AI-система холодного обзвона автономно квалифицирует потенциальных клиентов по BANT (Budget, Authority, Need, Timeline) и передаёт только «горячих» лидов на менеджеров по продажам. Масштаб: 500–2000 звонков в день на один экземпляр.

BANT-квалификация в диалоге

@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"]})

Динамическая стратегия вопросов

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  # все измерения достаточно квалифицированы

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

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)

Метрики эффективности

Метрика Значение
Contact Rate 25–35%
Qualified Lead Rate 8–15% из дозвонов
Transfer to Sales 5–10% из дозвонов
Cost per Qualified Lead -70% vs ручной

Сроки: MVP квалификатора — 4–6 недель. Полная система с CRM — 2–3 месяца.