docs/production/video-calls.md
Zulip makes it convenient to start a call with the click of a button, using the call provider of your choice. The call providers supported by Zulip are:
By default, Zulip uses the cloud version of Jitsi Meet as its call provider. This page documents the configurations required to support other video call integration options on a self-hosted Zulip server.
:::{note} You can disable the video and voice call buttons for your organization by setting the call provider to "None". :::
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. No server configuration changes are required.
To use a Zoom 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: 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: Recommended for settings where the limitations of the Server to Server OAuth app are problematic (e.g., this is used by Zulip Cloud).
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 using this integration, users will 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:
Select Build App at the Zoom Marketplace. Create a Server to Server OAuth App.
Choose an app name such as "ExampleCorp Zulip".
In the Information tab:
In the Scopes tab, add the meeting:write:meeting:admin and
meeting:write:meeting:master scopes.
In the Activation tab, activate your app. You can now configure your Zulip server to use the 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 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.
Select Build App at the Zoom Marketplace. Create a General App.
In the Basic Information tab:
https://zulip.example.com/calls/zoom/complete (replacing
zulip.example.com by your main Zulip hostname).In the Scopes tab, add the meeting:write:meeting scope.
Switch to the Production tab and complete the information needed for the Zoom App Marketplace Review Process in the App Listing and Technical Design tabs.
Submit your app for review. Select the Publish the app by myself option on the App Submission page so that the app will be unlisted.
Once your app has been approved by the Zoom app review team, then you can proceed to configure your Zulip server to use the app.
In /etc/zulip/zulip-secrets.conf, set video_zoom_client_secret
to be your app's "Client Secret".
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, set
VIDEO_ZOOM_SERVER_TO_SERVER_ACCOUNT_ID to be your app's "Account
ID".
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 in the Zulip organizations where you want to use it.
To use the BigBlueButton video call integration on a self-hosted Zulip installation, you'll need to have a BigBlueButton server (version 2.4+) and configure it:
Get the Shared Secret using the bbb-conf --secret command on your
BigBlueButton Server. See also the BigBlueButton
documentation.
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:
In /etc/zulip/zulip-secrets.conf, set big_blue_button_secret
to be your BigBlueButton Server's shared secret.
In /etc/zulip/settings.py, set BIG_BLUE_BUTTON_URL to your
BigBlueButton Server's API URL.
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 in the Zulip organizations where you want to use it.
To use the Constructor 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.
To use the Nextcloud 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.
To use the Webex 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.
Visit the New Integration page on the Webex developer portal.
Select "No" for "Will this integration use a mobile SDK?".
Fill in the Integration name, Icon and App Hub Description according to your preferences.
For Redirect URI(s), enter https://zulip.example.com/calls/webex/complete
replacing zulip.example.com with your Zulip organization's URL.
For Scopes, select spark:all, meeting:schedules_read and
meeting:schedules_write, and select Add Integration.
optional: You can submit the integration to the Webex App Hub by following this documentation.
In /etc/zulip/zulip-secrets.conf, set video_webex_client_secret
to your Webex integration's "Client Secret".
In /etc/zulip/settings.py, set VIDEO_WEBEX_CLIENT_ID to your
Webex integration's "Client ID".
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 in the Zulip organization where you want to use it.