From 1c00ab6024dfc2080f572571379a0a2d5b95c058 Mon Sep 17 00:00:00 2001
From: patrick-motsch
Date: Thu, 26 Feb 2026 21:45:47 +0100
Subject: [PATCH] Forward bot playback acknowledgements to SSE status stream.
Handle ttsPlaybackAck websocket messages and emit ttsDeliveryStatus updates with playback_* states for UI diagnostics.
Made-with: Cursor
---
modules/features/teamsbot/service.py | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/modules/features/teamsbot/service.py b/modules/features/teamsbot/service.py
index a8469661..a8ee7c85 100644
--- a/modules/features/teamsbot/service.py
+++ b/modules/features/teamsbot/service.py
@@ -348,6 +348,23 @@ class TeamsbotService:
elif msgType == "ping":
await websocket.send_text(json.dumps({"type": "pong"}))
+ elif msgType == "ttsPlaybackAck":
+ playback = message.get("playback", {}) or {}
+ status = playback.get("status", "unknown")
+ ackMessage = playback.get("message") or "Bot playback status update"
+ logger.info(
+ f"[WS] TTS playback ack: status={status}, format={playback.get('format')}, "
+ f"bytesBase64={playback.get('bytesBase64')}"
+ )
+ await _emitSessionEvent(sessionId, "ttsDeliveryStatus", {
+ "status": f"playback_{status}",
+ "hasWebSocket": True,
+ "message": ackMessage,
+ "timestamp": playback.get("timestamp") or getIsoTimestamp(),
+ "format": playback.get("format"),
+ "bytesBase64": playback.get("bytesBase64"),
+ })
+
except Exception as e:
if "disconnect" not in str(e).lower():
logger.error(f"[WS] Error for session {sessionId}: {type(e).__name__}: {e}")