Как интегрировать 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 секунды?
Собираем пайплайн:
- STT — Whisper medium.en + ModelScope (INT8 quant) на GPU T4 — first token за 250 мс.
- LLM — vLLM с LLaMA 3.1 8B, prefill в 20 tokens, generation с early stopping — 400 мс. Сравните: vLLM в 2.5x быстрее стандартного Hugging Face pipeline под нагрузкой.
- 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–3 дня): Аудит текущей конфигурации Asterisk/FreePBX, сбор требований к сценариям, замер средней длительности звонков.
- Проектирование (2–5 дней): Выбор стека (модели, фреймворки), проектирование интеграции, прототип диалога.
- PoC (1–2 недели): Запуск на тестовой АТС с 1 входящим номером. Демонстрация заказчику.
- Продакшен (2–4 недели): Развёртывание на целевых серверах, настройка мониторинга (Prometheus + Grafana), интеграция с CRM.
- Поддержка (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). Свяжитесь с нами — пришлём технико-коммерческое предложение.







