my_voice_assistant_v3_jamulix/app/safety/emergency.py

41 lines
2 KiB
Python
Raw Normal View History

"""Manuell ausgelöster Notruf — vom Nutzer bewusst bestätigt.
Es gibt KEINE automatische Notfallerkennung (keine Stichwörter, kein LLM): die
wäre unzuverlässig (Fehlalarme wie verpasste Notfälle) und intransparent. Ein
Notruf entsteht nur durch eine ausdrückliche Nutzeraktion (Knopf + Bestätigung).
Die tatsächliche Benachrichtigung von Angehörigen (SMS/Anruf/Webhook) ist noch
NICHT implementiert. Bis dahin wird der Notruf protokolliert und der Nutzer
erhält einen klaren Hinweis in seiner Sprache.
"""
from app.metrics import metrics
# Platzhalter-Hinweis je Sprache, solange die Eskalation noch nicht gebaut ist.
_NO_NOTIFY_NOTICE: dict[str, str] = {
"de": "ACHTUNG: Es ist noch keine Benachrichtigung eingebaut.",
"en": "ATTENTION: No notification has been set up yet.",
"fr": "ATTENTION : aucune notification n'est encore configurée.",
"es": "ATENCIÓN: todavía no se ha configurado ninguna notificación.",
"it": "ATTENZIONE: non è ancora stata configurata alcuna notifica.",
"pt": "ATENÇÃO: ainda não há nenhuma notificação configurada.",
"pl": "UWAGA: Nie skonfigurowano jeszcze żadnego powiadomienia.",
"ar": "تنبيه: لم يتم إعداد أي إشعار بعد.",
"ru": "ВНИМАНИЕ: Уведомление пока не настроено.",
"zh": "注意:尚未设置任何通知。",
}
def notify_notice(language: str | None) -> str:
"""Liefert den Platzhalter-Hinweis in der Nutzersprache (Fallback Deutsch)."""
return _NO_NOTIFY_NOTICE.get((language or "de").lower(), _NO_NOTIFY_NOTICE["de"])
def record_manual_emergency(user, store, language: str | None = None) -> dict:
"""Protokolliert einen vom Nutzer bestätigten Notruf und liefert den Hinweis.
Eskalation (Benachrichtigung) folgt später; hier wird nur protokolliert.
"""
store.log_emergency(user.id, "manual", "Vom Nutzer ausgelöster Notruf")
metrics.inc("emergency_total", {"category": "manual", "source": "user"})
return {"category": "manual", "notice": notify_notice(language)}