Как отправить уведомления из Zabbix 5.0 в мессенджер MAX

Что понадобится:

  • Аккаунт организации или ИП с созданным ботом
  • Токен от чат бота #MAX
  • Узнать ChatID
  • Добавить скрипт #JavaScript уведомления
  • Настроить уведомления для пользователя

Получаем токен бота MAX

https://business.max.ru/self/services

Узнаем ChatID

Делаем запрос к API MAX: https://platform-api.max.ru/chats

Через расширение браузера

Через консоль Linux

curl -X GET "https://platform-api.max.ru/chats" \
  -H "Authorization: <token>"

Добавляем скрипт уведомления MAX в Zabbix

Переходим в Administration -> Configuration -> Media types -> Create media types

Max messenger

В поле Scripts подставляем:

var MaxMessenger = {
    apiUrl: null,
    token: null,
    to: null,           // chat_id или user_id
    message: null,
    subject: null,
    proxy: null,
    isUser: false,      // true = отправляем пользователю, false = в чат

    sendMessage: function () {
        //Формируем URL с параметром получателя
        var param = MaxMessenger.isUser ? 'user_id' : 'chat_id';
        var url = MaxMessenger.apiUrl + '/messages?' + param + '=' + encodeURIComponent(MaxMessenger.to);

        //Тело запроса
        var payload = {
            text: (MaxMessenger.subject ? MaxMessenger.subject + '\n' : '') + MaxMessenger.message
        };

        var request = new CurlHttpRequest();
        var data = JSON.stringify(payload);

        if (MaxMessenger.proxy) {
            request.setProxy(MaxMessenger.proxy);
        }

        // Заголовки
        request.AddHeader('Content-Type: application/json; charset=utf-8');
        request.AddHeader('Accept: application/json');
        request.AddHeader('Authorization: ' + MaxMessenger.token);  // Без "Bearer"!

        // Логирование
        Zabbix.Log(4, '[Max] POST ' + url);
        Zabbix.Log(4, '[Max] Body: ' + data);

        var response = request.Post(url, data);
        var status = request.Status();
        
        //Zabbix.log(4, '[Max] HTTP ' + status + ' | Response: ' + response);

        if (status >= 200 && status < 300) {
            return 'OK';
        } else {
            throw 'HTTP ' + status + ': ' + response;
        }
    }
};

try {
    var params = JSON.parse(value);
    
    // Проверка обязательных параметров
    ['ApiUrl', 'Token', 'To', 'Subject', 'Message'].forEach(function(p) {
        if (!params[p]) throw 'Parameter "' + p + '" is missing';
    });

    MaxMessenger.apiUrl = params.ApiUrl;
    MaxMessenger.token = params.Token;
    MaxMessenger.to = params.To;
    MaxMessenger.subject = params.Subject;
    MaxMessenger.message = params.Message;
    
    // Опционально: флаг отправки пользователю (по умолчанию — чат)
    if (params.IsUser && params.IsUser.toLowerCase() === 'true') {
        MaxMessenger.isUser = true;
    }
    MaxMessenger.sendMessage();
    return 'OK';
}
catch (error) {
    Zabbix.Log(4, '[Max ERROR] ' + error);
    throw 'Sending failed: ' + error + '.';
}

Message templates

Настроить уведомления пользователю

Administration -> Configuration -> Users -> <Ваш пользователь>

Вкладка «Media» -> Add

Кнопка «Update»

Готово.

Have fun!

Добавить комментарий