Интеграция Asterisk/FreePBX с AI для обработки звонков

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
Интеграция Asterisk/FreePBX с AI для обработки звонков
Средний
от 1 недели до 3 месяцев
Часто задаваемые вопросы

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

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

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1358
  • 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

Как интегрировать Asterisk с AI?

«У нас Asterisk 18, хотим добавить голосового ассистента, но готовые решения тянут за собой облачную подписку и не дают контролировать задержки». Это типичная боль. Штатные возможности FreePBX — DTMF-меню и проигрывание prerecorded-файлов. AI позволяет перейти к диалогу: пользователь говорит, система понимает, LLM принимает решение, TTS отвечает. Но интеграция — не «поставить модуль». Это про выбор стека (STT: Whisper или Deepgram? LLM: LLaMA 3.1 70B или GPT-4o-mini? TTS: Piper или ElevenLabs?), про latency p99 и сходимость диалога. Расскажем, как мы такие проекты собираем на on-premise или гибриде.

Какие проблемы решаем

Проблема 1: Качество распознавания в шумной среде. Колл-центры, офисы открытого плана, уличный шум — стандартные STT модели дают WER > 30%. Мы используем Whisper large-v3 с fine-tuning на вашем аудиокорпусе (300 часов записей снижают WER до 10%) или Deepgram Nova-2 с шумоподавлением на входе.

Проблема 2: Задержка end-to-end > 2 секунд. Пользователь не готов ждать ответа дольше 1.5 с. Мы оптимизируем пайплайн: streaming STT с частичными результатами, LLM с ранним выходом, TTS с генерацией первого пакета за 150 мс. На стеке Whisper + vLLM + Piper получаем p99 = 1.1 с.

Проблема 3: Отказоустойчивость. Падение AI-сервиса не должно ломать звонок. Мы проектируем fallback: при таймауте AI-узла диалплан переключается на стандартное IVR. ARI-приложение мониторит health каждого компонента и при ошибке возвращает управление в Asterisk.

Как мы это делаем: стек и конфиги

Выбор интерфейса — AGI или ARI — зависит от требований к real-time и сложности диалога. Ниже сравнение.

Характеристика AGI (Asterisk Gateway Interface) ARI (Asterisk REST Interface)
Механизм Запуск скрипта по событию WebSocket + REST, full duplex
Latency +3-5 мс (системный вызов) +1-2 мс (прямое управление каналом)
Поддержка streaming Только пакетная запись True streaming аудио
Сложность Низкая (Python-скрипт) Высокая (асинхронное приложение)
Отказоустойчивость Встроенный retry Требует ручного реконнекта
Когда выбирать Простые IVR, голосовой ввод/вывод Реал-тайм диалог, перебивание, смена темы

Пример AGI-скрипта (Python):

# agi_bot.py
import sys
from asterisk.agi import AGI

agi = AGI()
agi.answer()
agi.set_variable("CHANNEL(audioreadformat)", "slin16")

# Запись аудио от пользователя
agi.record_file(
    "/tmp/user_audio",
    "wav",
    "#",        # stop key
    3000,       # timeout ms
    0,          # offset
    True,       # beep
    3           # silence threshold
)

# STT + LLM + TTS в отдельном сервисе
import requests
with open("/tmp/user_audio.wav", "rb") as f:
    stt_response = requests.post("http://ai-service/stt", files={"audio": f})
transcript = stt_response.json()["text"]

llm_response = requests.post("http://ai-service/chat",
                              json={"text": transcript})
response_text = llm_response.json()["response"]

tts_response = requests.post("http://ai-service/tts",
                              json={"text": response_text})
with open("/tmp/response.wav", "wb") as f:
    f.write(tts_response.content)

agi.stream_file("/tmp/response")

ARI-пример (asyncio):

import asyncio
import aiohttp
from ari_client import ARIClient

async def handle_stasis(channel_id: str, ari: ARIClient):
    """Обработчик входящего звонка через ARI"""
    await ari.answer(channel_id)

    # Создаём снэпшот аудио канала
    await ari.channel.record(
        channelId=channel_id,
        name=f"call_{channel_id}",
        format="wav",
        terminateOn="silence",
        maxSilenceSeconds=2
    )

Почему стоит выбрать AGI, а не ARI?

Если ваш сценарий — простой голосовой ввод-вывод (например, «скажите ФИО, система найдёт клиента»), AGI даёт минимальное время разработки. Написание скрипта занимает 1-2 дня, отладка — ещё неделю. ARI же требует асинхронной архитектуры и управления сессией, но позволяет обрабатывать перебивания и частичные результаты распознавания. Для контакт-центров с естественным диалогом ARI — единственный выбор.

Как обеспечить latency < 1 секунды?

Собираем пайплайн:

  1. STT — Whisper medium.en + ModelScope (INT8 quant) на GPU T4 — first token за 250 мс.
  2. LLM — vLLM с LLaMA 3.1 8B, prefill в 20 tokens, generation с early stopping — 400 мс. Сравните: vLLM в 2.5x быстрее стандартного Hugging Face pipeline под нагрузкой.
  3. TTS — Piper (VITS) с синтезом первого пакета за 100 мс. Итог: 750 мс end-to-end. Под нагрузкой 10 одновременных звонков latency p99 держится в 1.2 с.

Согласно документации Asterisk, для streaming аудио рекомендуется использовать ARI, так как AGI не поддерживает полнодуплексную передачу.

Сравнение LLM для голосовых сценариев

Модель Latency (first token) Качество (многозадачность) Стоимость (за 1M токенов)
LLaMA 3.1 70B (on-premise) 400–500 мс Высокое ~$0.5 (электричество)
GPT-4o-mini (облако) 300–400 мс Очень высокое $0.15/$0.60 (input/output)
Mistral 7B (on-premise) 200–300 мс Среднее ~$0.1
Конфигурация Triton Inference Server для LLM
name: "llama_ensemble"
backend: "ensemble"
input [
  {
    name: "text_input"
    data_type: TYPE_STRING
    dims: [ -1 ]
  }
]
output [
  {
    name: "text_output"
    data_type: TYPE_STRING
    dims: [ -1 ]
  }
]

Процесс работы

  1. Аналитика (1–3 дня): Аудит текущей конфигурации Asterisk/FreePBX, сбор требований к сценариям, замер средней длительности звонков.
  2. Проектирование (2–5 дней): Выбор стека (модели, фреймворки), проектирование интеграции, прототип диалога.
  3. PoC (1–2 недели): Запуск на тестовой АТС с 1 входящим номером. Демонстрация заказчику.
  4. Продакшен (2–4 недели): Развёртывание на целевых серверах, настройка мониторинга (Prometheus + Grafana), интеграция с CRM.
  5. Поддержка (2 недели после запуска): Обучение операторов, корректировка диалогового сценария, оптимизация latency.

Сроки и стоимость

  • Базовая AGI-интеграция (один сценарий, Whisper + LLaMA + Piper): от 2 до 3 недель.
  • Полноценная ARI-реализация (real-time диалог, multilingua, отказоустойчивость): от 1 до 1.5 месяцев. Стоимость рассчитывается индивидуально после аудита инфраструктуры. Получите консультацию — оценим ваш проект за 1 день.

Что входит в работу

  • Документация по развёртыванию и эксплуатации.
  • Репозиторий с конфигами и скриптами (Git).
  • Обучение операторов (2 сессии по 1 часу).
  • Две недели сопровождения после запуска.
  • Гарантия 3 месяца на код.

Мы — команда с 5-летним опытом AI-интеграций для телефонных систем. У нас за плечами 12+ проектов для контакт-центров до 50 линий. Сертифицированные инженеры по Asterisk и FreePBX (дистрибутив Sangoma). Свяжитесь с нами — пришлём технико-коммерческое предложение.

Подробнее об Asterisk

Распознавание и синтез речи: ASR, TTS, клонирование голоса

Заказчик приходит с задачей: транскрибировать 40 000 часов колл-центра за неделю. Штатный облачный 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 срезает короткие вставки.

Клонирование голоса — латентность или качество. XTTS v2 (Coqui) даёт натуральный голос, но при потоковой генерации stream_chunk_size=20 первый аудиочанк прилетает через 1.4–2.0 с — неприемлемо для интерактивных сценариев. StyleTTS2 и Kokoro быстрее, но требуют точной подготовки референсного аудио.

Как это решается на практике

Базовый стек для production-пайплайна:

  • ASR: openai/whisper-large-v3 или faster-whisper (CTranslate2-бэкенд, x4 скорость vs оригинал)
  • Диаризация: pyannote.audio 3.x + интеграция через whisperx для выравнивания по словам
  • TTS: XTTS v2 для качества, Edge-TTS или Silero для низкой латентности
  • Клонирование: XTTS v2 (3–6 с референсного аудио) или OpenVoice v2

Типичный пайплайн для колл-центра выглядит так: аудио из очереди Kafka → нормализация ffmpeg -af loudnorm до -23 LUFS → faster-whisper с beam_size=5, vad_filter=Truepyannote диаризация → постпроцессинг (пунктуация через deepmultilingualpunctuation) → запись в PostgreSQL с временными метками.

Кейс из практики. Финтех-компания с 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.0008/мин против $0.016/мин у облачного провайдера.

Дообучение 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 Whisper нужно замораживать 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.

Процесс работы

Начинаем с аудит-сессии: берём 2–4 часа ваших записей, прогоняем через несколько моделей, замеряем WER/CER, смотрим на распределение ошибок по типам (лексические, акустические, язык). Это занимает 1–2 дня и сразу показывает, нужен ли fine-tuning или достаточно пост-обработки.

Далее — выбор архитектуры под ваш throughput: один GPU для 1000 мин/день или кластер с балансировщиком для 100 000+ мин/день. Деплой через Docker-контейнер с FastAPI или Triton Inference Server для батчированного инференса.

Сроки зависят от сложности: базовая интеграция готовой модели — 1–2 недели. Fine-tuning с подготовкой данных и валидацией — 4–8 недель. Полная разработка голосового пайплайна (ASR + диаризация + TTS + мониторинг) — 2–4 месяца.