1 Exemples de scripts webhook
Aperçu
Bien que Zabbix propose un grand nombre d’intégrations webhook disponibles prêtes à l’emploi, vous pouvez préférer créer vos propres webhooks. Cette section fournit des exemples de scripts webhook personnalisés (utilisés dans le paramètre Script). Consultez la section webhook pour la description des autres paramètres de webhook.
N’utilisez pas d’affectations non déclarées dans le prétraitement JavaScript.
Utilisez var pour déclarer les variables locales.
Les événements de rétablissement (qu’ils soient générés automatiquement ou à la suite d’une fermeture manuelle) incluent les tags d’événement résolus (y compris les tags hérités des modèles, des hôtes et des déclencheurs). Les scripts webhook sont exécutés après la création de l’alerte ; les tags renvoyés par un script webhook sont donc appliqués après la création initiale de l’alerte et peuvent ne pas être présents dans l’alerte qui a déclenché le webhook. Si une intégration exige que les tags produits par un webhook soient présents dans la notification initiale, récupérez les tags d’événement depuis le serveur (par exemple, à l’aide de l’API Event) ou stockez les tags produits par le webhook dans un stockage persistant externe et effectuez la corrélation à cet endroit.
Webhook Jira (personnalisé)

Ce script créera un ticket JIRA et renverra certaines informations sur le ticket créé.
try {
Zabbix.log(4, '[ Jira webhook ] Started with params: ' + value);
var result = {
'tags': {
'endpoint': 'jira'
}
},
params = JSON.parse(value),
req = new HttpRequest(),
fields = {},
resp;
if (params.HTTPProxy) {
req.setProxy(params.HTTPProxy);
}
req.addHeader('Content-Type: application/json');
req.addHeader('Authorization: Basic ' + params.authentication);
fields.summary = params.summary;
fields.description = params.description;
fields.project = {key: params.project_key};
fields.issuetype = {id: params.issue_id};
resp = req.post('https://jira.example.com/rest/api/2/issue/',
JSON.stringify({"fields": fields})
);
if (req.getStatus() != 201) {
throw 'Response code: ' + req.getStatus();
}
resp = JSON.parse(resp);
result.tags.issue_id = resp.id;
result.tags.issue_key = resp.key;
return JSON.stringify(result);
}
catch (error) {
Zabbix.log(4, '[ Jira webhook ] Issue creation failed json : ' + JSON.stringify({"fields": fields}));
Zabbix.log(3, '[ Jira webhook ] issue creation failed : ' + error);
throw 'Failed with error: ' + error;
}
Webhook Slack (personnalisé)
Ce webhook transmettra les notifications de Zabbix à un canal Slack.

try {
var params = JSON.parse(value),
req = new HttpRequest(),
response;
if (params.HTTPProxy) {
req.setProxy(params.HTTPProxy);
}
req.addHeader('Content-Type: application/x-www-form-urlencoded');
Zabbix.log(4, '[ Slack webhook ] Webhook request with value=' + value);
response = req.post(params.hook_url, 'payload=' + encodeURIComponent(value));
Zabbix.log(4, '[ Slack webhook ] Responded with code: ' + req.getStatus() + '. Response: ' + response);
try {
response = JSON.parse(response);
}
catch (error) {
if (req.getStatus() < 200 || req.getStatus() >= 300) {
throw 'Request failed with status code ' + req.getStatus();
}
else {
throw 'Request success, but response parsing failed.';
}
}
if (req.getStatus() !== 200 || !response.ok || response.ok === 'false') {
throw response.error;
}
return 'OK';
}
catch (error) {
Zabbix.log(3, '[ Slack webhook ] Sending failed. Error: ' + error);
throw 'Failed with error: ' + error;
}