Konkreter Provider hinter dem provider-agnostischen EMERGENCY_WEBHOOK_URL: ein kleiner FastAPI-Dienst (emergency_bridge/), der das Notruf-Payload der App entgegennimmt und pro Telefonnummer SMS und/oder TTS-Anruf über die seven.io-API auslöst. - main.py: POST /notruf (Bearer-Token-Prüfung), GET /health; seven.io SMS (/api/sms) + Voice (/api/voice, Text als SSML, XML-escaped), best effort mit Statuscode-100-Auswertung; Kanäle/Texte kommen aus dem Payload - Betrieb: eigener systemd-Service auf 127.0.0.1:8090, läuft in der vorhandenen venv; .env.example + README mit Installations- und Verdrahtungsschritten - Tests: SMS+Anruf-Fan-out, SSML-Escaping, Token-Auth, Kanal-Filter (5 Tests) - DEPLOYMENT.md: optionaler Abschnitt 2.9 mit Verweis auf die Bridge Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| emergency-bridge.env.example | ||
| emergency-bridge.service | ||
| main.py | ||
| README.md | ||
Notruf-Bridge (seven.io)
Kleiner Webhook-Empfänger, der das Notruf-Payload des Voice Assistants über seven.io in SMS und/oder Sprachanruf (Text-to-Speech) umsetzt. Die App bleibt damit provider-agnostisch — der konkrete Anbieter steckt allein hier.
App --POST /notruf (JSON)--> Bridge --seven.io-API--> 📱 SMS / ☎️ Anruf
Endpunkte
| Methode | Pfad | Zweck |
|---|---|---|
GET |
/health |
Liveness + ob ein API-Key gesetzt ist |
POST |
/notruf |
nimmt das App-Payload entgegen, löst SMS/Anruf aus |
Erwartetes Payload (von der App erzeugt):
{
"channels": ["sms", "call"],
"phones": ["+4915112345678"],
"message": { "sms": "NOTRUF: …", "call": "Achtung. …" }
}
Pro Telefonnummer wird — je nach channels — eine SMS (message.sms) und/oder ein
Anruf mit vorgelesenem Text (message.call, als SSML mit SEVENIO_VOICE_NAME)
ausgelöst. Antwort: {"received": true, "any_sent": <bool>, "results": [...]}.
Installation
- Konfig anlegen:
sudo cp emergency_bridge/emergency-bridge.env.example /etc/voice-assistant/emergency-bridge.env sudo chown voice:voice /etc/voice-assistant/emergency-bridge.env sudo chmod 600 /etc/voice-assistant/emergency-bridge.env sudo editor /etc/voice-assistant/emergency-bridge.env # API-Key + BRIDGE_TOKEN setzen - Service installieren:
sudo cp emergency_bridge/emergency-bridge.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now emergency-bridge curl -s localhost:8090/health # -> {"status":"ok","configured":true} - App verdrahten — in
/etc/voice-assistant/voice-assistant.env:
DanachEMERGENCY_WEBHOOK_URL=http://127.0.0.1:8090/notruf EMERGENCY_WEBHOOK_TOKEN=<derselbe Wert wie BRIDGE_TOKEN> EMERGENCY_CONTACT_PHONE=+49XXXXXXXXXXsudo systemctl restart voice-assistant.
Konfiguration (Env)
| Variable | Default | Bedeutung |
|---|---|---|
SEVENIO_API_KEY |
(leer) | seven.io API-Key — ohne Key kein Versand |
SEVENIO_SMS_FROM |
Notruf |
Absender-ID der SMS (alphanumerisch, max. 11 Zeichen) |
SEVENIO_VOICE_FROM |
(leer) | Caller-ID des Anrufs (verifizierte Nummer; optional) |
SEVENIO_VOICE_NAME |
de-de-female |
SSML-Stimme für die Anruf-Ansage |
BRIDGE_TOKEN |
(leer) | falls gesetzt: Authorization: Bearer <token> Pflicht |
BRIDGE_HOST / BRIDGE_PORT |
127.0.0.1 / 8090 |
Bind-Adresse |
Test
.venv/bin/python -m pytest tests/test_emergency_bridge.py -q