Deine FritzBox fΓΌhrt echte Telefonate β gesprΓ€chsfΓΌhrend, hΓΆflich, zielgerichtet.
SIP-Anruf aufbauen, sprechen, zuhΓΆren, antworten β vollstΓ€ndig automatisiert.
π¬ [YouTube Demo kommt bald] β Ein echter Restaurantanruf, komplett KI-gefΓΌhrt
- π Echter SIP-Anruf ΓΌber deine FritzBox (kein Drittanbieter nΓΆtig)
- ποΈ Whisper STT β versteht was der Angerufene sagt (~1-2s)
- π§ GPT-4o β fΓΌhrt das GesprΓ€ch natΓΌrlich und zielgerichtet
- π OpenAI TTS β spricht mit natΓΌrlicher Stimme (z.B. "onyx")
- β‘ ~4-5 Sekunden pro Runde (STT + LLM + TTS pipeline)
- π Phone Skills β erweiterbare GesprΓ€chs-Vorlagen (Reservierung, Fragen, ...)
- π Bidirektional β echter Austausch, kein One-Shot
- π JSON Output β strukturiertes Protokoll nach dem GesprΓ€ch
- π Web-Suche im GesprΓ€ch (via OpenAI Responses API)
git clone https://github.com/Moddy14/fritzbox-ki.git
cd fritzbox-ki
pip install -r requirements.txtNeuen Telefonie-User in der FritzBox erstellen (Anleitung: docs/FRITZBOX_CONFIG.md)
cp .env.example .env
# Deine Werte eintragen:
nano .envFRITZBOX_IP=192.168.178.1
FRITZBOX_SIP_USER=ki-telefon
FRITZBOX_SIP_PASSWORD=dein-passwort
OPENAI_API_KEY=sk-...
# MY_IP wird automatisch erkannt wenn nicht gesetztpython -m fritzbox_ki.sip_call --number 012345678 --message "Hallo, hier ist ein KI-Assistent."python -m fritzbox_ki.sip_call \
--number 012345678 \
--skill phone_skills/restaurant_reservierung.md \
--skill-params '{"restaurant":"Goldener Hirsch","datum":"morgen","uhrzeit":"18:00","personen":2,"name":"MΓΌller"}' \
--message "Hallo, ich wΓΌrde gerne einen Tisch reservieren." \
--max-rounds 10 \
--jsonDu FritzBox-KI FritzBox Angerufener
β β β β
βββββ Auftrag βββββββββΊβ β β
β βββββ SIP INVITE βββββββΊβββββ Anruf ββββββββββΊβ
β βββββ 200 OK ββββββββββββββββ Abnehmen ββββββββ
β β β β
β β ββ BegrΓΌΓung (TTS) βββββββββββββββββββββββΊβ
β β β β β
β β ββββββββ RTP Audio (Sprache) ββββββββββββββ
β β β β β
β β ββ Whisper API βββββββΊ Transkript β
β β ββ GPT-4o ββββββββββββΊ Antwort β
β β ββ TTS API βββββββββββΊ Audio β
β β ββ Audio βββββββββββββββββββββββββββββββΊ β
β β (repeat) β
β βββββ BYE ββββββββββββββΊβ β
βββββ Protokoll (JSON)ββ β β
| Komponente | Technologie | Details |
|---|---|---|
| SIP-Signaling | RFC 3261 (UDP) | Digest Auth, SDP Offer/Answer |
| Sprachaudio | RTP/PCMU (G.711) | 8kHz, 20ms Pakete |
| Spracherkennung | OpenAI Whisper | ~1-2s, sehr akkurat |
| GesprΓ€ch | GPT-4o + Web Search | Responses API, 200 Tokens max |
| Sprachausgabe | OpenAI TTS | Stimme "onyx", WAVβPCMU konvertiert |
| FritzBox | TR-064 / SIP | Fritz!OS 7.x, getestet mit 7530 |
Phone Skills sind Markdown-Dateien die dem LLM erklΓ€ren, wie es ein bestimmtes GesprΓ€ch fΓΌhren soll.
| Skill | Datei | Einsatz |
|---|---|---|
| π½οΈ Restaurant-Reservierung | phone_skills/restaurant_reservierung.md |
Tisch reservieren |
| β Einfache Frage | phone_skills/einfache_frage.md |
Jemanden etwas fragen |
Einfach eine neue .md-Datei in phone_skills/ anlegen. Aufbau: phone_skills/README.md
python -m fritzbox_ki.sip_call \
--number 012345678 \
--skill phone_skills/mein_skill.md \
--skill-params '{"parameter": "wert"}' \
--message "Hallo!"| Was | Anforderung |
|---|---|
| FritzBox | Modell 7530 oder neuer (Fritz!OS 7.x) |
| Python | 3.10 oder neuer |
| OpenAI API Key | FΓΌr Whisper STT, GPT-4o, TTS |
| Netzwerk | PC und FritzBox im gleichen LAN |
| OS | Linux, Windows (native), WSL2 |
VollstΓ€ndige Anleitung: docs/FRITZBOX_CONFIG.md
Kurzfassung:
- FritzBox Web-UI ΓΆffnen β Telefonie β TelefoniegerΓ€te
- "Neues GerΓ€t einrichten" β "Telefon (ohne Anrufbeantworter)"
- Verbindungstyp: "SIP (VoIP)"
- Benutzername und Passwort vergeben (diese kommen in
.env) - Internrufnummer zuweisen (z.B. 700)
- Abgehende Leitung: Dein Festnetzanschluss
python -m fritzbox_ki.sip_call \
--number 06888123456 \
--message "Hallo, hier ist Clawd. Kannst du kurz sprechen?"python -m fritzbox_ki.sip_call \
--number 06888123456 \
--message "Guten Tag, ich hΓ€tte eine kurze Frage." \
--max-rounds 8 \
--json > protokoll.jsonfrom fritzbox_ki import make_call
result = make_call(
number="012345678",
message="Hallo, ich rufe an wegen...",
skill="restaurant_reservierung",
skill_params={"restaurant": "Zum Hirschen", "datum": "morgen"}
)
print(result["protocol"])python -m fritzbox_ki.sip_call --help
--number NUM Rufnummer (Pflicht)
--message TEXT BegrΓΌΓungstext (TTS)
--audio FILE Fertige BegrΓΌΓungs-Audiodatei (.raw PCMU)
--skill FILE Phone Skill Markdown-Datei
--skill-params JSON Parameter fΓΌr den Skill (JSON)
--max-rounds N Max. GesprΓ€chsrunden (Standard: 5)
--silence SEC Schweige-Timeout in Sekunden (Standard: 6.0)
--voice VOICE TTS-Stimme (Standard: onyx)
--debug Verbose Energie/Status-Logging
--json JSON-Output statt Protokoll-Text
Das Script lΓ€uft sowohl nativ unter Linux als auch unter WSL2 und Windows.
- WSL2: Stellt sicher, dass
MY_IPauf die WSL-IP zeigt (nicht 127.0.0.1) - Windows: Der Windows High-Resolution Timer wird automatisch aktiviert (fΓΌr prΓ€zises RTP-Timing)
# WSL2: IP automatisch erkennen
export MY_IP=$(ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1)fritzbox-ki/
βββ fritzbox_ki/
β βββ sip_call.py # Kern: SIP + RTP + Conversation Engine
β βββ config.py # Konfiguration (env vars / json / cli args)
β βββ tts.py # TTS-Abstraktion (OpenAI + lokale Fallbacks)
β βββ __init__.py # Python-Paket + einfache API
βββ phone_skills/
β βββ restaurant_reservierung.md
β βββ einfache_frage.md
β βββ README.md # Skill-Dokumentation
βββ examples/
β βββ simple_call.py # Minimalbeispiel
β βββ telegram_bot.py # Telegram-Integration
βββ docs/
β βββ SETUP.md
β βββ FRITZBOX_CONFIG.md
βββ .env.example
βββ config.example.json
βββ requirements.txt
βββ setup.py
PRs willkommen! Besonders:
- Neue Phone Skills
- Weitere TTS-Provider (ElevenLabs, Coqui, ...)
- Alternative STT-Engines
- Tests
MIT β siehe LICENSE
FritzBox-KI lets your AVM FritzBox router make AI-driven phone calls.
It uses SIP/RTP to place real calls, OpenAI Whisper to transcribe speech, GPT-4o to generate responses, and OpenAI TTS to speak them β all in a ~4-5 second round-trip loop.
Requirements: FritzBox router, Python 3.10+, OpenAI API key, same LAN.
pip install fritzbox-ki
python -m fritzbox_ki.sip_call --number 012345678 --message "Hello, this is an AI assistant."Made with β€οΈ in Austria π¦πΉ