Інтеграція 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
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    956
  • 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

Розпізнавання та синтез мовлення: перша лінія проблеми

Ми стикаємося із замовником, який має 40 000 годин записів кол-центру й хоче транскрибувати їх за тиждень — це типова задача розпізнавання мови ASR. Штатний хмарний 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 обрізає короткі вставки. Рішення — збільшити min_duration_on до 0.3 та додати overlap detection через pyannote-overlap-detection.

Клонування голосу — латентність чи якість. XTTS v2 (Coqui) дає натуральний голос, але при потоковій генерації stream_chunk_size=20 перший аудіочанк прилітає через 1.4–2.0 с — неприйнятно для інтерактивних сценаріїв. StyleTTS2 та Kokoro швидші, але вимагають точного підготовки референсного аудіо. Ми навчилися вирішувати цю дилему за допомогою гібридного підходу: на старті використовуємо Silero TTS (50–100 мс TTFB), а після отримання перших 3 секунд аудіо перемикаємо на XTTS для кращої натуральності.

Як вибрати ASR-модель під ваші дані?

Модель WER (українська, чистий запис) WER (PSTN, кодек G.711) Швидкість інференсу (фактор real-time) Вартість інференсу (1 год аудіо, A10G)
Whisper large-v3 8–10% 25–35% ~0.1x (55 с на 40 хв) ~$0.50
Whisper medium 12–15% 30–40% ~0.3x ~$0.15
Wav2Vec2 XLSR-53 15–18% 28–35% ~0.8x ~$0.08
Whisper large-v3 + fine-tune 4–7% 10–15% ~0.1x ~$0.50

faster-whisper (CTranslate2) швидший за оригінальний Whisper у 4 рази при однаковому WER. Для продакшену ми завжди використовуємо його.

Практичний приклад: fine-tuning Whisper на доменній лексиці

Фінтех-компанія з 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.50 за годину аудіо, що в 6 разів дешевше за хмарне рішення. Проєкт виконано за 6 тижнів, включаючи підготовку даних і валідацію.

Техніка fine-tuning описана в офіційній документації Whisper на Hugging Face.

Як донавчити 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 обов’язково заморожуйте 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. Ми гарантуємо, що підібрана модель відповідатиме вашим вимогам до латентності та якості — це підтверджено на 50+ реалізованих проєктах.

Наш досвід та гарантії

10+ років досвіду в NLP та speech processing. 50+ успішних проєктів для fintech, telecom, медицини. Сертифіковані моделі (Model Card + bias audit). Ми гарантуємо зниження WER до цільового рівня, інакше повертаємо кошти.

Що входить у роботу з нами?

Клієнт отримує:

  • Документацію: model card, інструкцію з розгортання, API-специфікацію (OpenAPI 3.0)
  • Код: готові скрипти для інференсу, пайплайни обробки (Docker Compose + Kubernetes маніфести за потреби)
  • Доступи: до self-hosted інстансів, графіки моніторингу (Grafana + Prometheus)
  • Навчання: 2 сесії для вашої команди (налаштування, експлуатація, troubleshooting)

Ми також надаємо сертифікат відповідності моделі (Model Card + bias report), що підсилює довіру до рішення.

Процес роботи та терміни

  1. Аудит-сесія – беремо 2–4 години ваших записів, проганяємо через кілька моделей, вимірюємо WER/CER, дивимося на розподіл помилок (лексичні, акустичні, мова). Займає 1–2 дні.
  2. Вибір архітектури – під ваш throughput: один GPU для 1000 хв/день або кластер з балансувальником для 100 000+ хв/день.
  3. Реалізація – Docker-контейнер з FastAPI або Triton Inference Server для батчованого інференсу. Інтеграція з чергою Kafka.
  4. Тестування – A/B тест на продакшн-даних, порівняння з baseline (Google/Azure STT).
  5. Деплой – CI/CD (GitHub Actions + ArgoCD), моніторинг (Grafana + WER/CER алерти).

Терміни:

  • Базова інтеграція готової моделі – 1–2 тижні.
  • Fine-tuning з підготовкою даних та валідацією – 4–8 тижнів.
  • Повна розробка голосового пайплайну (ASR + діаризація + TTS + моніторинг) – 2–4 місяці.

Зв'яжіться з нами для безкоштовної консультації — оцінимо ваш проєкт за 2 дні. Або замовте пілотний fine-tuning на 20 годинах ваших даних і отримайте перші результати вже за 2 тижні.