snapshot of https://github.com/zulip/zulip.git @ 48c69911c7dd4e03b20552eb3bd77ad8151c1357 (2026-09-15)
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
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
This commit is contained in:
24
templates/zerver/integrations/asana.md
Normal file
24
templates/zerver/integrations/asana.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Zulip Asana integration
|
||||
|
||||
Get Zulip notifications for your Asana projects via Zapier!
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. {!create-an-incoming-webhook.md!}
|
||||
|
||||
1. Continue with step 3 of the [Zapier documentation][1] to finish
|
||||
integrating Zulip with Asana.
|
||||
|
||||
!!! tip ""
|
||||
|
||||
You can repeat the above process and create Zaps for different projects
|
||||
and/or different kinds of Asana events that you'd like to be notified
|
||||
about in Zulip.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
{!congrats.md!}
|
||||
|
||||

|
||||
|
||||
[1]: ./zapier
|
||||
36
templates/zerver/integrations/atolio.md
Normal file
36
templates/zerver/integrations/atolio.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# Zulip Atolio integration
|
||||
|
||||
Index Zulip channels, topics, and messages in your Atolio knowledge base!
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. {!create-a-generic-bot.md!}
|
||||
|
||||
1. [Subscribe the bot][subscribe-channels] to the Zulip channels that you
|
||||
want Atolio to index.
|
||||
|
||||
1. [Download the `zuliprc` file](/help/manage-a-bot#download-zuliprc-configuration-file)
|
||||
for the bot you created above.
|
||||
|
||||
1. In Atolio, configure the Zulip connector using the following values
|
||||
from the `zuliprc` file:
|
||||
|
||||
* **Domain**: Your Zulip organization URL.
|
||||
* **Email**: The bot's email address.
|
||||
* **Token**: The bot's API key.
|
||||
|
||||
1. Use the Atolio connector configuration to include or exclude specific
|
||||
topics at the [`topic` resource level][content-filtering] using the
|
||||
"channel name/topic name" format.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
You're done! You should be able to index Zulip from Atolio.
|
||||
|
||||
### Related documentation
|
||||
|
||||
* [Atolio Zulip Connector documentation](https://docs.atolio.com/configure-sources/zulip/)
|
||||
* [Channel permissions for bots](/help/bots-overview#channel-permissions-for-bots)
|
||||
|
||||
[subscribe-channels]: /help/manage-user-channel-subscriptions#subscribe-a-user-to-a-channel
|
||||
[content-filtering]: https://docs.atolio.com/configure-sources/zulip/#:~:text=bot%20or%20user-,Content%20Filtering,-The%20Zulip%20connector
|
||||
52
templates/zerver/integrations/big-blue-button.md
Normal file
52
templates/zerver/integrations/big-blue-button.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# Use BigBlueButton as your call provider in Zulip
|
||||
|
||||
You can configure BigBlueButton as the call provider for your organization.
|
||||
Users will be able to start a BigBlueButton call and invite others using the
|
||||
**add video call** (<i class="zulip-icon zulip-icon-video-call"></i>) or
|
||||
**add voice call** (<i class="zulip-icon zulip-icon-voice-call"></i>) button
|
||||
[in the compose box](/help/start-a-call).
|
||||
|
||||
!!! warn ""
|
||||
|
||||
**Note:** This is currently only possible on self-hosted Zulip
|
||||
installations, and you'll need a BigBlueButton server.
|
||||
|
||||
## Configure BigBlueButton as your call provider
|
||||
|
||||
By default, Zulip integrates with
|
||||
[Jitsi Meet](https://jitsi.org/jitsi-meet/), a fully-encrypted, 100% open
|
||||
source video conferencing solution. You can configure Zulip to use BigBlueButton
|
||||
as your call provider instead.
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. Run `bbb-conf --secret` on your BigBlueButton server to get
|
||||
the hostname and shared secret for your BigBlueButton server.
|
||||
|
||||
1. In `/etc/zulip/zulip-secrets.conf`, set `big_blue_button_secret` to your
|
||||
BigBlueButton server's shared secret.
|
||||
|
||||
1. In `/etc/zulip/settings.py`, set `BIG_BLUE_BUTTON_URL` to your
|
||||
BigBlueButton server's hostname.
|
||||
|
||||
1. Restart the Zulip server with
|
||||
`/home/zulip/deployments/current/scripts/restart-server`.
|
||||
|
||||
{settings_tab|organization-settings}
|
||||
|
||||
1. Under **Compose settings**, select BigBlueButton from the **Call provider**
|
||||
dropdown.
|
||||
|
||||
1. Click **Save changes**.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
### Related documentation
|
||||
|
||||
- [How to start a call](/help/start-a-call)
|
||||
- [Jitsi Meet integration](/integrations/jitsi)
|
||||
- [Zoom integration](/integrations/zoom)
|
||||
- [Constructor Groups integration](/integrations/constructor-groups)
|
||||
* [BigBlueButton server configuration](https://docs.bigbluebutton.org/administration/customize/#other-configuration-changes)
|
||||
- [Nextcloud Talk integration](/integrations/nextcloud-talk)
|
||||
- [Webex integration](/integrations/webex)
|
||||
50
templates/zerver/integrations/capistrano.md
Normal file
50
templates/zerver/integrations/capistrano.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# Zulip Capistrano Integration
|
||||
|
||||
Get Zulip notifications for your Capistrano deploys!
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. {!create-an-incoming-webhook.md!}
|
||||
|
||||
1. {!download-python-bindings.md!}
|
||||
|
||||
1. You can now send Zulip messages by calling the `zulip-send`
|
||||
utility from your `deploy.rb` config file.
|
||||
|
||||
1. Here's some example code for sending a Zulip notification when a
|
||||
deployment has completed:
|
||||
|
||||
after 'deploy', 'notify:humbug'
|
||||
|
||||
namespace :notify do
|
||||
desc "Post a message to Zulip after deploy"
|
||||
task :humbug do
|
||||
run_locally "echo 'I just deployed to #{stage}! :tada:' | zulip-send \
|
||||
--user capistrano-bot@{{ display_host }} --api-key a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5 \
|
||||
--site={{ zulip_url }} \
|
||||
--stream commits --subject deployments || true"
|
||||
end
|
||||
end
|
||||
|
||||
Use your bot's email address and [API key][3] for `--user` and
|
||||
`--api-key` respectively.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
{!congrats.md!}
|
||||
|
||||

|
||||
|
||||
### Configuration Options
|
||||
|
||||
* Customize the notification trigger by replacing `deploy` in the above
|
||||
example with [any stage][1] of your deployment process.
|
||||
|
||||
### Related documentation
|
||||
|
||||
* [Capistrano's Before/After Hooks][1]
|
||||
* [Configuring the Python bindings][2]
|
||||
|
||||
[1]: https://capistranorb.com/documentation/getting-started/before-after/
|
||||
[2]: https://zulip.com/api/configuring-python-bindings
|
||||
[3]: https://zulip.com/api/api-keys#get-a-bots-api-key
|
||||
120
templates/zerver/integrations/catalog.html
Normal file
120
templates/zerver/integrations/catalog.html
Normal file
@@ -0,0 +1,120 @@
|
||||
{% extends "zerver/portico.html" %}
|
||||
{% set entrypoint = "integrations" %}
|
||||
|
||||
{% block customhead %}
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
{% endblock %}
|
||||
|
||||
{% block hello_page_container %} hello-main{% endblock %}
|
||||
|
||||
{% block portico_content %}
|
||||
|
||||
{% include 'zerver/marketing_nav.html' %}
|
||||
{% import 'zerver/integrations/macros.html' as integration_macros %}
|
||||
|
||||
<div class="portico-landing integrations">
|
||||
<div class="main">
|
||||
<div class="padded-content">
|
||||
<div class="inner-content">
|
||||
<div class="integration-main-text">
|
||||
<header>
|
||||
<h1 class="portico-page-heading">
|
||||
Over {{ integrations_count_display }} native integrations.
|
||||
</h1>
|
||||
</header>
|
||||
<p class="portico-page-subheading">
|
||||
And hundreds more through
|
||||
<a href="/integrations/zapier">Zapier</a>
|
||||
and
|
||||
<a href="/integrations/ifttt">IFTTT</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="integration-search">
|
||||
<div class="searchbar">
|
||||
<div class="searchbar-reset">
|
||||
<i class="zulip-icon zulip-icon-search" aria-hidden="true"></i>
|
||||
<input type="text" class="search_input" placeholder="Search integrations"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% set dropdown_label = 'Filter by category' %}
|
||||
{% if selected_category_slug != 'all' %}
|
||||
{% set dropdown_label = categories_dict.get(selected_category_slug, dropdown_label) %}
|
||||
{% endif %}
|
||||
<div class="integration-categories-dropdown">
|
||||
<div class="integration-toggle-categories-dropdown">
|
||||
<h3 class="dropdown-category-label">{{ dropdown_label }}</h3>
|
||||
<i class="fa fa-angle-down" aria-hidden="true"></i>
|
||||
</div>
|
||||
<div class="dropdown-list">
|
||||
<a href="/integrations/" class="integration-category {% if selected_category_slug == 'all' %}selected{% endif %}" data-category="all">
|
||||
All
|
||||
</a>
|
||||
{% for category in categories_dict.keys() %}
|
||||
<a href="/integrations/category/{{ category }}" class="integration-category {% if selected_category_slug == category %}selected{% endif %}" data-category="{{ category }}">
|
||||
{{ categories_dict[category] }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
<h3 class="heading">Custom integrations</h3>
|
||||
<a href="https://zulip.readthedocs.io/en/latest/webhooks/incoming-webhooks-overview.html">
|
||||
Incoming webhooks
|
||||
</a>
|
||||
<a href="/help/writing-bots">
|
||||
Interactive bots
|
||||
</a>
|
||||
<a href="/api/rest">
|
||||
REST API
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="catalog">
|
||||
<div class="integration-categories-sidebar">
|
||||
<h3>Categories</h3>
|
||||
<a href="/integrations/" data-category="all" class="integration-category {% if selected_category_slug == 'all' %}selected{% endif %}">
|
||||
All
|
||||
</a>
|
||||
{% for category in categories_dict.keys() %}
|
||||
<a href="/integrations/category/{{ category }}" data-category="{{ category }}" class="integration-category {% if selected_category_slug == category %}selected{% endif %}">
|
||||
{{ categories_dict[category] }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
<h3>Custom integrations</h3>
|
||||
<a href="https://zulip.readthedocs.io/en/latest/webhooks/incoming-webhooks-overview.html">
|
||||
Incoming webhooks
|
||||
</a>
|
||||
<a href="/help/writing-bots">
|
||||
Interactive bots
|
||||
</a>
|
||||
<a href="/api/rest">
|
||||
REST API
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="integration-lozenges">
|
||||
{% for integration in visible_integrations %}
|
||||
<a href="/integrations/{{ integration.name }}{% if selected_category_slug != 'all' %}?category={{ selected_category_slug }}{% endif %}">
|
||||
{{ integration_macros.render_integration_lozenge(integration) }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
<div class="integration-request center">
|
||||
<p>Don't see an integration you need? We'd love to help.</p>
|
||||
<div class="hero-buttons center">
|
||||
<a href="/api/integrations-overview" class="button">
|
||||
Create your own
|
||||
</a>
|
||||
<a href="/help/request-an-integration" class="button">
|
||||
Request an integration
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- .inner-content -->
|
||||
</div> <!-- .padded-content -->
|
||||
</div> <!-- .main -->
|
||||
</div> <!-- .portico-landing -->
|
||||
|
||||
{% endblock %}
|
||||
59
templates/zerver/integrations/constructor-groups.md
Normal file
59
templates/zerver/integrations/constructor-groups.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# Use Constructor Groups as your call provider in Zulip
|
||||
|
||||
You can configure [Constructor Groups][constructor-groups] as the call
|
||||
provider for your organization. Users will be able to start a Constructor
|
||||
Groups call and invite others using the **add video call**
|
||||
(<i class="zulip-icon zulip-icon-video-call"></i>) button [in the compose
|
||||
box](/help/start-a-call).
|
||||
|
||||
!!! warn ""
|
||||
|
||||
**Note:** This is currently only possible on self-hosted Zulip
|
||||
installations, and requires a Constructor Groups account.
|
||||
|
||||
## Configure Constructor Groups as your call provider
|
||||
|
||||
By default, Zulip integrates with
|
||||
[Jitsi Meet](https://jitsi.org/jitsi-meet/), a fully-encrypted, 100% open
|
||||
source video conferencing solution. You can configure Zulip to use
|
||||
[Constructor Groups][constructor-groups] as your call provider instead.
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. Obtain your Constructor Groups [API credentials][constructor-groups-api-docs]
|
||||
by going to your Constructor Groups dashboard. Select **Settings**, and
|
||||
open the **Development** tab. Click the **Create new API Key** button,
|
||||
fill the required fields, and click **Create**. Copy your **Access Key**
|
||||
and **Secret Key** from the window that opens.
|
||||
|
||||
1. In `/etc/zulip/zulip-secrets.conf`, set `constructor_groups_access_key`
|
||||
and `constructor_groups_secret_key` to the access key and secret key
|
||||
created in the previous step.
|
||||
|
||||
1. In `/etc/zulip/settings.py`, set `CONSTRUCTOR_GROUPS_URL` to your
|
||||
Constructor Groups API URL, e.g., `https://example.constructor.app/api/groups/xapi`.
|
||||
|
||||
1. Restart the Zulip server with
|
||||
`/home/zulip/deployments/current/scripts/restart-server`.
|
||||
|
||||
{settings_tab|organization-settings}
|
||||
|
||||
1. Under **Compose settings**, select Constructor Groups from the
|
||||
**Call provider** dropdown.
|
||||
|
||||
1. Click **Save changes**.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
### Related documentation
|
||||
|
||||
- [Constructor Groups API documentation][constructor-groups-api-docs]
|
||||
- [How to start a call](/help/start-a-call)
|
||||
- [Jitsi Meet integration](/integrations/jitsi)
|
||||
- [Zoom integration](/integrations/zoom)
|
||||
- [BigBlueButton integration](/integrations/big-blue-button)
|
||||
- [Nextcloud Talk integration](/integrations/nextcloud-talk)
|
||||
- [Webex integration](/integrations/webex)
|
||||
|
||||
[constructor-groups-api-docs]: https://developer.perculus.com/v2-en
|
||||
[constructor-groups]: https://constructor.tech/products/learning/groups
|
||||
42
templates/zerver/integrations/discourse.md
Normal file
42
templates/zerver/integrations/discourse.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# Zulip Discourse integration
|
||||
|
||||
Forward new Discourse posts to Zulip!
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. {!create-an-incoming-webhook.md!}
|
||||
|
||||
1. Install the Discourse [Chat Integration][chat-integration].
|
||||
|
||||
1. In your **Discourse site settings**, toggle
|
||||
`chat_integration_zulip_enabled`, and fill in the following information:
|
||||
|
||||
* `chat_integration_zulip_server`: {{ zulip_url }}
|
||||
* `chat_integration_zulip_bot_api_key`: your bot's API key
|
||||
* `chat_integration_zulip_bot_email_address`: your bot's email
|
||||
|
||||
1. Go to the **Plugins** tab, click on **Chat Integration**. Select
|
||||
**Zulip**, and click **Add Channel**.
|
||||
|
||||
1. Set **Stream** to the [channel](/help/create-a-channel) name that you'd
|
||||
like to receive notifications in, set **Subject** to the topic name, and
|
||||
click **Save Channel**.
|
||||
|
||||
1. To filter the posts you'd like to forward to Zulip,
|
||||
[configure the rules][configuring-rules] in your Discourse forum's
|
||||
**Chat Integrations** panel.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
{!congrats.md!}
|
||||
|
||||

|
||||
|
||||
### Related documentation
|
||||
|
||||
- [Discourse Chat Integration][chat-integration]
|
||||
- [Discourse's documentation on the Zulip integration][setup-instructions]
|
||||
|
||||
[setup-instructions]: https://meta.discourse.org/t/68501
|
||||
[chat-integration]: https://meta.discourse.org/t/discourse-chat-integration/66522
|
||||
[configuring-rules]: https://meta.discourse.org/t/discourse-chat-integration/66522#configuring-rules-4
|
||||
48
templates/zerver/integrations/doc.html
Normal file
48
templates/zerver/integrations/doc.html
Normal file
@@ -0,0 +1,48 @@
|
||||
{% extends "zerver/portico.html" %}
|
||||
{% set entrypoint = "integrations" %}
|
||||
|
||||
{% block customhead %}
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
{% endblock %}
|
||||
|
||||
{% block hello_page_container %} hello-main{% endblock %}
|
||||
|
||||
{% block portico_content %}
|
||||
|
||||
{% include 'zerver/marketing_nav.html' %}
|
||||
{% import 'zerver/integrations/macros.html' as integration_macros %}
|
||||
|
||||
<div class="portico-landing integrations">
|
||||
<div class="main">
|
||||
<div class="padded-content">
|
||||
<div class="inner-content">
|
||||
<div id="integration-instructions-group">
|
||||
<div id="integration-instruction-block" class="integration-instruction-block">
|
||||
{% if integration_categories %}
|
||||
<div class="categories">
|
||||
{% for slug, display_name in integration_categories %}
|
||||
<a href="/integrations/category/{{ slug }}">
|
||||
<h3 class="integration-category" data-category="{{ slug }}">
|
||||
{{ display_name }}
|
||||
</h3>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{{ integration_macros.render_integration_lozenge(selected_integration, is_doc_view=true) }}
|
||||
<a href="/integrations/{% if return_category_slug != 'all' %}category/{{ return_category_slug }}{% endif %}" id="integration-list-link">
|
||||
<i class="zulip-icon zulip-icon-arrow-left" aria-hidden="true"></i><span class="integrations-back-label-long">Back to list</span><span class="integrations-back-label-short">Back</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div id="{{ selected_integration.name }}" class="integration-instructions markdown show">
|
||||
<div class="help-content">{{ integration_doc_html|safe }}</div>
|
||||
{{ integration_macros.render_logos_disclaimer() }}
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- .inner-content -->
|
||||
</div> <!-- .padded-content -->
|
||||
</div> <!-- .main -->
|
||||
</div> <!-- .portico-landing -->
|
||||
|
||||
{% endblock %}
|
||||
56
templates/zerver/integrations/email.md
Normal file
56
templates/zerver/integrations/email.md
Normal file
@@ -0,0 +1,56 @@
|
||||
<!-- Any changes to this file should be reflected in
|
||||
starlight_help/src/content/docs/using-zulip-via-email.mdx
|
||||
and vice versa. This file used to be a symlink to that file
|
||||
before we converted it to mdx. -->
|
||||
# Using Zulip via email
|
||||
|
||||
With Zulip, it is possible for some members of your organization to participate
|
||||
from their email client, without opening the Zulip app after the initial
|
||||
setup is complete.
|
||||
|
||||
## Subscribe a Zulip channel to a mailing list
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. Create a mailing list to use with Zulip, or use an existing one.
|
||||
|
||||
1. Create a Zulip channel that will receive mailing list traffic, or
|
||||
use an existing one.
|
||||
|
||||
1. [Generate an email
|
||||
address](/help/message-a-channel-by-email#message-a-channel-by-email_1) for
|
||||
the channel you created.
|
||||
|
||||
1. Add the email address for the channel to the mailing list.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
New emails sent to the email list will now be mirrored to the channel.
|
||||
|
||||
## Setup instructions for email users
|
||||
|
||||
If you want to interact with Zulip primarily (or entirely) via your email client:
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. [Subscribe](/help/introduction-to-channels#browse-and-subscribe-to-channels) to any channels you are
|
||||
interested in.
|
||||
|
||||
{settings_tab|notifications}
|
||||
|
||||
1. In the **Notification triggers** table, make sure both of the checkboxes
|
||||
under **Email** are checked.
|
||||
|
||||
1. Close the Zulip window. Zulip does not send email notifications
|
||||
while you are actively engaging with the web application.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
New Zulip messages will now be delivered to your email account. You
|
||||
can reply directly to the emails coming from Zulip, and your replies
|
||||
will be posted in the appropriate topic or direct message
|
||||
conversation on Zulip.
|
||||
|
||||
## Related articles
|
||||
|
||||
* [Message a channel by email](/help/message-a-channel-by-email)
|
||||
66
templates/zerver/integrations/errbot.md
Normal file
66
templates/zerver/integrations/errbot.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# Zulip Errbot integration
|
||||
|
||||
Run your favorite chatbot in Zulip!
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. [Install errbot][install-errbot], and follow the instructions to set up a
|
||||
`config.py`.
|
||||
|
||||
1. Clone the [Errbot integration package for Zulip][errbot-package]
|
||||
repository somewhere convenient, and install the requirements listed in
|
||||
`errbot-backend-zulip/requirements.txt`.
|
||||
|
||||
1. {!create-a-generic-bot.md!}
|
||||
|
||||
1. Edit your ErrBot's `config.py`. Use the following template for a minimal
|
||||
configuration:
|
||||
|
||||
import logging
|
||||
|
||||
BACKEND = 'Zulip'
|
||||
|
||||
BOT_EXTRA_BACKEND_DIR = r'<path/to/errbot-backend-zulip>'
|
||||
BOT_DATA_DIR = r'<path/to/your/errbot/data/directory>'
|
||||
BOT_EXTRA_PLUGIN_DIR = r'<path/to/your/errbot/plugin/directory>'
|
||||
|
||||
BOT_LOG_FILE = r'<path/to/your/errbot/logfile.log>'
|
||||
BOT_LOG_LEVEL = logging.INFO
|
||||
|
||||
BOT_IDENTITY = {
|
||||
'email': '<your-bot@email.address>',
|
||||
'key': '<api-key-of-your-bot>',
|
||||
'site': '<your-zulip-organization-url>'
|
||||
}
|
||||
BOT_ADMINS = ('<your@email.address>',)
|
||||
CHATROOM_PRESENCE = ()
|
||||
BOT_PREFIX = '@**<your-bot-name>**'
|
||||
|
||||
Sections you need to edit are marked with `<>`. Replace the `<...>`
|
||||
placeholders with your own values, removing the `<` and `>` brackets.
|
||||
|
||||
Use the details of the Zulip bot created above for the `BOT_IDENTITY`
|
||||
and `BOT_PREFIX` sections.
|
||||
|
||||
1. [Start ErrBot][start-errbot].
|
||||
|
||||
!!! tip ""
|
||||
|
||||
ErrBot uses the term "Rooms" for Zulip channels.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
{!congrats.md!}
|
||||
|
||||

|
||||
|
||||
### Related documentation
|
||||
|
||||
- [Errbot Documentation](https://errbot.readthedocs.io/en/latest/)
|
||||
- [Errbot integration package for Zulip][errbot-package]
|
||||
- [Python bindings Configuration][config-python-bindings]
|
||||
|
||||
[install-errbot]: https://errbot.readthedocs.io/en/latest/user_guide/setup.html
|
||||
[errbot-package]: https://github.com/zulip/errbot-backend-zulip
|
||||
[start-errbot]: https://errbot.readthedocs.io/en/latest/user_guide/setup.html#starting-the-daemon
|
||||
[config-python-bindings]: https://zulip.com/api/configuring-python-bindings
|
||||
14
templates/zerver/integrations/giphy.md
Normal file
14
templates/zerver/integrations/giphy.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# Zulip GIPHY GIF integration
|
||||
|
||||
Send animated GIFs with your message using GIPHY.
|
||||
|
||||
GIPHY is enabled by default in Zulip Cloud. Follow
|
||||
[these instructions][configure-giphy] to configure GIPHY on a
|
||||
**self-hosted** Zulip server.
|
||||
|
||||
### Related documentation
|
||||
|
||||
* [Using GIFs in Zulip][help-center-gifs]
|
||||
|
||||
[help-center-gifs]: /help/animated-gifs
|
||||
[configure-giphy]: https://zulip.readthedocs.io/en/latest/production/gif-picker-integrations.html#giphy
|
||||
76
templates/zerver/integrations/github-actions.md
Normal file
76
templates/zerver/integrations/github-actions.md
Normal file
@@ -0,0 +1,76 @@
|
||||
# Zulip GitHub Actions integration
|
||||
|
||||
Get Zulip notifications from GitHub Actions workflow runs!
|
||||
|
||||
{start_tabs}
|
||||
|
||||
{tab|send-channel-message}
|
||||
|
||||
1. {!create-a-generic-bot.md!}
|
||||
|
||||
1. Add the `zulip/github-actions-zulip/send-message@v1` action to your GitHub
|
||||
Actions [workflow file][workflows]. The `content` template parameter supports Markdown
|
||||
and [GitHub Actions expressions][expressions].
|
||||
|
||||
```
|
||||
{% raw %}- name: Send a channel message
|
||||
if: steps.backup.outcome == 'failure'
|
||||
uses: zulip/github-actions-zulip/send-message@v1
|
||||
with:
|
||||
# Your bot's API key and email
|
||||
api-key: ${{ secrets.ZULIP_API_KEY }}
|
||||
email: "github-actions-generic-bot@example.com"
|
||||
organization-url: "https://your-org.zulipchat.com"
|
||||
type: "stream"
|
||||
# Notification channel
|
||||
to: "github-actions updates"
|
||||
topic: "scheduled backups"
|
||||
# Example: Notify if a previous GitHub Actions step with the ID "backup" fails.
|
||||
content: "Backup [failed](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) at <time:${{ steps.backup.outputs.time }}>.\n>${{ steps.backup.outputs.error }}"{% endraw %}
|
||||
```
|
||||
|
||||
{tab|send-dm}
|
||||
|
||||
1. {!create-a-generic-bot.md!}
|
||||
|
||||
1. Look up the ID of the recipient for DM notifications in their
|
||||
[profile](https://zulip.com/help/view-someones-profile).
|
||||
|
||||
1. Add the `zulip/github-actions-zulip/send-message@v1` action to your GitHub
|
||||
Actions [workflow file][workflows]. The `content` template parameter
|
||||
supports Markdown and [GitHub Actions expressions][expressions].
|
||||
|
||||
```
|
||||
{% raw %}- name: Send a channel message
|
||||
if: steps.backup.outcome == 'failure'
|
||||
uses: zulip/github-actions-zulip/send-message@v1
|
||||
with:
|
||||
# Your bot's API key and email
|
||||
api-key: ${{ secrets.ZULIP_API_KEY }}
|
||||
email: "github-actions-generic-bot@example.com"
|
||||
organization-url: "https://your-org.zulipchat.com"
|
||||
type: "private"
|
||||
# Recipient's user ID
|
||||
to: "295"
|
||||
# Example: Notify if a previous GitHub Actions step with the ID "backup" fails.
|
||||
content: "Backup [failed](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) at <time:${{ steps.backup.outputs.time }}>.\n>${{ steps.backup.outputs.error }}"{% endraw %}
|
||||
```
|
||||
|
||||
{end_tabs}
|
||||
|
||||
{!congrats.md!}
|
||||
|
||||

|
||||
|
||||
### Related documentation
|
||||
|
||||
* [Configuring the Send Message Action][README]
|
||||
|
||||
* [Zulip GitHub Actions repository][repo]
|
||||
|
||||
* [GitHub integration](/integrations/github)
|
||||
|
||||
[README]: https://github.com/zulip/github-actions-zulip/blob/main/send-message/README.md
|
||||
[repo]: https://github.com/zulip/github-actions-zulip
|
||||
[expressions]: https://docs.github.com/en/actions/reference/evaluate-expressions-in-workflows-and-actions
|
||||
[workflows]: https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax
|
||||
66
templates/zerver/integrations/hubot.md
Normal file
66
templates/zerver/integrations/hubot.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# Zulip Hubot Integration
|
||||
|
||||
Use Hubot to execute scripts and commands within Zulip!
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. Follow the [**Getting Started with Hubot**][getting-started] guide
|
||||
to create your Hubot. You'll have a new directory from which `bin/hubot`
|
||||
starts a vanilla Hubot instance with the shell backend.
|
||||
|
||||
1. In your Hubot's directory, install the Zulip adapter by running:
|
||||
|
||||
`npm install --save hubot-zulip`
|
||||
|
||||
1. {!create-a-generic-bot.md!}
|
||||
|
||||
1. Hubot uses the following environment variables, set them using the
|
||||
information of the bot you created, by running:
|
||||
|
||||
```
|
||||
export HUBOT_ZULIP_SITE="{{ zulip_url }}"
|
||||
export HUBOT_ZULIP_BOT="hubot-bot@{{ zulip_url }}"
|
||||
export HUBOT_ZULIP_API_KEY="0123456789abcdef0123456789abcdef"
|
||||
```
|
||||
|
||||
1. Run Hubot:
|
||||
|
||||
`bin/hubot --adapter zulip --name "<bot username>"`
|
||||
|
||||
!!! tip ""
|
||||
|
||||
Hubot automatically listens for commands on all public channels. Private
|
||||
channels require an invitation. Hubot's access can be
|
||||
[configured](#configuration-options).
|
||||
|
||||
{end_tabs}
|
||||
|
||||
To test your Hubot installation, send it an @-notification with a
|
||||
basic command, e.g., `@Hubot pug me`, which should produce a
|
||||
result like this:
|
||||
|
||||

|
||||
|
||||
### Configuration options
|
||||
|
||||
* To make Hubot listen only on the channels that it is subscribed to, run:
|
||||
|
||||
`export HUBOT_ZULIP_ONLY_SUBSCRIBED_STREAMS`
|
||||
|
||||
### Related documentation
|
||||
|
||||
* [GitHub repository for Zulip Hubot adapter][hubot-zulip]
|
||||
|
||||
* Zulip Integrations using Hubot: [Assembla](/integrations/assembla) |
|
||||
[Bonusly](/integrations/bonusly) |
|
||||
[Chartbeat](/integrations/chartbeat) |
|
||||
[Instagram](/integrations/instagram) |
|
||||
[Google Translate](/integrations/google-translate) |
|
||||
[MailChimp](/integrations/mailchimp) |
|
||||
[YouTube](/integrations/youtube)
|
||||
|
||||
* [Other Hubot adapters][other-adapters]
|
||||
|
||||
[hubot-zulip]: https://github.com/zulip/hubot-zulip
|
||||
[getting-started]: https://hubot.github.com/docs/#getting-started-with-hubot
|
||||
[other-adapters]: https://github.com/search?q=topic%3Ahubot-adapter&type=Repositories
|
||||
12
templates/zerver/integrations/hubot_common.md
Normal file
12
templates/zerver/integrations/hubot_common.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# Zulip {{ integration_display_name }} integration
|
||||
|
||||
Get Zulip notifications from {{ integration_display_name }} via Hubot!
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. [Install Hubot](hubot), and test it to make sure it is working.
|
||||
|
||||
1. Follow [these instructions]({{ hubot_docs_url }}) to set up
|
||||
the integration with {{ integration_display_name }}!
|
||||
|
||||
{end_tabs}
|
||||
@@ -0,0 +1,9 @@
|
||||
Open `{{ config_file_path}}` with your favorite editor, and change the
|
||||
following lines to specify the email address and API key for your
|
||||
{{ integration_display_name }} bot:
|
||||
|
||||
```
|
||||
ZULIP_USER = "{{ integration_name }}-bot@{{ display_host }}"
|
||||
ZULIP_API_KEY = "0123456789abcdef0123456789abcdef"
|
||||
ZULIP_SITE = "{{ zulip_url }}"
|
||||
```
|
||||
2
templates/zerver/integrations/include/congrats.md
Normal file
2
templates/zerver/integrations/include/congrats.md
Normal file
@@ -0,0 +1,2 @@
|
||||
You're done! Your {{ integration_display_name }} notifications may look like
|
||||
this:
|
||||
@@ -0,0 +1,3 @@
|
||||
[Create a bot](/help/add-a-bot-or-integration) for
|
||||
{{ integration_display_name }}. Make sure that you select
|
||||
**Generic bot** as the **Bot type**.
|
||||
@@ -0,0 +1,3 @@
|
||||
[Create a bot](/help/add-a-bot-or-integration) for
|
||||
{{ integration_display_name }}. Make sure that you select
|
||||
**Incoming webhook** as the **Bot type**.
|
||||
2
templates/zerver/integrations/include/create-channel.md
Normal file
2
templates/zerver/integrations/include/create-channel.md
Normal file
@@ -0,0 +1,2 @@
|
||||
[Create the channel](/help/create-a-channel) you'd like to use for
|
||||
{{ integration_display_name }} notifications.
|
||||
@@ -0,0 +1,4 @@
|
||||
Download and install our
|
||||
[Python bindings and example scripts](/api/installation-instructions)
|
||||
on the system where the {{ integration_display_name }} integration script
|
||||
will be run from.
|
||||
@@ -0,0 +1,10 @@
|
||||
### Filtering incoming events
|
||||
|
||||
The {{ integration_display_name }} integration supports
|
||||
[filtering][event-filters] for the following events:
|
||||
|
||||
{% set comma = joiner(", ") %}
|
||||
|
||||
{% for event_type in all_event_types -%} {{- comma() -}} `{{ event_type }}` {%- endfor %}
|
||||
|
||||
[event-filters]: https://zulip.readthedocs.io/en/latest/webhooks/incoming-webhooks-overview.html#only-events-exclude-events
|
||||
@@ -0,0 +1,6 @@
|
||||
You will be able to configure which of the following
|
||||
{{ integration_display_name }} events trigger notifications:
|
||||
|
||||
{% set comma = joiner(", ") %}
|
||||
|
||||
{% for event_type in all_event_types -%} {{- comma() -}} `{{ event_type }}` {%- endfor %}
|
||||
@@ -0,0 +1,2 @@
|
||||
Decide where to send {{ integration_display_name }} notifications, and
|
||||
[generate the integration URL](/help/generate-integration-url).
|
||||
@@ -0,0 +1,3 @@
|
||||
Decide where to send {{ integration_display_name }} notifications, and
|
||||
[generate the integration URL](/help/generate-integration-url). You'll be
|
||||
able to configure which branches you'll receive notifications from.
|
||||
@@ -0,0 +1,3 @@
|
||||
Install the dependencies for the integration with:
|
||||
|
||||
`pip install -r {{ integration_path }}/requirements.txt`
|
||||
@@ -0,0 +1,13 @@
|
||||
Construct the URL for the {{ integration_display_name }}
|
||||
bot using the bot's API key and email address:
|
||||
|
||||
`{{ external_url_scheme }}bot_email:bot_api_key@{{ api_url_scheme_relative }}{{ integration_url }}`
|
||||
|
||||
Modify the parameters of the URL above, where `bot_email` is
|
||||
the bot's URL-encoded email address and `bot_api_key` is the
|
||||
bot's API key. To URL-encode the email address, you just need
|
||||
to replace `@` in the bot's email address with `%40`.
|
||||
|
||||
You can also limit the branches you receive notifications for by
|
||||
specifying them in a comma-separated list appended to the end of the
|
||||
URL, e.g., `&branches=main,development`.
|
||||
@@ -0,0 +1,3 @@
|
||||
* [Webhook URLs specification][incoming-webhook-urls]
|
||||
|
||||
[incoming-webhook-urls]: https://zulip.readthedocs.io/en/latest/webhooks/incoming-webhooks-overview.html#url-specification
|
||||
59
templates/zerver/integrations/jenkins.md
Normal file
59
templates/zerver/integrations/jenkins.md
Normal file
@@ -0,0 +1,59 @@
|
||||
1. {!create-channel.md!}
|
||||
|
||||
1. {!create-an-incoming-webhook.md!}
|
||||
|
||||
1. Install the "Zulip" plugin by going to
|
||||
**Manage Jenkins > Manage Plugins > Available**,
|
||||
typing in **Zulip**, and clicking **Install without Restart**.
|
||||
|
||||

|
||||
|
||||
1. Once the plugin is installed, configure it by going to
|
||||
**Manage Jenkins > Configure System**. Scroll to the section
|
||||
labeled **Zulip Notification Settings**, and specify your
|
||||
Zulip server address, bot's email address and API key.
|
||||
Optionally, you may configure a default stream or topic. You can also enable
|
||||
smart notifications (i.e. only receive notifications when a build fails or
|
||||
recovers from a failed state).
|
||||
|
||||
(If you don't see this option, you may first need to restart
|
||||
Jenkins.)
|
||||
|
||||

|
||||
|
||||
1. Once you've done that, it's time to configure one of your
|
||||
freestyle projects to use the Zulip notification plugin. On your
|
||||
Jenkins project page, click **Configure** on the left sidebar. Scroll to
|
||||
the bottom until you find the section labeled **Post-build
|
||||
Actions**. Click the dropdown and select **Zulip Notification**.
|
||||
It should look as shown below. If you'd rather not use the defaults from
|
||||
the global configuration, you can set a custom stream and topic.
|
||||
If you don't specify a custom topic, the project name will be used as the
|
||||
topic instead. Then click **Save**.
|
||||
|
||||

|
||||
|
||||
When your builds fail or succeed, you'll see a message as shown below.
|
||||
|
||||
{!congrats.md!}
|
||||
|
||||

|
||||
|
||||
### Advanced use cases
|
||||
|
||||
Besides the **Zulip Notification** post-build action, this plugin
|
||||
also supports the **Zulip Send** action.
|
||||
To learn more, see the [plugin's README](https://github.com/jenkinsci/zulip-plugin).
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
1. Did you set up a post-build action for your project?
|
||||
|
||||
1. Does the stream you picked (e.g., `jenkins`) already exist?
|
||||
If not, create the stream and make sure you're subscribed to it.
|
||||
|
||||
1. Are your API key and email address correct? Test them
|
||||
using [our curl API](/api/).
|
||||
|
||||
1. Configure a Jenkins log recorder for **jenkins.plugins.zulip**
|
||||
and check why your messages fail to send.
|
||||
37
templates/zerver/integrations/jitsi.md
Normal file
37
templates/zerver/integrations/jitsi.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Use Jitsi Meet as your call provider in Zulip
|
||||
|
||||
By default, Zulip integrates with [Jitsi Meet](https://jitsi.org/jitsi-meet/),
|
||||
a fully-encrypted, 100% open source video conferencing solution. Users will be
|
||||
able to start a Jitsi Meet call and invite others using the **add video call**
|
||||
(<i class="zulip-icon zulip-icon-video-call"></i>) or **add voice call**
|
||||
(<i class="zulip-icon zulip-icon-voice-call"></i>) button [in the compose
|
||||
box](/help/start-a-call).
|
||||
|
||||
## Configure a self-hosted instance of Jitsi Meet
|
||||
|
||||
Zulip uses the [cloud version of Jitsi Meet](https://meet.jit.si/)
|
||||
as its default video call provider. You can also use a self-hosted
|
||||
instance of Jitsi Meet.
|
||||
|
||||
{start_tabs}
|
||||
|
||||
{settings_tab|organization-settings}
|
||||
|
||||
1. Under **Compose settings**, confirm **Jitsi Meet** is selected in the
|
||||
**Call provider** dropdown.
|
||||
|
||||
1. Select **Custom URL** from the **Jitsi server URL** dropdown, and enter
|
||||
the URL of your self-hosted Jitsi Meet server.
|
||||
|
||||
1. Click **Save changes**.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
## Related documentation
|
||||
|
||||
- [How to start a call](/help/start-a-call)
|
||||
- [Zoom integration](/integrations/zoom)
|
||||
- [BigBlueButton integration](/integrations/big-blue-button)
|
||||
- [Constructor Groups integration](/integrations/constructor-groups)
|
||||
- [Nextcloud Talk integration](/integrations/nextcloud-talk)
|
||||
- [Webex integration](/integrations/webex)
|
||||
13
templates/zerver/integrations/klipy.md
Normal file
13
templates/zerver/integrations/klipy.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Zulip KLIPY GIF integration
|
||||
|
||||
Send animated GIFs with your message using KLIPY.
|
||||
|
||||
Follow [these instructions][configure-klipy] to configure KLIPY on a
|
||||
**self-hosted** Zulip server.
|
||||
|
||||
### Related documentation
|
||||
|
||||
* [Using GIFs in Zulip][help-center-gifs]
|
||||
|
||||
[help-center-gifs]: /help/animated-gifs
|
||||
[configure-klipy]: https://zulip.readthedocs.io/en/latest/production/gif-picker-integrations.html
|
||||
27
templates/zerver/integrations/macros.html
Normal file
27
templates/zerver/integrations/macros.html
Normal file
@@ -0,0 +1,27 @@
|
||||
{% macro render_integration_lozenge(integration, is_doc_view=false) -%}
|
||||
<div
|
||||
class="integration-lozenge{% if is_doc_view %} without-category{% endif %} integration-{{ integration.name }}"
|
||||
data-categories='{{ integration.categories|tojson }}'
|
||||
data-name="{{ integration.name }}">
|
||||
<img class="integration-logo" src="{{ integration.logo_url }}"
|
||||
alt="{{ integration.display_name }} logo"/>
|
||||
{% if integration.secondary_line_text %}
|
||||
<h3 class="integration-name with-secondary" translate="no">{{ integration.display_name }}</h3>
|
||||
<h4 class="integration-secondary-line-text">
|
||||
{{ integration.secondary_line_text }}
|
||||
</h4>
|
||||
{% else %}
|
||||
<h3 class="integration-name" translate="no">{{ integration.display_name }}</h3>
|
||||
{% endif %}
|
||||
<h4 class="integration-category">{{ integration.categories[0] }}</h4>
|
||||
</div>
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro render_logos_disclaimer() -%}
|
||||
<p class="logos_disclaimer">
|
||||
Logos are trademarks of their respective owners.
|
||||
None of the integrations on this page are created by,
|
||||
affiliated with, or supported by the companies
|
||||
represented by the logos.
|
||||
</p>
|
||||
{%- endmacro %}
|
||||
40
templates/zerver/integrations/mastodon.md
Normal file
40
templates/zerver/integrations/mastodon.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# Zulip Mastodon integration
|
||||
|
||||
Fetch public posts (sometimes called “toots”) of individual accounts or
|
||||
federated hashtags from Mastodon in Zulip!
|
||||
|
||||
While Zulip doesn't integrate directly with ActivityPub or the overall
|
||||
Fediverse, some ActivityPub servers, like
|
||||
[Mastodon](https://joinmastodon.org/), publish RSS feeds that can be
|
||||
followed in Zulip using the [Zapier][1] or [RSS][2] integrations.
|
||||
|
||||
!!! warn ""
|
||||
|
||||
Due to the complexities of Mastodon federation, following a hashtag on
|
||||
one homeserver does not guarantee that all posts in the entire Fediverse
|
||||
will be included in the feed. Rather, all public posts that have
|
||||
federated to the instance in question will be included. This means you
|
||||
may get different results for the same hashtag, depending on which
|
||||
homeserver you choose to subscribe through.
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. Find the RSS feed for the account or hashtag you'd like to follow. Usually,
|
||||
this means appending `.rss` to its Mastodon URL. For example:
|
||||
|
||||
- To follow Zulip's Mastodon account at `https://fosstodon.org/@zulip`,
|
||||
you would use `https://fosstodon.org/@zulip.rss`.
|
||||
- To follow the **#zulip** hashtag at `https://fosstodon.org/tags/zulip`,
|
||||
you would use `https://fosstodon.org/tags/zulip.rss`.
|
||||
|
||||
1. Follow the [Zapier][1] integration guide (recommended) or the [plain RSS][2]
|
||||
integration guide using this feed URL.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
{!congrats.md!}
|
||||
|
||||

|
||||
|
||||
[1]: ./zapier
|
||||
[2]: ./rss
|
||||
39
templates/zerver/integrations/n8n.md
Normal file
39
templates/zerver/integrations/n8n.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Zulip n8n integration
|
||||
|
||||
n8n supports integrations with
|
||||
[hundreds of popular products](https://n8n.io/integrations/). Use the Zulip
|
||||
action node in n8n workflows to send notifications, manage messages, users,
|
||||
and channels.
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. {!create-a-generic-bot.md!}
|
||||
|
||||
1. [Download the `zuliprc` file](/help/manage-a-bot#download-zuliprc-configuration-file)
|
||||
for the bot you created above.
|
||||
|
||||
1. Open your n8n workflow, and add the **Zulip** action node.
|
||||
|
||||
1. Click **Set up credential**, and enter the **URL** for your Zulip
|
||||
organization, the bot's **email address**, and **API key** from the
|
||||
`zuliprc` file you downloaded above. Click **Save**, and close the
|
||||
credentials modal.
|
||||
|
||||
1. Under **Resource**, select the Zulip resource type (message, user, or
|
||||
channel). Under **Operation**, select the action to perform on the
|
||||
selected resource, and fill out the corresponding parameters.
|
||||
|
||||
1. Click **Execute step** or **Execute workflow** to test it.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
You're done! You should now be able to interact with your Zulip organization
|
||||
via n8n workflows.
|
||||
|
||||
### Related documentation
|
||||
|
||||
- [n8n Zulip integration][n8n-zulip]
|
||||
- [Zulip action node][zulip-node]
|
||||
|
||||
[n8n-zulip]: https://n8n.io/integrations/zulip/
|
||||
[zulip-node]: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.zulip/
|
||||
66
templates/zerver/integrations/nextcloud-talk.md
Normal file
66
templates/zerver/integrations/nextcloud-talk.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# Use Nextcloud Talk as your call provider in Zulip
|
||||
|
||||
You can configure Nextcloud Talk as the call provider for your organization.
|
||||
Users will be able to start a Nextcloud Talk call and invite others using the
|
||||
**add video call** (<i class="zulip-icon zulip-icon-video-call"></i>) button
|
||||
[in the compose box](/help/start-a-call).
|
||||
|
||||
You'll need a Nextcloud server with the Talk app enabled.
|
||||
|
||||
!!! warn ""
|
||||
|
||||
**Note:** This integration is not available in Zulip Cloud.
|
||||
|
||||
## Configure Nextcloud Talk as your call provider
|
||||
|
||||
By default, Zulip integrates with
|
||||
[Jitsi Meet](https://jitsi.org/jitsi-meet/), a fully-encrypted, 100% open
|
||||
source video conferencing solution. You can configure Zulip to use Nextcloud
|
||||
Talk as your call provider instead.
|
||||
|
||||
!!! warn ""
|
||||
|
||||
**Note:** Zulip creates public Nextcloud Talk conversations with guest
|
||||
access, allowing anyone to join by visiting a URL and entering their
|
||||
name. This ensures that all Zulip users can join calls regardless of
|
||||
whether they have Nextcloud accounts.
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. Log in to your Nextcloud server with the user account that will be
|
||||
used for creating video call rooms. Using a dedicated account for
|
||||
this purpose is recommended.
|
||||
|
||||
1. Generate an app password in Nextcloud Talk for API access:
|
||||
- Go to your **Settings**, select **Personal Security** and navigate to
|
||||
the **Devices & sessions** section.
|
||||
- Set the **App name** to a name of your choice, such as `Zulip`.
|
||||
- Click **Create new app password**, and copy the generated password.
|
||||
|
||||
1. In `/etc/zulip/zulip-secrets.conf`, set `NEXTCLOUD_TALK_USERNAME` to your
|
||||
Nextcloud Talk username and `NEXTCLOUD_TALK_PASSWORD` to the app password
|
||||
you generated in the previous step.
|
||||
|
||||
1. In `/etc/zulip/settings.py`, set `NEXTCLOUD_SERVER` to the URL of your
|
||||
Nextcloud server.
|
||||
|
||||
1. Restart the Zulip server with
|
||||
`/home/zulip/deployments/current/scripts/restart-server`.
|
||||
|
||||
{settings_tab|organization-settings}
|
||||
|
||||
1. Under **Compose settings**, select Nextcloud Talk from the
|
||||
**Call provider** dropdown.
|
||||
|
||||
1. Click **Save changes**.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
## Related documentation
|
||||
|
||||
- [How to start a call](/help/start-a-call)
|
||||
- [Jitsi Meet integration](/integrations/jitsi)
|
||||
- [Zoom integration](/integrations/zoom)
|
||||
- [BigBlueButton integration](/integrations/big-blue-button)
|
||||
- [Constructor Groups integration](/integrations/constructor-groups)
|
||||
- [Webex integration](/integrations/webex)
|
||||
22
templates/zerver/integrations/nextcloud.md
Normal file
22
templates/zerver/integrations/nextcloud.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# Zulip Nextcloud integration
|
||||
|
||||
Send Nextcloud files to Zulip as uploaded files, public shared links,
|
||||
or internal shared links.
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. {!create-a-generic-bot.md!}
|
||||
|
||||
1. [Download the `zuliprc` file](/help/manage-a-bot#download-zuliprc-configuration-file)
|
||||
for the bot you created above.
|
||||
|
||||
1. Follow [the instructions in the Nextcloud app store][1] to connect the
|
||||
bot to your Nextcloud account. You'll need the **URL** for your Zulip
|
||||
organization, and the bot's **email address** and **API key** from the
|
||||
`zuliprc` file you downloaded above.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
You're done! You should be able to send Nextcloud files to Zulip.
|
||||
|
||||
[1]: https://apps.nextcloud.com/apps/integration_zulip
|
||||
24
templates/zerver/integrations/notion.md
Normal file
24
templates/zerver/integrations/notion.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Zulip Notion integration
|
||||
|
||||
Get Zulip notifications for your Notion pages and databases via Zapier!
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. {!create-an-incoming-webhook.md!}
|
||||
|
||||
1. Continue with step 3 of the [Zapier documentation][1] to finish
|
||||
integrating Zulip with Notion.
|
||||
|
||||
!!! tip ""
|
||||
|
||||
You can repeat the above process and create Zaps for different projects
|
||||
and/or different kinds of Notion events that you'd like to be notified
|
||||
about in Zulip.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
{!congrats.md!}
|
||||
|
||||

|
||||
|
||||
[1]: ./zapier
|
||||
35
templates/zerver/integrations/onyx.md
Normal file
35
templates/zerver/integrations/onyx.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Zulip Onyx Integration
|
||||
|
||||
Export discussions from Zulip channels and topics to your Onyx knowledge
|
||||
base!
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. {!create-a-generic-bot.md!}
|
||||
|
||||
1. [Subscribe the bot][subscribe-channels] to the Zulip channels that you
|
||||
want to export.
|
||||
|
||||
1. [Download the `zuliprc` file](/help/manage-a-bot#download-zuliprc-configuration-file)
|
||||
for the bot you created above.
|
||||
|
||||
1. In Onyx, open the **Admin Dashboard** and select the **Zulip Connector**.
|
||||
|
||||
1. Under **Provide Credentials**, paste the bot's **email address** and
|
||||
**API key** from the `zuliprc` file you downloaded above. Click
|
||||
**Update**.
|
||||
|
||||
1. Set **Realm name** to the name of your Zulip organization, set
|
||||
**Realm URL** to `{{ zulip_url }}`, and click **Connect**.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
You're done! You should be able to index Zulip from your Onyx **Connectors
|
||||
Dashboard**!
|
||||
|
||||
### Related documentation
|
||||
|
||||
* [Zulip Connector documentation](https://docs.onyx.app/admins/connectors/official/zulip)
|
||||
* [About Onyx Connectors](https://docs.onyx.app/admins/connectors/overview)
|
||||
|
||||
[subscribe-channels]: /help/manage-user-channel-subscriptions#subscribe-a-user-to-a-channel
|
||||
10
templates/zerver/integrations/puppet.md
Normal file
10
templates/zerver/integrations/puppet.md
Normal file
@@ -0,0 +1,10 @@
|
||||
Zulip supports Puppet integration and can notify you when Puppet
|
||||
runs fail (or when they happen at all).
|
||||
|
||||
1. Follow the instructions
|
||||
[here](https://forge.puppetlabs.com/mbarr/puppet_zulip)
|
||||
to get it set up.
|
||||
|
||||
{!congrats.md!}
|
||||
|
||||

|
||||
13
templates/zerver/integrations/tenor.md
Normal file
13
templates/zerver/integrations/tenor.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Zulip Tenor GIF integration
|
||||
|
||||
Send animated GIFs with your message using Tenor.
|
||||
|
||||
Follow [these instructions][configure-tenor] to configure Tenor on a
|
||||
**self-hosted** Zulip server.
|
||||
|
||||
### Related documentation
|
||||
|
||||
* [Using GIFs in Zulip][help-center-gifs]
|
||||
|
||||
[help-center-gifs]: /help/animated-gifs
|
||||
[configure-tenor]: https://zulip.readthedocs.io/en/latest/production/gif-picker-integrations.html#tenor
|
||||
82
templates/zerver/integrations/twitter.md
Normal file
82
templates/zerver/integrations/twitter.md
Normal file
@@ -0,0 +1,82 @@
|
||||
Fetch tweets from Twitter in Zulip! This is great for seeing and
|
||||
discussing who is talking about you, friends, competitors, or
|
||||
important topics in real time.
|
||||
|
||||
1. {!create-channel.md!}
|
||||
|
||||
1. {!create-an-incoming-webhook.md!}
|
||||
|
||||
The API keys for "Incoming webhook" bots are limited to only
|
||||
sending messages via webhooks. Thus, this bot type lessens
|
||||
the security risks associated with exposing the bot's API
|
||||
key to third-party services.
|
||||
|
||||
1. Download your new bot's `zuliprc` configuration file.
|
||||
|
||||
1. {!download-python-bindings.md!}
|
||||
|
||||
1. The Twitter bot should be set up on a trusted machine, because your API
|
||||
key is visible to local users through the command line or config
|
||||
file.
|
||||
|
||||
1. Next, install **version 1.0 or later** of the `python-twitter`
|
||||
library. If your operating system distribution doesn’t package a new
|
||||
enough version, you can install the library from source from
|
||||
[the GitHub repository](https://github.com/bear/python-twitter).
|
||||
|
||||
1. Next, set up Twitter authentication. This bot uses OAuth to
|
||||
authenticate with Twitter, and in order to obtain a consumer key &
|
||||
secret, you must register a new application under your Twitter
|
||||
account:
|
||||
|
||||
1. Log in to <https://apps.twitter.com/>.
|
||||
|
||||
1. Click on `Create New App` and fill out the form.
|
||||
|
||||
1. Click on the application you created and click **create my access
|
||||
token**. Fill in the requested values.
|
||||
|
||||
1. Create a `~/.zulip_twitterrc` with the following contents:
|
||||
|
||||
```
|
||||
[twitter]
|
||||
consumer_key =
|
||||
consumer_secret =
|
||||
access_token_key =
|
||||
access_token_secret =
|
||||
```
|
||||
|
||||
1. Place your bot's `zuliprc` in a directory of your choice (for the next step,
|
||||
`~/zuliprc` is used).
|
||||
|
||||
1. Test the script by running it manually:
|
||||
|
||||
/usr/local/share/zulip/integrations/twitter/twitter-bot --search="@nprnews,quantum
|
||||
physics" --config-file=~/zuliprc
|
||||
|
||||
/usr/local/share/zulip/integrations/twitter/twitter-bot --twitter-name="<@your-
|
||||
twitter-handle>" --config-file=~/zuliprc
|
||||
|
||||
Note: `twitter-bot` may install to a different location on
|
||||
your operating system distribution.
|
||||
|
||||
1. Configure a crontab entry for this script. A sample crontab entry
|
||||
that will process tweets every minute is:
|
||||
|
||||
```
|
||||
* * * * * /usr/local/share/zulip/integrations/twitter/twitter-bot --search="@nprnews,
|
||||
quantum physics" --config-file=~/zuliprc
|
||||
```
|
||||
|
||||
1. When someone tweets a message containing one of your search terms,
|
||||
get a Zulip on your specified stream, with the search term as
|
||||
the topic.
|
||||
|
||||
{!congrats.md!}
|
||||
|
||||

|
||||
|
||||
Note that the Twitter search bot integration **just sends links to
|
||||
tweets**; the pretty inline previews of tweets are generated by the
|
||||
Twitter card rendering integration configured in
|
||||
`/etc/zulip/settings.py` on the Zulip server.
|
||||
79
templates/zerver/integrations/webex.md
Normal file
79
templates/zerver/integrations/webex.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# Use Webex as your call provider in Zulip
|
||||
|
||||
You can configure Webex as the call provider for your organization. Users will be
|
||||
able to start a Webex meeting and invite others using the **add video call** (<i
|
||||
class="zulip-icon zulip-icon-video-call"></i>) button [in the compose
|
||||
box](/help/start-a-call).
|
||||
|
||||
!!! warn ""
|
||||
|
||||
**Note:** This is currently only possible on self-hosted Zulip
|
||||
installations.
|
||||
|
||||
## Configure Webex as your call provider
|
||||
|
||||
By default, Zulip integrates with
|
||||
[Jitsi Meet](https://jitsi.org/jitsi-meet/), a fully-encrypted, 100% open
|
||||
source video conferencing solution. You can configure Zulip to use Webex as your
|
||||
call provider instead.
|
||||
|
||||
!!! warn ""
|
||||
|
||||
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
|
||||
|
||||
{start_tabs}
|
||||
|
||||
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).
|
||||
|
||||
{end_tabs}
|
||||
|
||||
### Configure your Zulip server and organization
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. In `/etc/zulip/zulip-secrets.conf`, set `video_webex_client_secret`
|
||||
to your app's "Client Secret".
|
||||
|
||||
1. In `/etc/zulip/settings.py`, set `VIDEO_WEBEX_CLIENT_ID` to your
|
||||
app's "Client ID".
|
||||
|
||||
1. Restart the Zulip server with
|
||||
`/home/zulip/deployments/current/scripts/restart-server`.
|
||||
|
||||
{settings_tab|organization-settings}
|
||||
|
||||
1. Under **Compose settings**, select Webex from the **Call provider**
|
||||
dropdown.
|
||||
|
||||
1. Click **Save changes**.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
## Related documentation
|
||||
|
||||
- [How to start a call](/help/start-a-call)
|
||||
- [Webex's developer documentation](https://developer.webex.com/create/docs/integrations)
|
||||
- [Jitsi Meet integration](/integrations/jitsi)
|
||||
- [BigBlueButton integration](/integrations/big-blue-button)
|
||||
- [Constructor Groups integration](/integrations/constructor-groups)
|
||||
- [Nextcloud Talk integration](/integrations/nextcloud-talk)
|
||||
44
templates/zerver/integrations/zoom.md
Normal file
44
templates/zerver/integrations/zoom.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# Use Zoom as your call provider in Zulip
|
||||
|
||||
You can configure Zoom as the call provider for your organization. Users will be
|
||||
able to start a Zoom call and invite others using the **add video call** (<i
|
||||
class="zulip-icon zulip-icon-video-call"></i>) or **add voice call** (<i
|
||||
class="zulip-icon zulip-icon-voice-call"></i>) button [in the compose
|
||||
box](/help/start-a-call).
|
||||
|
||||
## Configure Zoom as your call provider
|
||||
|
||||
By default, Zulip integrates with
|
||||
[Jitsi Meet](https://jitsi.org/jitsi-meet/), a fully-encrypted, 100% open
|
||||
source video conferencing solution. You can configure Zulip to use Zoom as your
|
||||
call provider instead.
|
||||
|
||||
### Configure Zoom on Zulip Cloud
|
||||
|
||||
{start_tabs}
|
||||
|
||||
{settings_tab|organization-settings}
|
||||
|
||||
1. Under **Compose settings**, select Zoom from the **Call provider** dropdown.
|
||||
|
||||
1. Click **Save changes**.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
Users will be prompted to log in to their Zoom account the first time they
|
||||
join a call.
|
||||
|
||||
## Configure Zoom for a self-hosted organization
|
||||
|
||||
If you are self-hosting, you will need to [create a Zoom
|
||||
application](https://zulip.readthedocs.io/en/latest/production/video-calls.html#zoom)
|
||||
in order to use this integration.
|
||||
|
||||
## Related documentation
|
||||
|
||||
- [How to start a call](/help/start-a-call)
|
||||
- [Jitsi Meet integration](/integrations/jitsi)
|
||||
- [BigBlueButton integration](/integrations/big-blue-button)
|
||||
- [Constructor Groups integration](/integrations/constructor-groups)
|
||||
- [Nextcloud Talk integration](/integrations/nextcloud-talk)
|
||||
- [Webex integration](/integrations/webex)
|
||||
Reference in New Issue
Block a user