AriLink
Modern ARI-STASI server, built on Asterisk ARI with real-time speech-to-text transcription, voice-activated dialing, and WebSocket integration. Powerful telephony control using TypeScript/Node.js. THIS APP IS IN HEAVY DEVELOPMENT!!!!
Install / Use
/learn @alexiokay/AriLinkREADME
AriLink
<p align="center"> <img src="./assets/header.webp" alt="AriLink" width="100%" /> <br> <em><a href="https://asterisk.org"><img src="https://asterisk.org/wp-content/uploads/asterisk-logo.png" alt="Asterisk" width="50" style="vertical-align: middle;"/></a>-powered telephony platform with real-time transcription, campaigns, and a full web dashboard</em> </p>Overview
AriLink is a telephony platform built on Asterisk's ARI (Asterisk REST Interface). It combines a Nuxt 4 web dashboard, a Rust RTP audio pipeline, and local AI transcription into a single system for managing calls, running outbound campaigns, and monitoring everything in real time.
<p align="center"> <img src="./assets/dashboard.png" alt="AriLink Dashboard" width="100%" /> </p>Key Features
- LLM Voice Agent - Full conversational AI via LlmChatBrain — streaming LLM responses with sentence-by-sentence TTS
- Barge-In - Interrupt bot speech mid-sentence. AEC3 echo cancellation + Silero VAD eliminate false triggers
- Pluggable Brains - Swap call logic via config: LLM Chat, IVR Transfer, Direct Dial, OpenClaw AI
- Local TTS - Text-to-speech via Kokoro (82M params) — zero API cost, ~100ms latency
- Local STT - Real-time transcription via Parakeet TDT (25 languages) or Whisper, with Google Cloud fallback
- Web Dashboard - Full management UI with real-time service status, active calls, logs, and configuration
- Campaign Engine - Automated outbound dialing with configurable concurrency and call scripts
- OpenClaw Integration - Bridge to OpenClaw AI agent ecosystem via Socket.IO
- Call History - SQLite-backed call records with search and transcription playback
- CLI Tool -
arilink init/start/stop/status/logsfor Docker deployments - Built-in Softphone - SIP softphone directly in the dashboard for testing
- SSH Terminal & File Manager - Remote PBX management and audio file uploads via SFTP
Architecture
Built on Nuxt 4 + Nitro (single server for SPA, API, and Socket.IO), with a Rust RTP server for audio and Python services for transcription:
flowchart TD
subgraph Dashboard["Nuxt 4 Dashboard"]
UI[Vue 3 SPA]
API[Nitro API Routes]
SIO[Socket.IO]
end
subgraph Core["Node.js Core"]
CTRL[ARI Controller]
HARNESS[BrainHarness]
BRAINS["Brains<br/><small>LlmChat · IvrTransfer<br/>DirectDial · OpenClaw</small>"]
CAMP[Campaign Engine]
HIST[Call History]
end
subgraph Audio["Rust RTP Server"]
RTP[RTP Receiver :8000]
AEC["AEC3 Echo Cancellation<br/>+ Silero VAD"]
end
subgraph AI["AI Services"]
PKT[Parakeet STT]
WHSP[Whisper]
GCS[Google Cloud Speech]
KOKORO[Kokoro TTS]
end
PBX[Asterisk PBX] <-->|ARI WebSocket| CTRL
PBX -->|RTP Audio| RTP
RTP --> AEC
AEC -->|Clean audio| PKT
AEC -.->|Fallback| WHSP
AEC -.->|Fallback| GCS
AEC -->|user_speaking| CTRL
PKT -->|Transcription| CTRL
CTRL --> HARNESS --> BRAINS
BRAINS -->|speak| KOKORO
KOKORO -->|slin16 audio| PBX
CTRL --> HIST
CAMP --> CTRL
SIO <--> Core
SIO <-->|Real-time| UI
API --> HIST
BRAINS <-.->|Socket.IO| OC[OpenClaw AI]
Core Components
<details> <summary><b>Engine</b></summary>Orchestrates all backend services on startup:
- Starts the Rust RTP server and Parakeet transcription (in parallel)
- Connects to Asterisk ARI
- Wires up the Dashboard, Call History, and Campaign Engine
- Graceful shutdown of all child processes
Interfaces with Asterisk PBX via ARI:
- Manages call flows, bridges, and DTMF input
- Delegates call logic to pluggable assistants
- Routes transcription results to active calls
- Handles contact lookups for voice-activated dialing
High-performance audio pipeline with voice intelligence:
- Receives RTP audio from Asterisk ExternalMedia channels
- AEC3 echo cancellation — WebRTC-grade, 30-40dB attenuation with adaptive threshold
- Silero VAD — neural speech detection during TTS playback (barge-in trigger)
- RMS gate — filters noise below threshold before sending to STT
- Per-session audio routing with codec handling (slin16, Opus)
- Forwards clean audio to transcription services via WebSocket
Local TTS service for zero-latency, zero-cost speech synthesis:
- Kokoro 82M — lightweight neural TTS model
- Outputs 16kHz slin16 PCM directly for Asterisk playback
- Sentence-by-sentence streaming — start speaking before LLM finishes
- Configurable voice, speed, and language
- WebSocket protocol for low-latency communication
Multiple backend support with automatic failover:
- Parakeet TDT 0.6B-v3 (recommended) — 25 languages, 2000x+ real-time speed, runs on GPU
- Whisper — Slower but highly accurate
- Google Cloud Speech — Cloud-based fallback (requires API credentials)
- Streaming transcription with interim and final results
- Priority chain configured via
TRANSCRIPTION_SERVICESenv var
Modular call logic — swap behavior via config.json without changing code:
- LlmChatBrain — Full conversational AI (streaming LLM + sentence-by-sentence TTS + barge-in)
- IvrTransferBrain — DTMF gate → voice → contact match → transfer
- DirectDialBrain — Voice → contact match → direct transfer
- OpenClawBrain — Bridge to OpenClaw AI agent ecosystem
- BrainHarness — shared voice intelligence (filler filtering, turn debouncing, barge-in handling) benefits all brains automatically
- Create custom brains by implementing the
IBraininterface
Automated outbound dialing:
- Upload phone lists and run campaigns from the dashboard
- Configurable concurrency, retry logic, and call scripts
- Real-time campaign progress via Socket.IO
- Per-call results stored in campaign-results/
Dashboard Pages
| Page | Description | |------|-------------| | Dashboard | Service status (Asterisk, Rust RTP, Transcription), active calls | | Calls | Call history with transcription, search, and playback | | Assets | Upload/manage Asterisk audio files via SFTP | | Terminal | SSH terminal for remote PBX management | | Campaigns | Create and run outbound call campaigns | | Contacts | Manage contacts for voice-activated dialing | | Assistants | Configure call handling logic per assistant | | Logs | Real-time and historical application logs | | Config | Edit environment variables and server settings | | Docs | Built-in documentation viewer |
Getting Started
Docker (Recommended)
The fastest way to try AriLink — no Node.js, Python, or Asterisk installation needed:
docker compose up -d
This starts 4 services: Asterisk (PBX), Parakeet (STT), Kokoro (TTS), and AriLink (dashboard + engine). Open localhost:3011.
Test with a SIP phone (Zoiper, Linphone): server localhost:5060, extension 1001, password demo1001.
# With GPU acceleration (NVIDIA) — ~1000x faster STT + TTS
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d
# With Rust RTP server (AEC3 echo cancellation + Silero VAD for barge-in)
docker compose --profile rust-rtp up -d
# With live code editing (mount local source)
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
See docs/docker.md for full Docker guide, configuration, and troubleshooting.
Manual Setup
For development or connecting to an existing FreePBX server:
Prerequisites
- Set up FreePBX server:
- New installation? FreePBX Installation Guide
- Already installed? FreePBX ARI Configuration
- Node.js 23+ and npm
- UV (Python package manager) for transcription services:
# Windows PowerShell irm https://astral.sh/uv/install.ps1 | iex
Installation
-
Clone and install dependencies (one command installs everything):
npm installThis automatically installs both the core server and dashboard dependencies.
-
Set up transcription (local speech recognition):
cd transcription-services/parakeet-service python -m venv .venv uv pip install -r requirements.txt -
Configure environment:
cp .env.example .env # Edit .env with your FreePBX IP, ARI credentials, etc.
Running
# Development (hot reload, auto-starts Parakeet if configured)
npm run dev
# Production (builds if needed, then starts)
npm start
# Build only
npm run build
Set
AUTO_START_TRANSCRIPTION=truein.envto have the launcher automatically start Parakeet in parallel with the server. No separate terminal needed.
The dashboard will be available at http://localhost:3011. All settings can be managed from the Config page once the server is running.
Assistant Modes
np
Related Skills
node-connect
339.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.9kCommit, push, and open a PR
