Разработка AI-системы очереди звонков с предиктивным временем ожидания

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

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

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

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

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

Разработка AI-системы очереди звонков с предиктивным временем ожидания

Предиктивное время ожидания снижает abandonment rate на 20–35%: клиенты, которые знают точное время ожидания (а не «ваш звонок очень важен для нас»), с меньшей вероятностью вешают трубку.

ML-модель предсказания времени ожидания

import numpy as np
from sklearn.ensemble import GradientBoostingRegressor
from datetime import datetime

class WaitTimePredictor:
    def __init__(self):
        self.model = GradientBoostingRegressor(
            n_estimators=200,
            max_depth=5,
            learning_rate=0.05
        )
        self.feature_names = [
            "queue_length",
            "available_agents",
            "avg_handle_time_last_30min",
            "hour_of_day",
            "day_of_week",
            "is_holiday",
            "incoming_call_rate_last_10min",
            "agents_on_break",
            "avg_skill_match_score"
        ]

    def predict_wait_time(self, queue_state: dict) -> tuple[float, float]:
        """Возвращает (предсказанное время, стандартное отклонение)"""
        features = self.extract_features(queue_state)
        X = np.array([[features[f] for f in self.feature_names]])

        predicted = self.model.predict(X)[0]
        # Используем quantile regression для доверительного интервала
        # На практике обучаем три модели: q10, q50, q90
        return max(0, predicted), max(15, predicted * 0.3)

    def extract_features(self, state: dict) -> dict:
        now = datetime.now()
        return {
            "queue_length": state["queue_length"],
            "available_agents": state["available_agents"],
            "avg_handle_time_last_30min": state["avg_handle_time"],
            "hour_of_day": now.hour,
            "day_of_week": now.weekday(),
            "is_holiday": is_holiday(now),
            "incoming_call_rate_last_10min": state["call_rate"],
            "agents_on_break": state["agents_on_break"],
            "avg_skill_match_score": state.get("skill_match", 0.7)
        }

IVR сообщение с динамическим временем

def format_wait_time_message(wait_seconds: float, uncertainty: float) -> str:
    wait_minutes = int(wait_seconds / 60)
    uncertainty_minutes = int(uncertainty / 60)

    if wait_seconds < 60:
        return "Ожидание не превысит одной минуты."
    elif uncertainty_minutes <= 1:
        return f"Ваше ориентировочное время ожидания — {wait_minutes} минут."
    else:
        lower = max(1, wait_minutes - uncertainty_minutes)
        upper = wait_minutes + uncertainty_minutes
        return f"Ожидание займёт от {lower} до {upper} минут."

async def update_queue_announcement(queue_id: str, predictor: WaitTimePredictor):
    """Обновляем сообщение в очереди каждые 30 секунд"""
    while True:
        state = await get_queue_state(queue_id)
        wait_time, uncertainty = predictor.predict_wait_time(state)

        message = format_wait_time_message(wait_time, uncertainty)

        # Опциональный callback
        if wait_time > 300:  # > 5 минут
            message += " Хотите, мы перезвоним вам, как только освободится оператор?"

        await telephony.update_queue_message(queue_id, message)
        await asyncio.sleep(30)

Callback scheduling

async def offer_callback(call: IncomingCall, predicted_wait: float):
    if predicted_wait > 300:  # >5 минут
        await call.say(
            "Время ожидания превышает 5 минут. Хотите, мы перезвоним вам? Нажмите 1."
        )
        response = await call.listen_dtmf(timeout_sec=5)
        if response == "1":
            await schedule_callback(call.caller_phone, predicted_wait)
            await call.say("Отлично! Мы перезвоним вам в течение {wait} минут.")
            await call.hangup()

Сроки: базовое предиктивное время — 2–3 недели. Callback система + ML-модель — 4–6 недель.