Tool

Deploy AI voice agents on Asterisk phone systems

AVA is an open-source AI voice agent for Asterisk/FreePBX with a modular STT/LLM/TTS pipeline and 7 golden baselines for cloud, local, or hybrid use.

Works with asteriskfreepbxopenaigoogledeepgram

91
Spark score
out of 100
Updated 6 days ago
Version 7.5.2

Add to Favorites

Why it matters

Enable enterprises to add conversational AI voice capabilities to their existing Asterisk or FreePBX phone infrastructure, handling inbound and outbound calls with natural language understanding, speech-to-text, text-to-speech, and custom actions through a modular pipeline architecture.

Outcomes

What it gets done

01

Route incoming calls to AI agents that understand and respond to customer inquiries in real-time

02

Mix and match STT, LLM, and TTS providers through 6 production-ready baseline configurations

03

Manage AI voice agents through a web-based admin UI with setup wizard and health monitoring

04

Integrate with Asterisk dialplans using AudioSocket or ExternalMedia RTP transports

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/hkjarral-ava-ai-voice-agent-for-asterisk | bash

Overview

AVA-AI-Voice-Agent-for-Asterisk

AVA is an open-source, MIT-licensed AI voice agent that plugs into existing Asterisk/FreePBX systems via a modular STT/LLM/TTS pipeline, with 7 pre-validated golden baselines (OpenAI, Deepgram, Google Live, ElevenLabs, Telnyx, Grok, Local Hybrid) plus fully local/Ollama deployment options, tool-calling for transfers/voicemail/scheduling, and a web Admin UI for setup and Call History debugging. Use it when you already run Asterisk or FreePBX and want an AI voice agent with control over which providers process calls, from quick cloud setups to fully on-premises deployments; it requires Docker Compose and an existing Asterisk 18+ install, and the Admin UI must be network-restricted before production use.

What it does

AVA (Asterisk AI Voice Agent, MIT licensed) is an open-source AI voice agent that plugs directly into an existing Asterisk or FreePBX phone system - no external telephony provider required. Its core design is a modular pipeline architecture that lets you independently choose speech-to-text (STT), LLM, and text-to-speech (TTS) providers, or use a full realtime cloud agent, and mix cloud, local, or hybrid deployment as needed. Seven "golden baseline" configurations ship pre-validated for production: OpenAI Realtime (recommended default, sub-2s response), Deepgram Voice Agent (an advanced reasoning "Think" stage, sub-3s), Google Live API (multimodal Gemini Live), ElevenLabs Agent (premium voice quality), Telnyx AI Inference (local STT/TTS plus Telnyx-hosted access to 53+ models including GPT-4o, Claude, and Llama), xAI Grok Voice Agent (five named realtime voices or a custom cloned voice), and Local Hybrid (local STT/TTS with a cloud LLM, keeping audio on-premises for privacy, cost, and compliance). A fully local mode is also supported across three topologies - CPU-only (5-15s/turn), GPU on the same box (0.5-2s/turn, community-validated at ~1.0s end-to-end on an RTX 4090), or a split-server setup with a remote GPU box - plus self-hosted Ollama LLM support requiring no API key at all, with tool-calling-compatible models (Llama 3.2, Mistral, Qwen2.5).

AI-powered actions work across any provider through a unified tool-calling system: call transfers to extensions, ACD queues, or ring groups with cancel-in-progress support; graceful hangup with a spoken farewell; voicemail routing; automatic or caller-requested email call summaries and transcripts; and configurable pre-call, in-call, and post-call HTTP tools for looking up or posting data to external systems. As of v7.4, tool and resource access (transfer destinations, Google or Microsoft calendars, voicemail mailboxes) is scoped per-agent rather than globally, with each agent set to inherit all, select specific keys, or deny access entirely, and updates to tool configuration apply to new calls without a service restart. Audio handling covers dual transport (AudioSocket by default, or ExternalMedia RTP) and per-agent audio profiles spanning standard 8kHz telephony, an enhanced 8kHz profile with band-limited downsampling, and an opt-in native 16kHz wideband path (requiring recent Asterisk versions and a genuinely wideband endpoint or G.722 trunk) that falls back cleanly to 8kHz when unsupported. A web Admin UI (port 3003, one-time generated password on first boot) provides a setup wizard, real-time dashboard, live ARI and Asterisk status checks, WebSocket log streaming, and a Monaco-based YAML config editor; a companion Agent CLI (agent setup, agent check, agent rca, agent update) handles headless installation and diagnostics. Built-in Call History gives per-call debugging with optional /metrics scraping for observability.

When to use - and when NOT to

Use AVA when you run (or are deploying) Asterisk or FreePBX and want to add an AI voice agent without depending on an external telephony platform - especially if you need the flexibility to swap STT/LLM/TTS providers independently, run partially or fully on-premises for privacy or cost control, or scope which tools and resources (transfers, calendars, voicemail) different agents can access. It fits both quick cloud-first deployments (the OpenAI Realtime golden baseline is positioned as the fastest path to a working call) and privacy-constrained or cost-sensitive deployments (Local Hybrid at roughly $0.001-0.003/minute LLM-only, or fully local with no cloud API calls at all).

It requires an existing Asterisk 18+ installation and Docker Compose to run, so it's not a hosted SaaS you point a phone number at with zero infrastructure - you own and operate the telephony stack. The Admin UI is explicitly documented as network-accessible and should be restricted via firewall, VPN, or reverse proxy before production use, per the project's own security note. Fully local CPU-only deployment has meaningfully higher per-turn latency (5-15s) than GPU or cloud paths, so it fits testing or privacy-first use more than latency-sensitive production calls without GPU hardware.

Inputs and outputs

Get the Admin UI running:

git clone https://github.com/hkjarral/AVA-AI-Voice-Agent-for-Asterisk.git
cd AVA-AI-Voice-Agent-for-Asterisk
sudo ./preflight.sh --apply-fixes
docker compose -p asterisk-ai-voice-agent up -d --build --force-recreate admin_ui

After retrieving the one-time admin password from container logs and completing the setup wizard, connecting Asterisk requires a small dialplan addition selecting an operator-managed agent by slug:

[from-ai-agent]
exten => s,1,NoOp(Asterisk AI Voice Agent)
 same => n,Set(AI_AGENT=sales-agent)
 same => n,Stasis(asterisk-ai-voice-agent)
 same => n,Hangup()

Input is live call audio routed from Asterisk over AudioSocket or ExternalMedia RTP, plus (for cloud golden baselines) API keys for the selected provider(s) set in .env. Output is spoken AI responses streamed back into the call, plus tool-call side effects (transfers, voicemail routing, emailed summaries) and a per-call transcript and metadata record visible in the Admin UI's Call History.

Integrations

AVA integrates with Asterisk/FreePBX as its telephony layer (dialplan Stasis() app, AudioSocket or ExternalMedia RTP transport), and with cloud AI providers per golden baseline: OpenAI Realtime, Deepgram Voice Agent, Google Live (Gemini), ElevenLabs Conversational AI, Telnyx AI Inference (OpenAI-compatible, 53+ models), xAI Grok, and MiniMax as an additional LLM option. For local or self-hosted deployment it integrates with Ollama (no API key, tool-calling-capable models), llama.cpp with CUDA for GPU inference, and local STT/TTS engines (Vosk, Piper, Kokoro referenced in the source). It also integrates with VICIdial as a Remote Agent for outbound campaign dialing, supports Google Calendar and Microsoft Calendar as schedulable, per-agent-scoped tool resources, and offers generic HTTP lookup and webhook tools for pre-call, in-call, and post-call integrations with arbitrary external systems.

Who it's for

Telephony administrators and developers running Asterisk or FreePBX who want to add an AI voice agent - handling calls, transfers, scheduling, and voicemail - with full control over which AI providers process audio and data, whether for cost optimization, data privacy and compliance, or provider flexibility, rather than depending on a closed hosted voice-AI platform.

Source README
Asterisk AI Voice Agent

Version
License
Python
Docker
Asterisk
Ask DeepWiki
Discord


AVA - AI Voice Agent for Asterisk - Open-source AI voice agent for any phone system | Product Hunt

The most powerful, flexible open-source AI voice agent for Asterisk/FreePBX. Featuring a modular pipeline architecture that lets you mix and match STT, LLM, and TTS providers, plus 6 production-ready golden baselines validated for enterprise deployment.

Quick StartFeaturesRoadmapDemoDocsCommunity


📖 Table of Contents


🚀 Quick Start

Get the Admin UI running in 2 minutes.

For a complete first successful call walkthrough (dialplan + transport selection + verification), see:

1. Run Pre-flight Check (Required)

# Clone repository
git clone https://github.com/hkjarral/AVA-AI-Voice-Agent-for-Asterisk.git
cd AVA-AI-Voice-Agent-for-Asterisk

# Run preflight with auto-fix (creates .env, generates JWT_SECRET)
sudo ./preflight.sh --apply-fixes

Important: Preflight creates your .env file and generates a secure JWT_SECRET. Always run this first!

2. Start the Admin UI

# Start the Admin UI container
docker compose -p asterisk-ai-voice-agent up -d --build --force-recreate admin_ui

3. Access the Dashboard

Open in your browser:

  • Local: http://localhost:3003
  • Remote server: http://<server-ip>:3003

First login: On first start, a one-time admin password is printed to the container logs. Retrieve it with:

docker compose -p asterisk-ai-voice-agent logs admin_ui | grep -i password

You must change it at first login. Restrict port 3003 via firewall, VPN, or reverse proxy for production use.

Follow the Setup Wizard to configure your providers and make a test call.

⚠️ Security: The Admin UI is accessible on the network. Restrict port 3003 via firewall, VPN, or reverse proxy for production use.

4. Verify Installation

GPU users: If you have an NVIDIA GPU for local AI inference, see docs/LOCAL_ONLY_SETUP.md for the GPU compose overlay (docker-compose.gpu.yml) before building.

# Start ai_engine (required for health checks)
docker compose -p asterisk-ai-voice-agent up -d --build ai_engine

# Check ai_engine health
curl http://localhost:15000/health
# Expected: {"status":"healthy"} ("degraded" is also possible if a subsystem is unhealthy)

# View logs for any errors
docker compose -p asterisk-ai-voice-agent logs ai_engine | tail -20

5. Connect Asterisk

The wizard will generate the necessary dialplan configuration for your Asterisk server.

Transport selection is configuration-dependent (not strictly “pipelines vs full agents”). Use the validated matrix in:


🔧 Advanced Setup (CLI)

For users who prefer the command line or need headless setup.

Option A: Interactive CLI

./install.sh
agent setup

Note: Legacy commands agent init, agent quickstart, agent doctor, agent troubleshoot, and agent demo remain as hidden compatibility aliases. New workflows should use the visible commands documented in docs/CLI_TOOLS_GUIDE.md.

Option B: Manual Setup

# Configure environment
cp .env.example .env
# Edit .env with your API keys

# Start services
docker compose -p asterisk-ai-voice-agent up -d

Configure Asterisk Dialplan

Add this to your FreePBX (extensions_custom.conf):

[from-ai-agent]
exten => s,1,NoOp(Asterisk AI Voice Agent)
 ; AI_AGENT selects an operator-managed agent by slug.
 same => n,Set(AI_AGENT=sales-agent)
 ; Optional: override that agent's configured provider/pipeline for this call.
 ; same => n,Set(AI_PROVIDER=google_live)
 same => n,Stasis(asterisk-ai-voice-agent)
 same => n,Hangup()

Notes:

  • Use AI_AGENT to select an operator-managed agent. Its configured target is authoritative unless AI_PROVIDER is intentionally set as a per-call override.
  • Generate a current snippet with agent dialplan --agent <slug>.
  • See docs/FreePBX-Integration-Guide.md for channel variable precedence and examples.

Test Your Agent

Health check:

agent check

View logs:

docker compose -p asterisk-ai-voice-agent logs -f ai_engine

🎉 What's New

v7.5.2 - Opt-in HD Voice over 16 kHz AudioSocket

v7.5.2 adds a call-scoped wideband path without changing existing Agent
profiles or the established 8 kHz compatibility defaults.

  • Native 16 kHz AudioSocket - assign wideband_pcm_16k to an Agent to use
    Asterisk slin16 and rate-specific AudioSocket framing in both directions.
  • Provider and pipeline alignment - Grok, Google Live, Deepgram, OpenAI,
    ElevenLabs, Local Hybrid, and Full Local retain truthful per-call media
    contracts, including retries, tool continuations, interruption, and cleanup.
  • Fail-closed compatibility - wideband requires Asterisk 20.17+, 21.12+,
    22.7+, or 23.1+ and a genuinely wideband endpoint or SIP trunk path such as
    G.722. ExternalMedia RTP and PSTN/G.711 calls remain on an 8 kHz profile.
  • Simple rollback - switch the Agent back to telephony_ulaw_8k or
    telephony_enhanced_8k; no global transport or provider-default change is
    required.

See the v7.5.2 changelog,
v7.5.2 upgrade notes,
and validation matrix.

v7.5.1 - Safer Admin apply and complete call history

The v7.5.1 hotfix focuses on recovery and observability without changing audio
profiles, provider transport, or fresh-install defaults.

  • Recoverable Apply Changes - the Admin UI prepares its updater runner
    before touching a live service and restores the previous image and container
    environment if a Compose replacement fails or does not become healthy.
  • Complete realtime transcripts - OpenAI and Grok keep assistant transcript
    state separate from interleaved caller-final events, preventing clipped
    prefixes in Call History and post-call consumers.
  • Apply instead of unnecessary restart - tool-only edits advertise and use
    hot reload for new calls. Provider, environment, and process-level changes
    remain on the restart/recreate path.

No database migration or audio-profile reassignment is required. Existing
stored transcripts are not rewritten.

See the v7.5.1 changelog and
v7.5.1 migration notes.

v7.5.0 - Enhanced telephony audio and VICIdial integration 🎧

v7.5.0 improves narrowband call audio without changing the established
8 kHz Asterisk wire contract, and adds a production-oriented VICIdial Remote
Agent integration.

  • Opt-in enhanced telephony audio - assign telephony_enhanced_8k to an
    Agent to use stateful band-limited downsampling for cleaner G.711 playback.
    Existing profiles keep their compatibility behavior, and switching back to
    telephony_ulaw_8k is the immediate rollback.
  • Consistent provider and pipeline policy - hosted providers and modular TTS
    pipelines inherit the Agent's Audio Profile by default, expose narrow
    troubleshooting overrides, and validate incompatible encoding, rate,
    resampler, overlap, and segmentation combinations before apply.
  • Safer interruption and teardown - resampler state is isolated per call and
    reset across responses, interruptions, and cleanup; replaced streams cannot
    be removed by stale cleanup; and late pipeline output is blocked after call
    teardown takes ownership.
  • VICIdial Remote Agents - VICIdial remains authoritative for campaigns,
    customer channels, reporting, dispositions, DNC, callbacks, and transfers,
    while AAVA supplies the mapped AI Agent with fail-closed ownership checks and
    sanitized lifecycle evidence.
  • More recoverable upgrades - the host recovery script handles mixed Git
    ownership, stale updater images, /root traversal constraints, and tracked
    local edits while preserving bounded backups and exact release targeting.

See the v7.5.0 changelog,
Audio Profiles, and
VICIdial Remote Agent setup for details.

v7.4.1 - Reliable, simpler outbound calling 📞

Outbound campaigns are easier to prepare, safer to schedule, and much easier
to troubleshoot from the Admin UI.

  • Simpler lead intake - import validated CSV or Excel .xlsx files, or add
    individual leads manually. Samples and new campaigns use the canonical
    AI_AGENT/agent routing model while legacy AI_CONTEXT/context inputs
    remain compatible.
  • Safer campaign scheduling - scheduled calls consistently receive the lead's
    called number, malformed timezone or calling-window settings fail closed,
    campaign concurrency is counted correctly, and stale attempts recover through
    one validated timeout policy.
  • More reliable human handling - human-first AMD defaults reduce false
    voicemail classification, and terminal farewell/hangup handling prevents new
    caller input from reviving a call that is already ending.
  • Better HTTP-tool workflows - pre-call, in-call, and post-call HTTP tools
    enforce method/body compatibility; pre-call output variables remain available
    for enriched greetings; and bounded, sanitized tool responses and diagnostics
    are visible in Call History and Scheduling.
  • Safer upgrades - updater recovery now handles older Git installations,
    Docker Compose access after privilege drops, and mixed-ownership checkouts more
    predictably without sacrificing local tracked changes.

See the Outbound Calling guide and
v7.4.1 changelog for details.

v7.4.0 - Agent-scoped tools and Agent-only routing 🧰

Each Agent can now receive only the transfer destinations, calendars, and
voicemail mailboxes it should be allowed to use.

  • Per-Agent resource access - configure the global inventory on Tools, then
    choose Inherit, Selected, or None under Agents → Edit Agent → Tools
    for the transfer family, Google Calendar, Microsoft Calendar, and voicemail.
  • One enforced call snapshot - provider schemas, prompt guidance, execution,
    deferred transfers, and audit metadata all use the same effective resource set.
    Empty or stale selections fail closed, and a globally disabled tool always wins.
  • Restart-free tool updates - Tools → Save & Apply validates and publishes a
    new tool generation for new calls. Active calls keep the generation they started
    with; a failed build leaves the previous generation running.
  • Contexts retired - runtime persona routing now reads Agents from agents.db.
    Legacy YAML Contexts are imported atomically on upgrade, and AI_CONTEXT remains
    a deprecated compatibility alias while dialplans move to AI_AGENT.
  • Cleaner first run - empty installations start with Receptionist, Sales, and
    Support instead of a collection of demonstration Contexts.
  • Call History compatibility - tool names remain google_calendar,
    microsoft_calendar, and leave_voicemail, so existing filters and reports keep
    working.

Before upgrading-especially from v7.3.0-v7.3.3-read the
current upgrade procedure
and Contexts → Agents migration guide.

v7.3.5 - Caller connection ringback 📞

Callers no longer wait through silent provider or pipeline startup.

  • Per-agent ringback control - enable Play ringback while connecting in
    the Agents UI; tone:ring is supplied as the default repeating Asterisk tone.
  • One implementation for every call path - full-agent providers and modular
    pipelines share the same caller-only lifecycle, without sending setup audio to
    the AI provider.
  • Clean audio handoff - ringback stops on the first provider or pipeline
    greeting audio and is also cleared on no-greeting readiness, startup failure,
    disconnect, or call cleanup.
  • Safe and opt-in - existing agents remain unchanged until the setting is
    enabled. YAML/API users may configure an Asterisk-local tone:, sound:, or
    recording: media URI.

See Connection Audio / Ringback
and the v7.3.5 changelog.

v7.3.3 - Local AI stabilization 🧠

v7.3.3 is a Local-AI-only stabilization release. It adds no providers and keeps
the cloud-provider call paths unchanged.

  • Calls are isolated by session - agent prompts and conversation state no
    longer mutate shared Local AI Server configuration or leak across reused
    WebSocket connections. AI Engine and Local AI Server should be upgraded
    together; the legacy unscoped switch remains temporarily compatible.
  • Barge-in abandons interrupted output - late LLM/TTS work is quarantined,
    the interrupted exchange is removed from weak-model history, and the
    replacement turn stays focused on what the caller just said.
  • Farewells finish exactly once - Local hangup_call speaks the selected
    Kokoro/Piper/etc. farewell without a second LLM rewrite, drains partial
    AudioSocket or RTP tails, records agent_hangup, and then disconnects.
  • CPU/GPU deployment is safer - dependency pins, CUDA/cuDNN validation,
    optional llama.cpp architecture targeting, and idempotent preflight checks
    reduce first-build and rerun failures.
  • Community GPU evidence - Tesla V100S testing passed Faster-Whisper CUDA
    float16, Llama 3.1 8B Q4_K_M, Kokoro, AudioSocket, ExternalMedia, barge-in,
    terminal hangup, concurrent session isolation, and restart recovery.

See the Local AI community test matrix and the
Unreleased changelog for the complete scope.

v7.3.2 - stabilization release 🛡️

v7.3.2 is a stabilization-only patch release built from the supervised
AudioSocket and ExternalMedia validation cycle.

  • No new providers - scope is limited to reliability, deployment safety,
    documentation, and contributor-facing CI.
  • Grok ExternalMedia repaired - clean barge-in, cancelled-output quarantine,
    named-instance runtime inheritance, complete replacement turns, and exact
    inactivity announcements through xAI force_message.
  • AudioSocket and modular pipelines hardened - terminal playback, pipeline
    producer ownership, talk-detect echo, and inactivity-grace regressions are
    covered by focused tests and supervised calls.
  • Updater and provider-failure recovery hardened - safer ownership,
    rollback/stash handling, readiness validation, and an opt-in dialplan redirect.
  • PR quality gates expanded - Admin backend/frontend checks and CLI
    cross-compilation now run before merge.

Release evidence and remaining gates are tracked in the
v7.3.2 validation matrix.

v7.3.1 - Silence watchdog & safe call endings ☎️

AVA now protects silent calls and finishes every terminal message before disconnecting.

  • 30-second inbound inactivity protection by default - AVA asks “Are you still there?”, waits 15 seconds for a reply, then speaks a configurable final warning and ends the call. Outbound agents remain opt-in.
  • The agent keeps its configured voice - check-ins and final warnings are synthesized by the active Google Live, OpenAI Realtime, Grok, Deepgram, ElevenLabs, local full-agent, or pipeline voice.
  • Transport-safe hangup - watchdog and hangup_call farewells drain AudioSocket or ExternalMedia/RTP streaming buffers and ARI file playback before ARI disconnects the caller. Fixed sleeps no longer clip long final sentences.
  • Deepgram and ElevenLabs lifecycle fixes - Deepgram control frames no longer split greetings, and ElevenLabs response-completion plus hosted-silence handling keeps AVA's watchdog authoritative.
  • Global and per-agent controls - configure defaults under Advanced Settings → Voice Activity Detection → Caller Inactivity, then optionally override them per agent. Call History labels watchdog endings as No input timeout.

See Caller inactivity configuration, ElevenLabs setup, and the full v7.3.1 changelog.

v7.3.0 - Per-agent voices 🎙️

Voice now belongs to agents. Configure one provider, create multiple agents that share it - each with its own voice.

  • Provider-aware voice picker in the Agent form: a dropdown of OpenAI's 10 GA voices, suggestions + custom clone IDs for Grok, Google Live's 30 prebuilt voices, Deepgram's Aura models - the control adapts to the agent's selected AI Engine.
  • Safe by default - the provider-level voice becomes the default voice; agents without one behave exactly as before. Unrecognized values (OpenAI/Google/Deepgram catalogs are validated) log a warning and fall back - a bad voice value never fails a call.
  • Observable - every call logs the resolved voice and its source, and Call History shows "Voice: marin (from agent)" per call.
  • Agent voice changes apply instantly - no engine restart.

Thanks @foytech for seeding this feature (#497). Full guide: docs/VOICE_SELECTION.md.

v7.2.0 - Live-status dashboard 📡

Real-time system status for the Admin UI - pushed, not polled.

  • Live-status hub - a single /api/live-status snapshot endpoint plus an SSE stream (/api/live-status/stream) aggregates AI Engine health, Local AI connectivity, active sessions, audio directories, platform checks, and Asterisk ARI into one normalized status feed.
  • Push-first - ai_engine and local_ai_server push their own readiness to the Admin UI (POST /api/live-status/publish, authenticated with LIVE_STATUS_PUSH_TOKEN), so the dashboard converges in sub-second time after a restart instead of waiting on staggered polls. Legacy /api/system/* probes remain as fallback/enrichment.
  • Configurable - LIVE_STATUS_POLL_INTERVAL_SECONDS (default 30 s, min 2 s) and LIVE_STATUS_INITIAL_PROBE_TIMEOUT_SECONDS (default 2 s), read live from .env.

Full notes in CHANGELOG.md.

v7.1.1 - Dashboard reliability & Admin UI polish 🛠️

A focused quality release across the Admin UI - no call-path changes.

  • Dashboard reliability - the Asterisk status pill no longer flaps on a transient ARI blip: it reads the engine's authoritative, reconnect-supervised ARI state and applies hysteresis. The system endpoints the Dashboard polls every 5s no longer block the admin event loop, the heaviest is TTL-cached, polling backs off on errors, failed polls surface in the error banner, and a single bad poll no longer flashes cards to "Loading…".
  • No more "Loading configuration…" flash - ~11 config pages now seed from a shared stale-while-revalidate cache of the config document, so revisiting a settings page is instant.
  • Accessibility (WCAG AA) - form labels programmatically associated with inputs, a focus-trapping modal, a navigation landmark + "skip to content" link, accessible names on icon-only buttons, non-colour status cues on the topology, a visible dark-mode toggle on-state, and light-mode contrast fixes. Debug console.logs (including one that leaked the auth token to the browser console) were removed.
  • Prompt editor - configured tool names are colour-coded by their in-call status (enabled / global / not-enabled) as you type.
  • Fix (#436) - a canonical google_live: { type: full } provider can be edited and saved again.

Full notes in CHANGELOG.md.

v7.0.0 - the Agents release 🎯

The biggest release yet: manage your AI agents from the Admin UI, not a config file.

  • 🤖 Agents tab - create, edit, and manage agents in the UI. Start from a template (receptionist, after-hours, appointment booker, and more), set the prompt and provider, and copy a ready-to-paste dialplan snippet.
  • 📊 Multi-agent dashboard - live KPIs (active agents, active calls, calls routed, transfers), per-agent stats, and routing breakdowns at a glance.
  • ☎️ New AI_AGENT dialplan variable - route a call to an agent by name. Your existing AI_CONTEXT dialplans keep working unchanged.
  • 🔄 Automatic migration - your existing contexts move into a local agents database on first start. Back up agents.db before later major-version upgrades; see the operator migration guide for rollback boundaries.
  • 🔒 Security hardening - no more admin/admin: a one-time admin password is generated and must be changed at first login. Config exports no longer bundle your .env by default.

⚠️ Major release - please read the Upgrade Notes before upgrading from 6.x.

v6.5.4 (2026-05-25) - OpenAI Realtime GA cleanup across every code path

Follow-up to the v6.5.3 hotfix. v6.5.3 only flipped config/ai-agent.yaml; v6.5.4 brings the rest of the codebase in line:

  • Pydantic defaults in src/config.py now default to api_version: ga + model: gpt-realtime (so fresh wizard installs are correct).
  • Admin UI "Add Provider" template for OpenAI Realtime no longer seeds the sunset preview model.
  • Model dropdown removes the 5 sunset preview options and adds 3 new GA models - gpt-realtime-1.5 (best audio-in/audio-out quality), gpt-realtime-2 (reasoning voice model, GPT-5-class), and gpt-realtime-mini (cost-optimized) - alongside the existing gpt-realtime.
  • Legacy preview values in operator YAML now render in a "Custom (legacy - will not connect)" optgroup with a yellow warning banner above the form so the broken state is visible without silently swapping the operator's config.
  • Engine emits a one-shot warning when api_version: beta is detected in config (exactly once per provider lifetime, not per reconnect attempt).
  • Docs: full rewrite of docs/Provider-OpenAI-Setup.md model section + fix to docs/TROUBLESHOOTING_GUIDE.md.
v6.5.3 hotfix (2026-05-25) - OpenAI Realtime restored

OpenAI sunset the Realtime Beta API on 2026-05-12 and removed the gpt-4o-realtime-preview-2024-12-17 model on 2026-05-07. Shipped config/ai-agent.yaml still pinned api_version: beta + that preview model, so every operator using OpenAI Realtime hit error.code: beta_api_shape_disabled and the WebSocket closed immediately. Two-line config flip - no code change required. The provider's GA wire-protocol path has shipped since v6.0.0; v6.5.3 just makes it the default everyone gets:

  • api_version: ga (was beta)
  • model: gpt-realtime (was gpt-4o-realtime-preview-2024-12-17)

If you have an ai-agent.local.yaml that explicitly pins api_version: beta, remove the override or change it to ga. Refs: OpenAI deprecations, gpt-realtime.

v6.5.2 (2026-05-24) - xAI Grok + multi-instance full-agent providers

🆕 xAI Grok Voice Agent realtime provider (NEW, v6.5.2)

  • Fifth full-agent realtime provider - structurally parallel to OpenAI Realtime and Google Live, built on a multi-instance foundation from day one
  • μ-law @ 8 kHz caller input with no input resampling; observed xAI output is PCM16 @ 24 kHz and AAVA converts it to the configured Asterisk transport format
  • Five named voices (eve, ara, rex, sal, leo) plus custom voice ID free-text for cloned voices
  • Custom function-tools identical to OpenAI Realtime; xAI-native tools (web_search, x_search, file_search, mcp) accepted via YAML extra_tools escape hatch
  • Conservative long-session warning at 28 minutes for compatibility with older xAI limits; xAI's current Voice Agent model page lists a 120-minute maximum session
  • Setup guide: docs/Provider-Grok-Setup.md

🏢 Multi-instance full-agent providers (NEW, v6.5.2)

  • Run multiple instances of the same full-agent provider type with isolated credentials (e.g. acme_google_live + globex_google_live both using type: google_live)
  • Per-instance credential files at /app/project/secrets/providers/<provider_key>/{api-key,agent-id,vertex-json} - the new per-provider Vertex upload path does NOT mutate .env
  • Route via AI_PROVIDER, an Agent's provider selection plus AI_AGENT, or DID-based dispatch with Asterisk Gosub
  • Setup guide: docs/Multi-Instance-Full-Agent-Providers.md
  • Breaking for multi-instance setups: short aliases AI_PROVIDER=openai, AI_PROVIDER=google, provider: deepgram_agent now fail validation - use exact provider instance keys instead. Single-instance setups using the canonical block names are unaffected.

🎛 Admin UI polish (v6.5.2)

  • Uniform per-instance credentials paste-style uploader across all full-agent provider forms (Grok, OpenAI Realtime, Deepgram, Google Live, ElevenLabs Agent)
  • EnvPage adds a new "Per-Instance Provider Credentials" status section so operators can audit credential file presence without SSH
  • Dashboard System Topology rebuilt: tri-state per-component health with 2-strike debounce (transient probe blips no longer flip dots red), responsive provider grid, multi-instance sub-rows grouped by provider type, Asterisk + AI Engine cards stretched to match Providers height
  • Backend probe timeouts bumped (ai_engine 1.5s → 5s; local_ai_server 2.5s → 5s) to stop legitimate localhost probes timing out under load
  • ~260 inline help tooltips backfilled across provider forms, Setup Wizard, and System pages - new HelpTooltip is viewport-aware (flips placement to keep popovers visible in scrolled modals)

📞 Call recordings (v6.5.2)

  • Browser playback for compact .ulaw recordings (Asterisk's 8 kHz μ-law output, ~10× smaller than PCM WAV) via server-side audioop.ulaw2lin WAV wrapping - no transcode dependency
  • Uppercase .WAV, compressed WAV, and .gsm recordings transcode via sox; AAVA_RECORDING_TRANSCODE_TIMEOUT_SEC env var (default 120s) governs the timeout

Previously in v6.5.1

  • 💻 CPU-demo profile end-to-end - Faster-Whisper tiny.en + Piper + Qwen 0.5B wired through the Admin UI; runtime Device/Compute selectors with CPU/float16 gating; Filler Audio and LLM/TTS Overlap runtime toggles
  • 🛡️ Local provider hot-path hardening - send_audio() no longer blocks on per-frame reconnect; asyncio.Lock serializes _reconnect() against _send_loop's on-ConnectionClosed path
  • 🎨 Faster-Whisper verify path tolerates the runtime CUDA→CPU fallback so working CPU/int8 configurations no longer get rolled back as "verification failed"

Previously in v6.5.0

  • 🔧 Local LLM tool-gated response (#368) - new WS protocol message types tool_context / tool_result v2; per-WebSocket fail-closed sync prevents cross-call ACL/policy/prompt leakage on reused connections
  • ☁️ Gemini 3.1 Flash Live verified compatible (no engine changes); Vertex AI mode is the production answer for #351 barge-in
  • 🎤 Deepgram Flux v2 + nova-3 default flip; Admin UI surfaces "Flux Turn-Detection Tuning" panel for flux-* models
  • 🩺 Admin UI HTTP-tool-test guard now reads .env first so Environment-page edits to AAVA_HTTP_TOOL_TEST_* take effect without a container restart (#370)

For older releases, expand Previous Versions below. Full release notes in CHANGELOG.md.

Previous Versions
v6.4.2 - Microsoft Calendar V1 + Google Calendar overhaul
  • 🗓️ Microsoft Calendar - Outlook / Microsoft 365 integration via device-code OAuth, Graph free/busy, legacy per-context account binding, Tools UI Connect/Verify/Disconnect (migrated to per-Agent resource access in v7.4)
  • 📅 Google Calendar - multi-account / legacy per-context binding (#338), JSON upload + auto-discover, Domain-Wide Delegation, native free/busy mode (migrated to per-Agent resource access in v7.4)
  • 🎯 Reschedule reliability - server-side event_id resolution + 400/404 fallback eliminates LLM-id-hallucination duplicate bookings
  • 🔧 Date/time prompt placeholders ({today}, {current_date}, etc.) so models stop reasoning with stale years
  • OpenAI Realtime duplicate-events fix (per-response_id async-event gating); per-context tool_overrides now actually take effect on OpenAI Realtime / Deepgram / Google Live; Google Live 30-voice catalog (#349)
v6.4.1 - CPU Latency Optimization
  • ⚡ Streaming LLM→TTS overlap - sentence-boundary token streaming, sub-2s perceived latency on pipelines
  • Pipeline filler audio (instant "One moment please" acknowledgment) configurable via Admin UI
  • Qwen 2.5-1.5B Instruct recommended for CPU; ~15-30 tok/s vs Phi-3's ~0.8 tok/s
  • Direct PCM→µ-law conversion in all 5 TTS backends (10-50ms saved per response)
  • Preflight hardening - Buildx detection, RAM/disk/network checks, GPU install gated behind --apply-fixes
v6.4.0 - Attended Transfer & Russian Speech
  • 📞 Attended transfer with three screening modes: basic_tts, ai_briefing, caller_recording
  • ExternalMedia RTP streaming delivery; provider-agnostic transfer-target tool guidance
  • 🗣️ Russian speech backends: Sherpa Offline STT (VAD-gated), T-one STT, Silero TTS (multi-language)
  • 🎧 Admin UI: fullscreen dashboard panels, per-message conversation timestamps, JSONPath [*] HTTP-tool wildcards
v6.3.2 - Azure Speech & MiniMax LLM
  • Microsoft Azure Speech Service STT & TTS pipeline adapters (REST batch, WebSocket streaming, SSML)
  • MiniMax LLM M2.7 via OpenAI-compatible API with tool-calling
  • Call Recording Playback in Admin UI Call Details modal
  • Azure SSRF prevention, PII logging discipline, input validation hardening
v6.3.1 - Local AI Server & Guardrails
  • Backend enable/rebuild flow, model lifecycle UX, GPU ergonomics, CPU-first onboarding
  • Structured local tool gateway, hangup guardrails, tool-call parsing robustness
  • agent check --local / --remote CLI verification
v6.1.1 - Operator Config & Live Agent Transfer
  • Operator config overrides (ai-agent.local.yaml), live agent transfer tool
  • Experimental ViciDial community-tested configuration notes, Asterisk config discovery in Admin UI
  • OpenAI Realtime GA API, Email system overhaul, NAT/GPU support
v5.3.1 - Phase Tools & Stability
  • Pre-call HTTP lookups, in-call HTTP tools, and post-call webhooks (Milestone 24)
  • Deepgram Voice Agent language configuration
  • ExternalMedia RTP greeting cutoff fix
v4.4.3 - Cross-Platform Support
  • 🌍 Pre-flight Script: System compatibility checker with auto-fix mode.
  • 🔧 Admin UI Fixes: Models page, providers page, dashboard improvements.
  • 🛠️ Developer Experience: Code splitting, ESLint + Prettier.
v4.4.2 - Local AI Enhancements
  • 🎤 New STT Backends: Kroko ASR, Sherpa-ONNX.
  • 🔊 Kokoro TTS: High-quality neural TTS.
  • 🔄 Model Management: Dynamic backend switching from Dashboard.
  • 📚 Documentation: LOCAL_ONLY_SETUP.md guide.
v4.4.1 - Admin UI
  • 🖥️ Admin UI: Modern web interface (http://localhost:3003).
  • 🎙️ ElevenLabs Conversational AI: Premium voice quality provider.
  • 🎵 Background Music: Ambient music during AI calls.
v4.3 - Complete Tool Support & Documentation
  • 🔧 Complete Tool Support: Works across ALL pipeline types.
  • 📚 Documentation Overhaul: Reorganized structure.
  • 💬 Discord Community: Official server integration.
v4.2 - Google Live API & Enhanced Setup
  • 🤖 Google Live API: Gemini 2.0 Flash integration.
  • 🚀 Interactive Setup: agent init wizard (agent quickstart remains available for backward compatibility).
v4.1 - Tool Calling & Agent CLI
  • 🔧 Tool Calling System: Transfer calls, send emails.
  • 🩺 Agent CLI Tools: doctor, troubleshoot, demo.

🌟 Why Asterisk AI Voice Agent?

Feature Benefit
Asterisk-Native Works directly with your existing Asterisk/FreePBX - no external telephony providers required.
Truly Open Source MIT licensed with complete transparency and control.
Modular Architecture Choose cloud, local, or hybrid - mix providers as needed.
Production-Ready Battle-tested baselines with Call History-first debugging.
Cost-Effective Local Hybrid costs ~$0.001-0.003/minute (LLM only).
Privacy-First Keep audio local while using cloud intelligence.

✨ Features

7 Golden Baseline Configurations

  1. OpenAI Realtime (Recommended for Quick Start)

    • Modern cloud AI with natural conversations (<2s response).
    • Config: config/ai-agent.golden-openai.yaml
    • Best for: Enterprise deployments, quick setup.
  2. Deepgram Voice Agent (Enterprise Cloud)

    • Advanced Think stage for complex reasoning (<3s response).
    • Config: config/ai-agent.golden-deepgram.yaml
    • Best for: Deepgram ecosystem, advanced features.
  3. Google Live API (Multimodal AI)

    • Gemini Live (Flash) with multimodal capabilities (<2s response).
    • Config: config/ai-agent.golden-google-live.yaml
    • Best for: Google ecosystem, advanced AI features.
  4. ElevenLabs Agent (Premium Voice Quality)

    • ElevenLabs Conversational AI with premium voices (<2s response).
    • Config: config/ai-agent.golden-elevenlabs.yaml
    • Best for: Voice quality priority, natural conversations.
  5. Local Hybrid (Privacy-Focused)

    • Local STT/TTS + Cloud LLM (OpenAI). Audio stays on-premises.
    • Config: config/ai-agent.golden-local-hybrid.yaml
    • Best for: Audio privacy, cost control, compliance.
  6. Telnyx AI Inference (Cost-Effective Multi-Model)

    • Local STT/TTS + Telnyx LLM with 53+ models (GPT-4o, Claude, Llama).
    • OpenAI-compatible API with competitive pricing.
    • Config: config/ai-agent.golden-telnyx.yaml
    • Best for: Model flexibility, cost optimization, multi-provider access.
  7. xAI Grok Voice Agent (Realtime Voice)

    • xAI realtime voice with five named voices (eve/ara/rex/sal/leo) or a custom cloned voice; μ-law @ 8 kHz caller input and observed PCM16 @ 24 kHz output converted for Asterisk.
    • Config: config/ai-agent.golden-grok.yaml
    • Best for: xAI ecosystem, telephony-native low-latency audio.

Additional LLM Providers

  • MiniMax LLM (High-Performance Cost-Effective)
    • Local STT/TTS + MiniMax M3 LLM with enhanced reasoning and coding.
    • OpenAI-compatible API with tool-calling support.
    • Models: MiniMax-M3 (default, latest flagship), MiniMax-M2.7 (previous flagship), MiniMax-M2.7-highspeed (low-latency).
    • Activate: set MINIMAX_API_KEY in .env, then configure providers.minimax_llm in config/ai-agent.yaml (see the minimax_llm section with enabled: true).
    • Best for: Long-context conversations, cost-effective high-performance LLM.

Fully Local (Optional)

AVA also supports a Fully Local mode (100% on-premises, no cloud APIs). Three topologies are supported:

Topology Latency Best For
CPU-Only 5-15s/turn Privacy, testing
GPU (same box) 0.5-2s/turn Production local
Split-Server (remote GPU) 1-3s/turn PBX on VPS + GPU box

GPU setup uses docker-compose.gpu.yml overlay with CUDA-enabled llama.cpp. Community-validated: RTX 4090 achieves ~1.0s E2E.

🏠 Self-Hosted LLM with Ollama (No API Key Required)

Run your own local LLM using Ollama - perfect for privacy-focused deployments:

# In ai-agent.yaml
active_pipeline: local_hybrid
pipelines:
  local_hybrid:
    stt: local_stt
    llm: ollama_llm
    tts: local_tts

Features:

  • No API key required - fully self-hosted on your network
  • Tool calling support with compatible models (Llama 3.2, Mistral, Qwen)
  • Local Vosk STT + Your Ollama LLM + Local Piper TTS
  • Complete privacy - all processing stays on-premises

Requirements:

  • Mac Mini, gaming PC, or server with Ollama installed
  • 8GB+ RAM (16GB+ recommended for larger models)
  • See docs/OLLAMA_SETUP.md for setup guide

Recommended Models:

Model Size Tool Calling
llama3.2 2GB ✅ Yes
mistral 4GB ✅ Yes
qwen2.5 4.7GB ✅ Yes

Technical Features

  • Tool Calling System: AI-powered actions (transfers, emails) work with any provider.
  • Agent CLI Tools: setup, check, rca, update, version commands (legacy aliases: init, doctor, troubleshoot).
  • Modular Pipeline System: Independent STT, LLM, and TTS provider selection.
  • Dual Transport Support: AudioSocket (default in config/ai-agent.yaml) and ExternalMedia RTP (both supported - see the transport matrix).
  • Per-Agent Audio Profiles: Stable and enhanced 8 kHz telephony profiles, plus opt-in 16 kHz AudioSocket with provider-native PCM conversion on supported Asterisk versions and G.722/wideband endpoint or trunk legs. ExternalMedia RTP remains on the supported 8 kHz profiles; G.711/PSTN Agents remain on an 8 kHz profile.
  • Streaming-First Downstream: Streaming playback when possible, with automatic fallback to file playback for robustness.
  • High-Performance Architecture: Separate ai_engine and local_ai_server containers.
  • Observability: Built-in Call History for per-call debugging + optional /metrics scraping.
  • State Management: SessionStore for centralized, typed call state.
  • Barge-In Support: Interrupt handling with configurable gating.

🖥️ Admin UI

Modern web interface for configuration and system management.

Quick Start:

docker compose -p asterisk-ai-voice-agent up -d --build --force-recreate admin_ui
# Access at: http://localhost:3003
# Retrieve one-time password: docker compose -p asterisk-ai-voice-agent logs admin_ui | grep -i password

Key Features:

  • Setup Wizard: Visual provider configuration.
  • Dashboard: Real-time system metrics, container status, and Asterisk connection indicator.
  • Asterisk Setup: Live ARI status, module checklist, config audit with guided fix commands.
  • Live Logs: WebSocket-based log streaming.
  • YAML Editor: Monaco-based editor with validation.

🎥 Demo

Watch the demo

📞 Try it Live! (US Only)

Experience our production-ready configurations with a single phone call:

  • Standard Voice: (925) 736-6718
  • HD Voice: (909) 788-2282

The HD Voice demo line uses a G.722-capable SIP trunk and Agents assigned the
opt-in wideband_pcm_16k Audio Profile. Wideband audio is available when the
caller's carrier and device negotiate a G.722 path; other calls fall back to
standard telephony audio. The clearer sound comes from both pieces: the trunk
must preserve G.722 and AAVA must keep the call on its 16 kHz AudioSocket path.

  • Press 4 → xAI Grok Realtime (NEW in v6.5.2)
  • Press 5 → Google Live API (Multimodal AI with Gemini 2.0)
  • Press 6 → Deepgram Voice Agent (Enterprise cloud with Think stage)
  • Press 7 → OpenAI Realtime API (Modern cloud AI, most natural)
  • Press 8 → Local Hybrid Pipeline (Privacy-focused, audio stays local)
  • Press 9 → ElevenLabs Agent (Santa voice with background music)
  • Press 10 → Fully Local Pipeline (100% on-premises, CPU-based)

🛠️ AI-Powered Actions

Your AI agent can perform real-world telephony actions through tool calling.

Unified Call Transfers

Caller: "Transfer me to the sales team"
Agent: "I'll connect you to our sales team right away."
[Transfer to sales queue with queue music]

Supported Destinations:

  • Extensions: Direct SIP/PJSIP endpoint transfers.
  • Queues: ACD queue transfers with position announcements.
  • Ring Groups: Multiple agents ring simultaneously.

Call Control & Voicemail

  • Cancel Transfer: "Actually, cancel that" (during ring).
  • Hangup Call: Ends call gracefully with farewell.
  • Voicemail: Routes to voicemail box.

Agent-scoped resource access (v7.4+)

The Tools page owns global configuration and inventory. The Agents page
controls which inventory entries each Agent can use:

Resource family Per-Agent choices
Transfers Inherit all destinations, select destination keys, or deny all
Google Calendar Inherit all calendars, select calendar keys, or deny all
Microsoft Calendar Inherit all accounts, select account keys, or deny all
Voicemail Inherit the default mailbox, select one mailbox, or deny all

Global disablement is authoritative. Selected policies with no valid keys fail
closed. See Agents for the
runtime model and Tool Calling for operator setup.

Email Integration

  • Automatic Call Summaries: Admins receive full transcripts and metadata.
  • Caller-Requested Transcripts: "Email me a transcript of this call."
Tool Description Status
transfer Transfer to extensions, queues, or ring groups
cancel_transfer Cancel in-progress transfer (during ring)
hangup_call End call gracefully with farewell message
leave_voicemail Route caller to voicemail extension
send_email_summary Auto-send call summaries to admins ⚙️ Disabled by default
request_transcript Caller-initiated email transcripts ⚙️ Disabled by default

HTTP Tools (Pre/In/Post-Call) Example

# In ai-agent.yaml
tools:
  pre_call_lookup:
    kind: generic_http_lookup
    phase: pre_call
    enabled: true
    is_global: false
  post_call_webhook:
    kind: generic_webhook
    phase: post_call
    enabled: true
    is_global: false

in_call_tools:
  intent_router:
    kind: in_call_http_lookup
    enabled: true
    is_global: false

# Assign phase tools in Admin UI → Agents → Edit Agent → Tools.
# Agent assignments are stored in data/operator/agents.db, not in live
# YAML Context blocks. The global definitions above remain in YAML.

🩺 Agent CLI Tools

Production-ready CLI for operations and setup.

Installation:

curl -sSL https://raw.githubusercontent.com/hkjarral/AVA-AI-Voice-Agent-for-Asterisk/main/scripts/install-cli.sh | bash

Commands:

agent setup               # Interactive setup wizard (recommended)
agent setup --list-targets # List configured providers and pipelines without changes
agent check               # Standard diagnostics report (share this output when asking for help)
agent check --local       # Verify local AI server (STT, LLM, TTS) on this host
agent check --remote <ip> # Verify local AI server on a remote GPU machine
agent update              # Pull latest code + rebuild/restart as needed
agent rca --call <call_id> --no-llm # Deterministic post-call RCA
agent config validate     # Validate provider, pipeline, transport, and audio configuration
agent dialplan --agent default # Generate an AI_AGENT dialplan snippet
agent version             # Version information

⚙ Configuration

Three-File Configuration

  • config/ai-agent.yaml - Golden baseline configs (git-tracked, upstream-managed).
  • config/ai-agent.local.yaml - Operator overrides (git-ignored). Any keys here are deep-merged on top of the base file at startup; all Admin UI and CLI writes go here so upstream updates never conflict.
  • .env - Secrets and API keys (git-ignored).

Example .env:

OPENAI_API_KEY=sk-your-key-here
DEEPGRAM_API_KEY=your-key-here
ASTERISK_ARI_USERNAME=asterisk
ASTERISK_ARI_PASSWORD=your-password

Optional: Metrics (Bring Your Own Prometheus)

The engine exposes Prometheus-format metrics on its health/metrics HTTP endpoint at
/metrics (port 15000). This endpoint binds to 127.0.0.1 by default, so it is only
reachable from the engine host - scrape it locally, or set the health endpoint host to
0.0.0.0 (and firewall it) to expose it to an external Prometheus.
Per-call debugging is handled via Admin UI → Call History.


🏗 Project Architecture

Two-container architecture for performance and scalability:

  1. ai_engine (Lightweight orchestrator): Connects to Asterisk via ARI, manages call lifecycle.
  2. local_ai_server (Optional): Runs local STT/LLM/TTS models (Vosk, Faster Whisper, Whisper.cpp, Sherpa, Kroko, Piper, Kokoro, MeloTTS, llama.cpp).
graph LR
    A[Asterisk Server] <-->|ARI, RTP| B[ai_engine]
    B <-->|API| C[AI Provider]
    B <-->|WS| D[local_ai_server]
    
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style B fill:#bbf,stroke:#333,stroke-width:2px
    style C fill:#bfb,stroke:#333,stroke-width:2px
    style D fill:#fbf,stroke:#333,stroke-width:2px

📊 Requirements

Platform Requirements

Requirement Details
Architecture x86_64 (AMD64) only
OS Linux with systemd
Supported Distros Ubuntu 20.04+, Debian 11+, RHEL/Rocky/Alma 8+, Fedora 38+, Sangoma Linux

Note: ARM64 (Apple Silicon, Raspberry Pi) is not currently supported. See Supported Platforms for the full compatibility matrix.

Minimum System Requirements

Type CPU RAM GPU Disk
Cloud (OpenAI/Deepgram) 2+ cores 4GB None 1GB
Local Hybrid (cloud LLM) 4+ cores 8GB+ None 2GB
Fully Local (CPU) 4+ cores (2020+) 8-16GB None 5GB
Fully Local (GPU) 4+ cores 8-16GB RTX 3060+ 10GB

Software Requirements

  • Docker + Docker Compose v2
  • Asterisk 18+ with ARI enabled
  • FreePBX (recommended) or vanilla Asterisk

Preflight Automation

The preflight.sh script handles initial setup:

  • Seeds .env from .env.example with your settings
  • Prompts for Asterisk config directory location
  • Sets ASTERISK_UID/ASTERISK_GID to match host permissions (fixes media access issues)
  • Re-running preflight often resolves permission problems

🗺 Documentation

Getting Started

Configuration & Operations

Integrations & Early-Stage Features

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.