Repository navigation
fix: report the waiting room for web bots - #990
Conversation
`BotStates.WAITING_ROOM` and `BOT_PUT_IN_WAITING_ROOM` already exist and `bot_controller already` turns the message into a state change, but only the Zoom adapter ever sends it — the web adapters just poll for the meeting UI. An API consumer therefore cannot tell a bot held in the lobby from one still connecting, and only learns about it when the waiting room times out. Detect the lobby inside the Teams and Google Meet post-join poll loops and send the message once. The `bot_controller` handler now checks the bot is still JOINING, since joining -> waiting_room is a one-shot transition and create_event raises on any other source state. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
The patch fixes one specific blind spot: Attendee.dev never tells us a bot is waiting in the lobby, so we can only ever report the failure after it's too late to do anything about it. Concretely, today's signal timeline for a Teams meeting is:
From our side, a bot held in the lobby is indistinguishable from a bot still starting Chrome. The state machine has So the patch is about converting a 10-minute silence into an actionable event. |
…tells less restart_bot_pod bails unless the last bot event is JOIN_REQUESTED, so reporting the waiting room made a Teams/Meet join unrecoverable: UiTeamsBlockingUsException from the same poll loop sends BLOCKED_BY_PLATFORM_REPEATEDLY, the controller quits its main loop and the pod is never recreated, leaving the bot to be reaped ~10 minutes later as a fatal error. WAITING_ROOM is now a join in progress in the restart task, in set_requested_bot_action_taken_at and in take_action_based_on_bot_in_db — which closes the same gap for native Zoom bots, which already reached that state. Also: the disabled prejoin join button only counts after the 30s grace period check_if_waiting_room_connection_failed already waits out, since Teams disables it on click and the fallback fired on direct-admit meetings; create_event re-reads the bot in its own transaction, so catch ValidationError as well as checking the state; and stop polling the DOM once the message has been sent. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Thanks @rafaeljusto ! We should support this. Will review and add some small changes soon, there a few minor things I'd do differently. |
noah-duncan
left a comment
There was a problem hiding this comment.
Thanks @rafaeljusto !
BotStates.WAITING_ROOMandBOT_PUT_IN_WAITING_ROOMalready exist andbot_controller alreadyturns the message into a state change, but only the Zoom Native SDK adapter ever sends it — the web adapters just poll for the meeting UI. An API consumer therefore cannot tell a bot held in the lobby from one still connecting, and only learns about it when the waiting room times out.Detect the lobby inside the Zoom Web SDK, Teams and Google Meet post-join poll loops and send the message once. The
bot_controllerhandler now checks the bot is still JOINING, since joining -> waiting_room is a one-shot transition and create_event raises on any other source state.To preserve existing API behavior this new behavior is gated behind a boolean env var
ENABLE_WAITING_ROOM_STATE_FOR_WEB_BOTS