Skip to content

feat: richer bot-media overlays and configurable voice destination - #442

Merged
cbj0hns0n merged 2 commits into
mainfrom
jh/support-bot-media-other-clients
Nov 10, 2026
Merged

cbj0hns0n merged 2 commits into
mainfrom
jh/support-bot-media-other-clients

Conversation

@jencompgeek

@jencompgeek jencompgeek commented Nov 9, 2026 •

Copy link
Copy Markdown
Collaborator

What is in this PR?

Lets an organizer choose whether eventAssistant's voice output plays through NextSpace's
presentation view or through the Zoom bot's own camera/mic (voiceDestination), and gives
the Zoom bot-camera feed visible state — a status badge (thinking/hand-raised/speaking), the
question it asked, and its name — instead of just an idle/animated character with no context.

Changes in the codebase

  • voiceOutput.voiceDestination config (nextspace default, zoom opt-in) on eventAssistant,
    threaded through to botMediaMode so the Zoom adapter knows whether to keep the bot's camera
    silent (NextSpace speaks instead) or have it speak aloud into the call.
  • bot-media-server/page.ts: state badge, asked-question text, and name badge overlays on the
    bot camera feed, each wired to the existing state/question socket events.
  • Two independent layouts in one page, split on a max-width: 400px media query: a wide/landscape
    composition (Zoom's bot-camera render, text overlaid near the bot) and a narrow/portrait one (a
    small browser iframe embed, elements stacked in normal flow instead of overlapping) — the two
    contexts differ enough in shape that one set of sizes couldn't serve both.
  • Status-badge icons use emoji in the iframe case but are hidden in Zoom's render, since Recall's
    headless browser has no color-emoji font and would otherwise show a missing-glyph box.

Documentation and automated testing

Did you:

  • document any breaking changes in your commit messages?
  • document your changes as comments in the code? Use TSDoc format where appropriate.
  • update the README and docs to be clear and easy to use for end users and developers?
  • add and/or update automated tests?
  • update team documentation of any new or changed environment variables?

Testing this PR

Test in conjunction with FE PR berkmancenter/nextspace#244. See test steps there.

Additional information

The responsive split is viewport-width-driven (CSS media query), not an explicit "which client"
signal — it works because the iframe (~280px) and Zoom's render width sit on opposite sides of
400px today with real margin, not because the page knows which context it's in.

@jencompgeek
jencompgeek force-pushed the jh/support-bot-media-other-clients branch from 42d26e0 to 7418b61 Compare November 9, 2026 21:25
@jencompgeek
jencompgeek marked this pull request as ready for review November 9, 2026 22:11

@cbj0hns0n cbj0hns0n left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sent you a non-blocking DM about one issue with the socket & filed a follow-up ticket. Verified this works with the nextspace PR.

@cbj0hns0n
cbj0hns0n merged commit 0fd08ea into main Nov 10, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants