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"}))