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

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

[comment]: # ({02b4d443-6584b266})
#### Przegląd

Typ nośnika webhook jest przydatny do wykonywania wywołań HTTP przy użyciu niestandardowego kodu JavaScript w celu łatwej integracji z zewnętrznym oprogramowaniem, takim jak systemy helpdesk, czaty lub komunikatory.
Możesz wybrać import integracji dostarczonej przez Zabbix lub utworzyć własną integrację od podstaw.

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

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

Dostępne są następujące integracje, umożliwiające korzystanie z predefiniowanych typów mediów webhook do przesyłania powiadomień Zabbix do:

-   [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
Oprócz usług wymienionych tutaj, Zabbix można zintegrować z **Spiceworks** (nie jest wymagany webhook).
Aby przekształcać powiadomienia Zabbix w zgłoszenia Spiceworks, utwórz [typ mediów e-mail](/manual/config/notifications/media/email) i wpisz adres e-mail helpdesku Spiceworks (np. help\@zabbix.on.spiceworks.com) w ustawieniach profilu wybranego użytkownika Zabbix.
:::

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

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

Aby rozpocząć korzystanie z integracji webhook:

1.  Znajdź wymagany plik .yaml w katalogu `templates/media` pobranej wersji Zabbixa lub pobierz go z repozytorium Zabbixa [git repository](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media?at=refs%2Fheads%2Frelease%2F7.4).
2.  [Zaimportuj](/manual/xml_export_import/media#importing) plik do swojej instalacji Zabbixa.
Webhook pojawi się na liście typów mediów.
3.  Skonfiguruj webhook zgodnie z instrukcjami w pliku *Readme.md* (możesz kliknąć nazwę webhooka powyżej, aby szybko przejść do *Readme.md*).

Aby utworzyć własny webhook od podstaw:

1.  Przejdź do *Alerts > Media types*.
2.  Kliknij *Create media type*.

Karta **Media type** zawiera różne atrybuty specyficzne dla tego typu mediów:

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

Wszystkie obowiązkowe pola wejściowe są oznaczone czerwoną gwiazdką.

Następujące parametry są specyficzne dla typu mediów webhook:

|Parameter|Description|
|--|--------|
|*Parameters*|Określ zmienne webhooka jako pary atrybut-wartość.<br>W przypadku wstępnie skonfigurowanych webhooków lista parametrów różni się w zależności od usługi. Opis parametrów znajduje się w pliku *Readme.md* webhooka.<br>W przypadku nowych webhooków domyślnie uwzględniane są niektóre wspólne zmienne (URL:<empty>, HTTPProxy:<empty>, To:{ALERT.SENDTO}, Subject:{ALERT.SUBJECT}, Message:{ALERT.MESSAGE}); możesz je pozostawić lub usunąć.<br><br>Parametry webhooka obsługują [makra użytkownika](/manual/appendix/macros/supported_by_location_user), wszystkie [makra](/manual/appendix/macros/supported_by_location) obsługiwane w powiadomieniach o problemach oraz dodatkowo makra {ALERT.SENDTO}, {ALERT.SUBJECT} i {ALERT.MESSAGE}.<br><br>Jeśli określisz serwer proxy HTTP, pole obsługuje tę samą funkcjonalność co pole [HTTP proxy](/manual/config/items/itemtypes/http#configuration) w konfiguracji pozycji. Ciąg proxy może być poprzedzony `[scheme]://`, aby określić, jaki rodzaj proxy jest używany (np. https, socks4, socks5; zobacz [dokumentację](https://curl.haxx.se/libcurl/c/CURLOPT_PROXY.html)).|
|*Script*|Wprowadź kod JavaScript w edytorze modalnym, który otwiera się po kliknięciu pola parametru lub ikony ołówka obok niego. Ten kod wykona operację webhooka.<br>Skrypt jest kodem funkcji, który przyjmuje pary parametr - wartość. Wartości należy konwertować na obiekty JSON za pomocą metody JSON.parse(), na przykład: `var params = JSON.parse(value);`.<br><br>Kod ma dostęp do wszystkich parametrów, może wykonywać żądania HTTP GET, POST, PUT i DELETE, obsługuje dodatkowe metody, takie jak CONNECT, PATCH, HEAD, OPTIONS i TRACE, oraz ma kontrolę nad nagłówkami HTTP i treścią żądania.<br>Skrypt musi zawierać operator return, w przeciwnym razie nie będzie poprawny. Może zwracać status OK wraz z opcjonalną listą tagów i wartości tagów (zobacz opcję *Process tags*) albo ciąg błędu.<br><br>Pamiętaj, że skrypt jest wykonywany dopiero po utworzeniu alertu. Jeśli skrypt jest skonfigurowany tak, aby zwracał i przetwarzał tagi, tagi te nie zostaną rozwiązane w makrach {EVENT.TAGS} i {EVENT.RECOVERY.TAGS} w początkowej wiadomości o problemie oraz w wiadomościach odzyskiwania, ponieważ skrypt nie zdążył jeszcze zostać uruchomiony.<br>*Uwaga*: Zaleca się używanie zmiennych lokalnych (np. `var local = 1`) zamiast globalnych (np. `global = 1`), aby zapewnić, że każdy skrypt działa na własnych danych i uniknąć kolizji między równoczesnymi wywołaniami (zobacz [znane problemy](/manual/installation/known_issues#preprocessing--global-variables-are-unsafe)).<br><br>Zobacz także: [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*|Limit czasu wykonania JavaScript (1-60 s, domyślnie 30 s).<br>Obsługiwane są sufiksy czasu, np. 30s, 1m.|
|*Process tags*|Zaznacz pole wyboru, aby przetwarzać zwrócone wartości właściwości JSON jako tagi. Tagi te są dodawane do wszystkich istniejących tagów problemu.<br>Pamiętaj, że podczas używania [webhook tags](https://www.zabbix.com/documentation/guidelines/en/webhooks#webhook-tags) webhook musi zwrócić obiekt JSON zawierający co najmniej pusty obiekt tags: `var result = {tags: {}};`<br>Przykłady tagów, które mogą zostać zwrócone: *jira-id:prod-1234*, *responsible:John Smith*, *processed:<no value>*|
|*Include event menu entry*|Zaznacz pole wyboru, aby dodać wpis w [menu zdarzenia](/manual/web_interface/menu/event_menu) prowadzący do utworzonego zewnętrznego zgłoszenia.<br>Wpis zostanie dodany dla każdego włączonego webhooka, dla którego zaznaczono to pole. Pamiętaj, że jeśli parametry *Menu entry name* i *Menu entry URL* zawierają jakiekolwiek makra [{EVENT.TAGS.<tag name>}](/manual/appendix/macros/supported_by_location#events), wpis zostanie dodany tylko wtedy, gdy makra te mogą zostać rozwiązane (to znaczy, gdy zdarzenie ma zdefiniowane te tagi).<br>Jeśli pole jest zaznaczone, webhook nie powinien być używany do wysyłania powiadomień do różnych użytkowników (rozważ utworzenie [dedykowanego użytkownika](/manual/config/notifications/media/webhook#user-media)) i nie powinien być używany w wielu akcjach alertów [dla pojedynczego zdarzenia problemu](/manual/config/notifications/media/webhook#configuring-alert-actions).|
|*Menu entry name*|Określ nazwę wpisu menu.<br>Obsługiwane jest makro [{EVENT.TAGS.<tag name>}](/manual/appendix/macros/supported_by_location#events).<br>To pole jest obowiązkowe tylko wtedy, gdy zaznaczono *Include event menu entry*.|
|*Menu entry URL*|Określ docelowy adres URL wpisu menu.<br>Obsługiwane jest makro [{EVENT.TAGS.<tag name>}](/manual/appendix/macros/supported_by_location#events).<br>To pole jest obowiązkowe tylko wtedy, gdy zaznaczono *Include event menu entry*.|

Szczegóły dotyczące konfiguracji domyślnych wiadomości i opcji przetwarzania alertów znajdziesz w sekcji [common media type parameters](/manual/config/notifications/media#common-parameters).

::: notewarning
Nawet jeśli webhook nie używa domyślnych wiadomości, szablony wiadomości dla typów operacji używanych przez ten webhook nadal muszą być zdefiniowane.
:::

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

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

Aby przetestować skonfigurowany typ nośnika webhook:

1.  Znajdź odpowiedni webhook na [liście](/manual/config/notifications/media#overview) typów nośników.
2.  Kliknij *Test* w ostatniej kolumnie listy (otworzy się okno testowania).
3.  W razie potrzeby edytuj wartości parametrów webhooka.
Zastąp makra przykładowymi wartościami; w przeciwnym razie makra nie zostaną rozwinięte, a test zakończy się niepowodzeniem.
4.  Kliknij *Test*.

Zastąpienie lub usunięcie wartości w oknie testowania wpływa tylko na procedurę testową; rzeczywiste wartości atrybutów webhooka pozostaną bez zmian.

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

Aby wyświetlić wpisy dziennika testu typu nośnika bez opuszczania okna testowego, kliknij *Open log* (otworzy się nowe wyskakujące okno).

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

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

[comment]: # ({817ae9ce-b2974109})
**Jeśli test webhooka zakończy się powodzeniem:**

-   Wyświetlany jest komunikat *„Media type test successful.”*.
-   Odpowiedź serwera pojawia się w szarym polu *Response*.
-   Typ odpowiedzi (JSON lub String) jest określony poniżej pola *Response*.

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

[comment]: # ({d11e9918-abfbc807})
**Jeśli test webhooka zakończy się niepowodzeniem:**

-   Wyświetlany jest komunikat *„Test typu nośnika nie powiódł się.”*, po którym podawane są dodatkowe szczegóły dotyczące błędu.

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

[comment]: # ({22965c08-6eeec89a})
#### Media użytkownika

Po skonfigurowaniu typu mediów przejdź do sekcji *Users > Users* i przypisz media webhook do istniejącego użytkownika lub utwórz nowego użytkownika reprezentującego webhook.
Kroki konfiguracji mediów użytkownika dla istniejącego użytkownika, wspólne dla wszystkich typów mediów, opisano na stronie [Typy mediów](/manual/config/notifications/media#user-media).

Jeśli webhook używa tagów do przechowywania ID zgłoszenia\\wiadomości, unikaj przypisywania tego samego webhooka jako mediów różnym użytkownikom, ponieważ może to powodować błędy webhooka (dotyczy to większości webhooków korzystających z opcji *Include event menu entry*).
W takim przypadku zalecaną praktyką jest utworzenie dedykowanego użytkownika reprezentującego webhook:

1.  Po skonfigurowaniu typu mediów webhook przejdź do sekcji *Users > Users* i utwórz dedykowanego użytkownika Zabbix reprezentującego webhook — na przykład o nazwie użytkownika *Slack* dla webhooka Slack.
Wszystkie ustawienia, z wyjątkiem mediów, można pozostawić domyślne, ponieważ ten użytkownik nie będzie logował się do Zabbix.
2.  W profilu użytkownika przejdź do zakładki *Media* i [dodaj webhook](/manual/config/notifications/media#user-media), podając wymagane informacje kontaktowe.
Jeśli webhook nie używa pola *Send to*, wprowadź dowolną kombinację obsługiwanych znaków, aby obejść wymagania walidacji.
3.  Przyznaj temu użytkownikowi co najmniej uprawnienia do odczytu [permissions](/manual/config/users_and_usergroups/permissions#permissions-to-host-groups) do wszystkich hostów, dla których powinien wysyłać alerty.

Podczas konfigurowania akcji alertów dodaj tego użytkownika w polu *Send to users* w szczegółach operacji — spowoduje to, że Zabbix będzie używać webhooka do powiadomień z tej akcji.

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

[comment]: # ({1b5d3274-ac89791d})
#### Konfigurowanie akcji alertów

Akcje określają, które powiadomienia mają być wysyłane za pośrednictwem webhooka.
Kroki [konfigurowania akcji](/manual/config/notifications/action) z użyciem webhooków są takie same jak dla wszystkich innych typów mediów, z następującymi wyjątkami:

-   Jeśli webhook używa [tagów webhooka](https://www.zabbix.com/documentation/guidelines/en/webhooks#webhook-tags) do przechowywania ID zgłoszenia\\wiadomości oraz obsługi operacji aktualizacji\\rozwiązania, należy unikać używania tego samego webhooka w wielu akcjach alertów dla pojedynczego zdarzenia problemu.
Jeśli {EVENT.TAGS.<tag name>} istnieje i zostanie zaktualizowane w webhooku, jego wynikowa wartość będzie niezdefiniowana.
Aby tego uniknąć, użyj w webhooku nowej nazwy tagu do przechowywania zaktualizowanych wartości.
Dotyczy to webhooków Jira, Jira Service Desk, Mattermost, Opsgenie, OTRS, Redmine, ServiceNow, Slack, Zammad i Zendesk dostarczanych przez Zabbix oraz większości webhooków wykorzystujących opcję *Include event menu entry*.
Należy jednak pamiętać, że pojedynczy webhook może być używany w wielu operacjach lub krokach eskalacji tej samej akcji, a także w różnych akcjach, które nie zostaną wyzwolone przez to samo zdarzenie problemu z powodu różnych [warunków](/manual/config/notifications/action/conditions).
-   W przypadku używania webhooka w akcjach dla [zdarzeń wewnętrznych](/manual/config/events/sources#internal-events) należy zaznaczyć pole wyboru *Custom message* i zdefiniować własną wiadomość w konfiguracji operacji akcji.
W przeciwnym razie powiadomienie nie zostanie wysłane.

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