[comment]: # translation:outdated

[comment]: # ({56bf7160-56bf7160})
# 4 Webhook

[comment]: # ({/56bf7160-56bf7160})

[comment]: # ({6584b266-6584b266})
#### 概述

Webhook媒介类型适用于通过自定义JavaScript代码发起HTTP调用，以便与外部系统（如帮助台系统、聊天工具或即时通讯软件）实现直接集成。您可以选择importZabbix提供的集成方案，或create从头开始构建自定义集成方案。

[comment]: # ({/6584b266-6584b266})

[comment]: # ({72de5254-27a06b1f})
#### 集成

以下集成方案可用，允许使用预定义的webhook媒体类型将Zabbix通知推送至：

-   [brevis.one](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/brevis.one/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Discord](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/discord/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Event-Driven Ansible](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/event_driven_ansible/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Express.ms
    messenger](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/express.ms/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Github
    issues](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/github/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [GLPi](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/glpi/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [iLert](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/ilert/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [iTop](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/itop/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Jira](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/jira/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Jira Service
    Desk](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/jira_servicedesk/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [ManageEngine
    ServiceDesk](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/manageengine_servicedesk/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Mantis Bug Tracker](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/mantisbt/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Mattermost](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/mattermost/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Microsoft
    Teams](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/msteams/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [MS Teams Workflows](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/msteams-workflow?at=refs%2Fheads%2Frelease%2F6.0)
-   [LINE](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/line/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Opsgenie](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/opsgenie/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [OTRS](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/otrs_ce/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Pagerduty](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/pagerduty/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Pushover](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/pushover/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Redmine](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/redmine/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Rocket.Chat](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/rocketchat/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [ServiceNow](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/servicenow/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [SIGNL4](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/signl4/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Slack](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/slack/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [SolarWinds](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/solarwinds/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [SysAid](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/sysaid/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Telegram](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [TOPdesk](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/topdesk/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [VictorOps](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/victorops/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Zammad](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/zammad/README.md?at=refs%2Fheads%2Frelease%2F6.0)
-   [Zendesk](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/zendesk/README.md?at=refs%2Fheads%2Frelease%2F6.0)

::: notetip
 除列出的服务外，Zabbix还可与**Spiceworks**集成（无需webhook）。要将Zabbix通知转换为Spiceworks工单，需create一个[email media
type](/manual/config/notifications/media/email)并在指定Zabbix用户的配置文件中输入Spiceworks帮助台邮箱地址（例如help\@zabbix.on.spiceworks.com）。

:::

[comment]: # ({/72de5254-27a06b1f})

[comment]: # ({4ea8e668-d84f1038})
#### 配置

开始使用Webhook集成：

1.  在下载的Zabbix version的`templates/media`目录中找到所需的.xml file，或从Zabbix [git
    repository](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse)下载
2.  [导入](/manual/xml_export_import/media#导入)将file导入到您的Zabbix安装中。该Webhook将出现在媒介类型列表中。
3.  根据*Readme.md*中的说明配置Webhook

    file (you may click on a webhook's name above to quickly access
    *Readme.md*).

要从头开始create自定义Webhook：

-   前往*管理 → 媒介类型*
-   点击*创建媒介类型*

**媒介类型**选项卡包含此媒介类型的各种特定属性：

![](../../../../../assets/en/manual/config/notifications/media/media_webhook_express.png)

所有必填输入字段均标有红色星号。

以下参数是Webhook媒介类型特有的：

| 参数 | 描述 |
|--|--------|
| *Parameters* | 将Webhook变量指定为属性-值对。<br>对于预配置的Webhook，参数列表因服务而异。请查看Webhook的*Readme.md* file获取参数描述。<br>对于新Webhook，默认包含几个常见变量(URL:<空>, HTTPProxy:<空>, To:{ALERT.SENDTO}, Subject:{ALERT.SUBJECT}, Message:{ALERT.MESSAGE})，可自由保留或删除。<br>所有[macros](/manual/appendix/macros/supported_by_location)在问题通知中支持的宏在参数中都受支持。<br>如果指定HTTP proxy，该字段支持与监控项配置[配置](/manual/config/items/itemtypes/http#配置)字段相同的功能。proxy string可以前缀`[scheme]://`来指定使用哪种proxy(例如https, socks4, socks5; 参见[documentation](https://curl.haxx.se/libcurl/c/CURLOPT_PROXY.html))。 |
| *Script* | 在点击参数字段(或其旁边的查看/编辑按钮)后出现的块中输入JavaScript代码。此代码将执行Webhook操作。<br>脚本是一个接受参数-值对的函数代码。应使用JSON.parse()方法将值转换为JSON objects，例如：`var params = JSON.parse(value);`。<br><br>代码可以访问所有参数，可以执行HTTP GET、POST、PUT和DELETE请求，并控制HTTP头和请求体。<br>脚本必须包含return操作符，否则无效。它可以返回OK状态及可选的标签和标签值列表(参见*处理标签*选项)或错误string。<br><br>注意脚本仅在警报创建后执行。如果脚本配置为返回并处理标签，这些标签不会get在初始问题消息和恢复消息中的{EVENT.TAGS}和{EVENT.RECOVERY.TAGS}宏中解析，因为脚本尚未有时间run。<br>*注意*：建议使用局部变量而非全局变量，确保每个脚本操作自己的数据且同时调用间无冲突(参见[跨webhook调用共享全局变量的使用场景](/manual/installation/known_issues#跨webhook调用共享全局变量的使用场景))。<br><br>另见：[Webhook development guidelines](https://www.zabbix.com/documentation/guidelines/en/webhooks), [Webhook script examples](/manual/config/notifications/media/webhook/webhook_examples), [Additional JavaScript objects](/manual/config/items/preprocessing/javascript/javascript_objects)。<br> |
| *Timeout* | JavaScript执行超时(1-60秒，默认30秒)。<br>支持时间后缀，例如30s, 1m。 |
| *Process tags* | 勾选复选框以将返回的JSON属性值作为标签处理。这些标签会添加到任何现有问题标签中。<br>注意使用[webhook tags](https://www.zabbix.com/documentation/guidelines/en/webhooks#webhook-tags)时，Webhook必须返回包含至少空标签object的JSON object：`var result = {tags: {}};`<br>可返回的标签示例：*Jira ID: PROD-1234*, *负责人: John Smith*, *已处理:<无值>* |
| *Include event menu entry* | 勾选复选框以在[事件菜单](/manual/web_interface/frontend_sections/monitoring/problems#事件菜单)中包含链接到创建的外部票据的条目。<br>每个启用且勾选此复选框的Webhook都会包含一个条目。注意如果*菜单条目名称*和*菜单条目URL*参数包含任何[{EVENT.TAGS.<tag name>}](/manual/appendix/macros/supported_by_location)宏，仅当这些宏可解析时(即事件已定义这些标签)才会包含条目。<br>如果勾选，Webhook不应用于向不同用户发送通知(考虑创建[用户媒介](/manual/config/notifications/media/webhook#用户媒介)替代)且不应在多个告警动作[配置告警动作](/manual/config/notifications/media/webhook#配置告警动作)中使用。 |
| *Menu entry name* | 指定菜单条目名称。<br>支持[{EVENT.TAGS.<tag name>}](/manual/appendix/macros/supported_by_location)宏。<br>仅当*包含事件菜单条目*勾选时此字段必填。 |
| *Menu entry URL* | 指定菜单条目的基础URL。<br>支持[{EVENT.TAGS.<tag name>}](/manual/appendix/macros/supported_by_location)宏。<br>仅当*包含事件菜单条目*勾选时此字段必填。 |

参见[通用参数](/manual/config/notifications/media#通用参数)了解如何配置默认消息和告警处理选项的详细信息。

::: notewarning
 即使Webhook不使用默认消息，仍必须定义此Webhook使用的操作类型的消息模板。

:::

[comment]: # ({/4ea8e668-d84f1038})

[comment]: # ({6eeec89a-6eeec89a})
#### 用户媒介

配置媒体类型后，前往*管理 → 用户*部分，将webhook媒体分配给现有用户或create一个新用户来代表该webhook。为现有用户设置用户媒体的步骤（适用于所有媒体类型）已在[用户媒介](/manual/config/notifications/media#用户媒介)页面中描述。

如果webhook使用标签存储票据\\消息ID，请避免将同一webhook作为媒体分配给不同用户，否则可能导致webhook错误（适用于大多数使用*包含事件菜单项*选项的webhook）。这种情况下，最佳实践是create一个专用用户来代表该webhook：

1.  配置webhook媒体类型后，前往*管理 → 用户*部分并create一个专用的Zabbix用户来代表webhook - 例如，为Slack webhook创建用户名为*Slack*的用户。除媒体外，所有设置均可保留默认值，因为该用户不会登录Zabbix。
2.  在用户配置文件中，转到*媒体*选项卡并[用户媒介](/manual/config/notifications/media#用户媒介)填写必要的联系信息。如果webhook不使用*发送至*字段，可输入任意支持的字符组合以绕过验证要求。
3.  授予该用户至少读取权限

    [permissions](/manual/config/users_and_usergroups/permissions#permissions_to_host_groups)
    to all hosts for which it should send the alerts.

配置告警动作时，在操作详情的*发送至用户*字段中添加此用户 - 这将指示Zabbix使用该webhook发送此动作的通知。

[comment]: # ({/6eeec89a-6eeec89a})

[comment]: # ({5f524760-ac89791d})
#### 配置告警动作

操作决定应通过webhook发送哪些通知.
涉及webhook的[configuring actions](/manual/config/notifications/action)步骤与其他所有媒介类型相同, 但存在以下例外情况:

-   如果webhook使用[webhook tags](https://www.zabbix.com/documentation/guidelines/en/webhooks#webhook-tags)存储票据\\消息ID并处理update\\解决操作, 请避免在单个问题事件的多个警报操作中使用相同的webhook.
    如果{EVENT.TAGS.<tag name>}存在并在webhook中更新, 其最终值将未定义. 为避免这种情况, 请在webhook中使用新的标签名称来存储更新后的值.
    这适用于Zabbix提供的Jira、Jira Service Desk、Mattermost、Opsgenie、OTRS、Redmine、ServiceNow、Slack、Zammad和Zendesk webhook, 以及大多数使用*包含事件菜单项*选项的webhook.
    但请注意, 单个webhook可用于同一操作的多个操作或升级步骤中, 也可用于由于不同[conditions](/manual/config/notifications/action/conditions)而不会被同一问题事件触发的不同操作中.
-   在[内部事件](/manual/config/events/sources#内部事件)的操作中使用webhook时, 请确保勾选*自定义消息*复选框并在操作配置中定义自定义消息.
    否则, 将不会发送通知.

[comment]: # ({/5f524760-ac89791d})
