Skip to content

Moddy14/fritzbox-ki

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ€–πŸ“ž FritzBox-KI β€” Deine FritzBox telefoniert mit KI

Deine FritzBox fΓΌhrt echte Telefonate β€” gesprΓ€chsfΓΌhrend, hΓΆflich, zielgerichtet.
SIP-Anruf aufbauen, sprechen, zuhΓΆren, antworten β€” vollstΓ€ndig automatisiert.

Python 3.10+ License: MIT OpenAI


πŸ“Ί Demo

🎬 [YouTube Demo kommt bald] β€” Ein echter Restaurantanruf, komplett KI-gefΓΌhrt


✨ Features

  • πŸ“ž 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)

πŸš€ Quick Start (5 Schritte)

1. Repo klonen & installieren

git clone https://github.com/Moddy14/fritzbox-ki.git
cd fritzbox-ki
pip install -r requirements.txt

2. FritzBox SIP-User anlegen

Neuen Telefonie-User in der FritzBox erstellen (Anleitung: docs/FRITZBOX_CONFIG.md)

3. Konfiguration

cp .env.example .env
# Deine Werte eintragen:
nano .env
FRITZBOX_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 gesetzt

4. Erster Anruf

python -m fritzbox_ki.sip_call --number 012345678 --message "Hallo, hier ist ein KI-Assistent."

5. Mit Phone Skill (z.B. Tischreservierung)

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 \
  --json

πŸ—οΈ Wie funktioniert's?

Du                  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)─│                       β”‚                     β”‚

Technische Komponenten

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

Phone Skills sind Markdown-Dateien die dem LLM erklΓ€ren, wie es ein bestimmtes GesprΓ€ch fΓΌhren soll.

Mitgelieferte Skills

Skill Datei Einsatz
🍽️ Restaurant-Reservierung phone_skills/restaurant_reservierung.md Tisch reservieren
❓ Einfache Frage phone_skills/einfache_frage.md Jemanden etwas fragen

Eigenen Skill erstellen

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!"

πŸ“‹ Anforderungen

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

πŸ”§ FritzBox Setup

VollstΓ€ndige Anleitung: docs/FRITZBOX_CONFIG.md

Kurzfassung:

  1. FritzBox Web-UI ΓΆffnen β†’ Telefonie β†’ TelefoniegerΓ€te
  2. "Neues GerΓ€t einrichten" β†’ "Telefon (ohne Anrufbeantworter)"
  3. Verbindungstyp: "SIP (VoIP)"
  4. Benutzername und Passwort vergeben (diese kommen in .env)
  5. Internrufnummer zuweisen (z.B. 700)
  6. Abgehende Leitung: Dein Festnetzanschluss

πŸ’‘ Beispiele

Einfacher Anruf ohne Skill

python -m fritzbox_ki.sip_call \
  --number 06888123456 \
  --message "Hallo, hier ist Clawd. Kannst du kurz sprechen?"

Mit JSON-Output + Protokoll

python -m fritzbox_ki.sip_call \
  --number 06888123456 \
  --message "Guten Tag, ich hΓ€tte eine kurze Frage." \
  --max-rounds 8 \
  --json > protokoll.json

Python API

from 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"])

Alle Optionen

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

🏠 WSL2 / Windows

Das Script lΓ€uft sowohl nativ unter Linux als auch unter WSL2 und Windows.

  • WSL2: Stellt sicher, dass MY_IP auf 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)

πŸ“ Projektstruktur

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

🀝 Contributing

PRs willkommen! Besonders:

  • Neue Phone Skills
  • Weitere TTS-Provider (ElevenLabs, Coqui, ...)
  • Alternative STT-Engines
  • Tests

πŸ“œ License

MIT β€” siehe LICENSE


🌐 English Summary

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 πŸ‡¦πŸ‡Ή

About

πŸ€–πŸ“ž FritzBox-KI β€” Deine FritzBox telefoniert mit KI. SIP + OpenAI + TR-064.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages