[comment]: # ({56bf7160-56bf7160})
# 4. Вебхук

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

[comment]: # ({02b4d443-6584b266})
#### Обзор

Этот способ оповещений полезен для выполнения вызовов HTTP с использованием пользовательского кода JavaScript для прямой интеграции с внешними системами, такими как системы поддержки, чаты или мессенджеры.
Вы можете выбрать — импортировать интеграцию, поставляемую Zabbix, или создать свою собственную интеграцию с нуля.

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

[comment]: # ({36dd08c9-27a06b1f})
#### Интеграции

Доступны следующие интеграции, позволяющие использовать предопределенные типы медиа **вебхук** для отправки уведомлений Zabbix в:

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

::: notetip
Помимо перечисленных здесь сервисов, Zabbix можно интегрировать с **Spiceworks** (вебхук не требуется).
Чтобы преобразовать уведомления Zabbix в тикеты Spiceworks, создайте [тип медиа электронной почты](/manual/config/notifications/media/email) и укажите адрес электронной почты службы поддержки Spiceworks (например, help\@zabbix.on.spiceworks.com) в настройках профиля назначенного пользователя Zabbix.
:::

[comment]: # ({/36dd08c9-27a06b1f})

[comment]: # ({2d7e87a0-d84f1038})
#### Конфигурация

Чтобы начать использовать интеграцию с вебхуком:

1.  Найдите нужный файл .yaml в каталоге `templates/media` загруженной версии Zabbix или скачайте его из [git-репозитория Zabbix](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media?at=refs%2Fheads%2Frelease%2F7.4).
2.  [Импортируйте](/manual/xml_export_import/media#importing) файл в вашу установку Zabbix.
Вебхук появится в списке типов медиа.
3.  Настройте вебхук в соответствии с инструкциями в файле *Readme.md* (вы можете щелкнуть по имени вебхука выше, чтобы быстро перейти к *Readme.md*).

Чтобы создать собственный вебхук с нуля:

1.  Перейдите в *Уведомления > Типы медиа*.
2.  Нажмите *Создать тип медиа*.

Вкладка **Тип медиа** содержит различные атрибуты, специфичные для этого типа медиа:

![](../../../../../assets/en/manual/config/notifications/media/media_webhook_express.png){width="600"}

Все обязательные поля ввода отмечены красной звездочкой.

Следующие параметры специфичны для типа медиа вебхука:

|Parameter|Description|
|--|--------|
|*Parameters*|Укажите переменные вебхука в виде пар атрибутов и значений.<br>Для преднастроенных вебхуков список параметров зависит от сервиса. Смотрите описание параметров в файле *Readme.md* вебхука.<br>Для новых вебхуков по умолчанию включены несколько общих переменных (URL:<empty>, HTTPProxy:<empty>, To:{ALERT.SENDTO}, Subject:{ALERT.SUBJECT}, Message:{ALERT.MESSAGE}); при желании их можно оставить или удалить.<br><br>Параметры вебхука поддерживают [пользовательские макросы](/manual/appendix/macros/supported_by_location_user), все [макросы](/manual/appendix/macros/supported_by_location), поддерживаемые в уведомлениях о проблемах, а также макросы {ALERT.SENDTO}, {ALERT.SUBJECT} и {ALERT.MESSAGE}.<br><br>Если вы укажете HTTP-прокси, поле поддерживает ту же функциональность, что и поле [HTTP proxy](/manual/config/items/itemtypes/http#configuration) в настройке элемента данных. Перед строкой прокси можно указать префикс `[scheme]://`, чтобы задать тип используемого прокси (например, https, socks4, socks5; см. [документацию](https://curl.haxx.se/libcurl/c/CURLOPT_PROXY.html)).|
|*Script*|Введите код JavaScript в модальном редакторе, который открывается при щелчке в поле параметра или по значку карандаша рядом с ним. Этот код будет выполнять операцию вебхука.<br>Код представляет собой функцию, принимающую пары параметр - значение. Значения следует преобразовать в объекты JSON с помощью метода JSON.parse(), например: `var params = JSON.parse(value);`.<br><br>Код имеет доступ ко всем параметрам, может выполнять HTTP-запросы GET, POST, PUT и DELETE, поддерживает дополнительные методы, такие как CONNECT, PATCH, HEAD, OPTIONS и TRACE, и позволяет управлять HTTP-заголовками и телом запроса.<br>Скрипт должен содержать оператор return, иначе он будет недействителен. Он может возвращать статус OK вместе с необязательным списком тегов и значений тегов (см. параметр *Process tags*) или строку ошибки.<br><br>Обратите внимание, что скрипт выполняется только после создания оповещения. Если скрипт настроен на возврат и обработку тегов, эти теги не будут подставлены в макросах {EVENT.TAGS} и {EVENT.RECOVERY.TAGS} в исходном сообщении о проблеме и сообщениях о восстановлении, поскольку скрипт еще не успеет выполниться.<br>*Примечание*: Рекомендуется использовать локальные переменные (например, `var local = 1`) вместо глобальных (например, `global = 1`), чтобы каждый скрипт работал со своими данными и избежать конфликтов между одновременными вызовами (см. [известные проблемы](/manual/installation/known_issues#preprocessing--global-variables-are-unsafe)).<br><br>См. также: [Руководство по разработке вебхуков](https://www.zabbix.com/documentation/guidelines/en/webhooks), [Примеры скриптов вебхуков](/manual/config/notifications/media/webhook/webhook_examples), [Дополнительные объекты JavaScript](/manual/config/items/preprocessing/javascript/javascript_objects).<br>|
|*Timeout*|Таймаут выполнения JavaScript (1-60 с, по умолчанию 30 с).<br>Поддерживаются суффиксы времени, например 30s, 1m.|
|*Process tags*|Установите флажок, чтобы обрабатывать возвращаемые значения свойств JSON как теги. Эти теги добавляются к любым существующим тегам проблемы.<br>Обратите внимание: при использовании [тегов вебхука](https://www.zabbix.com/documentation/guidelines/en/webhooks#webhook-tags) вебхук должен возвращать объект JSON, содержащий как минимум пустой объект tags: `var result = {tags: {}};`<br>Примеры тегов, которые могут быть возвращены: *jira-id:prod-1234*, *responsible:John Smith*, *processed:<no value>*|
|*Include event menu entry*|Установите флажок, чтобы добавить в [меню события](/manual/web_interface/menu/event_menu) пункт, ведущий к созданному внешнему тикету.<br>Пункт будет добавлен для каждого включенного вебхука, для которого установлен этот флажок. Обратите внимание: если параметры *Menu entry name* и *Menu entry URL* содержат какие-либо макросы [{EVENT.TAGS.<tag name>}](/manual/appendix/macros/supported_by_location#events), пункт будет добавлен только в том случае, если эти макросы можно подставить (то есть для события определены такие теги).<br>Если флажок установлен, вебхук не следует использовать для отправки уведомлений разным пользователям (лучше создать [отдельного пользователя](/manual/config/notifications/media/webhook#user-media)) и не следует использовать его в нескольких действиях оповещения [для одного события проблемы](/manual/config/notifications/media/webhook#configuring-alert-actions).|
|*Menu entry name*|Укажите имя пункта меню.<br>Поддерживается макрос [{EVENT.TAGS.<tag name>}](/manual/appendix/macros/supported_by_location#events).<br>Это поле обязательно только если установлен флажок *Include event menu entry*.|
|*Menu entry URL*|Укажите базовый URL пункта меню.<br>Поддерживается макрос [{EVENT.TAGS.<tag name>}](/manual/appendix/macros/supported_by_location#events).<br>Это поле обязательно только если установлен флажок *Include event menu entry*.|

См. [общие параметры типа медиа](/manual/config/notifications/media#common-parameters) для получения сведений о настройке сообщений по умолчанию и параметров обработки оповещений.

::: notewarning
Даже если вебхук не использует сообщения по умолчанию, шаблоны сообщений для типов операций, используемых этим вебхуком, все равно должны быть определены.
:::

[comment]: # ({/2d7e87a0-d84f1038})

[comment]: # ({f9688d90-e5e73ea8})
#### Тестирование

Чтобы проверить настроенный способ оповещения посредством вебхука:

-   Найдите соответствующий вебхук в [списке](/manual/config/notifications/media#обзор) способов оповещений.
-   Нажмите *Тест (Test)* в последнем столбце (откроется окно тестирования).
-   Измените параметры вебхука при необходимости.
Замените макросы значениями из примеров; в противном случае макросы не будут раскрыты и тест завершится неудачно.
-   Нажмите *Тест (Test)*.

Замена или удаление значений в окне проверки затрагивает только проверку, реальные значения вебхука останутся без изменений.

![](../../../../../assets/en/manual/config/webhook_test1.png){width="600"}

Чтобы посмотреть записи в журнале, относящиеся к проверке способа оповещения, не закрывая окно проверки, нажмите *Открыть журнал (Open log)* (он будет открыт в новом всплывающем окне).

![](../../../../../assets/en/manual/config/mediatype_test2.png){width="600"}

[comment]: # ({/f9688d90-e5e73ea8})

[comment]: # ({817ae9ce-b2974109})
**Если проверка вебхука успешна:**

-   Появится сообщение: *«Успешное тестирование способа оповещения (Media type test successful)»*.
-   В сером поле *Ответ (Response)* отображается ответ сервера.
-   Под полем *Ответ* указывается тип ответа («JSON» или «Строка (String)»).

[comment]: # ({/817ae9ce-b2974109})

[comment]: # ({d11e9918-abfbc807})
**Если проверка вебхука неуспешна:**

-   Отображается сообщение: *«Ошибка при тестировании способа оповещения (Media type test failed)»*, — с указанием дополнительных сведений.

[comment]: # ({/d11e9918-abfbc807})

[comment]: # ({22965c08-6eeec89a})
#### Оповещение пользователей

После того, как способ оповещения настроен, перейдите в раздел *Пользователи → Пользователи (Users→ Users)* и измените профиль пользователя, назначив адресата вебхука по этому способу оповещения, или создайте нового пользователя для использования с этим вебхуком.
Шаги по настройке оповещений пользователей, общие для всех способов оповещений, описаны на странице [Способов оповещений](/manual/config/notifications/media#оповещение-пользователей).

Если вебхук использует теги для хранения идентификатора задачи (тикета) \\ сообщения, избегайте назначение этого же вебхука в качестве способа оповещения разным пользователям, так как это может вызвать ошибки вебхука (применимо к большинству вебхуков, которые используют опцию *Добавить запись в меню события*).
В этом случае лучше всего создать для вебхука выделенного пользователя:

1.  После настройки способа оповещения вебхук, перейдите в раздел *Пользователи → Пользователи (Users→ Users)* и создайте выделенного пользователя Zabbix для вебхука — например, с именем пользователя *Slack* для вебхука Slack.
Все настройки, за исключением способа оповещения, можно оставить по умолчанию, так как этот пользователь не будет входить в Zabbix.
2.  В профиле пользователя перейдите на вкладку *Оповещения (Media)* и [добавьте вебхук](/manual/config/notifications/media#оповещение-пользователей) с необходимой контактной информацией.
Если вебхук не использует поле *Отправлять на (Send to)*, введите любую комбинацию поддерживаемых символов для обхода требования наличия адресата.
3.  Предоставьте этому пользователю по крайней мере [права](/manual/config/users_and_usergroups/permissions#права-доступа-к-группам-узлов-сети) чтения ко всем узлам сети, по которым ему нужно отправлять оповещения.

При настройке действия на оповещение добавьте этого пользователя в поле *Отправка пользователям (Send to users)* в деталях Операции — это укажет Zabbix использовать вебхук для оповещений с этого действия.

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

[comment]: # ({1b5d3274-ac89791d})
#### Настройка действий на оповещения

Действия определяют, какие оповещения следует отправлять через вебхук. Шаги для [настройки действий](/manual/config/notifications/action) с использованием вебхуков абсолютно такие же, как и для всех остальных способов оповещения, за некоторыми исключениями:

-   Если вебхук использует [теги вебхуков \[en\]](https://www.zabbix.com/documentation/guidelines/en/webhooks#webhook-tags) для хранения идентификатора задачи (тикета) \\ сообщения и управляет операциями обновления\\восстановления, этот вебхук не следует использовать в нескольких действиях на оповещения по одному и тому же событию на проблемы.
Если {EVENT.TAGS.<имя>} существует и обновляется в вебхуке, то его окончательное значение будет не определено.
Чтобы избежать этого, используйте в вебхуке новое имя тега для хранения обновлённых значений.
Это относится к вебхукам Jira, Jira Service Desk, Mattermost, Opsgenie, OTRS, Redmine, ServiceNow, Slack, Zammad и Zendesk, которые поставляются Zabbix, и к большинству вебхуков, которые используют опцию *Добавить запись в меню события (Include event menu entry)*.
Однако, обратите внимание, что один вебхук может быть использован в нескольких операциях или шагах эскалации того же действия, а также в различных действиях, которые не будут срабатывать по тому же событию проблемы из-за отличающихся [условий](/manual/config/notifications/action/conditions).
-   При использовании вебхука в действиях на [внутренние события](/manual/config/events/sources#внутренние-события) убедитесь, что в настройках операций действия отмечена опция *Пользовательское сообщение (Custom message)* и указано пользовательское сообщение.
В противном случае оповещение отправлено не будет.

[comment]: # ({/1b5d3274-ac89791d})
