ОПИСАНИЕ ФУНКЦИОНАЛЬНЫХ ХАРАКТЕРИСТИК ПЛАТФОРМЫ:
1. ОБЩЕЕ ОПИСАНИЕ
Платформа голосовых роботов iVoice представляет собой микро сервисную систему на базе Java, предназначенную для автоматизации телефонных взаимодействий. Основные функции включают:
Инициация и обработка SIP-звонков: Обеспечивается через компонент Sip-system (на базе FreeSWITCH), который управляет установкой соединений и маршрутизацией звонков.
Распознавание речи (ASR) и синтез текста в речь (TTS): ASR реализуется в компоненте Media-service (с интеграцией внешних API), позволяя преобразовывать голосовые команды в текст. TTS реализуется в отдельном компоненте TTS-service (с интеграцией внешних API), позволяя генерировать речевые ответы из текста. Это обеспечивает точную обработку диалогов в голосовых сценариях.
Управление голосовыми сценариями и задачами (call tasks): Платформа поддерживает создание и выполнение сценариев через компонент Call Task Service (CTS), который координирует логику звонков и задач.
Хранение задач в MongoDB для асинхронной обработки: Данные о звонках и задачах (call tasks) сохраняются в MongoDB как документы с метаданными (ID, статус, данные абонента и т.д.), обеспечивая асинхронную обработку и масштабируемость. Задачи обрабатываются поэтапно через микросервисы CTS и CS, без блокировки основного потока, что позволяет системе параллельно управлять множеством звонков и восстанавливаться после сбоев.
Веб приложение для администратора “Voicebot”: Веб-приложение на Vue.js (с бэкендом на Java и JavaScript) для создания и управления голосовыми сценариями, а также для контроля звонков и аналитики.
Интеграции с внешними системами: Платформа интегрируется с CRM-системами и телеком-операторами (IP-телефония) для обмена данными и маршрутизации звонков.
Метрики и характеристики:
Общий объем кода: 56 500 строк (подсчитано с помощью cloc на 17.11.2025, включая только исполняемый код; разбивка по компонентам: Sip-system — 6 500 строк, Media-service — 5 000, TTS — 2 500, Sip-servlet — 20 000, CTS — 10 000, Calling-system — 4 500, Voicebot — 8 000 строк Java + 3 600 JavaScript + 29 000 Vue.js).
Доступность: 99,9% (SLA, измерено по uptime за последний квартал с помощью Prometheus; downtime не превышает 8 часов в год, обеспечивается через redundancy в Kubernetes).
2. АРХИТЕКТУРА МИКРОСЕРВИСОВ
2.1. Основные компоненты
Платформа состоит из следующих независимых сервисов, взаимодействующих через REST API, SIP-протокол и message queues:
Sip-system (Java): Надстройка над FreeSWITCH для управления SIP-сессиями, маршрутизации звонков и обработки медиапотоков.
Media-service (Java + Restcomm): Сервис для работы с ASR (автоматическим распознаванием речи); интегрируется с внешними ASR-провайдерами (например, Google Cloud Speech).
Tts-service: Сервис генерации речи из текста (TTS); использует Yandex SpeechKit.
Sip-servlet (Java + Akka actors): Сервис для выполнения голосовых сценариев; Akka actors обеспечивают асинхронную обработку диалогов и состояний звонка.
Call task service (Java): Создает задачи и сохраняет их в базе (документы callTask в MongoDB), предоставляет доступ к просмотру текущего состояния задач.
Calling-system (Java): Инициирует исходящие звонки через Sip-system с учетом количества предоставленных клиентом линий телефонии (чтобы не превышать лимиты и эффективно распределять нагрузку); координирует запуск задач, читая их напрямую из базы данных (MongoDB), обеспечивая асинхронную обработку звонков и результатов.
2.2. Технологический стек
Язык и фреймворки: Java 8+, Spring Boot, Akka Toolkit для actors.
Telephony: FreeSWITCH, Restcomm для SIP/медиа.
Базы данных: MongoDB для хранения callTask-документов (JSON-структуры: {taskId, phone, scenario, status}).
Контейнеризация: Docker.
CI/CD: GitLab.
3. СПЕЦИФИКАЦИИ КОМПОНЕНТОВ
3.1. Взаимодействия и API
SIP-протокол: Sip-system и Calling-system используют SIP (RFC 3261) для звонков; эндпоинты: INVITE для инициации, BYE для завершения.
REST API: Media-service: POST /asr с аудио (multipart/form-data). Tts-service: POST /tts {text: "Привет"} → аудиофайл. Sip-servlet: WebSocket для реального времени сценариев. Call task service: POST /task/outgoing {phone, campaign, parameters} → MongoDB-документ.
Спецификация: OpenAPI 3.0. Безопасность: HTTPS, JWT-аутентификация.
3.2. Базы данных и хранение
Платформа использует MongoDB (версия 4.0+) для хранения данных о задачах звонков, настройках кампаний и метаданных. База интегрирована в компонент cts (Call Task Service) и cs (Calling System. Доступ через Spring Data MongoDB; безопасность обеспечивается аутентификацией и шифрованием. Общий объем данных — до 40ГБ. Развертывание: MongoDB (mongod) работает на отдельной виртуальной машине (VM) через systemctl для управления службой.
Хранение медиа: [Указать, например: AWS S3 или локальный FS для аудиозаписей]. Резервное копирование: Монгобэкап ежедневно.
Коллекция callTask: Хранит данные по звонкам. Ключевые поля: id (ObjectId, первичный ключ), phone (string), state (enum: READY, DIALING, ONGOING, PERFORMED, FAILED, CANCELLED). Индексы по id и phone для поиска.
Коллекция campaign: Хранит настройки звонков (структурированные данные для управления кампаниями; ключевые поля: id (ObjectId), name (string), scenario (string) (с каким сценарием будут работать звонки ). Индекс по id.. Связана с callTasks для управления задачами; обновления через API.
Другие коллекции (например, для логов или пользователей) не детализированы, так как не критичны для основных функций. Тестирование: unit-тесты для CRUD-операций, интеграционные через Postman.
3.3. Интеграции
Платформа обеспечивает гибкие интеграции с внешними и внутренними системами для обработки голосовых взаимодействий, уведомлений и асинхронных задач. Все интеграции реализованы через стандартизированные протоколы (REST API, WebSockets, message queues) с учетом безопасности (аутентификация JWT, шифрование).
Внешние интеграции:
ASR/TTS (распознавание и синтез речи): Интеграция с Yandex SpeechKit через Media-service (для обработки аудио-потоков из FreeSWITCH) и Tts-service (для генерации голосовых ответов). API-вызовы обеспечивают реал-тайм обработку с поддержкой русского языка; конфигурация ключей доступа в настройках сервисов.
CRM-системы: Не предоставляются webhooks или push-уведомления в CRM клиента для соблюдения изоляции. Клиенты самостоятельно запрашивают данные через REST API Call task service (например, статус выполнения задач: READY → DIALING → ONGOING → PERFORMED). Поддерживаются GET/POST/PUT-запросы с аутентификацией; ответы в JSON с метаданными звонков (длительность, результат).
Внутренние интеграции:
Message queues (Kafka): Используется для асинхронной обработки событий между компонентами. Основное применение — отправка и прослушка событий (например, смена состояния задачи, уведомления о звонках). Топики Kafka обеспечивают надежную доставку (at-least-once семантика), с интеграцией в микросервисы через Spring Kafka.