A distributed voice communication platform that integrates Asterisk telephony with AI-powered chatbots for English and Kinyarwanda languages.
# SipForge
SipForge connects Asterisk telephony with AI chatbots. Right now it handles regular voice calls between users, and eventually it'll route calls to English and Kinyarwanda chatbots too.
## What This Actually Does
I needed a way to have voice calls with AI assistants in Kinyarwanda. This is what I ended up building:
1. **Person-to-Person Calls** — Regular SIP phone calls between registered users (works now)
2. **English Chatbot** — Talk to an AI in English (works now)
3. **Kinyarwanda Chatbot** — Talk to an AI in Kinyarwanda (not built yet)
## How It Works
Your phone (or laptop) connects to an Asterisk server via SIP. Asterisk handles the call routing. Regular calls go straight through. Chatbot calls get routed through an orchestrator service that manages the AI pipeline.
```
Your Phone
|
v
Asterisk 20 (SIP server)
|
+---> Regular call (1000 -> 1001)
|
+---> Chatbot call (2000 / 3000)
|
v
Orchestrator (Python/FastAPI + ARI websocket)
|
+-------+-------+
| |
English Bot Kinyarwanda Bot
(Whisper + (not started)
Qwen2.5 +
Piper)
|
v
Redis (sessions)
```
Current state: Asterisk, orchestrator, and English chatbot are working end-to-end. Call extension 2000 to talk to the English bot.
## Try It Out
You need Docker or Podman, ~4GB RAM (for CPU inference), and these ports open: 5060, 8000-8002, 10000-10100.
### Start the Server
Docker:
```bash
docker-compose up --build
```
Podman (Fedora/RHEL):
```bash
./scripts/start-podman.sh
```
### Test the English Chatbot
The fastest way to test without a softphone:
```bash
# Start the stack
docker-compose up --build
# In another terminal, trigger a call via ARI
curl -s -X POST -u asterisk:changeme \
-H "Content-Type: application/json" \
-d '{"endpoint":"Local/2000@users","extension":"2000","context":"users","priority":1}' \
127.0.0.1
```
This creates a Local channel that enters the `Stasis(chatbot-en)` dialplan. The orchestrator will answer, record, send aud …