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







