Реализация голосового AI-бота для опросов и анкетирования

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация голосового AI-бота для опросов и анкетирования
Средняя
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления 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-бота для опросов и анкетирования

Голосовые опросы обеспечивают в 2–3 раза более высокий response rate по сравнению с SMS/email — люди охотнее говорят, чем заполняют формы. AI-бот проводит структурированный опрос, распознаёт числовые оценки и развёрнутые ответы.

Типы опросных вопросов

from dataclasses import dataclass
from enum import Enum

class QuestionType(Enum):
    NPS = "nps"           # оценка 0-10
    CSAT = "csat"         # оценка 1-5
    YESNO = "yesno"       # да/нет
    OPEN = "open"         # развёрнутый ответ
    CHOICE = "choice"     # выбор из вариантов

@dataclass
class SurveyQuestion:
    id: str
    text: str
    type: QuestionType
    options: list[str] = None
    next_question: dict = None  # conditional branching

SURVEY_TEMPLATE = [
    SurveyQuestion(
        id="overall_satisfaction",
        text="По шкале от 1 до 10, как бы вы оценили наш сервис?",
        type=QuestionType.NPS,
        next_question={
            "low": "reason_low",    # <7
            "high": "recommend"     # >=7
        }
    ),
    SurveyQuestion(
        id="reason_low",
        text="Что нам нужно улучшить? Расскажите своими словами.",
        type=QuestionType.OPEN,
    ),
    SurveyQuestion(
        id="recommend",
        text="Порекомендуете нас друзьям?",
        type=QuestionType.YESNO,
    ),
]

Извлечение числовых оценок

import re

async def extract_rating(text: str, scale: tuple = (1, 10)) -> int | None:
    """Извлекаем числовую оценку из текста"""
    # Сначала пробуем прямое число
    numbers = re.findall(r'\b([0-9]|10)\b', text)
    if numbers:
        rating = int(numbers[0])
        if scale[0] <= rating <= scale[1]:
            return rating

    # Словесные оценки
    rating_words = {
        "отлично": 10, "замечательно": 9, "хорошо": 8,
        "нормально": 6, "плохо": 4, "ужасно": 2, "единица": 1
    }
    for word, value in rating_words.items():
        if word in text.lower():
            return value

    # Через LLM для сложных случаев
    response = await client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{
            "role": "user",
            "content": f"Клиент сказал: '{text}'. Определи оценку от {scale[0]} до {scale[1]}. Только число или null."
        }]
    )
    result = response.choices[0].message.content.strip()
    return int(result) if result.isdigit() else None

Сохранение результатов

async def save_survey_result(phone: str, results: dict):
    await db.survey_responses.insert_one({
        "phone": phone,
        "completed_at": datetime.utcnow(),
        "scores": results.get("scores"),
        "open_answers": results.get("open_answers"),
        "nps_category": categorize_nps(results.get("scores", {}).get("overall")),
        "duration_seconds": results.get("duration")
    })

Сроки: опрос с 5–7 вопросами — 2 недели. Система управления опросами с аналитикой — 4–6 недель.