From 33daa8dc7439d7de8e93de06b5b7bb453c9fa083 Mon Sep 17 00:00:00 2001 From: patrick-motsch Date: Wed, 18 Feb 2026 00:17:42 +0100 Subject: [PATCH] feat: handle voiceGreeting message type - TTS for bot join greeting Co-authored-by: Cursor --- modules/features/teamsbot/service.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/modules/features/teamsbot/service.py b/modules/features/teamsbot/service.py index df21d8ff..7251741e 100644 --- a/modules/features/teamsbot/service.py +++ b/modules/features/teamsbot/service.py @@ -303,6 +303,32 @@ class TeamsbotService: websocket=websocket, ) + elif msgType == "voiceGreeting": + greetingText = message.get("text", "") + greetingLang = message.get("language", self.config.language) + logger.info(f"[WS-DEBUG] Voice greeting request: text={greetingText[:60]}..., language={greetingLang}") + if greetingText and voiceInterface: + try: + ttsResult = await voiceInterface.textToSpeech( + text=greetingText, + languageCode=greetingLang, + voiceName=self.config.voiceId + ) + if ttsResult and isinstance(ttsResult, dict): + audioContent = ttsResult.get("audioContent") + if audioContent: + await websocket.send_text(json.dumps({ + "type": "playAudio", + "sessionId": sessionId, + "audio": { + "data": base64.b64encode(audioContent if isinstance(audioContent, bytes) else audioContent.encode()).decode(), + "format": "mp3", + } + })) + logger.info(f"Voice greeting TTS sent for session {sessionId}") + except Exception as ttsErr: + logger.warning(f"Voice greeting TTS failed for session {sessionId}: {ttsErr}") + elif msgType == "ping": await websocket.send_text(json.dumps({"type": "pong"}))