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
107 lines
3.2 KiB
Markdown
107 lines
3.2 KiB
Markdown
# Outgoing webhook payloads
|
|
|
|
Zulip supports [outgoing webhooks](/help/outgoing-webhooks) in a clean,
|
|
native [Zulip format](#zulip-format), as well as in a [Slack-compatible
|
|
format](#slack-compatible-format).
|
|
|
|
## Zulip format
|
|
|
|
{generate_code_example|/zulip-outgoing-webhook:post|fixture}
|
|
|
|
### Fields documentation
|
|
|
|
{generate_return_values_table|zulip.yaml|/zulip-outgoing-webhook:post}
|
|
|
|
## Slack-compatible format
|
|
|
|
This webhook format is compatible with [Slack's outgoing webhook
|
|
API](https://api.slack.com/custom-integrations/outgoing-webhooks),
|
|
which can help with porting an existing Slack integration to work with
|
|
Zulip, and allows immediate integration with many third-party systems
|
|
that already support Slack outgoing webhooks.
|
|
|
|
The following table details how the Zulip server translates a Zulip
|
|
message into the Slack-compatible webhook format.
|
|
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>token</code></td>
|
|
<td>A string of alphanumeric characters you can use to
|
|
authenticate the webhook request (each bot user uses a fixed token)</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>team_id</code></td>
|
|
<td>ID of the Zulip organization prefixed by "T".</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>team_domain</code></td>
|
|
<td>Hostname of the Zulip organization</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>channel_id</code></td>
|
|
<td>Channel ID prefixed by "C"</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>channel_name</code></td>
|
|
<td>Channel name</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>thread_ts</code></td>
|
|
<td>Timestamp for when message was sent</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>timestamp</code></td>
|
|
<td>Timestamp for when message was sent</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>user_id</code></td>
|
|
<td>ID of the user who sent the message prefixed by "U"</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>user_name</code></td>
|
|
<td>Full name of sender</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>text</code></td>
|
|
<td>The content of the message (in Markdown)</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>trigger_word</code></td>
|
|
<td>Trigger method</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>service_id</code></td>
|
|
<td>ID of the bot user</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
The above data is posted as list of tuples (not JSON), here's an example:
|
|
|
|
```
|
|
[('token', 'v9fpCdldZIej2bco3uoUvGp06PowKFOf'),
|
|
('team_id', 'T1512'),
|
|
('team_domain', 'zulip.example.com'),
|
|
('channel_id', 'C123'),
|
|
('channel_name', 'integrations'),
|
|
('thread_ts', 1532078950),
|
|
('timestamp', 1532078950),
|
|
('user_id', 'U21'),
|
|
('user_name', 'Full Name'),
|
|
('text', '@**test**'),
|
|
('trigger_word', 'mention'),
|
|
('service_id', 27)]
|
|
```
|
|
|
|
* For successful requests, if data is returned, it returns that data,
|
|
else it returns a blank response.
|
|
* For failed requests, it returns the reason of failure, as returned by
|
|
the server, or the exception message.
|