Skip to content

Add Zoom support for Vexa transcription bots - #224

Open
camerontarget14 wants to merge 3 commits into
mainfrom
support-zoom-calls
Open

camerontarget14 wants to merge 3 commits into
mainfrom
support-zoom-calls

Conversation

@camerontarget14

Copy link
Copy Markdown
Collaborator

Summary

Vexa can now be dispatched to Zoom meetings from the DNA Transcription panel.

Backend

  • Add ZOOM to the Platform enum and an optional meeting_url field to DispatchBotRequest, threaded through the provider interface.
  • Vexa provider builds the Zoom join link via _zoom_join_url():
    • a link that already has ?pwd= is forwarded untouched
    • a link without pwd plus a typed passcode gets ?pwd=
    • a bare meeting ID becomes https://zoom.us/j/[?pwd=] Vexa Cloud rejects Zoom without a meeting_url (422), and its web bot ignores the separate passcode field, stalling in "joining" unless the passcode is in the link. Zoom accepts the plain or encoded passcode as pwd.
  • Include Vexa's response body when it rejects a dispatch, instead of httpx's bodyless error message.

Frontend

  • Add 'zoom' to the Platform type.
  • Move meeting URL parsing into a per-platform registry (transcription/meetingPlatforms.ts), keyed by Platform so a missing platform fails to compile.
  • Parse Zoom /j/, /wc/join/ and /wc//join links on any zoom.us or zoomgov.com host, plus bare 9-11 digit IDs. Pull the passcode from ?pwd= and send the pasted link as meeting_url.
  • Reject personal (/my/), host start (/s/) and Zoom Events links with specific messages.
  • Show the passcode field for Teams, and for Zoom when the link has no pwd.
  • Show the error when a meeting URL is invalid (previously the dispatch failed silently).

Docs

  • Regenerate the OpenAPI spec (backend and dna-docs copies).
  • Document Zoom in the transcription pipeline doc and the user guide.
  • Correct ADR-005: sg_platform is a text field, not a list.

Testing

  • I have tested these changes locally
  • I have run all relevant automated tests
  • I have verified this does not break existing workflows
  • For changes that can be tested in UI, I have included screenshots or gif animations of the changes.

How I Tested

Ran DNA and added vexa to a Zoom call.

Screenshot 2026-10-10 at 9 57 48 PM

Vexa can now be dispatched to Zoom meetings from the Transcription menu.

Backend
- Add ZOOM to the Platform enum and an optional meeting_url field to
  DispatchBotRequest, threaded through the provider interface.
- Vexa provider builds the Zoom join link via _zoom_join_url():
  - a link that already has ?pwd= is forwarded untouched
  - a link without pwd plus a typed passcode gets ?pwd=<passcode>
  - a bare meeting ID becomes https://zoom.us/j/<id>[?pwd=<passcode>]
    Vexa Cloud rejects Zoom without a meeting_url (422), and its web bot
    ignores the separate passcode field, stalling in "joining" unless
    the
    passcode is in the link. Zoom accepts the plain or encoded passcode
    as pwd.
- Include Vexa's response body when it rejects a dispatch, instead of
  httpx's bodyless error message.

Frontend
- Add 'zoom' to the Platform type.
- Move meeting URL parsing into a per-platform registry
  (transcription/meetingPlatforms.ts), keyed by Platform so a missing
  platform fails to compile.
- Parse Zoom /j/, /wc/join/ and /wc/<id>/join links on any zoom.us or
  zoomgov.com host, plus bare 9-11 digit IDs. Pull the passcode from
  ?pwd= and send the pasted link as meeting_url.
- Reject personal (/my/), host start (/s/) and Zoom Events links with
  specific messages.
- Show the passcode field for Teams, and for Zoom when the link has no
  pwd.
- Show the error when a meeting URL is invalid (previously the dispatch
  failed silently).

Docs
- Regenerate the OpenAPI spec (backend and dna-docs copies).
- Document Zoom in the transcription pipeline doc and the user guide.
- Correct ADR-005: sg_platform is a text field, not a list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
@camerontarget14 camerontarget14 added this to the V1 milestone Oct 11, 2026
@camerontarget14 camerontarget14 linked an issue Oct 11, 2026 that may be closed by this pull request
6 tasks
Comment thread backend/docs/TRANSCRIPTION_PIPELINE.md Outdated
ZOOM = "zoom"
```

Zoom bots use Vexa's web-client join path (the default since Vexa v0.10.4),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

It is good to have these docs but I think this may not be the best place for this documentation. Maybe under _zoom_join_url? I have been finding my own work that AI likes to put comments whereever. It is good to have these docs but we should be careful about where it is putting them.

return null;
}
export { parseMeetingUrl };
export type { ParsedMeetingUrl } from '../transcription/meetingPlatforms';

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Do parseMeetingUrl and ParsedMeetingUrl need to be exported here? If it is for tests, they are already exported from the module they are declared in.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Okie doke, have moved the join-link details into the _zoom_join_url docstring and left a one-line pointer under the provider section. Dropped the re-exports; TranscriptionMenu now imports from meetingPlatforms directly.

- Move Zoom join-link details from the Platform data-model docs into
  the _zoom_join_url docstring; keep a short note under Layer 4
- Import parseMeetingUrl from meetingPlatforms directly and drop the
  re-exports from useTranscription and the hooks barrel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
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.

Set up Zoom support

2 participants