rasonyang/ai-native-callcenter

DevOps & Self-hosting

Self-hosted AI call center software that lets a speech-to-speech model answer every call and hands callers to human agents without dropping the line.

515
95
Go
Apache-2.0
2 months old

What it is

This is a self-hosted call center where voice AI answers inbound calls by default instead of an IVR menu. Calls land on FreeSWITCH, which bridges the caller to a SIP endpoint inside the application; that endpoint holds a speech-to-speech session with a realtime voice model. A flow engine controls the phase of the conversation and the tools the model may call, and routes callers into mod_callcenter queues when a human is needed. Agents then pick up in the browser, with the SIP leg held by a companion Chrome extension, and the whole call — bot phase plus human phase — is stored as one CDR with one transcript and one recording.

It ships as a single Go binary containing the REST API, event stream and web interface, plus PostgreSQL and FreeSWITCH. It targets teams that want AI first-line call handling on their own SIP trunk and infrastructure rather than a hosted SaaS.

Quick start

The documented fast path is a one-line installer on Linux or macOS:

# Linux
curl -fsSL https://github.com/rasonyang/ai-native-callcenter/releases/latest/download/install.sh | sudo sh
# macOS
curl -fsSL https://github.com/rasonyang/ai-native-callcenter/releases/latest/download/install.sh | sh

Installer behaviour and prerequisites are described in the deployment guide and the one-line installer notes. To build from source instead, the README gives this sequence:

make dev-up                                      # PostgreSQL in Docker
cd web && npm install && npm run build && cd ..
make build                                       # bin/aicc with UI embedded
./bin/aicc useradd -username admin -password '…' -role ADMIN
./bin/aicc

After starting the binary you still need a working FreeSWITCH instance connected to your SIP trunk and a realtime model provider — those are operator-side configuration, not produced by the build. The design overview documents how FreeSWITCH reads its directory and queues from the database through Lua.

Constraints

  • One provider is chosen at startup for every call in a deployment: qwen or doubao inside mainland China, openai or grok elsewhere, or gateway for your own Realtime gateway (for example cascade-realtime-gateway). The caller's language never selects the provider.
  • qwen, openai and grok share one protocol profile; doubao speaks a different protocol and has its own client.
  • Agent audio is not handled by this application: it runs through the separate web-sip-phone Chrome extension, which registers with credentials issued by this app. The browser UI covers presence, call control and callbacks only.
  • There is deliberately no cascaded ASR + LLM + TTS pipeline inside this process; that composition belongs in a separate service speaking the same protocol.
  • The HTTP API is spec-first: docs/openapi.json is the source of truth and both server and TypeScript client are generated from it, so changes go through the contract.
  • Licensed under Apache-2.0.

Extending

New voice providers are added as profiles rather than clients (provider extension guide); new conversation flows are JSON documents validated at load (flow authoring, with bilingual examples in internal/seed/flows); integrations with other products live outside this tree as services behind the flow's backend URL.

HotRepo's take

In HotRepo's monthly Go-language snapshot for 2026-11-01, the project recorded 515 stars and 342 stars gained that month, placing 17th on that language list; no all-language daily rank was recorded. The monthly gain is a single-period figure, so it supports a statement about that month only, not about current growth. The notable technical fact behind that attention is the architecture: the AI leg is a SIP endpoint inside one Go binary, G.711 audio passes through untouched where the provider accepts it, and the bot phase and human phase share one call record by design. That makes it more a piece of telephony infrastructure than a chat demo, and the README's insistence that integrations and ASR/LLM/TTS cascades live elsewhere is a clear boundary for anyone evaluating it.

Written by AI from the project's README, updated . The project's own docs are the source of truth.