Skip to content

feat: add BigBlueButton conferencing integration#29437

Closed
Simultech369 wants to merge 4 commits into
calcom:mainfrom
Simultech369:bounty-bigbluebutton-1985
Closed

feat: add BigBlueButton conferencing integration#29437
Simultech369 wants to merge 4 commits into
calcom:mainfrom
Simultech369:bounty-bigbluebutton-1985

Conversation

@Simultech369
Copy link
Copy Markdown

@Simultech369 Simultech369 commented May 25, 2026

23-43-18.mp4

Closes #1985

Adds BigBlueButton as a conferencing app with meeting creation, join URL generation, meeting end support, app-store metadata, API handlers, video adapter wiring, and platform location mappings.

Verification:

  • Ran syntax checks on changed TypeScript files with node --check
  • Could not run full app-store generation locally because yarn/corepack is not available in this environment

@github-actions
Copy link
Copy Markdown
Contributor

Welcome to Cal.diy, @Simultech369! Thanks for opening this pull request.

A few things to keep in mind:

  • This is Cal.diy, not Cal.com. Cal.diy is a community-driven, fully open-source fork of Cal.com licensed under MIT. Your changes here will be part of Cal.diy — they will not be deployed to the Cal.com production app.
  • Please review our Contributing Guidelines if you haven't already.
  • Make sure your PR title follows the Conventional Commits format.

A maintainer will review your PR soon. Thanks for contributing!

@github-actions
Copy link
Copy Markdown
Contributor

Hey there and thank you for opening this pull request! 👋🏼

We require pull request titles to follow the Conventional Commits specification and it looks like your proposed title needs to be adjusted.

Details:

No release type found in pull request title "Add BigBlueButton conferencing integration". Add a prefix to indicate what kind of release this pull request corresponds to. For reference, see https://www.conventionalcommits.org/

Available types:
 - feat: A new feature
 - fix: A bug fix
 - docs: Documentation only changes
 - style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
 - refactor: A code change that neither fixes a bug nor adds a feature
 - perf: A code change that improves performance
 - test: Adding missing tests or correcting existing tests
 - build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
 - ci: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)
 - chore: Other changes that don't modify src or test files
 - revert: Reverts a previous commit

@github-actions github-actions Bot added $50 app-store area: app store, apps, calendar integrations, google calendar, outlook, lark, apple calendar community Created by Linear-GitHub Sync consumer ✨ feature New feature or request 💎 Bounty A bounty on Algora.io 🙋🏻‍♂️help wanted Help from the community is appreciated labels May 25, 2026
@Simultech369 Simultech369 changed the title Add BigBlueButton conferencing integration feat: add BigBlueButton conferencing integration May 25, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 25, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e3a5c2c2-742d-483d-bb33-9d8bc21a5fae

📥 Commits

Reviewing files that changed from the base of the PR and between 4bd4b9d and 607ddff.

⛔ Files ignored due to path filters (1)
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (1)
  • packages/app-store/bookerApps.metadata.generated.ts
✅ Files skipped from review due to trivial changes (1)
  • packages/app-store/bookerApps.metadata.generated.ts

📝 Walkthrough

Walkthrough

This pull request adds BigBlueButton video conferencing support: it registers "bigbluebutton-video" in API↔internal integration mappings and platform types, provides a BigBlueButton app package (metadata, package.json, Zod schemas, exports), implements an installation API to create app credentials, and supplies a VideoApiAdapter implementing createMeeting, deleteMeeting, and updateMeeting. Autogenerated registry files are updated to wire the app and adapter into the app store.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The pull request title clearly and specifically describes the main change: adding BigBlueButton as a conferencing integration feature.
Description check ✅ Passed The description is related to the changeset, explaining the BigBlueButton integration features implemented and verification steps performed.
Linked Issues check ✅ Passed The code changes comprehensively implement BigBlueButton integration with meeting creation, deletion, join URL generation, metadata, API handlers, and location mappings as required by issue #1985.
Out of Scope Changes check ✅ Passed All changes are in-scope, focused on BigBlueButton integration implementation. One commit message about import sorting is a minor incidental fix related to generated files.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/app-store/bigbluebutton/api/add.ts`:
- Around line 14-21: Parse and validate req.query.teamId once before using it:
read teamId from req.query, attempt to convert to an integer (e.g.,
parseInt/Number and check !isNaN and >0), and if the value is present but
invalid return a 400 response; then pass the validated numeric teamId to
throwIfNotHaveAdminAccessToTeam and use that same parsedTeamId when building
installForObject (instead of calling Number(teamId) inline). Ensure you handle
the absent teamId case by using req.session.user.id for installForObject as
before.
- Around line 33-46: Replace the generic Error throws in the BigBlueButton
installation flow with ErrorWithCode: when detecting an existing installation
(the "Already installed" throw) use ErrorWithCode with a conflict/code
indicating existing resource, and when creating the credential fails after
prisma.credential.create (the "Unable to create user credential for
BigBlueButton" throw) use ErrorWithCode with an internal/error code; update the
two throw sites in add.ts near the installation check and the installation
creation block so callers receive explicit status codes.

In `@packages/app-store/bigbluebutton/lib/VideoApiAdapter.ts`:
- Around line 104-106: The code currently splits uid with uid.split(":"), which
fails when meetingID contains colons; change the parsing to split on the last
colon instead: find the lastIndexOf(":") on uid, use substring(0, lastIdx) as
meetingID and substring(lastIdx+1) as moderatorPW, and handle the case where
lastIdx < 0 (no colon) by returning early like the existing check; update
references to meetingID and moderatorPW accordingly (uid, meetingID,
moderatorPW).

In `@packages/app-store/bookerApps.metadata.generated.ts`:
- Around line 5-7: Reorder the top-level imports in
packages/app-store/bookerApps.metadata.generated.ts so they are alphabetized to
match the exported object: ensure campfire_config_json,
bigbluebutton__metadata_ts, dailyvideo__metadata_ts (and any other imports)
appear in alphabetical order; update the import statements so their order
matches the keys used in the exported metadata object (refer to the import
identifiers campfire_config_json and bigbluebutton__metadata_ts) to remove the
inconsistency between import order and exported property order.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ec44e388-67d1-44f0-b95a-53fb13f4063f

📥 Commits

Reviewing files that changed from the base of the PR and between 180ede2 and cb21745.

⛔ Files ignored due to path filters (1)
  • packages/app-store/bigbluebutton/static/icon.svg is excluded by !**/*.svg
📒 Files selected for processing (22)
  • apps/api/v2/src/platform/bookings/2024-08-13/services/booking-video.service.ts
  • apps/api/v2/src/platform/event-types/event-types_2024_06_14/transformers/api-to-internal/locations.ts
  • apps/api/v2/src/platform/event-types/event-types_2024_06_14/transformers/internal-to-api/locations.ts
  • apps/api/v2/src/platform/event-types/event-types_2024_06_14/transformers/internal/locations.ts
  • packages/app-store/apps.keys-schemas.generated.ts
  • packages/app-store/apps.metadata.generated.ts
  • packages/app-store/apps.schemas.generated.ts
  • packages/app-store/apps.server.generated.ts
  • packages/app-store/bigbluebutton/DESCRIPTION.md
  • packages/app-store/bigbluebutton/_metadata.ts
  • packages/app-store/bigbluebutton/api/add.ts
  • packages/app-store/bigbluebutton/api/index.ts
  • packages/app-store/bigbluebutton/index.ts
  • packages/app-store/bigbluebutton/lib/VideoApiAdapter.ts
  • packages/app-store/bigbluebutton/lib/index.ts
  • packages/app-store/bigbluebutton/package.json
  • packages/app-store/bigbluebutton/zod.ts
  • packages/app-store/bookerApps.metadata.generated.ts
  • packages/app-store/video.adapters.generated.ts
  • packages/platform/types/bookings/2024-08-13/inputs/location.input.ts
  • packages/platform/types/event-types/event-types_2024_06_14/inputs/locations.input.ts
  • packages/platform/types/event-types/event-types_2024_06_14/outputs/locations.output.ts

Comment thread packages/app-store/bigbluebutton/api/add.ts Outdated
Comment thread packages/app-store/bigbluebutton/api/add.ts Outdated
Comment thread packages/app-store/bigbluebutton/lib/VideoApiAdapter.ts Outdated
Comment thread packages/app-store/bookerApps.metadata.generated.ts Outdated
@CLAassistant
Copy link
Copy Markdown

CLAassistant commented May 26, 2026

CLA assistant check
All committers have signed the CLA.

@Simultech369 Simultech369 force-pushed the bounty-bigbluebutton-1985 branch from cb21745 to efd7a17 Compare May 26, 2026 02:24
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/app-store/bigbluebutton/lib/VideoApiAdapter.ts`:
- Around line 77-79: Replace the generic Error throws in the BigBlueButton XML
response handling with ErrorWithCode so downstream error handlers can map
failure types: where the code currently throws new Error(message) after checking
createResponse.ok or returnCode (using variables createResponse, returnCode,
createXml and helper getXmlTag), construct and throw an ErrorWithCode instance
instead, passing the extracted message and a meaningful code (e.g., the
returnCode or a fallback) so the error contains both message and
machine-readable code; do the same for the second throw in the deletion flow
(the similar throw around the variables used at lines ~130-132).
- Around line 136-142: updateMeeting currently force-casts
bookingRef.meetingId/meetingPassword/meetingUrl to string which can propagate
null/undefined into the required VideoCallData; instead, in the updateMeeting
implementation (function updateMeeting in VideoApiAdapter.ts) validate that
bookingRef.meetingId, meetingPassword, and meetingUrl are present and
non-null/undefined and if any are missing reject/throw a descriptive error (e.g.
"missing meetingId") or otherwise return a safe fallback so the returned
Promise<VideoCallData> always contains real strings for id/password/url; update
the Promise resolution to use the validated values (or fail fast) rather than
using `as string`.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d0e19666-a825-41fb-9a10-fdceaea1448f

📥 Commits

Reviewing files that changed from the base of the PR and between cb21745 and efd7a17.

⛔ Files ignored due to path filters (1)
  • packages/app-store/bigbluebutton/static/icon.svg is excluded by !**/*.svg
📒 Files selected for processing (22)
  • apps/api/v2/src/platform/bookings/2024-08-13/services/booking-video.service.ts
  • apps/api/v2/src/platform/event-types/event-types_2024_06_14/transformers/api-to-internal/locations.ts
  • apps/api/v2/src/platform/event-types/event-types_2024_06_14/transformers/internal-to-api/locations.ts
  • apps/api/v2/src/platform/event-types/event-types_2024_06_14/transformers/internal/locations.ts
  • packages/app-store/apps.keys-schemas.generated.ts
  • packages/app-store/apps.metadata.generated.ts
  • packages/app-store/apps.schemas.generated.ts
  • packages/app-store/apps.server.generated.ts
  • packages/app-store/bigbluebutton/DESCRIPTION.md
  • packages/app-store/bigbluebutton/_metadata.ts
  • packages/app-store/bigbluebutton/api/add.ts
  • packages/app-store/bigbluebutton/api/index.ts
  • packages/app-store/bigbluebutton/index.ts
  • packages/app-store/bigbluebutton/lib/VideoApiAdapter.ts
  • packages/app-store/bigbluebutton/lib/index.ts
  • packages/app-store/bigbluebutton/package.json
  • packages/app-store/bigbluebutton/zod.ts
  • packages/app-store/bookerApps.metadata.generated.ts
  • packages/app-store/video.adapters.generated.ts
  • packages/platform/types/bookings/2024-08-13/inputs/location.input.ts
  • packages/platform/types/event-types/event-types_2024_06_14/inputs/locations.input.ts
  • packages/platform/types/event-types/event-types_2024_06_14/outputs/locations.output.ts
✅ Files skipped from review due to trivial changes (9)
  • packages/app-store/bigbluebutton/_metadata.ts
  • packages/app-store/bigbluebutton/api/index.ts
  • packages/app-store/video.adapters.generated.ts
  • packages/app-store/apps.server.generated.ts
  • packages/app-store/bigbluebutton/package.json
  • packages/app-store/apps.keys-schemas.generated.ts
  • packages/app-store/apps.schemas.generated.ts
  • packages/app-store/apps.metadata.generated.ts
  • packages/app-store/bigbluebutton/index.ts

Comment thread packages/app-store/bigbluebutton/lib/VideoApiAdapter.ts Outdated
Comment thread packages/app-store/bigbluebutton/lib/VideoApiAdapter.ts
@bandhan-majumder
Copy link
Copy Markdown
Member

please attach a working demo in the description. making it draft til then.

@bandhan-majumder bandhan-majumder marked this pull request as draft June 2, 2026 12:53
@Simultech369 Simultech369 marked this pull request as ready for review June 4, 2026 03:49
@bandhan-majumder
Copy link
Copy Markdown
Member

@Simultech369 please submit appropriate demo, closing!

@Simultech369
Copy link
Copy Markdown
Author

Hey @bandhan-majumder — there is a working demo video attached at the top of the PR description:
https://github.com/user-attachments/assets/701fa4d4-dd74-460c-a333-4c3dd4dee28e

It shows the integration flow working end-to-end. If that satisfies the demo requirement, could you please reopen the PR for review?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app-store area: app store, apps, calendar integrations, google calendar, outlook, lark, apple calendar 💎 Bounty A bounty on Algora.io community Created by Linear-GitHub Sync consumer ✨ feature New feature or request 🙋🏻‍♂️help wanted Help from the community is appreciated size/L $50

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[CAL-3105] BigBlueButton Integration

3 participants