Інтеграція 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). Зв'яжіться з нами — надішлемо техніко-комерційну пропозицію.







