
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.
- Web Dashboard - Full management UI with real-time service status, active calls, logs, and configuration
- Call Management - Incoming and outgoing calls through Asterisk PBX with live transcription
- Campaign Engine - Automated outbound dialing with configurable assistants and call scripts
- Speech-to-Text - Real-time transcription using local AI models (Parakeet TDT, Whisper) or Google Cloud
- Pluggable Assistants - Modular call logic (IVR transfer, direct dial, auto-dialer) with per-assistant configuration
- Built-in Softphone - SIP softphone directly in the dashboard for testing and manual calls
- Call History - SQLite-backed call records with search and transcription playback
- SSH Terminal - Remote PBX management directly from the dashboard
- File Manager - Upload and manage Asterisk audio files (prompts, greetings) via SFTP
- Contact Management - Voice-activated dialing using a contacts database
- Automatic Fallback - Seamlessly switches between transcription providers on failure
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 Engine["Node.js Engine"]
CTRL[ARI Controller]
CAMP[Campaign Engine]
HIST[Call History DB]
LOG[Log Collector]
end
subgraph Audio["Rust RTP Server"]
RTP[RTP Listener :8000]
WS_BRIDGE[WebSocket Bridge]
end
subgraph Transcription["Transcription Services"]
PKT[Parakeet TDT 0.6B]
WHSP[Whisper]
GCS[Google Cloud Speech]
end
PBX[Asterisk PBX] -->|ARI WebSocket| CTRL
PBX -->|RTP Audio| RTP
RTP --> WS_BRIDGE
WS_BRIDGE -->|Audio Stream| PKT
WS_BRIDGE -.->|Fallback| WHSP
WS_BRIDGE -.->|Fallback| GCS
PKT -->|Transcription| WS_BRIDGE
WS_BRIDGE -->|Results| CTRL
CTRL --> HIST
CTRL --> LOG
CAMP --> CTRL
SIO <-->|Real-time| UI
API --> HIST
API --> LOG
SIO <--> Engine
Engine
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
ARI Controller
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
Rust RTP Server
High-performance audio pipeline:
- Receives RTP audio from Asterisk ExternalMedia channels
- Per-session audio routing with codec handling (slin16, Opus)
- Forwards audio to transcription services via WebSocket
- Automatic fallback between transcription providers
Transcription Providers
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
Campaign Engine
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/
| 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 |
- 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
-
Clone and install dependencies (one command installs everything):
npm install
This 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.
# Development (hot reload, auto-starts Parakeet if configured)
npm run dev
# Production (builds if needed, then starts)
npm start
# Build only
npm run buildSet
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.
npm run start:ivr # IVR with transfer (default)
npm run start:dial # Direct dial mode
npm run start:autodialer # Auto-dialer campaign modeThe system uses a central .env file. Key settings:
| Category | Variables |
|---|---|
| PBX | PBX_IP, ASTERISK_LOGIN, ASTERISK_PASSWORD |
| Transcription | TRANSCRIPTION_SERVICES, AUTO_START_TRANSCRIPTION, SPEECH_LANG |
| Server | PORT (default 3011), LISTENER_SERVER, EXTERNAL_HOST |
| Assistants | DEFAULT_ASSISTANT, per-assistant config.json files |
See .env.example for all options with documentation.
- Frontend: Nuxt 4, Vue 3.5, @nuxt/ui, Socket.IO client, SIP.js (softphone)
- Backend: Nitro (Node.js), TypeScript, Socket.IO, ari-client, better-sqlite3
- Audio: Rust RTP server (slin16, Opus), Asterisk ExternalMedia
- Transcription: Parakeet TDT 0.6B-v3 (NeMo), Whisper, Google Cloud Speech
- Infrastructure: Asterisk PBX (FreePBX), SSH/SFTP for remote management
Web UI for monitoring and managementDoneDatabase persistence for call recordsDoneAdditional speech recognition providersDone- Additional providers: Scribe (ElevenLabs), Azure Speech, Deepgram
- Call analytics and reporting
- One-click deployment (Docker, Railway)
- Transcription management GUI (model downloads, provider config)
See docs/ROADMAP.md for the full roadmap.
This project is licensed under the AriLink Community License (ACL) v1.0 - see the LICENSE file for details.
- Free for personal & internal use - View, study, and modify for personal/internal use.
- Commercial use restricted - Internal commercial operations allowed; no redistribution or SaaS.
- No Redistribution - You may not redistribute, white-label, or sell the software.
- Commercial Licensing: For SaaS hosting, resale, or third-party deployment, contact Alexi Pawelec (Discord:
alexispace).
Built with care for modern telephony

