fix: E2EE key timing + verbose logging + shorter greeting

- Reorder: send call member event BEFORE creating VoiceSession
- Store VoiceSession BEFORE start so sync handler can forward keys
- Increase E2EE key wait from 3s to 10s
- Add INFO-level logging for key lookup + room state scan via HTTP API
- Tighten voice system prompt to prevent long rambling greetings

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Christian Gick
2026-02-21 14:55:52 +02:00
parent 80582860b9
commit 85df4b295f
2 changed files with 62 additions and 42 deletions

View File

@@ -23,10 +23,14 @@ ELEVENLABS_KEY = os.environ.get("ELEVENLABS_API_KEY", "")
DEFAULT_VOICE_ID = "onwK4e9ZLuTAKqWW03F9" # Daniel - male, free tier
VOICE_PROMPT = """Du bist ein hilfreicher Sprachassistent in einem Matrix-Anruf.
Regeln:
- Halte Antworten KURZ - 1-3 Saetze maximal
- Sei direkt, keine Fuellwoerter
- Antworte immer auf Deutsch"""
STRIKTE Regeln:
- Antworte IMMER auf Deutsch
- Halte JEDE Antwort auf MAXIMAL 1-2 kurze Saetze
- Sei direkt und praezise, keine Fuellwoerter
- Erfinde NICHTS - keine Geschichten, keine Musik, keine Fantasie
- Beantworte nur was gefragt wird
- Wenn niemand etwas fragt, sage nur kurz Hallo"""
_vad = None
def _get_vad():
@@ -121,13 +125,13 @@ class VoiceSession:
user_id = self.nio_client.user_id
jwt = _generate_lk_jwt(self.room_id, user_id, self.device_id)
# Wait up to 3s for E2EE encryption key from Element Call
for _ in range(30):
# Wait up to 10s for E2EE encryption key from Element Call
for _ in range(100):
if self._e2ee_key:
break
await asyncio.sleep(0.1)
if not self._e2ee_key:
logger.warning("No E2EE key received after 3s, connecting without encryption")
logger.warning("No E2EE key received after 10s, connecting without encryption")
# Connect with E2EE if key available
e2ee_opts = None