diff --git a/modules/features/teamsbot/routeFeatureTeamsbot.py b/modules/features/teamsbot/routeFeatureTeamsbot.py index 4c6a7877..84f601fc 100644 --- a/modules/features/teamsbot/routeFeatureTeamsbot.py +++ b/modules/features/teamsbot/routeFeatureTeamsbot.py @@ -362,26 +362,31 @@ async def bridgeStatusCallback( logger.info(f"Bridge status callback: session={sessionId}, status={status}") - # Update session status - from modules.datamodels.datamodelUam import User - systemUser = User(id="system", email="system@internal") - interface = interfaceDb.getInterface(systemUser, featureInstanceId=instanceId) - - updates = {"status": status} - if errorMessage: - updates["errorMessage"] = errorMessage - if status == TeamsbotSessionStatus.ACTIVE.value: - from modules.shared.timeUtils import getUtcTimestamp - updates["startedAt"] = getUtcTimestamp() - elif status in [TeamsbotSessionStatus.ENDED.value, TeamsbotSessionStatus.ERROR.value]: - from modules.shared.timeUtils import getUtcTimestamp - updates["endedAt"] = getUtcTimestamp() - - interface.updateSession(sessionId, updates) - - # Emit SSE event - from .service import _emitSessionEvent - await _emitSessionEvent(sessionId, "statusChange", {"status": status, "errorMessage": errorMessage}) + try: + # Update session status (bridge callbacks have no user context) + from modules.datamodels.datamodelUam import User + systemUser = User(id="system", username="system", email="system@internal") + interface = interfaceDb.getInterface(systemUser, featureInstanceId=instanceId) + + updates = {"status": status} + if errorMessage: + updates["errorMessage"] = errorMessage + if status == TeamsbotSessionStatus.ACTIVE.value: + from modules.shared.timeUtils import getUtcTimestamp + updates["startedAt"] = getUtcTimestamp() + elif status in [TeamsbotSessionStatus.ENDED.value, TeamsbotSessionStatus.ERROR.value]: + from modules.shared.timeUtils import getUtcTimestamp + updates["endedAt"] = getUtcTimestamp() + + interface.updateSession(sessionId, updates) + + # Emit SSE event + from .service import _emitSessionEvent + await _emitSessionEvent(sessionId, "statusChange", {"status": status, "errorMessage": errorMessage}) + + except Exception as e: + logger.error(f"Bridge status callback processing failed: session={sessionId}, error={e}") + # Still return 200 so the bridge doesn't retry endlessly return {"received": True} @@ -405,7 +410,7 @@ async def bridgeAudioWebsocket( config = _getInstanceConfig(instanceId) from modules.datamodels.datamodelUam import User - systemUser = User(id="system", email="system@internal") + systemUser = User(id="system", username="system", email="system@internal") service = TeamsbotService(systemUser, None, instanceId, config) try: