Die seven.io-Aufrufe (SMS + Voice/SSML) leben jetzt in der wiederverwendbaren Library seven-send; die Bridge ist nur noch der HTTP-Adapter und ruft den synchronen SevenClient via asyncio.to_thread. Eine getestete Stelle für die API-Logik, ~50 Zeilen Duplikat raus. - main.py: import SevenClient; _make_client() aus der Env; _dispatch() pro Kanal/Nummer; ohne API-Key sauberes "nicht gesetzt"-Ergebnis (kein Versand) - Tests: mocken jetzt seven_send.client.httpx.post; neuer Test "ohne API-Key kein Versand" (6 Tests) - Doku: Bridge-README + DEPLOYMENT 2.9 — seven-send als venv-Voraussetzung (pip install git+https://kitux.de/forgejo/dschlueter/seven_send.git) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.9 KiB
2.9 KiB
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
Voraussetzung — die Library seven-send
muss in der venv installiert sein (sie kapselt die seven.io-Aufrufe):
sudo -u voice /opt/voice-assistant/.venv/bin/pip install \
git+https://kitux.de/forgejo/dschlueter/seven_send.git
- 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