Telegram Zabbix 6 webhook skript property toLowerCase

Zabbix server & agent je selfhosted softwarový nástroj pro monitoring různých komponent IT, včetně sítí, serverů, virtuálních počítačů a cloudových služeb. Telegram je multiplatformní cloudová služba pro zasílání zpráv. Jedno z podporovaných Zabbix server notifikačních médii je i webhook pro odesílání upozornění ze Zabbix serveru, na přednastavený Telegram účet.

Zabbix Telegram webhook

U aktualizace, zejména pokud se bude jednat o upgrade z verze 5 na verzi 6 z největší pravděpodobností neproběhne změna skriptu webhooku,který doznal značných změn. Pro odstranění původní verze skriptu je potřeba kompletní odinstalace a čistá instalace aktuální verze monitorovacího software což asi provede málokdo. Ideálni je zkopírovat novou verzi skriptu, vložit ji a uložit přímo v konfiguračním okně média – což umožňuje každé médium viz menu Administrace / Typy médií.

Nová verze skriptu

Nová verze skriptu je v odkazu který najdete v okne popisku média Telegram. Aktuální odkaz u verze 6.2.3 je zde.

Cannot read property toLowerCase of undefined

Chyba u pokusu otestovat funkčnost média „Cannot read property toLowerCase of undefined“ lze vyřešit zakomentováním řádku 81 – v textu zvýrazněno boldem.

var Telegram = {
            token: null,
            to: null,
            message: null,
            proxy: null,
            parse_mode: null,
        
            escapeMarkup: function (str, mode) {
                switch (mode) {
                    case 'markdown':
                        return str.replace(/([_*\[`])/g, '\\$&');
        
                    case 'markdownv2':
                        return str.replace(/([_*\[\]()~`>#+\-=|{}.!])/g, '\\$&');
        
                    default:
                        return str;
                }
            },
        
            sendMessage: function () {
                var params = {
                    chat_id: Telegram.to,
                    text: Telegram.message,
                    disable_web_page_preview: true,
                    disable_notification: false
                },
                data,
                response,
                request = new HttpRequest(),
                url = 'https://api.telegram.org/bot' + Telegram.token + '/sendMessage';
        
                if (Telegram.parse_mode !== null) {
                    params['parse_mode'] = Telegram.parse_mode;
                }
        
                if (Telegram.proxy) {
                    request.setProxy(Telegram.proxy);
                }
        
                request.addHeader('Content-Type: application/json');
                data = JSON.stringify(params);
        
                // Remove replace() function if you want to see the exposed token in the log file.
                Zabbi x.log(4, '[Telegram Webhook] URL: ' + url.replace(Telegram.token, '<TOKEN>'));
                Zabbi x.log(4, '[Telegram Webhook] params: ' + data);
                response = request.post(url, data);
                Zabbi x.log(4, '[Telegram Webhook] HTTP code: ' + request.getStatus());
        
                try {
                    response = JSON.parse(response);
                }
                catch (error) {
                    response = null;
                }
        
                if (request.getStatus() !== 200 || typeof response.ok !== 'boolean' || response.ok !== true) {
                    if (typeof response.description === 'string') {
                        throw response.description;
                    }
                    else {
                        throw 'Unknown error. Check debug log for more information.';
                    }
                }
            }
        };
        
        try {
            var params = JSON.parse(value);
        
            if (typeof params.Token === 'undefined') {
                throw 'Incorrect value is given for parameter "Token": parameter is missing';
            }
        
            Telegram.token = params.Token;
        
            if (params.HTTPProxy) {
                Telegram.proxy = params.HTTPProxy;
            } 
        
//            params.ParseMode = params.ParseMode.toLowerCase();
            
            if (['markdown', 'html', 'markdownv2'].indexOf(params.ParseMode) !== -1) {
                Telegram.parse_mode = params.ParseMode;
            }
        
            Telegram.to = params.To;
            Telegram.message = params.Subject + '\n' + params.Message;
        
            if (['markdown', 'markdownv2'].indexOf(params.ParseMode) !== -1) {
                Telegram.message = Telegram.escapeMarkup(Telegram.message, params.ParseMode);
            }
        
            Telegram.sendMessage();
        
            return 'OK';
        }
        catch (error) {
            Zabbi x.log(4, '[Telegram Webhook] notification failed: ' + error);
            throw 'Sending failed: ' + error + '.';
        }

Užitečné

Text Telegram long polling versus Webhook
Domovská stránka projektu Zabbix

ICTIS.CZ