Files
upstream-zulip/docs/production/video-calls.md
upstream-mirror 64898b2c79
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
snapshot of https://github.com/zulip/zulip.git @ 48c69911c7dd4e03b20552eb3bd77ad8151c1357 (2026-09-15)
2026-09-15 15:05:30 +05:00

243 lines
9.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Video call providers
Zulip makes it convenient to [start a
call](https://zulip.com/help/start-a-call) with the click of a button, using the
call provider of your choice. The call providers
supported by Zulip are:
- [Jitsi Meet](https://zulip.com/integrations/jitsi), a fully-encrypted,
100% open source video conferencing solution.
- [Zoom](https://zulip.com/integrations/zoom)
- [BigBlueButton](https://zulip.com/integrations/big-blue-button)
- [Constructor Groups](https://zulip.com/integrations/constructor-groups)
- [Nextcloud Talk](https://zulip.com/integrations/nextcloud-talk)
- [Webex](https://zulip.com/integrations/webex)
By default, Zulip uses the [cloud version of Jitsi Meet](https://meet.jit.si/)
as its call provider. This page documents the configurations required to support
other [video call integration
options](https://zulip.com/help/configure-call-provider) on a self-hosted Zulip
server.
:::{note}
You can disable the video and voice call buttons for your organization by
[setting the call
provider](https://zulip.com/help/configure-call-provider)
to "None".
:::
## Jitsi
You can configure Zulip to use a self-hosted
instance of Jitsi Meet by providing the URL of your self-hosted Jitsi Meet
server [in organization
settings](https://zulip.com/help/configure-call-provider#use-a-self-hosted-instance-of-jitsi-meet).
No server configuration changes are required.
## Zoom
To use a [Zoom](https://zoom.us) integration on a self-hosted
installation, you'll need to register a custom Zoom application for
your Zulip server. Zulip supports two types of custom Zoom apps:
- [Server to Server OAuth app](#server-to-server-oauth-app): Easiest to set up,
but requires users to be part of the Zoom organization that created the
application in order to create calls.
- [General OAuth app](#general-oauth-app): Recommended for settings where the
limitations of the Server to Server OAuth app are problematic (e.g., this is
used by Zulip Cloud).
### Server to Server OAuth app
This Zoom application type, introduced in Zulip 10.0, is easiest to
set up, and is ideal for most installations that self-host Zulip. To
[create Zoom meeting links in Zulip
messages](https://zulip.com/help/start-a-call#start-a-call) using this
integration, users will need to be members of your Zoom
organization and use the same email address in Zulip that they have
registered with Zoom.
You can set up this integration as follows:
1. Select [**Build App**](https://marketplace.zoom.us/develop/create)
at the Zoom Marketplace. Create a **Server to Server OAuth App**.
1. Choose an app name such as "ExampleCorp Zulip".
1. In the **Information** tab:
- Add a short description and company name.
- Add a name and email for the developer contact information.
1. In the **Scopes** tab, add the `meeting:write:meeting:admin` and
`meeting:write:meeting:master` scopes.
1. In the **Activation** tab, activate your app. You can now
[configure your Zulip server](#configure-your-zulip-server)
to use the app.
### General OAuth app
This Zoom application type is more flexible than the server-to-server
integration. However, current Zoom policy requires all General OAuth
apps to go through the full Zoom Marketplace review process, even for
[unlisted
apps](https://developers.zoom.us/docs/platform/key-concepts/#private-vs-beta-vs-published-vs-unlisted-apps)
that will only be used by a single customer. As a result, you have to
do quite a bit of publishing overhead work in order to create this
type of Zoom application for your Zulip server.
1. Select [**Build App**](https://marketplace.zoom.us/develop/create)
at the Zoom Marketplace. Create a **General App**.
1. In the **Basic Information** tab:
- Choose an app name such as "ExampleCorp Zulip".
- Select **User-managed app**.
- In the **OAuth Information** section, set the **OAuth Redirect URL**
to `https://zulip.example.com/calls/zoom/complete` (replacing
`zulip.example.com` by your main Zulip hostname).
<!--
If we ever need to increase scopes in the future, we should also include the scopes
required to retrieve a user's details via this
endpoint: https://developers.zoom.us/docs/api/users/#tag/users/get/users/{userId}
This will help us implement a deauthorization workflow for Zoom app integrations,
where we delete the user's zoom_token from the database upon receiving a request
from Zoom’s deauthorization webhook, based on the user's zoom_id, which is part
of the deauthorization request payload.
Details: https://chat.zulip.org/#narrow/channel/49-development-help/topic/What's.20the.20use.20of.20.60.2Fcalls.2Fzoom.2Fdeauthorize.60.20endpoint/with/2296326
-->
1. In the **Scopes** tab, add the `meeting:write:meeting` scope.
1. Switch to the **Production** tab and complete the information needed
for the [Zoom App Marketplace Review
Process](https://developers.zoom.us/docs/distribute/app-review-process/)
in the **App Listing** and **Technical Design** tabs.
1. [Submit your app for
review](https://developers.zoom.us/docs/build-flow/submitting-apps-for-review/).
Select the **Publish the app by myself** option on the **App Submission**
page so that the app will be
[unlisted](https://developers.zoom.us/docs/build-flow/publishing-your-apps/#unlisted-apps).
1. Once your app has been approved by the Zoom app review team, then
you can proceed to [configure your Zulip server](#configure-your-zulip-server)
to use the app.
### Configure your Zulip server
1. In `/etc/zulip/zulip-secrets.conf`, set `video_zoom_client_secret`
to be your app's "Client Secret".
1. In `/etc/zulip/settings.py`, set `VIDEO_ZOOM_CLIENT_ID` to your
app's "Client ID". Some Zoom enterprise customers that don't use
`zoom.us` will need to set `VIDEO_ZOOM_API_URL` for the Zoom API
server and `VIDEO_ZOOM_OAUTH_URL` for your instance's
authorization. If you're using a Zoom [Server to Server OAuth
app](#server-to-server-oauth-app), set
`VIDEO_ZOOM_SERVER_TO_SERVER_ACCOUNT_ID` to be your app's "Account
ID".
1. Restart the Zulip server with
`/home/zulip/deployments/current/scripts/restart-server`.
This enables Zoom support in your Zulip server. Finally, [configure Zoom as the
video call
provider](https://zulip.com/help/configure-call-provider)
in the Zulip organizations where you want to use it.
## BigBlueButton
To use the [BigBlueButton](https://bigbluebutton.org/) video call
integration on a self-hosted Zulip installation, you'll need to have a
BigBlueButton server (version 2.4+) and configure it:
1. Get the Shared Secret using the `bbb-conf --secret` command on your
BigBlueButton Server. See also [the BigBlueButton
documentation](https://docs.bigbluebutton.org/administration/customize/#extract-the-shared-secret).
2. Get the URL to your BigBlueButton API. The URL has the form of
`https://bigbluebutton.example.com/bigbluebutton/` and can also be
found using the `bbb-conf --secret` command.
You can then configure your Zulip server to use that BigBlueButton
Server as follows:
1. In `/etc/zulip/zulip-secrets.conf`, set `big_blue_button_secret`
to be your BigBlueButton Server's shared secret.
2. In `/etc/zulip/settings.py`, set `BIG_BLUE_BUTTON_URL` to your
BigBlueButton Server's API URL.
3. Restart the Zulip server with
`/home/zulip/deployments/current/scripts/restart-server`.
This enables BigBlueButton support in your Zulip server. Finally, [configure
BigBlueButton as the video call
provider](https://zulip.com/help/configure-call-provider)
in the Zulip organizations where you want to use it.
## Constructor Groups
To use the [Constructor Groups](https://constructor.tech/products/learning/groups)
video call integration on a self-hosted Zulip installation, you'll need to
have a Constructor Groups account. See documentation to configure the Constructor
Groups video call integration [here](https://zulip.com/integrations/constructor-groups).
## Nextcloud Talk
To use the [Nextcloud Talk](https://nextcloud.com/talk/) video call
integration on a self-hosted Zulip installation, you'll need to have access
to a Nextcloud server (version 22+) with the Talk app enabled. See
documentation to configure the Nextcloud Talk video call integration
[here](https://zulip.com/integrations/nextcloud-talk).
## Webex
To use the [Webex](https://www.webex.com/) integration on a self-hosted
Zulip installation, you'll need to register a custom Webex integration.
For users in paid Webex organizations, which have the ability to create
public rooms that are visible to every member within that organization,
an ad-hoc meeting is created in Webex. Otherwise, for users of free
Webex organizations, a personal room meeting is created in Webex.
### Create a custom Webex integration
1. Visit the [New Integration](https://developer.webex.com/my-apps/new/integration)
page on the Webex developer portal.
1. Select "No" for "Will this integration use a mobile SDK?".
1. Fill in the **Integration name**, **Icon** and **App Hub Description**
according to your preferences.
1. For **Redirect URI(s)**, enter `https://zulip.example.com/calls/webex/complete`
replacing `zulip.example.com` with your Zulip organization's URL.
1. For **Scopes**, select `spark:all`, `meeting:schedules_read` and
`meeting:schedules_write`, and select **Add Integration**.
1. _optional_: You can submit the integration to the [Webex App Hub](https://apphub.webex.com/)
by following [this documentation](https://developer.webex.com/create/docs/app-hub-submission-process).
### Configure your Zulip server
1. In `/etc/zulip/zulip-secrets.conf`, set `video_webex_client_secret`
to your Webex integration's "Client Secret".
1. In `/etc/zulip/settings.py`, set `VIDEO_WEBEX_CLIENT_ID` to your
Webex integration's "Client ID".
1. Restart the Zulip server with
`/home/zulip/deployments/current/scripts/restart-server`.
This enables Webex support in your Zulip server. Finally, [configure Webex
as the video call provider](https://zulip.com/help/configure-call-provider)
in the Zulip organization where you want to use it.