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

Інтеграція Asterisk з AI: як це зробити?

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Інтеграція 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