Welcome to mirror list, hosted at ThFree Co, Russian Federation.

data.tmpl « src « create - github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 57d338014cac1cd626907b29e7c6a9ea02a82fdd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
--
-- Zabbix
-- Copyright (C) 2001-2022 Zabbix SIA
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
--

TABLE |role
FIELDS|roleid|name            |type|readonly|
ROW   |1     |User role       |1   |0       |
ROW   |2     |Admin role      |2   |0       |
ROW   |3     |Super admin role|3   |1       |
ROW   |4     |Guest role      |1   |0       |

TABLE |users
FIELDS|userid|username|name  |surname      |passwd                                                      |url |autologin|autologout|refresh|rows_per_page|roleid|
ROW   |1     |Admin   |Zabbix|Administrator|$2y$10$92nDno4n0Zm7Ej7Jfsz8WukBfgSS/U0QkIuu8WkJPihXBb2A1UrEK|    |1        |0         |30s    |50           |3     |
ROW   |2     |guest   |      |             |$2y$10$89otZrRNmde97rIyzclecuk6LwKAsHN0BcvoOKGjbT.BwMBfm7G06|    |0        |15m       |30s    |50           |4     |

TABLE |hstgrp
FIELDS|groupid|name                        |flags|uuid                            |type|
ROW   |1      |Templates                   |0    |7df96b18c230490a9a0a9e2307226338|1   |
ROW   |2      |Linux servers               |0    |dc579cd7a1a34222933f24f52a68bcd8|0   |
ROW   |4      |Zabbix servers              |0    |6f6799aa69e844b4b3918f779f2abf08|0   |
ROW   |5      |Discovered hosts            |0    |f2481361f99448eea617b7b1d4765566|0   |
ROW   |6      |Virtual machines            |0    |137f19e6e2dc4219b33553b812627bc2|0   |
ROW   |7      |Hypervisors                 |0    |1b837a3c078647049a0c00c61b4d57b5|0   |
ROW   |8      |Templates/Modules           |0    |57b7ae836ca64446ba2c296389c009b7|1   |
ROW   |9      |Templates/Network devices   |0    |36bff6c29af64692839d077febfc7079|1   |
ROW   |10     |Templates/Operating systems |0    |846977d1dfed4968bc5f8bdb363285bc|1   |
ROW   |11     |Templates/Server hardware   |0    |e960332b3f6c46a1956486d4f3f99fce|1   |
ROW   |12     |Templates/Applications      |0    |a571c0d144b14fd4a87a9d9b2aa9fcd6|1   |
ROW   |13     |Templates/Databases         |0    |748ad4d098d447d492bb935c907f652f|1   |
ROW   |14     |Templates/Virtualization    |0    |02e4df4f20b848e79267641790f241da|1   |
ROW   |15     |Templates/Telephony         |0    |1d12408342854fd5a4436dd6d5d1bd4a|1   |
ROW   |16     |Templates/SAN               |0    |7c2cb727f85b492d88cd56e17127c64d|1   |
ROW   |17     |Templates/Video surveillance|0    |d37f71c7e3f7469bab645852a69a2018|1   |
ROW   |18     |Templates/Power             |0    |3dcd5bbe90534f9e8eb5c2d53756af63|1   |
ROW   |19     |Applications                |0    |a571c0d144b14fd4a87a9d9b2aa9fcd6|0   |
ROW   |20     |Databases                   |0    |748ad4d098d447d492bb935c907f652f|0   |
ROW   |21     |Templates/Cloud             |0    |c2c162144c2d4c5491c8801193af4945|1   |

TABLE |drules
FIELDS|druleid|proxy_hostid|name         |iprange        |delay|status|
ROW   |2      |NULL        |Local network|192.168.0.1-254|1h   |1     |

TABLE |dchecks
FIELDS|dcheckid|druleid|type|key_        |snmp_community|ports|snmpv3_securityname|snmpv3_securitylevel|snmpv3_authpassphrase|snmpv3_privpassphrase|uniq|snmpv3_authprotocol|snmpv3_privprotocol|snmpv3_contextname|host_source|name_source|
ROW   |2       |2      |9   |system.uname|              |10050|                   |0                   |                     |                     |0   |0                  |0                  |                  |1          |0          |

TABLE |media_type
FIELDS|mediatypeid|type|name                    |smtp_server     |smtp_helo  |smtp_email        |exec_path|gsm_modem |username|passwd|status|smtp_port|smtp_security|smtp_verify_peer|smtp_verify_host|smtp_authentication|exec_params|maxsessions|maxattempts|attempt_interval|content_type|script                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |timeout|process_tags|show_event_menu|event_menu_url                        |event_menu_name                                             |description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
ROW   |1          |0   |Email                   |mail.example.com|example.com|zabbix@example.com|         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |0           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |30s    |0           |0              |                                      |                                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |3          |2   |SMS                     |                |           |                  |         |/dev/ttyS0|        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |30s    |0           |0              |                                      |                                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |4          |0   |Email (HTML)            |mail.example.com|example.com|zabbix@example.com|         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |30s    |0           |0              |                                      |                                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |5          |4   |Mattermost              |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |1          |10s             |1           |var SEVERITY_COLORS = [&eol;    '#97AAB3', '#7499FF', '#FFC859',&eol;    '#FFA059', '#E97659', '#E45959'&eol;];&eol;&eol;var RESOLVE_COLOR = '#009900';&eol;&eol;var SEND_MODE_HANDLERS = {&eol;    alarm: handlerAlarm,&eol;    event: handlerEvent&eol;};&eol;&eol;if (!String.prototype.format) {&eol;    String.prototype.format = function() {&eol;        var args = arguments;&eol;&eol;        return this.replace(/{(\d+)}/g, function(match, number) {&eol;            return number in args&eol;                ? args[number]&eol;                : match&eol;            ;&eol;        });&eol;    };&eol;}&eol;&eol;function isEventProblem(params) {&eol;    return params.event_value == 1&eol;        && params.event_update_status == 0&eol;    ;&eol;}&eol;&eol;function isEventUpdate(params) {&eol;    return params.event_value == 1&eol;        && params.event_update_status == 1&eol;    ;&eol;}&eol;&eol;function isEventResolve(params) {&eol;    return params.event_value == 0;&eol;}&eol;&eol;function getPermalink(mattermost_url, team_name, postid) {&eol;    return '{0}/{1}/pl/{2}'.format(&eol;        mattermost_url.replace(/\/+$/, ''),&eol;        team_name,&eol;        postid&eol;    );&eol;}&eol;&eol;function getChannel(send_to) {&eol;    switch (true) {&eol;        case /.+\/#.+/.test(send_to):&eol;            return getChannelByName(send_to);&eol;&eol;        case /@.+/.test(send_to):&eol;            return getDirectChannel(send_to);&eol;&eol;        default:&eol;            return getChannelByID(send_to);&eol;    }&eol;}&eol;&eol;function getChannelByName(send_to) {&eol;    var team_chan = send_to&eol;        .trim()&eol;        .split('/#');&eol;&eol;    var resp = JSON.parse(req.get(&eol;        Mattermost.channel_byname.format(team_chan[0], team_chan[1]),&eol;        JSON.stringify(fields)&eol;    )&eol;    );&eol;&eol;    if (req.getStatus() != 200) {&eol;        throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;    }&eol;&eol;    return resp;&eol;}&eol;&eol;function getDirectChannel(send_to) {&eol;    Zabbix.log(5, '[ Mattermost Webhook ] Call {0}({1})'.format(&eol;        arguments.callee.name,&eol;        JSON.stringify(arguments)&eol;    ));&eol;&eol;    var teamUser = send_to&eol;            .trim()&eol;            .split('/@'),&eol;        bot = getBotUser(),&eol;        user = getUserByName(teamUser[1]);&eol;&eol;    var resp = JSON.parse(req.post(&eol;        Mattermost.direct_channel,&eol;        JSON.stringify([bot.id, user.id])&eol;    )&eol;    );&eol;&eol;    Zabbix.log(5, '[ Mattermost Webhook ] Result {0}: {1}'.format(&eol;        arguments.callee.name,&eol;        JSON.stringify(resp)&eol;    ));&eol;&eol;    if (req.getStatus() != 201) {&eol;        throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;    }&eol;&eol;    resp.team_name = teamUser[0];&eol;&eol;    return resp;&eol;}&eol;&eol;function getChannelByID(channelID) {&eol;    Zabbix.log(5, '[ Mattermost Webhook ] Call {0}({1})'.format(&eol;        arguments.callee.name,&eol;        JSON.stringify(arguments)&eol;    ));&eol;&eol;    var resp = JSON.parse(req.get(&eol;        Mattermost.get_channel.format(channelID),&eol;        JSON.stringify(fields)&eol;    )&eol;    );&eol;&eol;    Zabbix.log(5, '[ Mattermost Webhook ] Result {0}: {1}'.format(&eol;        arguments.callee.name,&eol;        JSON.stringify(resp)&eol;    ));&eol;&eol;    if (req.getStatus() != 200) {&eol;        throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;    }&eol;&eol;    return resp;&eol;}&eol;&eol;function getBotUser() {&eol;    Zabbix.log(5, '[ Mattermost Webhook ] Call {0}({1})'.format(&eol;        arguments.callee.name,&eol;        JSON.stringify(arguments)&eol;    ));&eol;&eol;    var resp = JSON.parse(req.get(&eol;        Mattermost.bot_user,&eol;        JSON.stringify(fields)&eol;    )&eol;    );&eol;&eol;    Zabbix.log(5, '[ Mattermost Webhook ] Result {0}: {1}'.format(&eol;        arguments.callee.name,&eol;        JSON.stringify(resp)&eol;    ));&eol;&eol;    if (req.getStatus() != 200) {&eol;        throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;    }&eol;&eol;    return resp;&eol;}&eol;&eol;function getUserByName(userName) {&eol;    Zabbix.log(5, '[ Mattermost Webhook ] Call {0}({1})'.format(&eol;        arguments.callee.name,&eol;        JSON.stringify(arguments)&eol;    ));&eol;&eol;    var resp = JSON.parse(req.get(&eol;        Mattermost.user_byname.format(userName),&eol;        JSON.stringify(fields)&eol;    )&eol;    );&eol;&eol;    Zabbix.log(5, '[ Mattermost Webhook ] Result {0}: {1}'.format(&eol;        arguments.callee.name,&eol;        JSON.stringify(resp)&eol;    ));&eol;&eol;    if (req.getStatus() != 200) {&eol;        throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;    }&eol;&eol;    return resp;&eol;}&eol;&eol;function getTeamByID(teamID) {&eol;    Zabbix.log(5, '[ Mattermost Webhook ] Call {0}({1})'.format(&eol;        arguments.callee.name,&eol;        JSON.stringify(arguments)&eol;    ));&eol;&eol;    var resp = JSON.parse(req.get(&eol;        Mattermost.get_team.format(teamID),&eol;        JSON.stringify(fields)&eol;    )&eol;    );&eol;&eol;    Zabbix.log(5, '[ Mattermost Webhook ] Result {0}: {1}'.format(&eol;        arguments.callee.name,&eol;        JSON.stringify(resp)&eol;    ));&eol;&eol;    if (req.getStatus() != 200) {&eol;        throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;    }&eol;&eol;    return resp;&eol;}&eol;&eol;function createProblemURL(zabbix_url, triggerid, eventid, event_source) {&eol;    var problem_url = '';&eol;    if (event_source === '0') {&eol;        problem_url = '{0}/tr_events.php?triggerid={1}&eventid={2}'&eol;            .format(&eol;                zabbix_url,&eol;                triggerid,&eol;                eventid&eol;            );&eol;    }&eol;    else {&eol;        problem_url = zabbix_url;&eol;    }&eol;&eol;    return problem_url;&eol;}&eol;&eol;function getTagValue(event_tags, key) {&eol;    var pattern = new RegExp('(' + key + ':.+)');&eol;    var tagValue = event_tags&eol;        .split(',')&eol;        .filter(function (v) {&eol;            return v.match(pattern);&eol;        })&eol;        .map(function (v) {&eol;            return v.split(':')[1];&eol;        })[0]&eol;        &pipe;&pipe; 0;&eol;&eol;    return tagValue;&eol;}&eol;&eol;function handlerAlarm(req, params) {&eol;    var channel = getChannel(params.send_to);&eol;    var fields = {&eol;        channel_id: channel.id,&eol;        props: {}&eol;    };&eol;&eol;    if (isEventProblem(params)) {&eol;        var team_name = channel.team_name&eol;            ? channel.team_name&eol;            : getTeamByID(channel.team_id).name;&eol;&eol;        fields.props.attachments = [&eol;            createMessage(&eol;                SEVERITY_COLORS[params.event_nseverity] &pipe;&pipe; 0,&eol;                params.event_date,&eol;                params.event_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source)&eol;            )&eol;        ];&eol;&eol;        var resp = JSON.parse(req.post(&eol;            Mattermost.post_message,&eol;            JSON.stringify(fields)&eol;        )&eol;        );&eol;&eol;        if (req.getStatus() != 201) {&eol;            throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;        }&eol;&eol;        result.tags.__mattermost_post_id = resp.id;&eol;        result.tags.__mattermost_channel_id = channel.id;&eol;        result.tags.__mattermost_channel_name = channel.name;&eol;        result.tags.__mattermost_message_link = getPermalink(&eol;            params.mattermost_url,&eol;            team_name,&eol;            resp.id&eol;        );&eol;&eol;    }&eol;    else if (isEventUpdate(params)) {&eol;        fields.root_id = getTagValue(params.event_tags, 'mattermost_post_id');&eol;&eol;        if (params.event_source === '0') {}&eol;        fields.props.attachments = [&eol;            createMessage(&eol;                SEVERITY_COLORS[params.event_nseverity] &pipe;&pipe; 0,&eol;                params.event_update_date,&eol;                params.event_update_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source),&eol;                true&eol;            )&eol;        ];&eol;&eol;        resp = JSON.parse(req.post(&eol;            Mattermost.post_message, JSON.stringify(fields)&eol;        )&eol;        );&eol;&eol;        if (req.getStatus() != 201) {&eol;            throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;        }&eol;&eol;    }&eol;    else if (isEventResolve(params)) {&eol;        fields.channel_id = getTagValue(params.event_tags, 'mattermost_channel_id');&eol;        fields.id = getTagValue(params.event_tags, 'mattermost_post_id');&eol;        fields.props.attachments = [&eol;            createMessage(&eol;                RESOLVE_COLOR,&eol;                params.event_date,&eol;                params.event_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source)&eol;            )&eol;        ];&eol;&eol;        var post_id = getTagValue(params.event_tags, 'mattermost_post_id');&eol;&eol;        resp = JSON.parse(req.put(&eol;            Mattermost.chat_update.format(post_id),&eol;            JSON.stringify(fields)&eol;        )&eol;        );&eol;&eol;        if (req.getStatus() != 200) {&eol;            throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;        }&eol;    }&eol;}&eol;&eol;function handlerEvent(req, params) {&eol;    var channel = getChannel(params.send_to);&eol;    var fields = {&eol;        channel_id: channel.id,&eol;        props: {}&eol;    };&eol;&eol;    if (isEventProblem(params)) {&eol;        var team_name = channel.team_name&eol;            ? channel.team_name&eol;            : getTeamByID(channel.team_id).name;&eol;&eol;        fields.props.attachments = [&eol;            createMessage(&eol;                SEVERITY_COLORS[params.event_nseverity] &pipe;&pipe; 0,&eol;                params.event_date,&eol;                params.event_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source)&eol;            )&eol;        ];&eol;&eol;        var resp = JSON.parse(req.post(Mattermost.post_message, JSON.stringify(fields)));&eol;&eol;        if (req.getStatus() != 201) {&eol;            throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;        }&eol;&eol;        result.tags.__mattermost_channel_name = channel.name;&eol;        result.tags.__mattermost_message_link = getPermalink(&eol;            params.mattermost_url,&eol;            team_name,&eol;            resp.id&eol;        );&eol;&eol;    }&eol;    else if (isEventUpdate(params)) {&eol;        fields.props.attachments = [&eol;            createMessage(&eol;                SEVERITY_COLORS[params.event_nseverity] &pipe;&pipe; 0,&eol;                params.event_update_date,&eol;                params.event_update_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source),&eol;                false&eol;            )&eol;        ];&eol;&eol;        resp = JSON.parse(req.post(Mattermost.post_message, JSON.stringify(fields)));&eol;&eol;        if (req.getStatus() != 201) {&eol;            throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;        }&eol;&eol;    }&eol;    else if (isEventResolve(params)) {&eol;        fields.props.attachments = [&eol;            createMessage(&eol;                RESOLVE_COLOR,&eol;                params.event_recovery_date,&eol;                params.event_recovery_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source)&eol;            )&eol;        ];&eol;&eol;        resp = JSON.parse(req.post(Mattermost.post_message, JSON.stringify(fields)));&eol;&eol;        if (req.getStatus() != 201) {&eol;            throw '[{0}] {1}'.format(resp.status_code, resp.message);&eol;        }&eol;    }&eol;}&eol;&eol;function createMessage(&eol;    event_severity_color,&eol;    event_date,&eol;    event_time,&eol;    problem_url,&eol;    isShort&eol;) {&eol;    var message = {&eol;        fallbac: params.alert_subject,&eol;        title: params.alert_subject,&eol;        color: event_severity_color,&eol;        title_link: problem_url,&eol;        footer: problem_url,&eol;&eol;        fields: [&eol;            {&eol;                title: 'Host',&eol;                value: '{0} [{1}]'.format(params.host_name, params.host_ip),&eol;                short: true&eol;            },&eol;            {&eol;                title: 'Event time',&eol;                value: '{0} {1}'.format(event_date, event_time),&eol;                short: true&eol;            }&eol;        ],&eol;    };&eol;&eol;    &eol;    if (params.event_source === '0') {&eol;        message.fields.push(&eol;            {&eol;                title: 'Severity',&eol;                value: params.event_severity,&eol;                short: true&eol;            },&eol;            {&eol;                title: 'Opdata',&eol;                value: params.event_opdata,&eol;                short: true&eol;            }&eol;        );&eol;    }&eol;&eol;    if (!isShort && params.event_source === '0') {&eol;        message.fields.push(&eol;            {&eol;                title: 'Event tags',&eol;                value: '`{0}`'.format(params.event_tags.replace(/__.+?:(.+?,&pipe;.+)/g, '') &pipe;&pipe; 'None'),&eol;                short: true&eol;            },&eol;            {&eol;                title: 'Trigger description',&eol;                value: params.trigger_description,&eol;                short: true&eol;            }&eol;        );&eol;    }&eol;&eol;    if (params.event_source !== '0' &pipe;&pipe; params.event_update_status === '1') {&eol;        message.fields.push(&eol;            {&eol;                title: 'Details',&eol;                value: params.alert_message,&eol;                short: false&eol;            }&eol;        );&eol;    }&eol;&eol;    return message;&eol;}&eol;&eol;function validateParams(params) {&eol;    if (typeof params.bot_token !== 'string' &pipe;&pipe; params.bot_token.trim() === '') {&eol;        throw 'Field "bot_token" cannot be empty';&eol;    }&eol;&eol;    if (isNaN(params.event_id)) {&eol;        throw 'Field "event_id" is not a number';&eol;    }&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: "' + params.event_source + '".\nMust be 0-3.';&eol;    }&eol;&eol;    if (params.event_source !== '0') {&eol;        params.event_nseverity = '0';&eol;        params.event_severity = 'Not classified';&eol;        params.event_update_status = '0';&eol;        params.send_mode = 'event';&eol;    }&eol;&eol;    if (params.event_source === '1' &pipe;&pipe; params.event_source === '2') {&eol;        params.event_value = '1';&eol;    }&eol;&eol;    if (params.event_source === '1') {&eol;        params.host_name = params.discovery_host_dns;&eol;        params.host_ip = params.discovery_host_ip;&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        throw 'Incorrect "event_nseverity" parameter given: ' + params.event_nseverity + '\nMust be 0-5.';&eol;    }&eol;&eol;    if (typeof params.event_severity !== 'string' &pipe;&pipe; params.event_severity.trim() === '') {&eol;        throw 'Field "event_severity" cannot be empty';&eol;    }&eol;&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_value !== '0' && params.event_value !== '1') {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (typeof params.host_ip !== 'string' &pipe;&pipe; params.host_ip.trim() === '') {&eol;        throw 'Field "host_ip" cannot be empty';&eol;    }&eol;&eol;    if (typeof params.host_name !== 'string' &pipe;&pipe; params.host_name.trim() === '') {&eol;        throw 'Field "host_name" cannot be empty';&eol;    }&eol;&eol;    if (typeof params.mattermost_url !== 'string' &pipe;&pipe; params.mattermost_url.trim() === '') {&eol;        throw 'Field "mattermost_url" cannot be empty';&eol;    }&eol;&eol;    if (!/^(http&pipe;https):\/\/.+/.test(params.mattermost_url)) {&eol;        throw 'Field "mattermost_url" must contain a schema';&eol;    }&eol;&eol;    if (['alarm', 'event'].indexOf(params.send_mode) === -1) {&eol;        throw 'Incorrect "send_mode" parameter given: ' + params.send_mode + '\nMust be "alarm" or "event".';&eol;    }&eol;&eol;    if (typeof params.send_to !== 'string' &pipe;&pipe; params.send_to.trim() === '') {&eol;        throw 'Field "send_to" cannot be empty';&eol;    }&eol;&eol;    if (isNaN(params.trigger_id) && params.event_source === '0') {&eol;        throw 'field "trigger_id" is not a number';&eol;    }&eol;&eol;    if (typeof params.zabbix_url !== 'string' &pipe;&pipe; params.zabbix_url.trim() === '') {&eol;        throw 'Field "zabbix_url" cannot be empty';&eol;    }&eol;&eol;    if (!/^(http&pipe;https):\/\/.+/.test(params.zabbix_url)) {&eol;        throw 'Field "zabbix_url" must contain a schema';&eol;    }&eol;&eol;}&eol;&eol;try {&eol;    var params = JSON.parse(value);&eol;&eol;    validateParams(params);&eol;&eol;    var req = new HttpRequest(),&eol;        fields = {},&eol;        result = {tags: {}};&eol;&eol;    if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {&eol;        req.setProxy(params.HTTPProxy);&eol;    }&eol;&eol;    req.addHeader('Content-Type: application/json; charset=utf-8');&eol;    req.addHeader('Authorization: Bearer ' + params.bot_token);&eol;&eol;    params.mattermost_url = params.mattermost_url.replace(/\/+$/, '');&eol;    params.zabbix_url = params.zabbix_url.replace(/\/+$/, '');&eol;&eol;    var APIEndpoint = params.mattermost_url + '/api/v4/';&eol;&eol;    var Mattermost = {&eol;        post_message: APIEndpoint + 'posts',&eol;        get_channel: APIEndpoint + 'channels/{0}',&eol;        get_team: APIEndpoint + 'teams/{0}',&eol;        chat_update: APIEndpoint + 'posts/{0}',&eol;        direct_channel: APIEndpoint + 'channels/direct',&eol;        channel_byname: APIEndpoint + 'teams/name/{0}/channels/name/{1}',&eol;        user_byname: APIEndpoint + 'users/username/{0}',&eol;        bot_user: APIEndpoint + 'users/me'&eol;&eol;    };&eol;&eol;    params.send_mode = params.send_mode.toLowerCase();&eol;    params.send_mode = params.send_mode in SEND_MODE_HANDLERS&eol;        ? params.send_mode&eol;        : 'alarm';&eol;&eol;    SEND_MODE_HANDLERS[params.send_mode](req, params);&eol;&eol;    if (params.event_source === '0') {&eol;        return JSON.stringify(result);&eol;    }&eol;    else {&eol;        return 'OK';&eol;    }&eol;}&eol;catch (error) {&eol;    Zabbix.log(4, '[ Mattermost Webhook ] Mattermost notification failed: ' + error);&eol;    throw 'Mattermost notification failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__mattermost_message_link}|Open in Mattermost: {EVENT.TAGS.__mattermost_channel_name}  |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |6          |4   |Opsgenie                |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Media = {&eol;    params: {},&eol;    name: '',&eol;    labels: [],&eol;    HTTPProxy: '',&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        Media.params = params;&eol;        Media.params.api += Media.params.api.endsWith('/') ? '' : '/';&eol;        Media.params.web += Media.params.web.endsWith('/') ? '' : '/';&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        if (typeof HTTPProxy !== 'undefined' && HTTPProxy.trim() !== '') {&eol;            Media.HTTPProxy = HTTPProxy;&eol;        }&eol;    },&eol;&eol;    setTags: function(event_tags_json) {&eol;        if (typeof event_tags_json !== 'undefined' && event_tags_json !== ''&eol;                && event_tags_json !== '{EVENT.TAGSJSON}') {&eol;&eol;            try {&eol;                var tags = JSON.parse(event_tags_json),&eol;                    label;&eol;&eol;                tags.forEach(function (tag) {&eol;                    if (typeof tag.tag === 'string') {&eol;                        label = (tag.tag + (typeof tag.value !== 'undefined'&eol;                                && tag.value !== '' ? (':' + tag.value) : '')).replace(/\s/g, '_');&eol;                        Media.labels.push(label);&eol;                    }&eol;                });&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ ' + Media.name + ' Webhook ] Failed to parse "event_tags_json" param');&eol;            }&eol;        }&eol;    },&eol;&eol;    request: function (method, query, data, allow_404) {&eol;        if (typeof(allow_404) === 'undefined') {&eol;            allow_404 = false;&eol;        }&eol;&eol;        ['api', 'token'].forEach(function (field) {&eol;            if (typeof Media.params !== 'object' &pipe;&pipe; typeof Media.params[field] === 'undefined'&eol;                    &pipe;&pipe; Media.params[field] === '') {&eol;                throw 'Required ' + Media.name + ' param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = Media.params.api + query,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('Authorization: ' + Media.params.token);&eol;        request.setProxy(Media.HTTPProxy);&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ ' + Media.name + ' Webhook ] Sending request: ' +&eol;            url + ((typeof data === 'string') ? ('\n' + data) : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ ' + Media.name + ' Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ ' + Media.name + ' Webhook ] Failed to parse response.');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if ((request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300)&eol;                && (!allow_404 &pipe;&pipe; request.getStatus() !== 404)) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null) {&eol;                if (typeof response.errors === 'object' && Object.keys(response.errors).length > 0) {&eol;                    message += ': ' + JSON.stringify(response.errors);&eol;                }&eol;                else if (typeof response.errorMessages === 'object' && Object.keys(response.errorMessages).length > 0) {&eol;                    message += ': ' + JSON.stringify(response.errorMessages);&eol;                }&eol;                else if (typeof response.message === 'string') {&eol;                    message += ': ' + response.message;&eol;                }&eol;            }&eol;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    },&eol;&eol;    getAlertId: function (requestId) {&eol;        do {&eol;            resp = Media.request('get', 'requests/' + requestId, undefined, true);&eol;        }&eol;        while (typeof resp.response !== 'object' &pipe;&pipe; typeof resp.response.data === 'undefined'&eol;                &pipe;&pipe; resp.response.data.success === false);&eol;&eol;        if (typeof resp.response !== 'object' &pipe;&pipe; typeof resp.response.data === 'undefined') {&eol;            throw 'Cannot get ' + Media.name + ' issue ID. Check debug log for more information.';&eol;        }&eol;&eol;        return resp;&eol;    }&eol;};&eol;&eol;try {&eol;    var result = {tags: {}},&eol;        params = JSON.parse(value),&eol;        media = {},&eol;        fields = {},&eol;        resp = {},&eol;        responders = [],&eol;        tags = [],&eol;        required_params = [&eol;            'alert_subject',&eol;            'alert_message',&eol;            'event_id',&eol;            'event_source',&eol;            'event_value',&eol;            'event_update_status',&eol;            'opsgenie_api',&eol;            'opsgenie_web',&eol;            'opsgenie_token'&eol;        ],&eol;        severities = [&eol;            'not_classified',&eol;            'information',&eol;            'warning',&eol;            'average',&eol;            'high',&eol;            'disaster',&eol;            'resolved',&eol;            'default'&eol;        ],&eol;        priority;&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (required_params.indexOf(key) !== -1 && params[key].trim() === '') {&eol;                throw 'Parameter "' + key + '" cannot be empty.';&eol;            }&eol;            if (key.startsWith('opsgenie_')) {&eol;                media[key.substring(9)] = params[key];&eol;            }&eol;        });&eol;&eol;    // Possible values of event_source:&eol;    // 0 - Trigger, 1 - Discovery, 2 - Autoregistration, 3 - Internal.&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: "' + params.event_source + '".\nMust be 0-3.';&eol;    }&eol;&eol;    // Check event_value for trigger-based and internal events.&eol;    // Possible values: 1 for problem, 0 for recovering&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check event_update_status only for trigger-based events.&eol;    // Possible values: 0 - Webhook was called because of problem/recovery event, 1 - Update operation.&eol;    if (params.event_source === '0' && params.event_update_status !== '0' && params.event_update_status !== '1') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check event_id for a numeric value.&eol;    if (isNaN(parseInt(params.event_id)) &pipe;&pipe; params.event_id < 1) {&eol;        throw 'Incorrect "event_id" parameter given: ' + params.event_id + '\nMust be a positive number.';&eol;    }&eol;&eol;    if ((params.event_source === '1' &pipe;&pipe; params.event_source === '2')  && params.event_value === '0') {&eol;        throw 'Recovery operations are supported only for Trigger and Internal actions.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    if (params.event_value === '0') {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    priority = params['severity_' + severities[params.event_nseverity]];&eol;    params.zbxurl = params.zbxurl + (params.zbxurl.endsWith('/') ? '' : '/');&eol;&eol;    Media.name = 'Opsgenie';&eol;    Media.setParams(media);&eol;    Media.params.token = 'GenieKey ' + Media.params.token;&eol;    Media.setProxy(params.HTTPProxy);&eol;    Media.setTags(params.event_tags_json); // Set Media.labels&eol;&eol;    // Create an issue.&eol;    // Numeric value of the event that triggered an action (1 for problem, 0 for recovering).&eol;    // Numeric value of the problem update status. Possible values:&eol;    // 0 - Webhook was called because of problem/recovery event, 1 - Update operation.&eol;    if ((params.event_source == 0 && params.event_value == 1 && params.event_update_status == 0)&eol;            &pipe;&pipe; (params.event_source == 3 && params.event_value == 1)&eol;            &pipe;&pipe; params.event_source == 1 &pipe;&pipe; params.event_source == 2) {&eol;        fields.message = params.alert_subject;&eol;        fields.alias = params.event_id;&eol;        fields.description = params.alert_message;&eol;        fields.priority = priority;&eol;        fields.source = 'Zabbix';&eol;&eol;        if (params.event_source === '0') {&eol;            fields.details = {&eol;                'Zabbix server': params.zbxurl,&eol;                Problem: params.zbxurl + 'tr_events.php?triggerid=' + params.trigger_id + '&eventid=' + params.event_id&eol;            };&eol;        }&eol;        else {&eol;            fields.details = {'Zabbix server': params.zbxurl};&eol;        }&eol;&eol;        if (typeof params.opsgenie_teams === 'string') {&eol;            responders = params.opsgenie_teams.split(',');&eol;            fields.responders = responders.map(function(team) {&eol;                return {type: 'team', name: team.trim()};&eol;            });&eol;        }&eol;&eol;        fields.tags = Media.labels;&eol;        if (typeof params.opsgenie_tags === 'string') {&eol;            tags = params.opsgenie_tags.split(',');&eol;            tags.forEach(function(item) {&eol;                fields.tags.push(item.trim());&eol;            });&eol;        }&eol;&eol;        resp = Media.request('post', '', fields);&eol;        if (typeof resp.response !== 'object' &pipe;&pipe; typeof resp.response.result === 'undefined') {&eol;            throw 'Cannot create ' + Media.name + ' issue. Check debug log for more information.';&eol;        }&eol;&eol;        if (resp.status === 202) {&eol;            resp = Media.getAlertId(resp.response.requestId);&eol;            if (params.event_source == 0 && params.event_value == 1 && params.event_update_status == 0) {&eol;                result.tags.__zbx_ops_issuekey = resp.response.data.alertId;&eol;                result.tags.__zbx_ops_issuelink = Media.params.web + 'alert/detail/' + resp.response.data.alertId;&eol;            }&eol;        }&eol;        else {&eol;            throw Media.name + ' response code is unexpected. Check debug log for more information.';&eol;        }&eol;    }&eol;    // Update a created issue.&eol;    else {&eol;        fields.user = (params.event_value != 0) ? params.zbxuser : '';&eol;        fields.note = params.alert_message;&eol;&eol;        resp = Media.request('post', params.event_id + '/notes?identifierType=alias', fields);&eol;        if (typeof resp.response !== 'object' &pipe;&pipe; typeof resp.response.result === 'undefined') {&eol;            throw 'Cannot update ' + Media.name + ' issue. Check debug log for more information.';&eol;        }&eol;&eol;        if (resp.status === 202) {&eol;            resp = Media.getAlertId(resp.response.requestId);&eol;        }&eol;        else {&eol;            throw Media.name + ' response code is unexpected. Check debug log for more information.';&eol;        }&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ ' + Media.name + ' Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_ops_issuelink}      |Opsgenie: {EVENT.TAGS.__zbx_ops_issuekey}                   |Please refer to https://docs.opsgenie.com/docs/alert-api and https://www.zabbix.com/documentation/6.2/manual/config/notifications/media/webhook#example_scripts.&eol;  &eol;Set global macro {$ZABBIX.URL} with your Zabbix server URL.&eol;Add dedicated user with media type "Opsgenie".&eol;Change the values of the variables opsgenie_api (https://api.opsgenie.com/v2/alerts or https://api.eu.opsgenie.com/v2/alerts),&eol;opsgenie_web (for example, https://myzabbix.app.opsgenie.com), opsgenie_token.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |7          |4   |PagerDuty               |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |try {&eol;&eol;    var params = JSON.parse(value),&eol;        req = new HttpRequest(),&eol;        fields = {},&eol;        resp = '';&eol;&eol;    // Correspondence between the PagerDuty and Zabbix severity level&eol;    var severityMapping = [&eol;        'info',    // Not classified&eol;        'info',    // Information&eol;        'warning', // Warning&eol;        'warning', // Average&eol;        'error',   // High&eol;        'critical' // Disaster&eol;    ];&eol;&eol;    if (!severityMapping[params.severity]) {&eol;        params.severity = '0';&eol;    }&eol;&eol;    if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {&eol;        req.setProxy(params.HTTPProxy);&eol;    }&eol;&eol;    if (isNaN(parseInt(params.eventid)) &pipe;&pipe; params.eventid < 1) {&eol;        throw 'incorrect value for variable "eventid". The value must be a positive number.';&eol;    }&eol;    if (params.eventname.length < 1) {&eol;        throw 'incorrect value for variable "eventname". The value must be a non-empty string.';&eol;    }&eol;    if (isNaN(parseInt(params.severity)) &pipe;&pipe; (params.severity < 0 && params.severity > 5)) {&eol;        throw 'incorrect value for variable "severity". The value must be a number 0..5.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: "' + params.event_source + '".\nMust be 0-3.';&eol;    }&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.eventvalue !== '0' && params.eventvalue !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "eventvalue" parameter given: "' + params.eventvalue + '".\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source === '0') {&eol;        if (params.hostname.length < 1) {&eol;            throw 'incorrect value for variable "hostname". The value must be a non-empty string.';&eol;        }&eol;        if (isNaN(parseInt(params.triggerid)) &pipe;&pipe; params.triggerid < 1) {&eol;            throw 'incorrect value for variable "triggerid". The value must be a positive number.';&eol;        }&eol;        if (params.eventack != 'Yes' && params.eventack != 'No') {&eol;            throw 'incorrect value for variable "eventack". The value must be Yes or No.';&eol;        }&eol;        if (isNaN(parseInt(params.eventupdate)) &pipe;&pipe; (params.eventupdate < 0 &pipe;&pipe; params.eventupdate > 1)) {&eol;            throw 'incorrect value for variable "eventupdate". The value must be 0 or 1.';&eol;        }&eol;    }&eol;&eol;&eol;&eol;    req.addHeader('Content-Type: application/json');&eol;&eol;    fields.routing_key = params.token;&eol;    fields.dedup_key = params.eventid;&eol;&eol;    if (((params.eventvalue == 1) && (params.eventupdate == 0)) &pipe;&pipe; params.event_source !== '0') {&eol;        fields.event_action = 'trigger';&eol;        fields.payload = {&eol;            summary: params.eventname,&eol;            source: (params.event_source === '1') ? 'Discovery' : params.hostname + ' : ' + params.hostip,&eol;            severity: severityMapping[params.severity],&eol;        };&eol;        &eol;        if (params.event_source === '0') {&eol;            fields.payload.custom_details = {&eol;                'Event date': params.eventdate,&eol;                'Event time': params.eventtime,&eol;                'Trigger description': params.triggerdesc,&eol;                'Trigger opdata': params.triggeropdata,&eol;                'Event tags': params.eventtags,&eol;                'Event host': params.hostname,&eol;                'Event host ip': params.hostip&eol;            };&eol;            fields.links = [{&eol;                href: params.url + '/tr_events.php?triggerid=' + params.triggerid + '&eventid=' + params.eventid,&eol;                text: 'Event link'&eol;            }];&eol;        }&eol;        else {&eol;            fields.payload.custom_details = {&eol;                'Alert message': params.alert_message&eol;            };&eol;        }&eol;&eol;        fields.client = 'Zabbix';&eol;        fields.client_url = params.url;&eol;    }&eol;    else if ((params.eventvalue == 1) && (params.eventupdate == 1) && (params.eventack == 'Yes'))&eol;        fields.event_action = 'acknowledge';&eol;    else if (params.eventvalue == 0)&eol;        fields.event_action = 'resolve';&eol;    else&eol;        throw 'incorrect values. Update message without ack will not be sent.';&eol;&eol;    Zabbix.log(4, '[PagerDuty Webhook] Sending request:' + JSON.stringify(fields));&eol;    resp = req.post('https://events.pagerduty.com/v2/enqueue',&eol;        JSON.stringify(fields)&eol;    );&eol;    Zabbix.log(4, '[PagerDuty Webhook] Receiving response:' + resp);&eol;&eol;    try {&eol;        resp = JSON.parse(resp);&eol;    }&eol;    catch (error) {&eol;        throw 'incorrect response. PagerDuty returned a non-JSON object.';&eol;    }&eol;&eol;    if (req.getStatus() != 202) {&eol;        if (typeof resp === 'object' && typeof resp.errors === 'object' && typeof resp.errors[0] === 'string') {&eol;            throw resp.errors[0];&eol;        }&eol;        else {&eol;            throw 'Unknown error.';&eol;        }&eol;    }&eol;&eol;    if (resp.status != 'success') {&eol;        throw 'Unknown error.';&eol;    }&eol;&eol;    return 'OK';&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[PagerDuty Webhook] Notification failed : ' + error);&eol;    throw 'PagerDuty notification failed : ' + error;&eol;}|30s    |0           |0              |                                      |                                                            |Please refer to https://v2.developer.pagerduty.com/docs/send-an-event-events-api-v2 and https://www.zabbix.com/documentation/6.2/manual/config/notifications/media/webhook#example_scripts.&eol;  &eol;Set global macro {$ZABBIX.URL} with your Zabbix server URL.&eol;Add a dedicated user with the media type "PagerDuty" and place the integration key in the "token" parameter to integrate into the service.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
ROW   |8          |4   |Pushover                |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |0          |3          |10s             |1           |try {&eol;    var params = JSON.parse(value),&eol;        request = new HttpRequest(),&eol;        data,&eol;        response,&eol;        severities = [&eol;            {name: 'not_classified', color: '#97AAB3'},&eol;            {name: 'information', color: '#7499FF'},&eol;            {name: 'warning', color: '#FFC859'},&eol;            {name: 'average', color: '#FFA059'},&eol;            {name: 'high', color: '#E97659'},&eol;            {name: 'disaster', color: '#E45959'},&eol;            {name: 'resolved', color: '#009900'},&eol;            {name: 'default', color: '#000000'}&eol;        ],&eol;        priority;&eol;&eol;    if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {&eol;        request.setProxy(params.HTTPProxy);&eol;    }&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: "' + params.event_source + '".\nMust be 0-3.';&eol;    }&eol;&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    if (params.event_value === '0') {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    priority = params['priority_' + severities[params.event_nseverity].name] &pipe;&pipe; params.priority_default;&eol;&eol;    if (isNaN(priority) &pipe;&pipe; priority < -2 &pipe;&pipe; priority > 2) {&eol;        throw '"priority" should be -2..2';&eol;    }&eol;&eol;    if (params.event_source === '0' && isNaN(params.triggerid)) {&eol;        throw 'field "triggerid" is not a number';&eol;    }&eol;&eol;    if (isNaN(params.eventid)) {&eol;        throw 'field "eventid" is not a number';&eol;    }&eol;&eol;    if (typeof params.message !== 'string' &pipe;&pipe; params.message.trim() === '') {&eol;        throw 'field "message" cannot be empty';&eol;    }&eol;&eol;    data = {&eol;        token: params.token,&eol;        user: params.user,&eol;        title: params.title,&eol;        message: params.message,&eol;        url: (params.event_source === '0') &eol;            ? params.url + '/tr_events.php?triggerid=' + params.triggerid + '&eventid=' + params.eventid&eol;            : params.url,&eol;        url_title: params.url_title,&eol;        priority: priority&eol;    };&eol;&eol;    if (priority == 2) {&eol;        if (isNaN(params.retry) &pipe;&pipe; params.retry < 30) {&eol;            throw 'field "retry" should be a number with value of at least 30 if "priority" is set to 2';&eol;        }&eol;&eol;        if (isNaN(params.expire) &pipe;&pipe; params.expire > 10800) {&eol;            throw 'field "expire" should be a number with value of at most 10800 if "priority" is set to 2';&eol;        }&eol;&eol;        data.retry = params.retry;&eol;        data.expire = params.expire;&eol;    }&eol;&eol;    data = JSON.stringify(data);&eol;    Zabbix.log(4, '[ Pushover Webhook ] Sending request: ' + params.endpoint + '\n' + data);&eol;&eol;    request.addHeader('Content-Type: application/json');&eol;    response = request.post(params.endpoint, data);&eol;&eol;    Zabbix.log(4, '[ Pushover Webhook ] Received response with status code ' + request.getStatus() + '\n' + response);&eol;&eol;    if (response !== null) {&eol;        try {&eol;            response = JSON.parse(response);&eol;        }&eol;        catch (error) {&eol;            Zabbix.log(4, '[ Pushover Webhook ] Failed to parse response received from Pushover');&eol;            response = null;&eol;        }&eol;    }&eol;&eol;    if (request.getStatus() != 200 &pipe;&pipe; response === null &pipe;&pipe; typeof response !== 'object' &pipe;&pipe; response.status !== 1) {&eol;        if (response !== null && typeof response === 'object' && typeof response.errors === 'object'&eol;                && typeof response.errors[0] === 'string') {&eol;            throw response.errors[0];&eol;        }&eol;        else {&eol;            throw 'Unknown error. Check debug log for more information.';&eol;        }&eol;    }&eol;&eol;    return 'OK';&eol;}&eol;catch (error) {&eol;    Zabbix.log(4, '[ Pushover Webhook ] Pushover notification failed: ' + error);&eol;    throw 'Pushover notification failed: ' + error;&eol;}|30s    |0           |0              |                                      |                                                            |Please refer to setup guide here: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/pushover&eol;&eol;Set token parameter with to your Pushover application key.&eol;When assigning Pushover media to the Zabbix user - add user key into send to field.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
ROW   |9          |4   |Slack                   |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var SEVERITY_COLORS = [&eol;    '#97AAB3', '#7499FF', '#FFC859',&eol;    '#FFA059', '#E97659', '#E45959'&eol;];&eol;&eol;var RESOLVE_COLOR = '#009900';&eol;&eol;var SLACK_MODE_HANDLERS = {&eol;    alarm: handlerAlarm,&eol;    event: handlerEvent&eol;};&eol;&eol;&eol;if (!String.prototype.format) {&eol;    String.prototype.format = function() {&eol;        var args = arguments;&eol;&eol;        return this.replace(/{(\d+)}/g, function(match, number) {&eol;            return number in args&eol;                ? args[number]&eol;                : match&eol;            ;&eol;        });&eol;    };&eol;}&eol;&eol;function isEventProblem(params) {&eol;    return params.event_value == 1&eol;        && params.event_update_status == 0&eol;    ;&eol;}&eol;&eol;function isEventUpdate(params) {&eol;    return params.event_value == 1&eol;        && params.event_update_status == 1&eol;    ;&eol;}&eol;&eol;function isEventResolve(params) {&eol;    return params.event_value == 0;&eol;}&eol;&eol;function getPermalink(channelId, messageTimestamp) {&eol;    var req = new HttpRequest();&eol;&eol;    if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {&eol;        req.setProxy(params.HTTPProxy);&eol;    }&eol;&eol;    req.addHeader('Content-Type: application/x-www-form-urlencoded; charset=utf-8');&eol;    req.addHeader('Authorization: Bearer ' + params.bot_token);&eol;&eol;    var query = '{0}?channel={1}&message_ts={2}'.format(&eol;            Slack.getPermalink,&eol;            encodeURIComponent(channelId),&eol;            encodeURIComponent(messageTimestamp)),&eol;        resp = JSON.parse(req.get(query));&eol;&eol;    if (req.getStatus() != 200 &pipe;&pipe; !resp.ok &pipe;&pipe; resp.ok === 'false') {&eol;        throw 'message was created, but getting message link was failed with reason "' + resp.error + '"';&eol;    }&eol;&eol;    return resp.permalink;&eol;}&eol;&eol;function createProblemURL(zabbix_url, triggerid, eventid, event_source) {&eol;    var problem_url = '';&eol;    if (event_source === '0') {&eol;        problem_url = '{0}/tr_events.php?triggerid={1}&eventid={2}'&eol;            .format(&eol;                zabbix_url,&eol;                triggerid,&eol;                eventid&eol;            );&eol;    }&eol;    else {&eol;        problem_url = zabbix_url;&eol;    }&eol;&eol;    return problem_url;&eol;}&eol;&eol;function handlerAlarm(params) {&eol;    var fields = {&eol;        channel: params.channel,&eol;        as_user: params.slack_as_user,&eol;    };&eol;&eol;    if (isEventProblem(params)) {&eol;        fields.attachments = [&eol;            createMessage(&eol;                SEVERITY_COLORS[params.event_nseverity] &pipe;&pipe; 0,&eol;                params.event_date,&eol;                params.event_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source)&eol;            )&eol;        ];&eol;&eol;        var resp = JSON.parse(req.post(Slack.postMessage, JSON.stringify(fields)));&eol;&eol;        if (req.getStatus() != 200 &pipe;&pipe; !resp.ok &pipe;&pipe; resp.ok === 'false') {&eol;            throw resp.error;&eol;        }&eol;&eol;        result.tags = {&eol;            ['__message_ts_' + params.channel]: resp.ts,&eol;            ['__channel_id_' + params.channel]: resp.channel,&eol;            ['__message_link_' + params.channel]: getPermalink(resp.channel, resp.ts),&eol;        };&eol;&eol;    }&eol;    else if (isEventUpdate(params)) {&eol;        try {&eol;            var channel_event_tags = JSON.parse(params.event_tags);&eol;        } catch (error) {&eol;            throw 'Cannot process event tags: ' + error;&eol;        }&eol;&eol;        if (Array.isArray(channel_event_tags)) {&eol;            for (i in channel_event_tags) {&eol;                if (channel_event_tags[i].tag.includes('__message_ts_' + params.channel)) {&eol;                    fields.thread_ts = channel_event_tags[i].value;&eol;                    break;&eol;                }&eol;            }&eol;        }&eol;&eol;        fields.attachments = [&eol;            createMessage(&eol;                SEVERITY_COLORS[params.event_nseverity] &pipe;&pipe; 0,&eol;                params.event_update_date,&eol;                params.event_update_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source),&eol;                true&eol;            )&eol;        ];&eol;&eol;        resp = JSON.parse(req.post(Slack.postMessage, JSON.stringify(fields)));&eol;&eol;        if (req.getStatus() != 200 &pipe;&pipe; !resp.ok &pipe;&pipe; resp.ok === 'false') {&eol;            throw resp.error;&eol;        }&eol;&eol;    }&eol;    else if (isEventResolve(params)) {&eol;&eol;        fields.text = '';&eol;&eol;        try {&eol;            var channel_event_tags = JSON.parse(params.event_tags);&eol;        } catch (error) {&eol;            throw 'Cannot process event tags: ' + error;&eol;        }&eol;&eol;        if (Array.isArray(channel_event_tags)) {&eol;            for (i in channel_event_tags) {&eol;                if (channel_event_tags[i].tag.includes('__channel_id_' + params.channel)) {&eol;                    fields.channel = channel_event_tags[i].value;&eol;                    continue;&eol;                }&eol;                if (channel_event_tags[i].tag.includes('__message_ts_' + params.channel)) {&eol;                    fields.ts = channel_event_tags[i].value;&eol;                }&eol;            }&eol;        }&eol;&eol;        fields.attachments = [&eol;            createMessage(&eol;                RESOLVE_COLOR,&eol;                params.event_date,&eol;                params.event_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source)&eol;            )&eol;        ];&eol;&eol;        resp = JSON.parse(req.post(Slack.chatUpdate, JSON.stringify(fields)));&eol;        if (req.getStatus() != 200 &pipe;&pipe; !resp.ok &pipe;&pipe; resp.ok === 'false') {&eol;            throw resp.error;&eol;        }&eol;    }&eol;}&eol;&eol;function handlerEvent(params) {&eol;    var fields = {&eol;        channel: params.channel,&eol;        as_user: params.slack_as_user&eol;    };&eol;&eol;    if (isEventProblem(params)) {&eol;        fields.attachments = [&eol;            createMessage(&eol;                SEVERITY_COLORS[params.event_nseverity] &pipe;&pipe; 0,&eol;                params.event_date,&eol;                params.event_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source)&eol;            )&eol;        ];&eol;&eol;        var resp = JSON.parse(req.post(Slack.postMessage, JSON.stringify(fields)));&eol;&eol;        if (req.getStatus() != 200 &pipe;&pipe; !resp.ok &pipe;&pipe; resp.ok === 'false') {&eol;            throw resp.error;&eol;        }&eol;&eol;        result.tags = {&eol;            ['__message_link_' + params.channel]: getPermalink(resp.channel, resp.ts)&eol;        }&eol;&eol;    }&eol;    else if (isEventUpdate(params)) {&eol;        fields.attachments = [&eol;            createMessage(&eol;                SEVERITY_COLORS[params.event_nseverity] &pipe;&pipe; 0,&eol;                params.event_update_date,&eol;                params.event_update_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source),&eol;                false&eol;            )&eol;        ];&eol;&eol;        resp = JSON.parse(req.post(Slack.postMessage, JSON.stringify(fields)));&eol;&eol;        if (req.getStatus() != 200 &pipe;&pipe; !resp.ok &pipe;&pipe; resp.ok === 'false') {&eol;            throw resp.error;&eol;        }&eol;&eol;    }&eol;    else if (isEventResolve(params)) {&eol;        fields.attachments = [&eol;            createMessage(&eol;                RESOLVE_COLOR,&eol;                params.event_recovery_date,&eol;                params.event_recovery_time,&eol;                createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source)&eol;            )&eol;        ];&eol;&eol;        resp = JSON.parse(req.post(Slack.postMessage, JSON.stringify(fields)));&eol;&eol;        if (req.getStatus() != 200 &pipe;&pipe; !resp.ok &pipe;&pipe; resp.ok === 'false') {&eol;            throw resp.error;&eol;        }&eol;    }&eol;}&eol;&eol;function createMessage(&eol;    event_severity_color,&eol;    event_date,&eol;    event_time,&eol;    problem_url,&eol;    isShort,&eol;    messageText&eol;) {&eol;    var message = {&eol;        fallback: params.alert_subject,&eol;        title: params.alert_subject,&eol;        color: event_severity_color,&eol;        title_link: problem_url,&eol;        pretext: messageText &pipe;&pipe; '',&eol;&eol;        fields: [&eol;            {&eol;                title: 'Host',&eol;                value: '{0} [{1}]'.format(params.host_name, params.host_conn),&eol;                short: true&eol;            },&eol;            {&eol;                title: 'Event time',&eol;                value: '{0} {1}'.format(event_date, event_time),&eol;                short: true&eol;            }&eol;        ],&eol;    };&eol;&eol;    if (params.event_source === '0') {&eol;        message.fields.push(&eol;            {&eol;                title: 'Severity',&eol;                value: params.event_severity,&eol;                short: true&eol;            },&eol;            {&eol;                title: 'Opdata',&eol;                value: params.event_opdata,&eol;                short: true&eol;            }&eol;        );&eol;    }&eol;&eol;    if (!isShort  && params.event_source === '0') {&eol;        message['actions'] = [&eol;            {&eol;                type: 'button',&eol;                text: 'Open in Zabbix',&eol;                url: problem_url&eol;            }&eol;        ];&eol;&eol;        message.fields.push(&eol;            {&eol;                title: 'Event tags',&eol;                value: JSON.parse(params.event_tags).filter(function (e) { return !e.tag.includes('__') }).map(function (e) { return e.tag + ': ' + e.value }).join('\n') &pipe;&pipe; 'None',&eol;                short: true&eol;            },&eol;            {&eol;                title: 'Trigger description',&eol;                value: params.trigger_description,&eol;                short: true&eol;            }&eol;        );&eol;    }&eol;&eol;    if (params.event_source !== '0' &pipe;&pipe; params.event_update_status === '1') {&eol;        message.fields.push(&eol;            {&eol;                title: 'Details',&eol;                value: params.alert_message,&eol;                short: false&eol;            }&eol;        );&eol;    }&eol;&eol;    return message;&eol;}&eol;&eol;function validateParams(params) {&eol;    if (typeof params.bot_token !== 'string' &pipe;&pipe; params.bot_token.trim() === '') {&eol;        throw 'Field "bot_token" cannot be empty';&eol;    }&eol;&eol;    if (typeof params.channel !== 'string' &pipe;&pipe; params.channel.trim() === '') {&eol;        throw 'Field "channel" cannot be empty';&eol;    }&eol;&eol;    if (isNaN(params.event_id)) {&eol;        throw 'Field "event_id" is not a number';&eol;    }&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: "' + params.event_source + '".\nMust be 0-3.';&eol;    }&eol;&eol;    if (params.event_source !== '0') {&eol;        params.event_nseverity = '0';&eol;        params.event_severity = 'Not classified';&eol;        params.event_update_status = '0';&eol;        params.slack_mode = 'event';&eol;    }&eol;&eol;    if (params.event_source === '1' &pipe;&pipe; params.event_source === '2') {&eol;        params.event_value = '1';&eol;    }&eol;&eol;    if (params.event_source === '1') {&eol;        params.host_name = params.discovery_host_dns;&eol;        params.host_ip = params.discovery_host_ip;&eol;    }&eol;&eol;    if (!~[0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity))) {&eol;        throw 'Incorrect "event_nseverity" parameter given: ' + params.event_nseverity + '\nMust be 0-5.';&eol;    }&eol;&eol;    if (typeof params.event_severity !== 'string' &pipe;&pipe; params.event_severity.trim() === '') {&eol;        throw 'Field "event_severity" cannot be empty';&eol;    }&eol;&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_value !== '0' && params.event_value !== '1') {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (typeof params.host_conn !== 'string' &pipe;&pipe; params.host_conn.trim() === '') {&eol;        throw 'Field "host_conn" cannot be empty';&eol;    }&eol;&eol;    if (typeof params.host_name !== 'string' &pipe;&pipe; params.host_name.trim() === '') {&eol;        throw 'Field "host_name" cannot be empty';&eol;    }&eol;&eol;    if (!~['true', 'false'].indexOf(params.slack_as_user.toLowerCase())) {&eol;        throw 'Incorrect "slack_as_user" parameter given: ' + params.slack_as_user + '\nMust be "true" or "false".';&eol;    }&eol;&eol;    if (!~['alarm', 'event'].indexOf(params.slack_mode)) {&eol;        throw 'Incorrect "slack_mode" parameter given: ' + params.slack_mode + '\nMust be "alarm" or "event".';&eol;    }&eol;&eol;    if (isNaN(params.trigger_id) && params.event_source === '0') {&eol;        throw 'field "trigger_id" is not a number';&eol;    }&eol;&eol;    if (typeof params.zabbix_url !== 'string' &pipe;&pipe; params.zabbix_url.trim() === '') {&eol;        throw 'Field "zabbix_url" cannot be empty';&eol;    }&eol;&eol;    if (!/^(http&pipe;https):\/\/.+/.test(params.zabbix_url)) {&eol;        throw 'Field "zabbix_url" must contain a schema';&eol;    }&eol;}&eol;&eol;try {&eol;    var params = JSON.parse(value);&eol;&eol;    validateParams(params);&eol;&eol;    var req = new HttpRequest(),&eol;        result = {tags: {}};&eol;&eol;    if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {&eol;        req.setProxy(params.HTTPProxy);&eol;    }&eol;&eol;    req.addHeader('Content-Type: application/json; charset=utf-8');&eol;    req.addHeader('Authorization: Bearer ' + params.bot_token);&eol;&eol;    var slack_endpoint = 'https://slack.com/api/';&eol;&eol;    var Slack = {&eol;        postMessage: slack_endpoint + 'chat.postMessage',&eol;        getPermalink: slack_endpoint + 'chat.getPermalink',&eol;        chatUpdate: slack_endpoint + 'chat.update'&eol;    };&eol;&eol;    params.slack_mode = params.slack_mode.toLowerCase();&eol;    params.slack_mode = params.slack_mode in SLACK_MODE_HANDLERS&eol;        ? params.slack_mode&eol;        : 'alarm';&eol;&eol;    SLACK_MODE_HANDLERS[params.slack_mode](params);&eol;&eol;    if (params.event_source === '0') {&eol;        return JSON.stringify(result);&eol;    }&eol;    else {&eol;        return 'OK';&eol;    }&eol;}&eol;catch (error) {&eol;    Zabbix.log(4, '[ Slack Webhook ] Slack notification failed : ' + error);&eol;    throw 'Slack notification failed : ' + error;&eol;}|30s    |1           |0              |                                      |                                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |10         |4   |Discord                 |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var SEVERITY_COLORS = [&eol;    '#97AAB3', // Not classified.&eol;    '#7499FF', // Information.&eol;    '#FFC859', // Warning.&eol;    '#FFA059', // Average.&eol;    '#E97659', // High.&eol;    '#E45959', // Disaster.&eol;    '#009900'  // Resolved.&eol;];&eol;&eol;function stringTruncate(str, len) {&eol;    return str.length > len ? str.substring(0, len - 3) + '...' : str;&eol;}&eol;&eol;try {&eol;    Zabbix.log(4, '[ Discord Webhook ] Executed with params: ' + value);&eol;&eol;    var params = JSON.parse(value);&eol;&eol;    if (!params.discord_endpoint) {&eol;        throw 'Cannot get discord_endpoint';&eol;    }&eol;    else {&eol;        params.discord_endpoint = params.discord_endpoint.replace('/api/', '/api/v7/') + '?wait=True';&eol;    }&eol;&eol;    params.zabbix_url = (params.zabbix_url.endsWith('/'))&eol;        ? params.zabbix_url.slice(0, -1) : params.zabbix_url;&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: "' + params.event_source + '".\nMust be 0-3.';&eol;    }&eol;&eol;    // Set params to true for non trigger-based events.&eol;    if (params.event_source !== '0') {&eol;        params.use_default_message = 'true';&eol;        params.event_nseverity = '0';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: "' + params.event_value + '".\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: "' + params.event_update_status + '".\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_value == 0) {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    if (!SEVERITY_COLORS[params.event_nseverity]) {&eol;        throw 'Incorrect "event_nseverity" parameter given: ' + params.event_nseverity + '\nMust be 0-5.';&eol;    }&eol;&eol;    var color = parseInt(SEVERITY_COLORS[params.event_nseverity].replace('#', ''), 16),&eol;        fields = [],&eol;        body = {&eol;            embeds: [&eol;                {&eol;                    color: color &pipe;&pipe; 0,&eol;                    url: (params.event_source === '0')&eol;                        ? params.zabbix_url + '/tr_events.php?triggerid=' + params.trigger_id +&eol;                            '&eventid=' + params.event_id&eol;                        : params.zabbix_url&eol;                }&eol;            ]&eol;        };&eol;&eol;    // Default message from {ALERT.MESSAGE}.&eol;    if (params.use_default_message.toLowerCase() == 'true') {&eol;        body.embeds[0].title = stringTruncate(params.alert_subject, 256);&eol;        body.embeds[0].description = stringTruncate(params.alert_message, 2048);&eol;    }&eol;    else {&eol;        fields.push(&eol;            {&eol;                name: 'Host',&eol;                value: params.host_name + ' [' + params.host_ip + ']'&eol;            }&eol;        );&eol;&eol;        // Resolved message.&eol;        if (params.event_value == 0 && params.event_update_status == 0) {&eol;            body.embeds[0].title = stringTruncate('OK: ' + params.event_name, 256);&eol;            fields.push(&eol;                {&eol;                    name: 'Recovery time',&eol;                    value: params.event_recovery_time + ' ' + params.event_recovery_date,&eol;                    inline: 'True'&eol;                }&eol;            );&eol;        }&eol;&eol;        // Problem message.&eol;        else if (params.event_value == 1 && params.event_update_status == 0) {&eol;            body.embeds[0].title = stringTruncate('PROBLEM: ' + params.event_name, 256);&eol;            fields.push(&eol;                {&eol;                    name: 'Event time',&eol;                    value: params.event_time + ' ' + params.event_date,&eol;                    inline: 'True'&eol;                }&eol;            );&eol;        }&eol;&eol;        // Update message.&eol;        else if (params.event_update_status == 1) {&eol;            body.embeds[0].title = stringTruncate('UPDATE: ' + params.event_name, 256);&eol;            body.embeds[0].description = params.event_update_user + ' ' + params.event_update_action + '.';&eol;&eol;            if (params.event_update_message) {&eol;                body.embeds[0].description += ' Comment:\n>>> ' + params.event_update_message;&eol;            }&eol;&eol;            body.embeds[0].description = stringTruncate(body.embeds[0].description, 2048);&eol;&eol;            fields.push(&eol;                {&eol;                    name: 'Event update time',&eol;                    value: params.event_update_time + ' ' + params.event_update_date,&eol;                    inline: 'True'&eol;                }&eol;            );&eol;        }&eol;&eol;        fields.push(&eol;            {&eol;                name: 'Severity',&eol;                value: params.event_severity,&eol;                inline: 'True'&eol;            }&eol;        );&eol;&eol;        if (params.event_opdata) {&eol;            fields.push(&eol;                {&eol;                    name: 'Operational data',&eol;                    value: stringTruncate(params.event_opdata, 1024),&eol;                    inline: 'True'&eol;                }&eol;            );&eol;        }&eol;&eol;        if (params.event_value == 1 && params.event_update_status == 0 && params.trigger_description) {&eol;            fields.push(&eol;                {&eol;                    name: 'Trigger description',&eol;                    value: stringTruncate(params.trigger_description, 1024)&eol;                }&eol;            );&eol;        }&eol;&eol;        body.embeds[0].footer = {&eol;            text: 'Event ID: ' + params.event_id&eol;        };&eol;&eol;        if (params.event_tags) {&eol;            body.embeds[0].footer.text += '\nEvent tags: ' + params.event_tags;&eol;        }&eol;        body.embeds[0].footer.text = stringTruncate(body.embeds[0].footer.text, 2048);&eol;    }&eol;&eol;    if (fields.length > 0) {&eol;        body.embeds[0].fields = fields;&eol;    }&eol;&eol;    var req = new HttpRequest();&eol;&eol;    if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {&eol;        req.setProxy(params.HTTPProxy);&eol;    }&eol;&eol;    req.addHeader('Content-Type: application/json');&eol;&eol;    var resp = req.post(params.discord_endpoint, JSON.stringify(body)),&eol;        data = JSON.parse(resp);&eol;&eol;    Zabbix.log(4, '[ Discord Webhook ] JSON: ' + JSON.stringify(body));&eol;    Zabbix.log(4, '[ Discord Webhook ] Response: ' + resp);&eol;&eol;    if (data.id) {&eol;        return resp;&eol;    }&eol;    else {&eol;        var message = ((typeof data.message === 'string') ? data.message : 'Unknown error');&eol;&eol;        Zabbix.log(3, '[ Discord Webhook ] FAILED with response: ' + resp);&eol;        throw message + '. For more details check zabbix server log.';&eol;    }&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ Discord Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |0           |0              |                                      |                                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |11         |4   |SIGNL4                  |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |// SIGNL4 Webhook&eol;try {&eol;    var response,&eol;        payload,&eol;        params = JSON.parse(value),&eol;        endpoint = 'https://connect.signl4.com/webhook/',&eol;        request = new HttpRequest();&eol;&eol;    if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {&eol;        request.setProxy(params.HTTPProxy);&eol;    }&eol;&eol;    if (typeof params.teamsecret === 'string' && params.teamsecret.trim() !== '') {&eol;        endpoint += params.teamsecret;&eol;        delete params.teamsecret;&eol;    }&eol;    else {&eol;        throw 'The team secret of your SIGNL4 team cannot be empty.';&eol;    }&eol;&eol;    if (typeof params.Severity === 'string' && params.Severity === '{EVENT.SEVERITY}') {&eol;        params.Severity = 'Not classified';&eol;    }&eol;&eol;	if (typeof params.User === 'string' && params.User === '{USER.FULLNAME}') {&eol;        params.User = '';&eol;    }&eol;&eol;	if (typeof params.Event_Update_Action === 'string' && params.Event_Update_Action === '{EVENT.UPDATE.ACTION}') {&eol;        params.Event_Update_Action = '';&eol;    }&eol;&eol;	// Assemble X-S4-ExternalID for two-way integration&eol;	// Format: "ZabbixEventID: 222 ZabbixURL: https://your-zabbix-server/zabbix/"&eol;	params['X-S4-ExternalID'] = 'ZabbixEventID: ' + params.Event_ID;&eol;	if (typeof params.Zabbix_URL === 'string' && params.Zabbix_URL.indexOf('http') == 0) {&eol;		// Make sure the URL ends with '/'&eol;		if (params.Zabbix_URL.charAt(params.Zabbix_URL.length - 1) != '/') {&eol;			params.Zabbix_URL = params.Zabbix_URL + '/';&eol;		}&eol;&eol;		params['X-S4-ExternalID'] = params['X-S4-ExternalID'] + ' ZabbixURL: ' +  params.Zabbix_URL;&eol;&eol;		// Add Link parameter&eol;		params['Link'] = params.Zabbix_URL + "tr_events.php?triggerid="+params.Trigger_ID + "&eventid=" + params.Event_ID;&eol;	}&eol;&eol;	// Check if this is a new problem or a recovery&eol;	if (params.Trigger_Status == 'OK') {&eol;		params['X-S4-Status'] = 'resolved';&eol;	}&eol;	else {&eol;		params['X-S4-Status'] = 'new';&eol;	}&eol;&eol;    payload = JSON.stringify(params);&eol;    Zabbix.log(4, '[ SIGNL4 Webhook ] Sending request: ' + payload);&eol;&eol;    request.addHeader('Content-Type: application/json');&eol;    response = request.post(endpoint, 'payload=' + payload);&eol;&eol;    Zabbix.log(4, '[ SIGNL4 Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response&eol;    );&eol;&eol;    if (request.getStatus() !== 201) {&eol;        throw 'Request failed with status code ' + request.getStatus() +&eol;                '. Check debug log for more information.';&eol;    }&eol;&eol;    return 'OK';&eol;}&eol;catch (error) {&eol;    Zabbix.log(4, '[ SIGNL4 Webhook ] ERROR: ' + error);&eol;&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |0           |0              |                                      |                                                            |SIGNL4 is a mobile alert notification app for powerful alerting, alert management and mobile assignment of work items. It offers alerting via app push, SMS and voice calls including escalations, tracking, and duty scheduling.&eol;&eol;Get the app at https://www.signl4.com.&eol;&eol;Find out more including an integration video here: https://www.signl4.com/blog/portfolio_item/zabbix-mobile-alert-notification-duty-schedule-escalation/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
ROW   |12         |4   |Jira                    |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Jira = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        Jira.params = params;&eol;        if (typeof Jira.params.url === 'string') {&eol;            if (!Jira.params.url.endsWith('/')) {&eol;                Jira.params.url += '/';&eol;            }&eol;&eol;            Jira.params.url += 'rest/api/latest/';&eol;        }&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        Jira.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    setTags: function(event_tags_json) {&eol;        if (typeof event_tags_json !== 'undefined' && event_tags_json !== ''&eol;            && event_tags_json !== '{EVENT.TAGSJSON}') {&eol;            try {&eol;                var tags = JSON.parse(event_tags_json),&eol;                    label;&eol;&eol;                Jira.labels = [];&eol;&eol;                tags.forEach(function (tag) {&eol;                    if (typeof tag.tag !== 'undefined' && typeof tag.value !== 'undefined'&eol;                        && !tag.tag.startsWith('__zbx')) {&eol;                        label = (tag.tag + (tag.value ? (':' + tag.value) : '')).replace(/\s/g, '_');&eol;                        if (label.length < 256) {&eol;                            Jira.labels.push(label);&eol;                        }&eol;                    }&eol;                });&eol;            }&eol;            catch (error) {&eol;                // Code is not missing here.&eol;            }&eol;        }&eol;    },&eol;&eol;    escapeMarkup: function (str) {&eol;        var length = str.length,&eol;            result = '',&eol;            markup = ['{', '&pipe;', '}', '~', '_', '\\', '[', ']', '^', '<', '>', '?', '!', '#', '+', '*', '&'];&eol;&eol;        for (var i = 0; i < length; i++) {&eol;            var char = str[i];&eol;&eol;            result += (markup.indexOf(char) !== -1) ? ('&#' + str[i].charCodeAt() + ';') : char;&eol;        }&eol;&eol;        return result;&eol;    },&eol;&eol;    addCustomFields: function (data, fields) {&eol;        if (typeof fields === 'object' && Object.keys(fields).length) {&eol;            var schema = Jira.getSchema(),&eol;                path = ['projects', 0, 'issuetypes', 0, 'fields'],&eol;                field;&eol;&eol;            while ((field = path.shift()) !== undefined) {&eol;                schema = schema[field];&eol;                if (typeof schema === 'undefined') {&eol;                    schema = null;&eol;                    break;&eol;                }&eol;            }&eol;&eol;            if (schema) {&eol;                Object.keys(fields)&eol;                    .forEach(function(field) {&eol;                        if (typeof schema[field] === 'object' && typeof schema[field].schema === 'object') {&eol;                            switch (schema[field].schema.type) {&eol;                                case 'number':&eol;                                    data.fields[field] = parseInt(fields[field]);&eol;                                    break;&eol;&eol;                                case 'datetime':&eol;                                    if (fields[field].match(/\d+[.-]\d+[.-]\d+T\d+:\d+:\d+/) !== null) {&eol;                                        data.fields[field] = fields[field].replace(/\./g, '-');&eol;                                    }&eol;                                    break;&eol;&eol;                                case 'option':&eol;                                    data.fields[field] = {value: fields[field]};&eol;                                    break;&eol;&eol;                                case 'array':&eol;                                    if (schema[field].schema.items === 'option') {&eol;                                        data.fields[field] = [{value: fields[field]}];&eol;                                    }&eol;                                    else {&eol;                                        data.fields[field] = [fields[field]];&eol;                                    }&eol;                                    break;&eol;&eol;                                default:&eol;                                    data.fields[field] = fields[field];&eol;                            }&eol;                        }&eol;                    });&eol;            }&eol;            else {&eol;                Zabbix.log(4, '[ Jira Webhook ] Failed to retrieve field schema.');&eol;            }&eol;        }&eol;&eol;        return data;&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        ['url', 'user', 'password', 'project_key', 'issue_type'].forEach(function (field) {&eol;            if (typeof Jira.params !== 'object' &pipe;&pipe; typeof Jira.params[field] === 'undefined'&eol;                &pipe;&pipe; Jira.params[field] === '' ) {&eol;                throw 'Required Jira param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = Jira.params.url + query,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('Authorization: Basic ' + btoa(Jira.params.user + ':' + Jira.params.password));&eol;&eol;        if (typeof Jira.HTTPProxy !== 'undefined' && Jira.HTTPProxy !== '') {&eol;            request.setProxy(Jira.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ Jira Webhook ] Sending request: ' + url + ((typeof data === 'string') ? ('\n' + data) : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ Jira Webhook ] Received response with status code ' + request.getStatus() + '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ Jira Webhook ] Failed to parse response received from Jira');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null && typeof response.errors !== 'undefined'&eol;                && Object.keys(response.errors).length > 0) {&eol;                message += ': ' + JSON.stringify(response.errors);&eol;            }&eol;            else if (response !== null && typeof response.errorMessages !== 'undefined'&eol;                && Object.keys(response.errorMessages).length > 0) {&eol;                message += ': ' + JSON.stringify(response.errorMessages);&eol;            }&eol;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    },&eol;&eol;    getSchema: function() {&eol;        var result = Jira.request('get', 'issue/createmeta?expand=projects.issuetypes.fields&projectKeys=' +&eol;            encodeURIComponent(Jira.params.project_key) + '&issuetypeNames=' +&eol;            encodeURIComponent(Jira.params.issue_type));&eol;&eol;        return result.response;&eol;    },&eol;&eol;    createIssue: function(summary, description, fields) {&eol;        var data = {&eol;            fields: {&eol;                project: {&eol;                    key: Jira.params.project_key&eol;                },&eol;                issuetype: {&eol;                    name: Jira.params.issue_type&eol;                },&eol;                summary: summary,&eol;                description: description&eol;            }&eol;        };&eol;&eol;        if (Jira.labels && Jira.labels.length > 0) {&eol;            data.fields.labels = Jira.labels;&eol;        }&eol;        var result = Jira.request('post', 'issue', Jira.addCustomFields(data, fields));&eol;&eol;        if (typeof result.response !== 'object' &pipe;&pipe; typeof result.response.key === 'undefined') {&eol;            throw 'Cannot create Jira issue. Check debug log for more information.';&eol;        }&eol;&eol;        return result.response.key;&eol;    },&eol;&eol;    updateIssue: function(summary, fields, update) {&eol;        var data = {fields: {}};&eol;&eol;        if (summary) {&eol;            data.fields.summary = summary;&eol;        }&eol;&eol;        Jira.request('put', 'issue/' + encodeURIComponent(Jira.params.issue_key), Jira.addCustomFields(data, fields));&eol;        Jira.commentIssue(update);&eol;    },&eol;&eol;    commentIssue: function(update) {&eol;        var data = {};&eol;&eol;        if (typeof update === 'string') {&eol;            data.body = update;&eol;            Jira.request('post', 'issue/' + encodeURIComponent(Jira.params.issue_key) + '/comment', data);&eol;        }&eol;        else if (update.status === '1') {&eol;            data.body = update.user + ' ' + update.action + '.';&eol;&eol;            if (update.message) {&eol;                data.body += '\nMessage: {quote}' + Jira.escapeMarkup(update.message) + '{quote}';&eol;            }&eol;&eol;            Jira.request('post', 'issue/' + encodeURIComponent(Jira.params.issue_key) + '/comment', data);&eol;        }&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        fields = {},&eol;        jira = {},&eol;        update = {},&eol;        result = {tags: {}},&eol;        required_params = ['alert_subject', 'summary', 'event_recovery_value', 'event_source', 'event_value'];&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('jira_')) {&eol;                jira[key.substring(5)] = params[key];&eol;            }&eol;            else if (key.startsWith('customfield_')) {&eol;                fields[key] = params[key];&eol;            }&eol;            else if (key.startsWith('event_update_')) {&eol;                update[key.substring(13)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol;                throw 'Parameter "' + key + '" can\'t be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    Jira.setParams(jira);&eol;    Jira.setProxy(params.HTTPProxy);&eol;    Jira.setTags(params.event_tags_json);&eol;&eol;    // Create issue for non trigger-based events.&eol;    if (params.event_source !== '0' && params.event_recovery_value !== '0') {&eol;        Jira.createIssue(params.alert_subject, params.alert_message);&eol;    }&eol;    // Create issue for trigger-based events.&eol;    else if (params.event_value === '1' && update.status === '0' && !jira.issue_key.startsWith(jira.project_key)) {&eol;        var key = Jira.createIssue(params.alert_subject,&eol;            (Object.keys(fields).length ? params.trigger_description : params.alert_message), fields);&eol;&eol;&eol;        result.tags.__zbx_jira_issuekey = key;&eol;        result.tags.__zbx_jira_issuelink = params.jira_url +&eol;            (params.jira_url.endsWith('/') ? '' : '/') + 'browse/' + key;&eol;    }&eol;    // Update created issue for trigger-based event.&eol;    else {&eol;        if (!jira.issue_key.startsWith(jira.project_key)) {&eol;            throw 'Incorrect Issue key given: ' + jira.issue_key;&eol;        }&eol;        Jira.updateIssue(params.alert_subject, fields,&eol;            ((params.event_value === '0' && !Object.keys(fields).length)&eol;                ? params.alert_message : update));&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ Jira Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_jira_issuelink}     |Jira: {EVENT.TAGS.__zbx_jira_issuekey}                      |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |13         |4   |Jira with CustomFields  |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Jira = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        Jira.params = params;&eol;        if (typeof Jira.params.url === 'string') {&eol;            if (!Jira.params.url.endsWith('/')) {&eol;                Jira.params.url += '/';&eol;            }&eol;&eol;            Jira.params.url += 'rest/api/latest/';&eol;        }&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        Jira.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    setTags: function(event_tags_json) {&eol;        if (typeof event_tags_json !== 'undefined' && event_tags_json !== ''&eol;            && event_tags_json !== '{EVENT.TAGSJSON}') {&eol;            try {&eol;                var tags = JSON.parse(event_tags_json),&eol;                    label;&eol;&eol;                Jira.labels = [];&eol;&eol;                tags.forEach(function (tag) {&eol;                    if (typeof tag.tag !== 'undefined' && typeof tag.value !== 'undefined' ) {&eol;                        label = (tag.tag + (tag.value ? (':' + tag.value) : '')).replace(/\s/g, '_');&eol;                        if (label.length < 256) {&eol;                            Jira.labels.push(label);&eol;                        }&eol;                    }&eol;                });&eol;            }&eol;            catch (error) {&eol;                // Code is not missing here.&eol;            }&eol;        }&eol;    },&eol;&eol;    escapeMarkup: function (str) {&eol;        var length = str.length,&eol;            result = '',&eol;            markup = ['{', '&pipe;', '}', '~', '_', '\\', '[', ']', '^', '<', '>', '?', '!', '#', '+', '*', '&'];&eol;&eol;        for (var i = 0; i < length; i++) {&eol;            var char = str[i];&eol;&eol;            result += (markup.indexOf(char) !== -1) ? ('&#' + str[i].charCodeAt() + ';') : char;&eol;        }&eol;&eol;        return result;&eol;    },&eol;&eol;    addCustomFields: function (data, fields) {&eol;        if (typeof fields === 'object' && Object.keys(fields).length) {&eol;            var schema = Jira.getSchema(),&eol;                path = ['projects', 0, 'issuetypes', 0, 'fields'],&eol;                field;&eol;&eol;            while ((field = path.shift()) !== undefined) {&eol;                schema = schema[field];&eol;                if (typeof schema === 'undefined') {&eol;                    schema = null;&eol;                    break;&eol;                }&eol;            }&eol;&eol;            if (schema) {&eol;                Object.keys(fields)&eol;                    .forEach(function(field) {&eol;                        data.fields[field] = fields[field];&eol;&eol;                        if (typeof schema[field] === 'object' && typeof schema[field].schema === 'object'&eol;                            && (schema[field].schema.type === 'number' &pipe;&pipe; schema[field].schema.type === 'datetime')) {&eol;                            switch (schema[field].schema.type) {&eol;                                case 'number':&eol;                                    data.fields[field] = parseInt(fields[field]);&eol;                                    break;&eol;&eol;                                case 'datetime':&eol;                                    if (fields[field].match(/\d+[.-]\d+[.-]\d+T\d+:\d+:\d+/) !== null) {&eol;                                        data.fields[field] = fields[field].replace(/\./g, '-');&eol;                                    }&eol;                                    else {&eol;                                        delete data.fields[field];&eol;                                    }&eol;                                    break;&eol;                            }&eol;                        }&eol;                    });&eol;            }&eol;            else {&eol;                Zabbix.log(4, '[ Jira Webhook ] Failed to retrieve field schema.');&eol;            }&eol;        }&eol;&eol;        return data;&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        ['url', 'user', 'password', 'project_key', 'issue_type'].forEach(function (field) {&eol;            if (typeof Jira.params !== 'object' &pipe;&pipe; typeof Jira.params[field] === 'undefined'&eol;                &pipe;&pipe; Jira.params[field] === '' ) {&eol;                throw 'Required Jira param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = Jira.params.url + query,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('Authorization: Basic ' + btoa(Jira.params.user + ':' + Jira.params.password));&eol;&eol;        if (typeof Jira.HTTPProxy !== 'undefined' && Jira.HTTPProxy !== '') {&eol;            request.setProxy(Jira.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ Jira Webhook ] Sending request: ' + url + ((typeof data === 'string') ? ('\n' + data) : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ Jira Webhook ] Received response with status code ' + request.getStatus() + '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ Jira Webhook ] Failed to parse response received from Jira');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null && typeof response.errors !== 'undefined'&eol;                && Object.keys(response.errors).length > 0) {&eol;                message += ': ' + JSON.stringify(response.errors);&eol;            }&eol;            else if (response !== null && typeof response.errorMessages !== 'undefined'&eol;                && Object.keys(response.errorMessages).length > 0) {&eol;                message += ': ' + JSON.stringify(response.errorMessages);&eol;            }&eol;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    },&eol;&eol;    getSchema: function() {&eol;        var result = Jira.request('get', 'issue/createmeta?expand=projects.issuetypes.fields&projectKeys=' +&eol;                Jira.params.project_key + '&issuetypeNames=' + Jira.params.issue_type);&eol;&eol;        return result.response;&eol;    },&eol;&eol;    createIssue: function(summary, description, fields) {&eol;        var data = {&eol;            fields: {&eol;                project: {&eol;                    key: Jira.params.project_key&eol;                },&eol;                issuetype: {&eol;                    name: Jira.params.issue_type&eol;                },&eol;                summary: summary,&eol;                description: description&eol;            }&eol;        };&eol;&eol;        if (Jira.labels && Jira.labels.length > 0) {&eol;            data.fields.labels = Jira.labels;&eol;        }&eol;        var result = Jira.request('post', 'issue', Jira.addCustomFields(data, fields));&eol;&eol;        if (typeof result.response !== 'object' &pipe;&pipe; typeof result.response.key === 'undefined') {&eol;            throw 'Cannot create Jira issue. Check debug log for more information.';&eol;        }&eol;&eol;        return result.response.key;&eol;    },&eol;&eol;    updateIssue: function(summary, fields, update) {&eol;        var data = {fields: {}};&eol;&eol;        if (summary) {&eol;            data.fields.summary = summary;&eol;        }&eol;&eol;        Jira.request('put', 'issue/' + Jira.params.issue_key, Jira.addCustomFields(data, fields));&eol;        Jira.commentIssue(update);&eol;    },&eol;&eol;    commentIssue: function(update) {&eol;        var data = {};&eol;&eol;        if (typeof update === 'string') {&eol;            data.body = update;&eol;            Jira.request('post', 'issue/' + Jira.params.issue_key + '/comment', data);&eol;        }&eol;        else if (update.status === '1') {&eol;            data.body = update.user + ' ' + update.action + '.';&eol;&eol;            if (update.message) {&eol;                data.body += '\nMessage: {quote}' + Jira.escapeMarkup(update.message) + '{quote}';&eol;            }&eol;&eol;            Jira.request('post', 'issue/' + Jira.params.issue_key + '/comment', data);&eol;        }&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        fields = {},&eol;        jira = {},&eol;        update = {},&eol;        result = {tags: {}},&eol;        required_params = ['alert_subject', 'summary', 'event_recovery_value', 'event_source', 'event_value'];&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('jira_')) {&eol;                jira[key.substring(5)] = params[key];&eol;            }&eol;            else if (key.startsWith('customfield_')) {&eol;                fields[key] = params[key];&eol;            }&eol;            else if (key.startsWith('event_update_')) {&eol;                update[key.substring(13)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol;                throw 'Parameter "' + key + '" can\'t be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    Jira.setParams(jira);&eol;    Jira.setProxy(params.HTTPProxy);&eol;    Jira.setTags(params.event_tags_json);&eol;&eol;    // Create issue for non trigger-based events.&eol;    if (params.event_source !== '0' && params.event_recovery_value !== '0') {&eol;        Jira.createIssue(params.alert_subject, params.alert_message);&eol;    }&eol;    // Create issue for trigger-based events.&eol;    else if (params.event_value === '1' && update.status === '0' && !jira.issue_key.startsWith(jira.project_key)) {&eol;        var key = Jira.createIssue(params.alert_subject,&eol;            (Object.keys(fields).length ? params.trigger_description : params.alert_message), fields);&eol;&eol;&eol;        result.tags.__zbx_jira_issuekey = key;&eol;        result.tags.__zbx_jira_issuelink = params.jira_url +&eol;            (params.jira_url.endsWith('/') ? '' : '/') + 'browse/' + key;&eol;    }&eol;    // Update created issue for trigger-based event.&eol;    else {&eol;        if (!jira.issue_key.startsWith(jira.project_key)) {&eol;            throw 'Incorrect Issue key given: ' + jira.issue_key;&eol;        }&eol;        Jira.updateIssue(params.alert_subject, fields,&eol;            ((params.event_value === '0' && !Object.keys(fields).length)&eol;                ? params.alert_message : update));&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ Jira Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_jira_issuelink}     |Jira: {EVENT.TAGS.__zbx_jira_issuekey}                      |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |14         |4   |MS Teams                |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var SEVERITY_COLORS = [&eol;    '#97AAB3', // Not classified.&eol;    '#7499FF', // Information.&eol;    '#FFC859', // Warning.&eol;    '#FFA059', // Average.&eol;    '#E97659', // High.&eol;    '#E45959', // Disaster.&eol;    '#009900', // Resolved.&eol;    '#000000'  // Default.&eol;];&eol;&eol;try {&eol;    var params = JSON.parse(value);&eol;&eol;    if (typeof params.teams_endpoint !== 'string' &pipe;&pipe; params.teams_endpoint.trim() === '') {&eol;        throw 'Cannot get teams_endpoint';&eol;    }&eol;    else if (!params.teams_endpoint.startsWith('http')) {&eol;        throw 'Invalid MS Teams webhook URL: ' + params.teams_endpoint;&eol;    }&eol;&eol;    params.zabbix_url = (params.zabbix_url.endsWith('/'))&eol;        ? params.zabbix_url.slice(0, -1) : params.zabbix_url;&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: "' + params.event_source + '".\nMust be 0-3.';&eol;    }&eol;&eol;    // Set "use_default_message" to true for non trigger-based events.&eol;    if (params.event_source !== '0') {&eol;        params.use_default_message = 'true';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;            && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: "' + params.event_value + '".\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: "' + params.event_update_status + '".\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_value == 0) {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    if (!SEVERITY_COLORS[params.event_nseverity]) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    var request = new HttpRequest(),&eol;        facts = [],&eol;        body = {&eol;            themeColor: SEVERITY_COLORS[params.event_nseverity].replace('#', ''),&eol;            summary: params.alert_subject,&eol;            sections: [&eol;                {&eol;                    markdown: 'false',&eol;                    activityTitle: params.alert_subject,&eol;                    activitySubtitle: 'On ' + params.host_name + ' [' + params.host_ip + ']',&eol;                    text: (params.use_default_message.toLowerCase() == 'true')&eol;                        ? params.alert_message&eol;                        : params.trigger_description&eol;                }&eol;            ],&eol;            potentialAction: [&eol;                {&eol;                    '@type': 'OpenUri',&eol;                    name: (params.event_source === '0')&eol;                        ? 'Event Info'&eol;                        : 'Zabbix Home',&eol;                    targets: [&eol;                        {&eol;                            os: 'default',&eol;                            uri: (params.event_source === '0')&eol;                                ? params.zabbix_url + '/tr_events.php?triggerid=' +&eol;                                    params.trigger_id + '&eventid=' + params.event_id&eol;                                : params.zabbix_url&eol;                        }&eol;                    ]&eol;                }&eol;            ]&eol;        };&eol;&eol;    if (params.use_default_message.toLowerCase() !== 'true') {&eol;        // Problem message.&eol;        if (params.event_value === '1' && params.event_update_status === '0') {&eol;            facts.push({&eol;                name: 'Event time',&eol;                value: params.event_time + ' ' + params.event_date&eol;            });&eol;        }&eol;        // Update message.&eol;        else if (params.event_update_status === '1') {&eol;            body.sections[0].text = params.event_update_user + ' ' + params.event_update_action + '.';&eol;&eol;            if (params.event_update_message) {&eol;                body.sections[0].text += '<br>Message:<br>' + params.event_update_message;&eol;            }&eol;&eol;            facts.push({&eol;                name: 'Event update time',&eol;                value: params.event_update_time + ' ' + params.event_update_date&eol;            });&eol;        }&eol;        // Resolved message.&eol;        else {&eol;            facts.push({&eol;                name: 'Recovery time',&eol;                value: params.event_recovery_time + ' ' + params.event_recovery_date&eol;            });&eol;        }&eol;&eol;        if (params.event_severity && params.event_severity !== '{EVENT.SEVERITY}') {&eol;            facts.push({&eol;                name: 'Severity',&eol;                value: params.event_severity&eol;            });&eol;        }&eol;&eol;&eol;        if (params.event_opdata && params.event_opdata !== '{EVENT.OPDATA}') {&eol;            facts.push({&eol;                name: 'Operational data',&eol;                value: params.event_opdata&eol;            });&eol;        }&eol;&eol;        if (params.event_tags && params.event_tags !== '{EVENT.TAGS}') {&eol;            facts.push({&eol;                name: 'Event tags',&eol;                value: params.event_tags&eol;            });&eol;        }&eol;&eol;        Object.keys(params)&eol;            .forEach(function (key) {&eol;                if (key.startsWith('fact_') && params[key] !== '') {&eol;                    facts.push({&eol;                        name: key.substring(5),&eol;                        value: params[key]&eol;                    });&eol;                }&eol;                else if (key.startsWith('openUri_') && params[key] !== '' && !params[key].startsWith('{')) {&eol;                    body.potentialAction.push({&eol;                        '@type': 'OpenUri',&eol;                        name: key.substring(8),&eol;                        targets: [&eol;                            {&eol;                                os: 'default',&eol;                                uri: params[key]&eol;                            }&eol;                        ]&eol;                    });&eol;                }&eol;            });&eol;        body.sections[0].facts = facts;&eol;    }&eol;&eol;    body.sections[0].text = body.sections[0].text.replace(/(?:\r\n&pipe;\r&pipe;\n)/g, '<br>');&eol;&eol;    request.addHeader('Content-Type: application/json');&eol;&eol;    if (typeof params.HTTPProxy === 'string' && params.HTTPProxy !== '') {&eol;        request.setProxy(params.HTTPProxy);&eol;    }&eol;&eol;    Zabbix.log(4, '[ MS Teams Webhook ] JSON: ' + JSON.stringify(body));&eol;&eol;    var response = request.post(params.teams_endpoint, JSON.stringify(body));&eol;&eol;    Zabbix.log(4, '[ MS Teams Webhook ] Response: ' + response);&eol;&eol;    if (response === '1') {&eol;        return 'OK';&eol;    }&eol;    else {&eol;        Zabbix.log(4, '[ MS Teams Webhook ] FAILED with response: ' + response);&eol;        throw response;&eol;    }&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ MS Teams Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |0           |0              |                                      |                                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |15         |4   |Redmine                 |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Redmine = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        Redmine.params = params;&eol;        if (typeof Redmine.params.url === 'string') {&eol;            if (!Redmine.params.url.endsWith('/')) {&eol;                Redmine.params.url += '/';&eol;            }&eol;        }&eol;    },&eol;&eol;    addCustomFields: function (data, fields) {&eol;        if (typeof fields === 'object' && Object.keys(fields).length) {&eol;&eol;            data.issue.custom_fields = [];&eol;            Object.keys(fields)&eol;                .forEach(function (field) {&eol;                    var field_value = fields[field];&eol;&eol;                    if (field_value !== undefined) {&eol;                        data.issue.custom_fields.push({ id: field, value: field_value });&eol;                    }&eol;                });&eol;&eol;        }&eol;        return data;&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        ['url', 'access_key'].forEach(function (field) {&eol;            if (typeof Redmine.params !== 'object' &pipe;&pipe; typeof Redmine.params[field] === 'undefined'&eol;                &pipe;&pipe; Redmine.params[field] === '' ) {&eol;                throw 'Required param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = Redmine.params.url + query,&eol;            request = new HttpRequest();&eol;&eol;        if (typeof Redmine.HTTPProxy === 'string' && Redmine.HTTPProxy.trim() !== '') {&eol;            request.setProxy(Redmine.HTTPProxy);&eol;        }&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('X-Redmine-API-Key: ' + Redmine.params.access_key);&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ Redmine Webhook ] Sending request: ' +&eol;            url + ((typeof data === 'string') ? (' ' + data) : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ Redmine Webhook ] Received response with status code ' + request.getStatus() + ': ' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ Redmine Webhook ] Failed to parse response received from Redmine');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null && typeof response.errors !== 'undefined'&eol;                && Object.keys(response.errors).length > 0) {&eol;                message += ': ' + JSON.stringify(response.errors);&eol;            }&eol;            else if (response !== null && typeof response.errorMessages !== 'undefined'&eol;                && Object.keys(response.errorMessages).length > 0) {&eol;                message += ': ' + JSON.stringify(response.errorMessages);&eol;            }&eol;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    },&eol;&eol;    getProjectID: function(name) {&eol;        var result = Redmine.request('get', 'projects.json'),&eol;            project_id;&eol;&eol;        if (result.response) {&eol;            var projects = result.response.projects &pipe;&pipe; [];&eol;&eol;            for (var i in projects) {&eol;                if (projects[i].name === name) {&eol;                    project_id = projects[i].id;&eol;                    break;&eol;                }&eol;            }&eol;        }&eol;        else {&eol;            Zabbix.log(4, '[ Redmine Webhook ] Failed to retrieve project data.');&eol;        }&eol;&eol;        if (typeof project_id === 'undefined') {&eol;            throw 'Cannot find project with name: ' + name;&eol;        }&eol;&eol;        return project_id;&eol;    },&eol;&eol;    createIssue: function(subject, description, priority, fields) {&eol;        var project_id = /^\d+$/.test(Redmine.params.project)&eol;                ? Redmine.params.project&eol;                : Redmine.getProjectID(Redmine.params.project),&eol;            data = {&eol;                issue: {&eol;                    project_id: project_id,&eol;                    tracker_id: Redmine.params.tracker_id,&eol;                    subject: subject,&eol;                    description: description&eol;                }&eol;            },&eol;            result;&eol;&eol;        if (priority) {&eol;            data.issue.priority_id = priority;&eol;        }&eol;&eol;        result = Redmine.request('post', 'issues.json', Redmine.addCustomFields(data, fields));&eol;&eol;        if (typeof result.response !== 'object'&eol;            &pipe;&pipe; typeof result.response.issue.id === 'undefined'&eol;            &pipe;&pipe; result.status != 201) {&eol;            throw 'Cannot create Redmine issue. Check debug log for more information.';&eol;        }&eol;&eol;        return result.response.issue.id;&eol;    },&eol;&eol;    updateIssue: function (note, fields, status) {&eol;        var data = {&eol;            issue: {&eol;                notes: note &pipe;&pipe; ''&eol;            }&eol;        };&eol;&eol;        if (status) {&eol;            data.issue.status_id = status;&eol;        }&eol;&eol;        Redmine.request('put', 'issues/' + Redmine.params.issue_key + '.json', Redmine.addCustomFields(data, fields));&eol;    }&eol;&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        params_redmine = {},&eol;        params_fields = {},&eol;        params_update = {},&eol;        result = {tags: {}},&eol;        required_params = [&eol;            'alert_subject', 'tracker_id', 'project',&eol;            'event_source', 'event_value',  'event_update_status'&eol;        ],&eol;        severities = [&eol;            {name: 'not_classified', color: '#97AAB3'},&eol;            {name: 'information', color: '#7499FF'},&eol;            {name: 'warning', color: '#FFC859'},&eol;            {name: 'average', color: '#FFA059'},&eol;            {name: 'high', color: '#E97659'},&eol;            {name: 'disaster', color: '#E45959'},&eol;            {name: 'resolved', color: '#009900'},&eol;            {name: null, color: '#000000'}&eol;        ],&eol;        priority;&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('redmine_')) {&eol;                params_redmine[key.substring(8)] = params[key];&eol;            }&eol;            else if (key.startsWith('customfield_')) {&eol;                params_fields[key.substring(12)] = params[key];&eol;            }&eol;            else if (key.startsWith('event_update_')) {&eol;                params_update[key.substring(13)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key].trim() === '') {&eol;                throw 'Parameter "' + key + '" cannot be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_source === '0' && params.event_update_status !== '0' && params.event_update_status !== '1') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;&eol;    if (typeof params_redmine.close_status_id === 'string' && params_redmine.close_status_id.trim() !== '' && !parseInt(params_redmine.close_status_id, 10)) {&eol;        throw 'Incorrect "redmine_close_status_id" parameter given! Must be an integer.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    if (params.event_source === '0'&eol;        && ((params.event_value === '1' && params.event_update_status === '1')&eol;            &pipe;&pipe; (params.event_value === '0'&eol;                && (params.event_update_status === '0' &pipe;&pipe; params.event_update_status === '1')))&eol;        && (isNaN(parseInt(params.redmine_issue_key)) &pipe;&pipe; parseInt(params.redmine_issue_key) < 1 )) {&eol;        throw 'Incorrect "redmine_issue_key" parameter given: ' + params.redmine_issue_key +&eol;            '\nMust be positive integer.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    if (params.event_value === '0') {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    priority = params['severity_' + severities[params.event_nseverity].name];&eol;    priority = priority && priority.trim() &pipe;&pipe; severities[7].name;&eol;&eol;    Redmine.setParams(params_redmine);&eol;    Redmine.HTTPProxy = params.HTTPProxy;&eol;&eol;    // Create issue for non trigger-based events.&eol;    if (params.event_source !== '0'&eol;        && params.event_value !== '0') {&eol;        Redmine.createIssue(params.alert_subject, params.alert_message, priority);&eol;    }&eol;    // Create issue for trigger-based events.&eol;    else if (params.event_value === '1' && params_update.status === '0') {&eol;        var issue_id = Redmine.createIssue(params.alert_subject,&eol;            params.alert_subject + '\n' + params.alert_message + '\n' +&eol;            params.zabbix_url + (params.zabbix_url.endsWith('/') ? '' : '/') +&eol;            'tr_events.php?triggerid=' + params.trigger_id + '&eventid=' + params.event_id + '\n',&eol;            priority,&eol;            params_fields);&eol;&eol;        result.tags.__zbx_redmine_issue_id = issue_id;&eol;        result.tags.__zbx_redmine_issuelink = params.redmine_url +&eol;            (params.redmine_url.endsWith('/') ? '' : '/') + 'issues/' + issue_id;&eol;    }&eol;    // Close issue if parameter close_status_id is set and it is a recovery operation&eol;    else if (params.event_value === '0' && typeof params_redmine.close_status_id === 'string' && params_redmine.close_status_id.trim() !== '') {&eol;        Redmine.updateIssue(params.alert_subject + '\n' + params.alert_message, params_fields, params_redmine.close_status_id);&eol;    }&eol;    // Update created issue for trigger-based event.&eol;    else {&eol;        Redmine.updateIssue(params.alert_subject + '\n' + params.alert_message, params_fields);&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ Redmine Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_redmine_issuelink}  |Redmine: issue #{EVENT.TAGS.__zbx_redmine_issue_id}         |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |16         |4   |Telegram                |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Telegram = {&eol;    token: null,&eol;    to: null,&eol;    message: null,&eol;    proxy: null,&eol;    parse_mode: null,&eol;&eol;    escapeMarkup: function (str, mode) {&eol;        switch (mode) {&eol;            case 'markdown':&eol;                return str.replace(/([_*\[`])/g, '\\$&');&eol;&eol;            case 'markdownv2':&eol;                return str.replace(/([_*\[\]()~`>#+\-=&pipe;{}.!])/g, '\\$&');&eol;&eol;            default:&eol;                return str;&eol;        }&eol;    },&eol;&eol;    sendMessage: function () {&eol;        var params = {&eol;            chat_id: Telegram.to,&eol;            text: Telegram.message,&eol;            disable_web_page_preview: true,&eol;            disable_notification: false&eol;        },&eol;        data,&eol;        response,&eol;        request = new HttpRequest(),&eol;        url = 'https://api.telegram.org/bot' + Telegram.token + '/sendMessage';&eol;&eol;        if (Telegram.parse_mode !== null) {&eol;            params['parse_mode'] = Telegram.parse_mode;&eol;        }&eol;&eol;        if (Telegram.proxy) {&eol;            request.setProxy(Telegram.proxy);&eol;        }&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        data = JSON.stringify(params);&eol;&eol;        // Remove replace() function if you want to see the exposed token in the log file.&eol;        Zabbix.log(4, '[Telegram Webhook] URL: ' + url.replace(Telegram.token, '<TOKEN>'));&eol;        Zabbix.log(4, '[Telegram Webhook] params: ' + data);&eol;        response = request.post(url, data);&eol;        Zabbix.log(4, '[Telegram Webhook] HTTP code: ' + request.getStatus());&eol;&eol;        try {&eol;            response = JSON.parse(response);&eol;        }&eol;        catch (error) {&eol;            response = null;&eol;        }&eol;&eol;        if (request.getStatus() !== 200 &pipe;&pipe; typeof response.ok !== 'boolean' &pipe;&pipe; response.ok !== true) {&eol;            if (typeof response.description === 'string') {&eol;                throw response.description;&eol;            }&eol;            else {&eol;                throw 'Unknown error. Check debug log for more information.';&eol;            }&eol;        }&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value);&eol;&eol;    if (typeof params.Token === 'undefined') {&eol;        throw 'Incorrect value is given for parameter "Token": parameter is missing';&eol;    }&eol;&eol;    Telegram.token = params.Token;&eol;&eol;    if (params.HTTPProxy) {&eol;        Telegram.proxy = params.HTTPProxy;&eol;    } &eol;&eol;    params.ParseMode = params.ParseMode.toLowerCase();&eol;    &eol;    if (['markdown', 'html', 'markdownv2'].indexOf(params.ParseMode) !== -1) {&eol;        Telegram.parse_mode = params.ParseMode;&eol;    }&eol;&eol;    Telegram.to = params.To;&eol;    Telegram.message = params.Subject + '\n' + params.Message;&eol;&eol;    if (['markdown', 'markdownv2'].indexOf(params.ParseMode) !== -1) {&eol;        Telegram.message = Telegram.escapeMarkup(Telegram.message, params.ParseMode);&eol;    }&eol;&eol;    Telegram.sendMessage();&eol;&eol;    return 'OK';&eol;}&eol;catch (error) {&eol;    Zabbix.log(4, '[Telegram Webhook] notification failed: ' + error);&eol;    throw 'Sending failed: ' + error + '.';&eol;}|10s    |0           |0              |                                      |                                                            |https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram&eol;&eol;1. Register bot: send "/newbot" to @BotFather and follow instructions&eol;2. Copy and paste the obtained token into the "Token" field above&eol;3. If you want to send personal notifications, you need to get chat id of the user you want to send messages to:&eol;    3.1. Send "/getid" to "@myidbot" in Telegram messenger&eol;    3.2. Copy returned chat id and save it in the "Telegram Webhook" media for the user&eol;    3.3. Ask the user to send "/start" to your bot (Telegram bot won't send anything to the user without it)&eol;4. If you want to send group notifications, you need to get group id of the group you want to send messages to:&eol;    4.1. Add "@myidbot" to your group&eol;    4.2. Send "/getgroupid@myidbot" in your group&eol;    4.3. Copy returned group id save it in the "Telegram Webhook" media for the user you created for  group notifications&eol;    4.4. Send "/start@your_bot_name_here" in your group (Telegram bot won't send anything to the group without it)|
ROW   |17         |4   |Zendesk                 |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Zendesk = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        Zendesk.params = params;&eol;        if (typeof Zendesk.params.url === 'string') {&eol;            if (!Zendesk.params.url.endsWith('/')) {&eol;                Zendesk.params.url += '/';&eol;            }&eol;            Zendesk.params.url += 'api/v2/';&eol;        }&eol;    },&eol;&eol;    addCustomFields: function (data, fields) {&eol;        if (typeof fields === 'object' && Object.keys(fields).length) {&eol;            var schema = Zendesk.getSchema(),&eol;                arr = [],&eol;                i,&eol;                n;&eol;&eol;            if (schema) {&eol;                Object.keys(fields)&eol;                    .forEach(function(field) {&eol;                        for (i = 0, n = schema.ticket_fields.length; i < n; i++) {&eol;                            if (schema.ticket_fields[i].id == field&eol;                                && ['text', 'integer', 'date'].indexOf(schema.ticket_fields[i].type) !== -1){&eol;&eol;                                switch (schema.ticket_fields[i].type) {&eol;                                    case 'integer':&eol;                                        fields[field] = parseInt(fields[field]);&eol;                                        break;&eol;                                    case 'date':&eol;                                        if (fields[field].match(/^\d{4}[.-]\d{2}[.-]\d{2}$/) !== null) {&eol;                                            fields[field] = fields[field].replace(/\./g, '-');&eol;                                        }&eol;                                        else {&eol;                                            fields[field] = '';&eol;                                        }&eol;                                        break;&eol;                                }&eol;&eol;                                arr.push({id: field, value: fields[field]});&eol;                                break;&eol;                            }&eol;                        }&eol;                    });&eol;&eol;                if (arr.length) {&eol;                    data.ticket['custom_fields'] = arr;&eol;                }&eol;            }&eol;            else {&eol;                Zabbix.log(4, '[Zendesk Webhook] Failed to retrieve field schema.');&eol;            }&eol;        }&eol;&eol;        return data;&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        ['url', 'token', 'type'].forEach(function (field) {&eol;            if (typeof Zendesk.params !== 'object' &pipe;&pipe; typeof Zendesk.params[field] === 'undefined') {&eol;                throw 'Required Zendesk param is not set: ' + field + '\n' + Zendesk.params[field];&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = Zendesk.params.url + query,&eol;            request = new HttpRequest();&eol;&eol;        if (typeof Zendesk.HTTPProxy === 'string' && Zendesk.HTTPProxy.trim() !== '') {&eol;            request.setProxy(Zendesk.HTTPProxy);&eol;        }&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('Authorization: Basic ' + btoa(Zendesk.params.token));&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[Zendesk Webhook] Sending request: ' + url + ((typeof data === 'string') ? (' ' + data) : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[Zendesk Webhook] Received response with status code ' + request.getStatus() + '. ' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[Zendesk Webhook] Failed to parse response received from Zendesk.');&eol;            }&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null && typeof response.error !== 'undefined'&eol;                && Object.keys(response.error).length > 0) {&eol;                message += ': ' + JSON.stringify(response.error);&eol;            }&eol;            else if (response !== null && typeof response.description !== 'undefined'&eol;                && Object.keys(response.description).length > 0) {&eol;                message += ': ' + JSON.stringify(response.description);&eol;            }&eol;            else {&eol;                message += '. ' + response;&eol;            }&eol;            throw message + '. Check debug log for more information.';&eol;        }&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    },&eol;&eol;    getSchema: function() {&eol;        var result = Zendesk.request('get', 'ticket_fields.json');&eol;&eol;        return result.response;&eol;    },&eol;&eol;    createIssue: function(data, fields) {&eol;        var result = Zendesk.request('post', 'tickets.json', Zendesk.addCustomFields(data, fields));&eol;&eol;        if (typeof result.response !== 'object' &pipe;&pipe; typeof result.response.ticket.id === 'undefined'&eol;            &pipe;&pipe; result.status != 201) {&eol;            throw 'Cannot create Zendesk issue. Check debug log for more information.';&eol;        }&eol;&eol;        return result.response.ticket.id;&eol;    },&eol;&eol;    updateIssue: function(data, fields) {&eol;        Zendesk.request('put', 'tickets/' + Zendesk.params.issue_key + '.json', Zendesk.addCustomFields(data, fields));&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        fields = {},&eol;        zendesk = {},&eol;        update = {},&eol;        data = {},&eol;        result = {tags: {}},&eol;        required_params = [&eol;            'alert_subject',&eol;            'alert_message',&eol;            'event_id',&eol;            'event_source',&eol;            'event_value',&eol;            'event_update_status'&eol;        ],&eol;        severities = [&eol;            {name: 'not_classified', color: '#97AAB3'},&eol;            {name: 'information', color: '#7499FF'},&eol;            {name: 'warning', color: '#FFC859'},&eol;            {name: 'average', color: '#FFA059'},&eol;            {name: 'high', color: '#E97659'},&eol;            {name: 'disaster', color: '#E45959'},&eol;            {name: 'resolved', color: '#009900'},&eol;            {name: 'default', color: '#000000'}&eol;        ],&eol;        priority;&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('zendesk_')) {&eol;                zendesk[key.substring(8)] = params[key];&eol;            }&eol;            else if (key.startsWith('customfield_')) {&eol;                fields[key.substring(12)] = params[key];&eol;            }&eol;            else if (key.startsWith('event_update_')) {&eol;                update[key.substring(13)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key].trim() === '') {&eol;                throw 'Parameter ' + key + ' cannot be empty.';&eol;            }&eol;        });&eol;&eol;    // Possible values: question, incident, problems, task&eol;    if (['question', 'incident', 'problem', 'task'].indexOf(params.zendesk_type) === -1) {&eol;        throw 'Incorrect "zendesk_type" parameter given: ' + params.zendesk_type +&eol;            '\nMust be one of question, incident, problem, task.';&eol;    }&eol;&eol;    // Possible values: 0 - Trigger, 1 - Discovery, 2 - Autoregistration, 3 - Internal.&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    // Possible values: 1 for problem, 0 for recovering&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    // Possible values: 0 - Webhook was called because of problem/recovery event, 1 - Update operation.&eol;    if (params.event_source === '0' && params.event_update_status !== '0' && params.event_update_status !== '1') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    // Zendesk_issue_key must be a positive integer if an update action is being performed.&eol;    if (params.event_source === '0' && ((params.event_value === '1' && params.event_update_status === '1')&eol;        &pipe;&pipe; (params.event_value === '0' && (params.event_update_status === '0' &pipe;&pipe; params.event_update_status === '1')))&eol;        && (isNaN(parseInt(params.zendesk_issue_key)) &pipe;&pipe; parseInt(params.zendesk_issue_key) < 1 )) {&eol;        throw 'Incorrect "zendesk_issue_key" parameter given: ' + params.zendesk_issue_key +&eol;            '\nMust be positive integer.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    if (params.event_value === '0') {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    priority = params['severity_' + severities[params.event_nseverity].name] &pipe;&pipe; severities[7].name;&eol;&eol;    Zendesk.setParams(zendesk);&eol;    Zendesk.HTTPProxy = params.HTTPProxy;&eol;&eol;    // Create issue for non trigger-based events.&eol;    if (params.event_source !== '0' && params.event_value !== '0') {&eol;        data = {&eol;            ticket: {&eol;                external_id: params.event_id,&eol;                type: Zendesk.params.type,&eol;                status: 'new',&eol;                subject: params.alert_subject,&eol;                comment: {&eol;                    body: params.alert_message,&eol;                    public: 'false'&eol;                },&eol;                priority: priority,&eol;                tags: params.event_tags&eol;            }&eol;        };&eol;&eol;        Zendesk.createIssue(data, fields);&eol;    }&eol;    // Create issue for trigger-based events.&eol;    else if (params.event_value === '1' && update.status === '0') {&eol;        data = {&eol;            ticket: {&eol;                external_id: params.event_id,&eol;                type: Zendesk.params.type,&eol;                status: 'new',&eol;                subject: params.alert_subject,&eol;                comment: {&eol;                    body: params.zbxurl + (params.zbxurl.endsWith('/') ? '' : '/') + 'tr_events.php?triggerid=' +&eol;                        params.trigger_id + '&eventid=' + params.event_id + '\n' + params.alert_message,&eol;                    public: 'false'&eol;                },&eol;                priority: priority,&eol;                tags: params.event_tags&eol;            }&eol;        };&eol;        var key = Zendesk.createIssue(data, fields);&eol;&eol;        result.tags.__zbx_zdk_issuekey = key;&eol;        result.tags.__zbx_zdk_issuelink = params.zendesk_url +&eol;            (params.zendesk_url.endsWith('/') ? '' : '/') + 'agent/tickets/' + key;&eol;    }&eol;    // Update created issue for trigger-based event.&eol;    else {&eol;        data = {&eol;            ticket: {&eol;                type: Zendesk.params.type,&eol;                subject: params.alert_subject,&eol;                comment: {&eol;                    body: params.alert_message,&eol;                    public: 'false'&eol;                }&eol;            }&eol;        };&eol;&eol;        Zendesk.updateIssue(data, fields);&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[Zendesk Webhook] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_zdk_issuelink}      |Zendesk: {EVENT.TAGS.__zbx_zdk_issuekey}                    |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |18         |4   |ServiceNow              |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var ServiceNow = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        ServiceNow.params = params;&eol;        if (typeof ServiceNow.params.url === 'string') {&eol;            if (!ServiceNow.params.url.endsWith('/')) {&eol;                ServiceNow.params.url += '/';&eol;            }&eol;&eol;            ServiceNow.params.url += 'api/now/table/incident';&eol;        }&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        ServiceNow.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    setFields: function (data, fields) {&eol;        if (typeof fields === 'object' && Object.keys(fields).length) {&eol;            Object.keys(fields)&eol;                .forEach(function(field) {&eol;                    data[field] = (fields[field].match(/^\d{4}\.\d{2}\.\d{2}$/) !== null)&eol;                        ? fields[field].replace(/\./g, '-')&eol;                        : fields[field];&eol;                });&eol;        }&eol;    },&eol;&eol;    request: function (method, data) {&eol;        ['url', 'user', 'password'].forEach(function (field) {&eol;            if (typeof ServiceNow.params !== 'object' &pipe;&pipe; typeof ServiceNow.params[field] === 'undefined'&eol;                &pipe;&pipe; ServiceNow.params[field] === '' ) {&eol;                throw 'Required ServiceNow param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = ServiceNow.params.url,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('Authorization: Basic ' + btoa(ServiceNow.params.user + ':' + ServiceNow.params.password));&eol;&eol;        if (typeof ServiceNow.HTTPProxy !== 'undefined' && ServiceNow.HTTPProxy !== '') {&eol;            request.setProxy(ServiceNow.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ ServiceNow Webhook ] Sending request: ' + url + ((typeof data === 'string')&eol;            ? ('\n' + data)&eol;            : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ ServiceNow Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ ServiceNow Webhook ] Failed to parse response received from ServiceNow');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null && typeof response.error.message !== 'undefined'&eol;                && Object.keys(response.error).length > 0) {&eol;                message += ': ' + JSON.stringify(response.error.message);&eol;            }&eol;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;        else if (typeof response.result !== 'object' &pipe;&pipe; typeof response.result.sys_id === 'undefined') {&eol;            throw 'Cannot create ServiceNow incident. Check debug log for more information.';&eol;        }&eol;&eol;        return response.result;&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        fields = {},&eol;        servicenow = {},&eol;        data = {},&eol;        result = {tags: {}},&eol;        required_params = [&eol;            'alert_subject', 'alert_message', 'event_source', 'event_value',&eol;            'event_update_status', 'event_recovery_value', 'event_nseverity'&eol;        ],&eol;        severities = [&eol;            {name: 'not_classified', color: '#97AAB3'},&eol;            {name: 'information', color: '#7499FF'},&eol;            {name: 'warning', color: '#FFC859'},&eol;            {name: 'average', color: '#FFA059'},&eol;            {name: 'high', color: '#E97659'},&eol;            {name: 'disaster', color: '#E45959'},&eol;            {name: 'resolved', color: '#009900'},&eol;            {name: 'default', color: '#000000'}&eol;        ],&eol;        method = 'post',&eol;        process_tags = true;&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('servicenow_')) {&eol;                servicenow[key.substring(11)] = params[key];&eol;            }&eol;            else if (key.startsWith('u_')) {&eol;                fields[key] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol;                throw 'Parameter "' + key + '" can\'t be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    data.short_description = params.alert_subject;&eol;    data.description = params.alert_message;&eol;    data.comments = params.alert_message;&eol;&eol;    if (typeof params['urgency_for_' + severities[params.event_nseverity].name] !== 'undefined') {&eol;        data.urgency = params['urgency_for_' + severities[params.event_nseverity].name];&eol;    }&eol;&eol;    ServiceNow.setParams(servicenow);&eol;    ServiceNow.setProxy(params.HTTPProxy);&eol;    ServiceNow.setFields(data, fields);&eol;&eol;    if (params.event_source === '0' && (params.event_value === '0' &pipe;&pipe; params.event_update_status === '1')) {&eol;        process_tags = false;&eol;        method = 'put';&eol;        delete data.description;&eol;        delete data.urgency;&eol;        ServiceNow.params.url += '/' + params.servicenow_sys_id;&eol;    }&eol;&eol;    var response = ServiceNow.request(method, data);&eol;&eol;    if (process_tags) {&eol;        result.tags.__zbx_servicenow_sys_id = response.sys_id;&eol;        result.tags.__zbx_servicenow_link = params.servicenow_url +&eol;            (params.servicenow_url.endsWith('/') ? '' : '/') + 'incident.do?sys_id=' + response.sys_id;&eol;        result.tags.__zbx_servicenow_number = response.number;&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ ServiceNow Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_servicenow_link}    |ServiceNow: {EVENT.TAGS.__zbx_servicenow_number}            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |19         |4   |Zammad                  |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Zammad = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        Zammad.params = params;&eol;        if (typeof Zammad.params.url === 'string') {&eol;            if (!Zammad.params.url.endsWith('/')) {&eol;                Zammad.params.url += '/';&eol;            }&eol;        }&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        ['url', 'access_token'].forEach(function (field) {&eol;            if (typeof Zammad.params !== 'object' &pipe;&pipe; typeof Zammad.params[field] === 'undefined'&eol;                &pipe;&pipe; Zammad.params[field] === '' ) {&eol;                throw 'Required param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = Zammad.params.url + query,&eol;            request = new HttpRequest();&eol;&eol;        if (typeof Zammad.HTTPProxy === 'string' && Zammad.HTTPProxy.trim() !== '') {&eol;            request.setProxy(Zammad.HTTPProxy);&eol;        }&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('Authorization: Token token=' + Zammad.params.access_token);&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ Zammad Webhook ] Sending request: ' +&eol;            url + ((typeof data === 'string') ? (' ' + data) : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ Zammad Webhook ] Received response with status code ' + request.getStatus() + ': ' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ Zammad Webhook ] Failed to parse response received from Zammad');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null && typeof response.errors !== 'undefined'&eol;                && Object.keys(response.errors).length > 0) {&eol;                message += ': ' + JSON.stringify(response.errors);&eol;            }&eol;            else if (response !== null && typeof response.errorMessages !== 'undefined'&eol;                && Object.keys(response.errorMessages).length > 0) {&eol;                message += ': ' + JSON.stringify(response.errorMessages);&eol;            }&eol;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    },&eol;&eol;    setTicketTags: function (tags, ticket_id) {&eol;        var data = {&eol;            item: '',&eol;            object: 'Ticket',&eol;            o_id: ticket_id&eol;        };&eol;&eol;        try {&eol;            var tags_json = JSON.parse(tags),&eol;                result;&eol;&eol;            for (var i in tags_json) {&eol;&eol;                if (tags_json[i].value) {&eol;                    data.item = tags_json[i].tag + ": " + tags_json[i].value;&eol;                } else {&eol;                    data.item = tags_json[i].tag;&eol;                }&eol;                result = Zammad.request('post', 'api/v1/tags/add', data);&eol;&eol;                if (typeof result.response !== 'object' &pipe;&pipe; result.status != 200) {&eol;                    Zabbix.log(4, '[ Zammad Webhook ] Cannot add ticket tag:' + tags_json[i].tag);&eol;                }&eol;            }&eol;        }&eol;        catch (error) {&eol;            Zabbix.log(4, '[ Zammad Webhook ] Failed to add ticket tags:' + error);&eol;        }&eol;&eol;        return;&eol;    },&eol;&eol;    createTicket: function(subject, message, priority) {&eol;        var data = {&eol;                title: subject,&eol;                group: 'Users',&eol;                article: {&eol;                    subject: subject,&eol;                    body: message,&eol;                    type: 'note',&eol;                    internal: false&eol;                },&eol;                customer: Zammad.params.customer&eol;            },&eol;            result;&eol;&eol;        if (priority) {&eol;            data.priority_id = priority;&eol;        }&eol;&eol;        result = Zammad.request('post', 'api/v1/tickets', data);&eol;&eol;        if (typeof result.response !== 'object'&eol;            &pipe;&pipe; typeof result.response.id === 'undefined'&eol;            &pipe;&pipe; result.status != 201) {&eol;            throw 'Cannot create Zammad ticket. Check debug log for more information.';&eol;        }&eol;&eol;        return result.response.id;&eol;    },&eol;&eol;    updateTicket: function(subject, message) {&eol;        var data = {&eol;            ticket_id: Zammad.params.ticket_id,&eol;            subject: subject,&eol;            body: message &pipe;&pipe; '',&eol;            type: 'note',&eol;            internal: false&eol;        };&eol;&eol;        result = Zammad.request('post', 'api/v1/ticket_articles', data);&eol;&eol;        if (typeof result.response !== 'object'&eol;            &pipe;&pipe; typeof result.response.id === 'undefined'&eol;            &pipe;&pipe; result.status != 201) {&eol;            throw 'Cannot update Zammad ticket. Check debug log for more information.';&eol;        }&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        params_zammad = {},&eol;        params_update = {},&eol;        result = {tags: {}},&eol;        required_params = [&eol;            'alert_subject', 'customer',&eol;            'event_source', 'event_value',&eol;            'event_update_status'&eol;        ],&eol;        severities = [&eol;            {name: 'not_classified', color: '#97AAB3'},&eol;            {name: 'information', color: '#7499FF'},&eol;            {name: 'warning', color: '#FFC859'},&eol;            {name: 'average', color: '#FFA059'},&eol;            {name: 'high', color: '#E97659'},&eol;            {name: 'disaster', color: '#E45959'},&eol;            {name: 'resolved', color: '#009900'},&eol;            {name: null, color: '#000000'}&eol;        ],&eol;        priority;&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('zammad_')) {&eol;                params_zammad[key.substring(7)] = params[key].trim();&eol;            }&eol;            else if (key.startsWith('event_update_')) {&eol;                params_update[key.substring(13)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key].trim() === '') {&eol;                throw 'Parameter "' + key + '" cannot be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_source === '0' && params.event_update_status !== '0' && params.event_update_status !== '1') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    if (params.event_source === '0'&eol;        && ((params.event_value === '1' && params.event_update_status === '1')&eol;            &pipe;&pipe; (params.event_value === '0'&eol;                && (params.event_update_status === '0' &pipe;&pipe; params.event_update_status === '1')))&eol;        && (isNaN(parseInt(params.zammad_ticket_id)) &pipe;&pipe; parseInt(params.zammad_ticket_id) < 1 )) {&eol;        throw 'Incorrect "zammad_ticket_id" parameter given: ' + params.zammad_ticket_id +&eol;            '\nMust be positive integer.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    if (params.event_value === '0') {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    priority = params['severity_' + severities[params.event_nseverity].name];&eol;    priority = priority && priority.trim() &pipe;&pipe; severities[7].name;&eol;&eol;    Zammad.setParams(params_zammad);&eol;    Zammad.HTTPProxy = params.HTTPProxy;&eol;&eol;    // Create ticket for non trigger-based events.&eol;    if (params.event_source !== '0'&eol;        && params.event_value !== '0') {&eol;        Zammad.createTicket(params.alert_subject, params.alert_message, priority, params.event_tags);&eol;    }&eol;    // Create ticket for trigger-based events.&eol;    else if (params.event_value === '1' && params_update.status === '0') {&eol;        var ticket_id = Zammad.createTicket(params.alert_subject,&eol;            params.alert_subject + '\n' + params.alert_message + '\n' +&eol;            params.zabbix_url + (params.zabbix_url.endsWith('/') ? '' : '/') +&eol;            'tr_events.php?triggerid=' + params.trigger_id + '&eventid=' + params.event_id + '\n',&eol;            priority);&eol;&eol;        result.tags.__zbx_zammad_ticket_id = ticket_id;&eol;        result.tags.__zbx_zammad_ticketlink = params.zammad_url +&eol;            (params.zammad_url.endsWith('/') ? '' : '/') + '#ticket/zoom/' + ticket_id;&eol;&eol;        if (Zammad.params.enable_tags.toLowerCase() === 'true') {&eol;            Zammad.setTicketTags(params.event_tags, ticket_id);&eol;        }&eol;    }&eol;    // Update created ticket for trigger-based event.&eol;    else {&eol;        Zammad.updateTicket(params.alert_subject, params.alert_message);&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ Zammad Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_zammad_ticketlink}  |Zammad: ticket #{EVENT.TAGS.__zbx_zammad_ticket_id}         |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |20         |4   |Jira ServiceDesk        |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Jira = {&eol;    params: {},&eol;    schema: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        Jira.params = params;&eol;        if (typeof Jira.params.url === 'string') {&eol;            if (!Jira.params.url.endsWith('/')) {&eol;                Jira.params.url += '/';&eol;            }&eol;&eol;            Jira.params.url += 'rest/servicedeskapi/';&eol;        }&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        Jira.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    setTags: function(event_tags_json) {&eol;        if (!Jira.schema) {&eol;            Zabbix.log(4, '[ Jira Service Desk Webhook ] Cannot add labels because failed to retrieve field schema.');&eol;&eol;            return;&eol;        }&eol;&eol;        var block = Jira.schema.requestTypeFields.filter(function(object) {&eol;            return object.fieldId == 'labels';&eol;        });&eol;&eol;        if (block[0] && typeof event_tags_json !== 'undefined' && event_tags_json !== ''&eol;            && event_tags_json !== '{EVENT.TAGSJSON}') {&eol;            try {&eol;                var tags = JSON.parse(event_tags_json),&eol;                    label;&eol;&eol;                Jira.labels = [];&eol;&eol;                tags.forEach(function (tag) {&eol;                    if (typeof tag.tag !== 'undefined' && typeof tag.value !== 'undefined' ) {&eol;                        label = (tag.tag + (tag.value ? (':' + tag.value) : '')).replace(/\s/g, '_');&eol;                        if (label.length < 255) {&eol;                            Jira.labels.push(label);&eol;                        }&eol;                    }&eol;                });&eol;            }&eol;            catch (error) {&eol;                // Code is not missing here.&eol;            }&eol;        }&eol;    },&eol;&eol;    addCustomFields: function (data, fields) {&eol;        if (typeof fields === 'object' && Object.keys(fields).length) {&eol;            if (Jira.schema) {&eol;                Object.keys(fields)&eol;                    .forEach(function(field) {&eol;                        data.requestFieldValues[field] = fields[field];&eol;&eol;                        var block = Jira.schema.requestTypeFields.filter(function(object) {&eol;                            return object.fieldId == field;&eol;                        });&eol;&eol;                        if (typeof block[0] === 'object' && typeof block[0].jiraSchema === 'object'&eol;                            && (block[0].jiraSchema.type === 'number' &pipe;&pipe; block[0].jiraSchema.type === 'datetime')) {&eol;                            switch (block[0].jiraSchema.type) {&eol;                                case 'number':&eol;                                    data.requestFieldValues[field] = parseInt(fields[field]);&eol;                                    break;&eol;&eol;                                case 'datetime':&eol;                                    if (fields[field].match(/\d+[.-]\d+[.-]\d+T\d+:\d+:\d+/) !== null) {&eol;                                        data.requestFieldValues[field] = fields[field].replace(/\./g, '-');&eol;                                    }&eol;                                    else {&eol;                                        delete data.requestFieldValues[field];&eol;                                    }&eol;                                    break;&eol;                            }&eol;                        }&eol;                    });&eol;            }&eol;            else {&eol;                Zabbix.log(4, '[ Jira Service Desk Webhook ] Cannot add custom fields' +&eol;                    'because failed to retrieve field schema.');&eol;            }&eol;        }&eol;&eol;        return data;&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        ['url', 'user', 'password', 'servicedesk_id', 'request_type_id'].forEach(function (field) {&eol;            if (typeof Jira.params !== 'object' &pipe;&pipe; typeof Jira.params[field] === 'undefined'&eol;                &pipe;&pipe; Jira.params[field] === '' ) {&eol;                throw 'Required Jira param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = Jira.params.url + query,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('Authorization: Basic ' + btoa(Jira.params.user + ':' + Jira.params.password));&eol;        request.addHeader('X-ExperimentalApi: opt-in');&eol;&eol;        if (typeof Jira.HTTPProxy !== 'undefined' && Jira.HTTPProxy !== '') {&eol;            request.setProxy(Jira.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ Jira Service Desk Webhook ] Sending request: ' + url +&eol;            ((typeof data === 'string') ? ('\n' + data) : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ Jira Service Desk Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ Jira Service Desk Webhook ] Failed to parse response received from Jira');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null && typeof response.errors !== 'undefined'&eol;                && Object.keys(response.errors).length > 0) {&eol;                message += ': ' + JSON.stringify(response.errors);&eol;            }&eol;            else if (response !== null && typeof response.errorMessage !== 'undefined'&eol;                && Object.keys(response.errorMessage).length > 0) {&eol;                message += ': ' + JSON.stringify(response.errorMessage);&eol;            }&eol;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    },&eol;&eol;    getSchema: function() {&eol;        var result = Jira.request('get', 'servicedesk/' + Jira.params.servicedesk_id + '/requesttype/' +&eol;            Jira.params.request_type_id + '/field');&eol;&eol;        if (typeof Jira.schema !== 'object' && typeof Jira.schema.requestTypeFields !== 'object') {&eol;            Jira.schema = null;&eol;        }&eol;        else {&eol;            Jira.schema = result.response;&eol;        }&eol;    },&eol;&eol;    createRequest: function(summary, description, fields) {&eol;        var data = {&eol;            serviceDeskId: Jira.params.servicedesk_id,&eol;            requestTypeId: Jira.params.request_type_id,&eol;            requestFieldValues: {&eol;                summary: summary,&eol;                description: description&eol;            }&eol;        };&eol;&eol;        if (Jira.labels && Jira.labels.length > 0) {&eol;            data.requestFieldValues.labels = Jira.labels;&eol;        }&eol;        var result = Jira.request('post', 'request', Jira.addCustomFields(data, fields));&eol;&eol;        if (typeof result.response !== 'object' &pipe;&pipe; typeof result.response.issueKey === 'undefined') {&eol;            throw 'Cannot create Jira request. Check debug log for more information.';&eol;        }&eol;&eol;        return result.response.issueKey;&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        fields = {},&eol;        jira = {},&eol;        comment = {public: true},&eol;        result = {tags: {}},&eol;        required_params = [&eol;            'alert_subject', 'alert_message', 'event_source', 'event_value',&eol;            'event_update_status', 'event_recovery_value'&eol;        ];&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('jira_')) {&eol;                jira[key.substring(5)] = params[key];&eol;            }&eol;            else if (key.startsWith('customfield_')) {&eol;                fields[key] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol;                throw 'Parameter "' + key + '" cannot be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    Jira.setParams(jira);&eol;    Jira.setProxy(params.HTTPProxy);&eol;    Jira.getSchema();&eol;    Jira.setTags(params.event_tags_json);&eol;&eol;    // Create request for non trigger-based events.&eol;    if (params.event_source !== '0' && params.event_recovery_value !== '0') {&eol;        Jira.createRequest(params.alert_subject, params.alert_message);&eol;    }&eol;    // Create request for trigger-based events.&eol;    else if (params.event_value === '1' && params.event_update_status === '0'&eol;        && jira.request_key === '{EVENT.TAGS.__zbx_jira_requestkey}') {&eol;        var key = Jira.createRequest(params.alert_subject, params.alert_message, fields);&eol;&eol;        result.tags.__zbx_jira_requestkey = key;&eol;        result.tags.__zbx_jira_requestlink = params.jira_url +&eol;            (params.jira_url.endsWith('/') ? '' : '/') + 'browse/' + key;&eol;    }&eol;    // Comment created request for trigger-based event.&eol;    else {&eol;        if (jira.request_key === '{EVENT.TAGS.__zbx_jira_requestkey}' &pipe;&pipe; jira.request_key.trim() === '') {&eol;            throw 'Incorrect Request key given: ' + jira.request_key;&eol;        }&eol;        comment.body = params.alert_message;&eol;        Jira.request('post', 'request/' + Jira.params.request_key + '/comment', comment);&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ Jira Service Desk Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_jira_requestlink}   |Jira ServiceDesk: {EVENT.TAGS.__zbx_jira_requestkey}        |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |21         |4   |OTRS                    |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var OTRS = {&eol;    params: {},&eol;    entrypoint: 'nph-genericinterface.pl/Webservice/ZabbixTicketConnector/Ticket',&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        OTRS.params = params;&eol;        if (typeof OTRS.params.url === 'string') {&eol;            if (!OTRS.params.url.endsWith('/')) {&eol;                OTRS.params.url += '/';&eol;            }&eol;        }&eol;    },&eol;&eol;    addDynamicFields: function (data, fields) {&eol;        if (typeof fields === 'object' && Object.keys(fields).length) {&eol;            data.DynamicField = [];&eol;&eol;            Object.keys(fields)&eol;                .forEach(function(field) {&eol;                    if (field !== undefined) {&eol;                        if (fields[field].match(/^\d{4}[.-]\d{2}[.-]\d{2}$/)) {&eol;                            fields[field] = fields[field].replace(/\./g, '-');&eol;                        }&eol;&eol;                        data.DynamicField.push({Name: field, Value: fields[field]});&eol;                    }&eol;                });&eol;        }&eol;&eol;        return data;&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        ['url', 'auth_user', 'auth_password', 'queue',&eol;            'customer', 'ticket_state', 'default_priority_id', 'time_unit'].forEach(function (field) {&eol;            if (typeof OTRS.params !== 'object' &pipe;&pipe; typeof OTRS.params[field] === 'undefined'&eol;                &pipe;&pipe; OTRS.params[field] === '' ) {&eol;                throw 'Required param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            request = new HttpRequest(),&eol;            url = OTRS.params.url + query +&eol;                '?UserLogin=' + encodeURIComponent(OTRS.params.auth_user) +&eol;                '&Password=' + encodeURIComponent(OTRS.params.auth_password);&eol;&eol;        if (typeof OTRS.HTTPProxy !== 'undefined' && OTRS.HTTPProxy.trim() !== '') {&eol;            request.setProxy(OTRS.HTTPProxy);&eol;        }&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ OTRS Webhook ] Sending request: ' +&eol;            url + ((typeof data === 'string') ? (' ' + data) : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ OTRS Webhook ] Received response with status code ' + request.getStatus() + ': ' + response);&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            message += ': ' + response;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ OTRS Webhook ] Failed to parse response received from OTRS');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (typeof response.Error !== 'undefined'&eol;            && Object.keys(response.Error).length > 0) {&eol;            message = 'Request failed: ' + JSON.stringify(response.Error);&eol;        }&eol;&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    },&eol;&eol;    createTicket: function(subject, message, priority, fields) {&eol;        var result,&eol;            data = {&eol;                Ticket: {&eol;                    Title: subject,&eol;                    Queue: OTRS.params.queue,&eol;                    State: OTRS.params.ticket_state,&eol;                    PriorityID: priority &pipe;&pipe; OTRS.params.default_priority_id,&eol;                    CustomerUser: OTRS.params.customer&eol;                },&eol;                Article: {&eol;                    Subject: subject,&eol;                    Body: message,&eol;                    TimeUnit: OTRS.params.time_unit,&eol;                    ContentType: 'text/plain; charset=utf8'&eol;                }&eol;            };&eol;&eol;        result = OTRS.request('post', OTRS.entrypoint, OTRS.addDynamicFields(data, fields));&eol;&eol;        if (typeof result.response !== 'object'&eol;            &pipe;&pipe; typeof result.response.TicketID === 'undefined'&eol;            &pipe;&pipe; result.status != 200) {&eol;            throw 'Cannot create OTRS ticket. Check debug log for more information.';&eol;        }&eol;&eol;        return result.response.TicketID;&eol;    },&eol;&eol;    updateTicket: function(subject, message) {&eol;        var result,&eol;            data = {&eol;                Article: {&eol;                    Subject: subject,&eol;                    Body: message &pipe;&pipe; '',&eol;                    TimeUnit: OTRS.params.time_unit,&eol;                    ContentType: 'text/plain; charset=utf8'&eol;                }&eol;            };&eol;&eol;        result = OTRS.request('put', OTRS.entrypoint + '/' + encodeURIComponent(OTRS.params.ticket_id), data);&eol;&eol;        if (typeof result.response !== 'object'&eol;            &pipe;&pipe; typeof result.response.TicketID === 'undefined'&eol;            &pipe;&pipe; result.status != 200) {&eol;            throw 'Cannot update OTRS ticket. Check debug log for more information.';&eol;        }&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        params_otrs = {},&eol;        params_fields = {},&eol;        params_update = {},&eol;        result = {tags: {}},&eol;        required_params = [&eol;            'alert_subject', 'event_source',&eol;            'event_value',  'event_update_status'&eol;        ],&eol;        severities = [&eol;            {name: 'not_classified', color: '#97AAB3'},&eol;            {name: 'information', color: '#7499FF'},&eol;            {name: 'warning', color: '#FFC859'},&eol;            {name: 'average', color: '#FFA059'},&eol;            {name: 'high', color: '#E97659'},&eol;            {name: 'disaster', color: '#E45959'},&eol;            {name: 'resolved', color: '#009900'},&eol;            {name: null, color: '#000000'}&eol;        ],&eol;        priority;&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('otrs_')) {&eol;                params_otrs[key.substring(5)] = params[key];&eol;            }&eol;            else if (key.startsWith('dynamicfield_')) {&eol;                params_fields[key.substring(13)] = params[key];&eol;            }&eol;            else if (key.startsWith('event_update_')) {&eol;                params_update[key.substring(13)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key].trim() === '') {&eol;                throw 'Parameter "' + key + '" cannot be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_source === '0' && params.event_update_status !== '0' && params.event_update_status !== '1') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    if (params.event_source === '0'&eol;        && ((params.event_value === '1' && params.event_update_status === '1')&eol;            &pipe;&pipe; (params.event_value === '0'&eol;                && (params.event_update_status === '0' &pipe;&pipe; params.event_update_status === '1')))&eol;        && (isNaN(parseInt(params.otrs_ticket_id)) &pipe;&pipe; parseInt(params.otrs_ticket_id) < 1 )) {&eol;        throw 'Incorrect "otrs_ticket_id" parameter given: ' + params.otrs_ticket_id +&eol;            '\nMust be positive integer.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    if (params.event_value === '0') {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    priority = params['severity_' + severities[params.event_nseverity].name];&eol;    priority = priority && priority.trim() &pipe;&pipe; severities[7].name;&eol;&eol;    OTRS.setParams(params_otrs);&eol;    OTRS.HTTPProxy = params.HTTPProxy;&eol;&eol;    // Create ticket for non trigger-based events.&eol;    if (params.event_source !== '0'&eol;        && params.event_value !== '0') {&eol;        OTRS.createTicket(params.alert_subject, params.alert_message, priority);&eol;    }&eol;    // Create ticket for trigger-based events.&eol;    else if (params.event_value === '1' && params_update.status === '0') {&eol;        var ticket_id = OTRS.createTicket(params.alert_subject,&eol;            params.alert_subject + '\n' + params.alert_message + '\n' +&eol;            params.zabbix_url + (params.zabbix_url.endsWith('/') ? '' : '/') +&eol;            'tr_events.php?triggerid=' + params.trigger_id + '&eventid=' + params.event_id + '\n',&eol;            priority,&eol;            params_fields);&eol;&eol;        result.tags.__zbx_otrs_ticket_id = ticket_id;&eol;        result.tags.__zbx_otrs_ticketlink = params.otrs_url +&eol;            (params.otrs_url.endsWith('/') ? '' : '/') + 'index.pl?Action=AgentTicketZoom;TicketID=' + ticket_id;&eol;    }&eol;    // Update created ticket for trigger-based event.&eol;    else {&eol;        OTRS.updateTicket(params.alert_subject, params.alert_message);&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ OTRS Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_otrs_ticketlink}    |OTRS: ticket #{EVENT.TAGS.__zbx_otrs_ticket_id}             |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |22         |4   |iLert                   |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |try {&eol;    var result = { tags: {} },&eol;        params = JSON.parse(value),&eol;        req = new HttpRequest(),&eol;        resp = '';&eol;&eol;    if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {&eol;        req.setProxy(params.HTTPProxy);&eol;    }&eol;    var alertSourceKey = params['.ILERT.ALERT.SOURCE.KEY'];&eol;    if (!alertSourceKey &pipe;&pipe; (typeof alertSourceKey === 'string' && alertSourceKey.trim() === '')) {&eol;        throw 'incorrect value for variable "ILERT.ALERT.SOURCE.KEY". The value must be a non-empty string.';&eol;    }&eol;    delete params['.ILERT.ALERT.SOURCE.KEY'];&eol;    &eol;    var ilertApiBaseURL = "https://api.ilert.com";&eol;    var reqURL = encodeURI(ilertApiBaseURL + "/api/v1/events/zabbix-mt/" + alertSourceKey)&eol;&eol;    var incidentKey = "zabbix-" + params['EVENT.ID'];&eol;    var incidentViewURL = ilertApiBaseURL + "/api/v1/incidents/resolve-ik/" + alertSourceKey + "/" + incidentKey;&eol;&eol;    req.addHeader('Accept: application/json');&eol;    req.addHeader('Content-Type: application/json');&eol;&eol;    Zabbix.log(4, '[iLert Webhook] Sending request:' + JSON.stringify(params));&eol;    resp = req.post(reqURL, JSON.stringify(params));&eol;    Zabbix.log(4, '[iLert Webhook] Receiving response:' + resp);&eol;&eol;    try {&eol;        resp = JSON.parse(resp);&eol;    }&eol;    catch (error) {&eol;        throw 'incorrect response. iLert returned a non-JSON object.';&eol;    }&eol;&eol;    if (req.getStatus() == 200) {&eol;        result.tags.__ilert_incident_url = incidentViewURL;&eol;        return JSON.stringify(result);&eol;    }&eol;&eol;    if (req.getStatus() == 400 && typeof resp === 'object' && typeof resp.code === 'string') {&eol;        if (resp.code === 'NO_OPEN_INCIDENT_WITH_KEY') {&eol;          return JSON.stringify(result);&eol;        }&eol;        if (resp.code === 'INCIDENT_ALREADY_ACCEPTED') {&eol;          result.tags.__ilert_incident_url = incidentViewURL;&eol;          return JSON.stringify(result);&eol;        }&eol;    }&eol;&eol;    if (typeof resp === 'object' && typeof resp.message === 'string') {&eol;        throw resp.message;&eol;    }&eol;    else {&eol;        throw 'Unknown error.';&eol;    }&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[iLert Webhook] Notification failed : ' + error);&eol;    throw 'iLert notification failed : ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__ilert_incident_url}     |iLert incident                                              |Please refer to https://docs.ilert.com/integrations/zabbix/native &eol;  &eol;Set global macro {$ZABBIX.URL} with your Zabbix server URL.&eol;Add a dedicated user with the media type "iLert". You can also rewrite the incident summary via ".ILERT.INCIDENT.SUMMARY" parameter or leave it empty to use the standard pattern.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |23         |4   |SolarWinds Service Desk |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var SolarWinds = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        SolarWinds.params = params;&eol;        SolarWinds.params.endpoint = 'https://api.samanage.com/';&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        SolarWinds.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    addCustomFields: function (data, fields) {&eol;        if (typeof data.incident === 'object' && typeof fields === 'object' && Object.keys(fields).length) {&eol;            if (typeof fields.sw_fields === 'object' && Object.keys(fields.sw_fields).length) {&eol;                Object.keys(fields.sw_fields)&eol;                    .forEach(function(field) {&eol;                        try {&eol;                            data.incident[field] = JSON.parse(fields.sw_fields[field]);&eol;                        }&eol;                        catch (error) {&eol;                            data.incident[field] = fields.sw_fields[field];&eol;                        }&eol;                    });&eol;            }&eol;&eol;            if (typeof fields.sw_customfields === 'object' && Object.keys(fields.sw_customfields).length) {&eol;                data.incident.custom_fields_values = {custom_fields_value: []};&eol;                Object.keys(fields.sw_customfields)&eol;                    .forEach(function(field) {&eol;                        data.incident.custom_fields_values.custom_fields_value.push({&eol;                            name: field,&eol;                            value: fields.sw_customfields[field]&eol;                        });&eol;                    });&eol;            }&eol;        }&eol;&eol;        return data;&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        ['token'].forEach(function (field) {&eol;            if (typeof SolarWinds.params !== 'object' &pipe;&pipe; typeof SolarWinds.params[field] === 'undefined'&eol;                &pipe;&pipe; SolarWinds.params[field] === '' ) {&eol;                throw 'Required SolarWinds param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = SolarWinds.params.endpoint + query,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('X-Samanage-Authorization: Bearer ' + SolarWinds.params.token);&eol;        request.addHeader('Accept: application/vnd.samanage.v2.1+json');&eol;&eol;        if (typeof SolarWinds.HTTPProxy !== 'undefined' && SolarWinds.HTTPProxy !== '') {&eol;            request.setProxy(SolarWinds.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ SolarWinds SD Webhook ] Sending request: ' + url + ((typeof data === 'string')&eol;            ? ('\n' + data)&eol;            : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ SolarWinds SD Webhook ] Received response with status code ' + request.getStatus() +&eol;            '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ SolarWinds SD Webhook ] Failed to parse response received from SolarWinds');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null && typeof response.error !== 'undefined'&eol;                && Object.keys(response.error).length > 0) {&eol;                message += ': ' + JSON.stringify(response.error);&eol;            }&eol;            else if (response !== null && typeof response === 'object'&eol;                && Object.keys(response).length > 0) {&eol;                Object.keys(response)&eol;                    .forEach(function(field) {&eol;                        message += '\n' + field + ': ' + response[field][0];&eol;                    });&eol;            }&eol;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    },&eol;&eol;    createIncident: function(name, description, fields) {&eol;        var data = {&eol;            incident: {&eol;                name: name,&eol;                description: description,&eol;                priority: SolarWinds.params.priority&eol;            }&eol;        };&eol;&eol;        var result = SolarWinds.request('post', 'incidents.json', SolarWinds.addCustomFields(data, fields));&eol;&eol;        if (typeof result.response !== 'object' &pipe;&pipe; typeof result.response.id === 'undefined') {&eol;            throw 'Cannot create SolarWinds incident. Check debug log for more information.';&eol;        }&eol;&eol;        return result.response.id;&eol;    },&eol;&eol;    updateIncident: function(name, fields, message) {&eol;        var data = {&eol;            incident: {&eol;                name: name,&eol;                priority: SolarWinds.params.priority&eol;            }&eol;        };&eol;&eol;        SolarWinds.request(&eol;            'put',&eol;            'incidents/' + SolarWinds.params.incident_id + '.json',&eol;            SolarWinds.addCustomFields(data, fields));&eol;&eol;        SolarWinds.commenIncident(message);&eol;    },&eol;&eol;    commenIncident: function(message) {&eol;        var data = {&eol;            comment: {&eol;                body: message&eol;            }&eol;        };&eol;&eol;        SolarWinds.request('post', 'incidents/' + SolarWinds.params.incident_id + '/comments.json', data);&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        fields = {},&eol;        samanage = {},&eol;        result = {tags: {}},&eol;        required_params = ['alert_subject', 'event_recovery_value', 'event_source', 'event_value', 'priority_default'],&eol;        severities = [&eol;            {name: 'not_classified'},&eol;            {name: 'information'},&eol;            {name: 'warning'},&eol;            {name: 'average'},&eol;            {name: 'high'},&eol;            {name: 'disaster'},&eol;            {name: 'resolved'},&eol;            {name: 'default'}&eol;        ];&eol;&eol;    fields.sw_fields = {};&eol;    fields.sw_customfields = {};&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('samanage_')) {&eol;                samanage[key.substring(9)] = params[key];&eol;            }&eol;            else if (key.startsWith('sw_field_')) {&eol;                fields.sw_fields[key.substring(9)] = params[key];&eol;            }&eol;            else if (key.startsWith('sw_customfield_')) {&eol;                fields.sw_customfields[key.substring(15)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol;                throw 'Parameter "' + key + '" can\'t be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    if (params.event_value === '0') {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    samanage.priority = params['priority_' + severities[params.event_nseverity].name] &pipe;&pipe; params.priority_default;&eol;&eol;    SolarWinds.setParams(samanage);&eol;    SolarWinds.setProxy(params.HTTPProxy);&eol;&eol;    // Create incident for non trigger-based events.&eol;    if (params.event_source !== '0' && params.event_recovery_value !== '0') {&eol;        SolarWinds.createIncident(params.alert_subject, params.alert_message);&eol;    }&eol;    // Create incident for trigger-based events.&eol;    else if (params.event_value === '1' && params.event_update_status === '0'&eol;            && samanage.incident_id === '{EVENT.TAGS.__zbx_solarwinds_inc_id}') {&eol;        var key = SolarWinds.createIncident(params.alert_subject, params.alert_message, fields);&eol;&eol;&eol;        result.tags.__zbx_solarwinds_inc_id = key;&eol;        result.tags.__zbx_solarwinds_inc_link = params.samanage_url +&eol;            (params.samanage_url.endsWith('/') ? '' : '/') + 'incidents/' + key;&eol;    }&eol;    // Update created incident for trigger-based event.&eol;    else {&eol;        if (samanage.incident_id === '{EVENT.TAGS.__zbx_solarwinds_inc_id}' &pipe;&pipe; samanage.incident_id === '') {&eol;            throw 'Incorrect incident key given: ' + samanage.incident_id;&eol;        }&eol;        if (!params.alert_message) {&eol;            throw 'Parameter "alert_message" can\'t be empty.';&eol;        }&eol;        SolarWinds.updateIncident(params.alert_subject, fields, params.alert_message);&eol;    }&eol;&eol;    if (params.event_source === '0') {&eol;        return JSON.stringify(result);&eol;    }&eol;    else {&eol;        return 'OK';&eol;    }&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ SolarWinds SD Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_solarwinds_inc_link}|SolarWinds incident ID: {EVENT.TAGS.__zbx_solarwinds_inc_id}|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |24         |4   |SysAid                  |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var SysAid = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        var required = ['url', 'auth_user', 'auth_password', 'category_level_1', 'category_level_2',&eol;            'category_level_3', 'incident_id', 'template_id', 'urgency_id', 'incident_state',&eol;            'default_priority_id'&eol;        ];&eol;&eol;        required.forEach(function (field) {&eol;            if (typeof params !== 'object' &pipe;&pipe; typeof params[field] === 'undefined' &pipe;&pipe; params[field] === '') {&eol;                throw 'Required param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        SysAid.params = params;&eol;        if (typeof SysAid.params.url === 'string' && !SysAid.params.url.endsWith('/')) {&eol;            SysAid.params.url += '/';&eol;        }&eol;    },&eol;&eol;    login: function () {&eol;        var result = SysAid.request('post', 'api/v1/login', {&eol;            user_name: SysAid.params.auth_user,&eol;            password: SysAid.params.auth_password&eol;        });&eol;&eol;        return result.response.user.id;&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        var response,&eol;            request = SysAid.req &pipe;&pipe; (SysAid.req = new HttpRequest()),&eol;            url = SysAid.params.url + query;&eol;&eol;        if (typeof SysAid.HTTPProxy !== 'undefined' && SysAid.HTTPProxy.trim() !== '') {&eol;            request.setProxy(SysAid.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ SysAid Webhook ] Sending request: ' +&eol;            url + ((typeof data === 'string') ? (' ' + data) : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ SysAid Webhook ] Received response with status code ' + request.getStatus() + ': ' + response);&eol;&eol;        if (request.getStatus() !== 200) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            message += ': ' + response;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ SysAid Webhook ] Failed to parse response received from SysAid');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (response === null &pipe;&pipe; (typeof response.Error !== 'undefined' && Object.keys(response.Error).length > 0)) {&eol;            throw 'Request failed: ' + JSON.stringify(response.Error);&eol;        }&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    },&eol;&eol;    createIncident: function(subject, message, priority) {&eol;        var result = SysAid.request('post', 'api/v1/sr/?template=' + encodeURIComponent(SysAid.params.template_id), {&eol;            info: [&eol;                {&eol;                    key: 'problem_type',&eol;                    value: [&eol;                        SysAid.params.category_level_1,&eol;                        SysAid.params.category_level_2,&eol;                        SysAid.params.category_level_3&eol;                    ].join('_')&eol;                },&eol;                {&eol;                    key: 'title',&eol;                    value: subject&eol;                },&eol;                {&eol;                    key: 'description',&eol;                    value: message&eol;                },&eol;                {&eol;                    key: 'status',&eol;                    value: '1'&eol;                },&eol;                {&eol;                    key: 'urgency',&eol;                    value: SysAid.params.urgency_id&eol;                },&eol;                {&eol;                    key: 'priority',&eol;                    value: priority &pipe;&pipe; SysAid.params.default_priority_id,&eol;                }&eol;            ]&eol;        });&eol;&eol;        if (result.response.id === 'undefined') {&eol;            throw 'Cannot create SysAid incident. Check debug log for more information.';&eol;        }&eol;&eol;        return result.response.id;&eol;    },&eol;&eol;    updateTicket: function(note) {&eol;        var date = new Date().getTime();&eol;&eol;        SysAid.request('put', 'api/v1/sr/' + encodeURIComponent(SysAid.params.incident_id), {&eol;            id: SysAid.params.incident_id,&eol;            info: [&eol;                {&eol;                    key: 'update_time',&eol;                    value: date&eol;                },&eol;                {&eol;                    key: 'notes',&eol;                    value: [&eol;                        {&eol;                            userName: 'Zabbix',&eol;                            createDate: date,&eol;                            text: note&eol;                        }&eol;                    ]&eol;                }&eol;            ]&eol;        });&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        params_sysaid = {},&eol;        params_update = {},&eol;        result = {tags: {}},&eol;        required_params = ['alert_subject', 'event_source', 'event_value',  'event_update_status'],&eol;        severities = [&eol;            {name: 'not_classified', color: '#97AAB3'},&eol;            {name: 'information', color: '#7499FF'},&eol;            {name: 'warning', color: '#FFC859'},&eol;            {name: 'average', color: '#FFA059'},&eol;            {name: 'high', color: '#E97659'},&eol;            {name: 'disaster', color: '#E45959'},&eol;            {name: 'resolved', color: '#009900'},&eol;            {name: null, color: '#000000'}&eol;        ],&eol;        priority;&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('sysaid_')) {&eol;                params_sysaid[key.substring(7)] = params[key];&eol;            }&eol;            else if (key.startsWith('event_update_')) {&eol;                params_update[key.substring(13)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key].trim() === '') {&eol;                throw 'Parameter "' + key + '" cannot be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_source === '0' && params.event_update_status !== '0' && params.event_update_status !== '1') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    if (params.event_source === '0' && ((params.event_value === '1' && params.event_update_status === '1')&eol;            &pipe;&pipe; (params.event_value === '0' && (params.event_update_status === '0' &pipe;&pipe; params.event_update_status === '1')))&eol;            && (isNaN(parseInt(params.sysaid_incident_id)) &pipe;&pipe; parseInt(params.sysaid_incident_id) < 1 )) {&eol;        throw 'Incorrect "sysaid_incident_id" parameter given: ' + params.sysaid_incident_id + '\nMust be positive integer.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    if (params.event_value === '0') {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    priority = params['severity_' + severities[params.event_nseverity].name];&eol;    priority = priority && priority.trim() &pipe;&pipe; severities[7].name;&eol;&eol;    SysAid.setParams(params_sysaid);&eol;    SysAid.HTTPProxy = params.HTTPProxy;&eol;    SysAid.login();&eol;&eol;    if (params.event_source !== '0' && params.event_value !== '0') {&eol;        // Create ticket for non trigger-based events.&eol;        SysAid.createIncident(params.alert_subject, params.alert_message, priority);&eol;    }&eol;    else if (params.event_value === '1' && params_update.status === '0') {&eol;        // Create ticket for trigger-based events.&eol;        var incident_id = SysAid.createIncident(params.alert_subject, params.alert_subject + '\n' + params.alert_message +&eol;                '\n' + params.zabbix_url + (params.zabbix_url.endsWith('/') ? '' : '/') + 'tr_events.php?triggerid=' +&eol;                params.trigger_id + '&eventid=' + params.event_id + '\n', priority&eol;        );&eol;&eol;        result.tags.__zbx_sysaid_incident_id = incident_id;&eol;        result.tags.__zbx_sysaid_incidentlink = params.sysaid_url +&eol;            (params.sysaid_url.endsWith('/') ? '' : '/') + 'SREdit.jsp?id=' + incident_id + '&fromId=IncidentsList';&eol;    }&eol;    else {&eol;        // Update created ticket for trigger-based event.&eol;        SysAid.updateTicket(params.alert_subject + '\n' + params.alert_message);&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ SysAid Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_sysaid_incidentlink}|SysAid: incident #{EVENT.TAGS.__zbx_sysaid_incident_id}     |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |25         |4   |TOPdesk                 |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Media = {&eol;    params: {},&eol;    name: '',&eol;    labels: [],&eol;    HTTPProxy: '',&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        Media.params = params;&eol;        Media.params.api += Media.params.api.endsWith('/') ? '' : '/';&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        if (typeof HTTPProxy !== 'undefined' && HTTPProxy.trim() !== '') {&eol;            Media.HTTPProxy = HTTPProxy;&eol;        }&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        ['api', 'token'].forEach(function (field) {&eol;            if (typeof Media.params !== 'object' &pipe;&pipe; typeof Media.params[field] === 'undefined'&eol;                    &pipe;&pipe; Media.params[field] === '') {&eol;                throw 'Required ' + Media.name + ' param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = Media.params.api + query,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('Accept: application/json');&eol;        request.addHeader('Authorization: ' + Media.params.token);&eol;        request.setProxy(Media.HTTPProxy);&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ ' + Media.name + ' Webhook ] Sending request: ' +&eol;            url + ((typeof data === 'string') ? ('\n' + data) : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ ' + Media.name + ' Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ ' + Media.name + ' Webhook ] Failed to parse response.');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null) {&eol;                if (typeof response.errors === 'object' && Object.keys(response.errors).length > 0) {&eol;                    message += ': ' + JSON.stringify(response.errors);&eol;                }&eol;                else if (typeof response.errorMessages === 'object' && Object.keys(response.errorMessages).length > 0) {&eol;                    message += ': ' + JSON.stringify(response.errorMessages);&eol;                }&eol;                else if (typeof response.message === 'string') {&eol;                    message += ': ' + response.message;&eol;                }&eol;            }&eol;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    }&eol;};&eol;&eol;try {&eol;    var result = {tags: {}},&eol;        params = JSON.parse(value),&eol;        media = {},&eol;        fields = {},&eol;        resp = {},&eol;        required_params = [&eol;            'alert_subject',&eol;            'alert_message',&eol;            'event_id',&eol;            'event_source',&eol;            'event_value',&eol;            'event_update_status',&eol;            'topdesk_api',&eol;            'topdesk_user',&eol;            'topdesk_password'&eol;        ],&eol;        severities = [&eol;            'not_classified',&eol;            'information',&eol;            'warning',&eol;            'average',&eol;            'high',&eol;            'disaster',&eol;            'resolved',&eol;            'default'&eol;        ],&eol;        priority;&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (required_params.indexOf(key) !== -1 && params[key].trim() === '') {&eol;                throw 'Parameter "' + key + '" cannot be empty.';&eol;            }&eol;            if (key.startsWith('topdesk_')) {&eol;                media[key.substring(8)] = params[key];&eol;            }&eol;        });&eol;&eol;    // Possible values of event_source:&eol;    // 0 - Trigger, 1 - Discovery, 2 - Autoregistration, 3 - Internal.&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: "' + params.event_source + '".\nMust be 0-3.';&eol;    }&eol;&eol;    // Check event_value for trigger-based and internal events.&eol;    // Possible values: 1 for problem, 0 for recovering&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check event_update_status only for trigger-based events.&eol;    // Possible values: 0 - Webhook was called because of problem/recovery event, 1 - Update operation.&eol;    if (params.event_source === '0' && params.event_update_status !== '0' && params.event_update_status !== '1') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check event_id for a numeric value.&eol;    if (isNaN(parseInt(params.event_id)) &pipe;&pipe; params.event_id < 1) {&eol;        throw 'Incorrect "event_id" parameter given: ' + params.event_id + '\nMust be a positive number.';&eol;    }&eol;&eol;    if ((params.event_source === '1' &pipe;&pipe; params.event_source === '2')  && params.event_value === '0') {&eol;        throw 'Recovery operations are supported only for Trigger and Internal actions.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    if (params.event_value === '0') {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    priority = params['severity_' + severities[params.event_nseverity]];&eol;    params.zbxurl = params.zbxurl + (params.zbxurl.endsWith('/') ? '' : '/');&eol;&eol;    Media.name = 'TOPdesk';&eol;    Media.setParams(media);&eol;    Media.params.token = 'Basic ' + btoa(Media.params.user + ':' + Media.params.password);&eol;    Media.setProxy(params.HTTPProxy);&eol;&eol;    // Create an issue.&eol;    // Numeric value of the event that triggered an action (1 for problem, 0 for recovering).&eol;    // Numeric value of the problem update status. Possible values:&eol;    // 0 - Webhook was called because of problem/recovery event, 1 - Update operation.&eol;    if ((params.event_source == 0 && params.event_value == 1 && params.event_update_status == 0)&eol;            &pipe;&pipe; (params.event_source == 3 && params.event_value == 1)&eol;            &pipe;&pipe; params.event_source == 1 &pipe;&pipe; params.event_source == 2) {&eol;        Zabbix.log(4, '[ ' + Media.name + ' Webhook ] Request of the ticket creating.');&eol;        fields.caller = {dynamicName: 'Zabbix'};&eol;        fields.briefDescription = params.alert_subject;&eol;        fields.request = params.alert_message.replace(/\n/g, '<br>');&eol;        fields.priority = {name: priority};&eol;        fields.processingStatus = {name: Media.params.status};&eol;        fields.externalNumber = params.event_id;&eol;        fields.request += '<br>' + params.zbxurl;&eol;&eol;        if (params.event_source === '0') {&eol;            fields.request += 'tr_events.php?triggerid=' + params.trigger_id + '&eventid=' + params.event_id;&eol;        }&eol;&eol;        resp = Media.request('post', 'tas/api/incidents', fields);&eol;        if (typeof resp.response !== 'object' &pipe;&pipe; typeof resp.response.id === 'undefined') {&eol;            throw 'Cannot create ' + Media.name + ' issue. Check debug log for more information.';&eol;        }&eol;&eol;        if (params.event_source == 0 && params.event_value == 1 && params.event_update_status == 0) {&eol;            result.tags.__zbx_tpd_issuekey = resp.response.number;&eol;            result.tags.__zbx_tpd_issuelink = Media.params.api +&eol;                'tas/secure/incident?action=show&unid=' + resp.response.id;&eol;        }&eol;    }&eol;    // Update a created issue.&eol;    else {&eol;        if (params.event_source == 3 && params.event_value == 0) {&eol;            throw 'Internal event recovery actions are not supported.';&eol;        }&eol;&eol;        Zabbix.log(4, '[ ' + Media.name + ' Webhook ] Request of the ticket updating.');&eol;        fields.action = params.alert_message.replace(/\n/g, '<br>');&eol;&eol;        resp = Media.request('put', 'tas/api/incidents/number/' + Media.params.issue_key, fields);&eol;        if (typeof resp.response !== 'object' &pipe;&pipe; typeof resp.response.id === 'undefined'&eol;                &pipe;&pipe; resp.response.number !== Media.params.issue_key) {&eol;            throw 'Cannot update ' + Media.name + ' issue. Check debug log for more information.';&eol;        }&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ ' + Media.name + ' Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_tpd_issuelink}      |TOPdesk: {EVENT.TAGS.__zbx_tpd_issuekey}                    |Please refer to https://developers.topdesk.com/documentation/index.html and https://www.zabbix.com/documentation/6.2/manual/config/notifications/media/webhook#example_scripts.&eol;  &eol;Set global macro {$ZABBIX.URL} with your Zabbix server URL.&eol;Add a dedicated user with the media type "TOPdesk".&eol;Change the values of the variables topdesk_api (URL), topdesk_password, topdesk_user. The topdesk_status is the default status for creating a new TOPdesk ticket.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
ROW   |26         |4   |iTop                    |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Itop = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        if (params.log !== 'private_log' && params.log !== 'public_log') {&eol;            throw 'Incorrect "itop_log" parameter given: ' + params.log + '\nMust be "private_log" or "public_log".';&eol;        }&eol;&eol;        Itop.params = params;&eol;        if (typeof Itop.params.url === 'string') {&eol;            if (!Itop.params.url.endsWith('/')) {&eol;                Itop.params.url += '/';&eol;            }&eol;&eol;            Itop.params.url += 'webservices/rest.php?version=' + encodeURIComponent(Itop.params.api_version);&eol;        }&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        Itop.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    setCreatePayload: function () {&eol;        json_data.operation = 'core/create';&eol;        json_data.fields.org_id = Itop.params.organization_id;&eol;        json_data.fields.title = params.alert_subject;&eol;        json_data.fields.description = params.alert_message.replace('<', '&lt;')&eol;            .replace('>', '&gt;')&eol;            .replace(/(?:\r\n&pipe;\r&pipe;\n)/g, '<br>');&eol;    },&eol;&eol;    setUpdatePayload: function () {&eol;        json_data.operation = 'core/update';&eol;        json_data.key = Itop.params.id;&eol;        json_data.fields.title = params.alert_subject;&eol;        json_data.fields[Itop.params.log] = {&eol;            add_item: {&eol;                message: params.alert_subject + '\n' + params.alert_message,&eol;                format: 'text'&eol;            }&eol;        };&eol;    },&eol;&eol;    request: function (data) {&eol;        ['url', 'user', 'password', 'organization_id', 'class', 'api_version', 'id'].forEach(function (field) {&eol;            if (typeof Itop.params !== 'object' &pipe;&pipe; typeof Itop.params[field] === 'undefined'&eol;                    &pipe;&pipe; Itop.params[field] === '' ) {&eol;                throw 'Required Itop param is not set: "itop_' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = Itop.params.url,&eol;            request = new HttpRequest(),&eol;            object;&eol;&eol;        request.addHeader('Content-Type: multipart/form-data');&eol;        request.addHeader('Authorization: Basic ' + btoa(Itop.params.user + ':' + Itop.params.password));&eol;&eol;        if (Itop.HTTPProxy) {&eol;            request.setProxy(Itop.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ iTop Webhook ] Sending request: ' + url + '&json_data=' + data);&eol;&eol;        response = request.post(url + '&json_data=' + encodeURIComponent(data));&eol;&eol;        Zabbix.log(4, '[ iTop Webhook ] Received response with status code ' + request.getStatus() + '\n' + response);&eol;&eol;        try {&eol;            response = JSON.parse(response);&eol;        }&eol;        catch (error) {&eol;            Zabbix.log(4, '[ iTop Webhook ] Failed to parse response received from iTop');&eol;            throw 'Failed to parse response received from iTop.\nRequest status code ' +&eol;                    request.getStatus() + '. Check debug log for more information.';&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            throw 'Request failed with status code ' + request.getStatus() + '. Check debug log for more information.';&eol;        }&eol;        else if (typeof response.code !== 'undefined' && response.code !== 0) {&eol;            throw 'Request failed with iTop code ' + response.code + ': ' +&eol;                    JSON.stringify(response.message) + '. Check debug log for more information.';&eol;        }&eol;        else {&eol;            Object.keys(response.objects)&eol;                .forEach(function (key) {&eol;                    object = response.objects[key];&eol;                });&eol;    &eol;            return {&eol;                status: request.getStatus(),&eol;                response: object.fields&eol;            };&eol;        }&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        json_data = {},&eol;        itop_params = {},&eol;        result = {tags: {}},&eol;        required_params = [&eol;            'alert_subject', 'summary', 'event_recovery_value',&eol;            'event_source', 'event_value', 'action_name'&eol;        ];&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('itop_')) {&eol;                itop_params[key.substring(5)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol;                throw 'Parameter "' + key + '" can\'t be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;            && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    Itop.setParams(itop_params);&eol;    Itop.setProxy(params.HTTPProxy);&eol;&eol;    json_data.operation = '';&eol;    json_data.class = Itop.params.class;&eol;    json_data.comment = Itop.params.comment;&eol;    json_data.output_fields = 'id, friendlyname';&eol;    json_data.fields = {};&eol;&eol;    // Create issue for non trigger-based events.&eol;    if (params.event_source !== '0' && params.event_recovery_value !== '0') {&eol;        Itop.setCreatePayload();&eol;        Itop.request(json_data);&eol;    }&eol;    // Create issue for trigger-based events.&eol;    else if (params.event_value === '1' && params.event_update_status === '0'&eol;            && Itop.params.id === '{EVENT.TAGS.__zbx_itop_id}') {&eol;        Itop.setCreatePayload();&eol;&eol;        var response = Itop.request(json_data);&eol;&eol;        result.tags.__zbx_itop_id = response.response.id;&eol;        result.tags.__zbx_itop_key = response.response.friendlyname;&eol;        result.tags.__zbx_itop_link = params.itop_url + (params.itop_url.endsWith('/') ? '' : '/') +&eol;                'pages/UI.php?operation=details&class=' + encodeURIComponent(Itop.params.class) + '&id=' +&eol;                encodeURIComponent(response.response.id);&eol;    }&eol;    // Update created issue for trigger-based event.&eol;    else {&eol;        if (Itop.params.id === '{EVENT.TAGS.__zbx_itop_id}') {&eol;            throw 'Incorrect iTop ticket ID given: ' + Itop.params.id;&eol;        }&eol;        Itop.setUpdatePayload();&eol;        Itop.request(json_data);&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ iTop Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_itop_link}          |iTop: {EVENT.TAGS.__zbx_itop_key}                           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |27         |4   |Rocket.Chat             |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var RocketChat = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        RocketChat.params = params;&eol;        if (RocketChat.params.url && RocketChat.params.api_url) {&eol;            if (!RocketChat.params.url.endsWith('/')) {&eol;                RocketChat.params.url += '/';&eol;            }&eol;            if (!RocketChat.params.api_url.endsWith('/')) {&eol;                RocketChat.params.api_url += '/';&eol;            }&eol;            if (RocketChat.params.api_url.startsWith('/')) {&eol;                RocketChat.params.api_url = RocketChat.params.api_url.substring(1);&eol;            }&eol;&eol;            RocketChat.params.url += RocketChat.params.api_url;&eol;        }&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        RocketChat.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    addFields: function (fields) {&eol;        var data = [];&eol;&eol;        if (typeof fields === 'object' && Object.keys(fields).length) {&eol;            Object.keys(fields)&eol;                .forEach(function(field) {&eol;                    if (fields[field] === '') {&eol;                        Zabbix.log(4, '[ RocketChat Webhook ] Field "' + field +&eol;                            '" can\'t be empty. The field ignored.');&eol;                    }&eol;                    else {&eol;                        try {&eol;                            var parts = field.split(':'),&eol;                                prefix = parts[0].split('_');&eol;&eol;                            if (typeof prefix[2] === 'undefined'&eol;                                    &pipe;&pipe; (prefix[2] === 'p' && params.event_value === '1')&eol;                                    &pipe;&pipe; (prefix[2] === 'r' && params.event_value === '0')) {&eol;                                data.push({&eol;                                    title: field.substring(field.indexOf(':') + 1),&eol;                                    value: fields[field],&eol;                                    short: prefix[1] === 'short'&eol;                                });&eol;                            }&eol;                        }&eol;                        catch (error) {&eol;                            Zabbix.log(4, '[ RocketChat Webhook ] Can\'t parse field "' + field +&eol;                                '". The field ignored.');&eol;                        }&eol;                    }&eol;                });&eol;        }&eol;&eol;        return data;&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        ['url', 'api_url', 'user_id', 'user_token', 'send_to'].forEach(function (field) {&eol;            if (typeof RocketChat.params !== 'object' &pipe;&pipe; typeof RocketChat.params[field] === 'undefined'&eol;                    &pipe;&pipe; RocketChat.params[field] === '' ) {&eol;                throw 'Required parameter is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            url = RocketChat.params.url + query,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('X-Auth-Token:' + RocketChat.params.user_token);&eol;        request.addHeader('X-User-Id:' + RocketChat.params.user_id);&eol;&eol;        if (typeof RocketChat.HTTPProxy !== 'undefined' && RocketChat.HTTPProxy !== '') {&eol;            request.setProxy(RocketChat.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ RocketChat Webhook ] Sending request: ' + url +&eol;            ((typeof data === 'string') ? ('\n' + data) : ''));&eol;&eol;        switch (method) {&eol;            case 'get':&eol;                response = request.get(url, data);&eol;                break;&eol;&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ RocketChat Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ RocketChat Webhook ] Failed to parse response received from RocketChat');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null && typeof response.message !== 'undefined') {&eol;                message += ': ' + JSON.stringify(response.message);&eol;            }&eol;            else if (response !== null && typeof response.error !== 'undefined') {&eol;                message += ': ' + JSON.stringify(response.error);&eol;            }&eol;&eol;            throw message + '. Check debug log for more information.';&eol;        }&eol;&eol;        return {&eol;            status: request.getStatus(),&eol;            response: response&eol;        };&eol;    },&eol;&eol;    postMessage: function(use_default_message, message, fields) {&eol;        var data = {&eol;            channel: RocketChat.params.send_to,&eol;            attachments: [{&eol;                collapsed: false,&eol;                color: RocketChat.params.color,&eol;                title: params.alert_subject&eol;            }]&eol;        };&eol;&eol;        if (RocketChat.params.title_link) {&eol;            data.attachments[0].title_link = RocketChat.params.title_link;&eol;        }&eol;&eol;        if (use_default_message) {&eol;            data.attachments[0].text = message;&eol;        }&eol;        else {&eol;            data.attachments[0].fields = RocketChat.addFields(fields);&eol;        }&eol;&eol;        var result = RocketChat.request('post', 'chat.postMessage', data);&eol;&eol;        if (typeof result.response !== 'object' &pipe;&pipe; typeof result.response.message._id === 'undefined') {&eol;            throw 'Cannot send RocketChat message. Check debug log for more information.';&eol;        }&eol;&eol;        return {&eol;            id: result.response.message._id,&eol;            rid: result.response.message.rid,&eol;            channel: result.response.channel&eol;        };&eol;    },&eol;&eol;    sendMessage: function(update, fields) {&eol;&eol;        var data = {&eol;            message: {&eol;                rid: RocketChat.params.room_id,&eol;                tmid: RocketChat.params.msg_id,&eol;                tshow: true&eol;            }&eol;        };&eol;&eol;        if (update.status === '0') {&eol;            data.message.attachments = [{&eol;                collapsed: false,&eol;                color: RocketChat.params.color,&eol;                title: params.alert_subject,&eol;                title_link: RocketChat.params.title_link,&eol;                fields: RocketChat.addFields(fields)&eol;            }];&eol;        }&eol;        else {&eol;            data.message.alias = update.user;&eol;            data.message.msg = update.action;&eol;            if (update.message) {&eol;                data.message.attachments = [{&eol;                    color: RocketChat.params.color,&eol;                    text: update.message&eol;                }];&eol;            }&eol;        }&eol;&eol;        RocketChat.request('post', 'chat.sendMessage', data);&eol;    },&eol;&eol;    getMessageLink: function(rid, id) {&eol;        var room = RocketChat.request('get', 'rooms.info?roomId=' + encodeURIComponent(rid)),&eol;            link = params.rc_url +&eol;                (params.rc_url.endsWith('/') ? '' : '/');&eol;&eol;        switch (room.response.room.t) {&eol;            case 'c':&eol;                link += 'channel/' + room.response.room.name + '?msg=' + id;&eol;                break;&eol;&eol;            case 'p':&eol;                link += 'group/' + room.response.room.name + '?msg=' + id;&eol;                break;&eol;&eol;            case 'd':&eol;                link += 'direct/' + rid + '?msg=' + id;&eol;                break;&eol;&eol;            default:&eol;                Zabbix.log(4, '[ RocketChat Webhook ] Can\'t get room type. Link to message will not be added.');&eol;        }&eol;&eol;        return link;&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        response,&eol;        fields = {},&eol;        rc = {},&eol;        update = {},&eol;        result = {tags: {}},&eol;        required_params = ['alert_subject', 'alert_message', 'event_source', 'event_value'],&eol;        severities = [&eol;            {name: 'not_classified', color: '#97AAB3'},&eol;            {name: 'information', color: '#7499FF'},&eol;            {name: 'warning', color: '#FFC859'},&eol;            {name: 'average', color: '#FFA059'},&eol;            {name: 'high', color: '#E97659'},&eol;            {name: 'disaster', color: '#E45959'},&eol;            {name: 'resolved', color: '#009900'},&eol;            {name: 'default', color: '#000000'}&eol;        ];&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('rc_')) {&eol;                rc[key.substring(3)] = params[key];&eol;            }&eol;            else if (key.startsWith('field_')) {&eol;                fields[key.substring(6)] = params[key];&eol;            }&eol;            else if (key.startsWith('event_update_')) {&eol;                update[key.substring(13)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol;                throw 'Parameter "' + key + '" can\'t be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Forcing parameters for non trigger-based events.&eol;    if (params.event_source !== '0') {&eol;        params.use_default_message = 'true';&eol;        params.event_nseverity = '0';&eol;        params.rc_title_link = false;&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;            && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    if (params.event_value === '0') {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    RocketChat.setParams(rc);&eol;    RocketChat.setProxy(params.HTTPProxy);&eol;    RocketChat.params.color = severities[params.event_nseverity].color;&eol;&eol;    // Send default message if use_default_message === true.&eol;    if (params.use_default_message.toLowerCase() === 'true') {&eol;        response = RocketChat.postMessage(true, params.alert_message);&eol;        result.tags.__zbx_rc_id = response.id;&eol;        result.tags.__zbx_rc_rid = response.rid;&eol;        result.tags.__zbx_rc_msg_url = RocketChat.getMessageLink(response.rid, response.id);&eol;    }&eol;    // Send message for trigger-based events.&eol;    else if (params.event_value === '1' && update.status === '0') {&eol;        response = RocketChat.postMessage(false, params.alert_message, fields);&eol;        result.tags.__zbx_rc_id = response.id;&eol;        result.tags.__zbx_rc_rid = response.rid;&eol;        result.tags.__zbx_rc_msg_url = RocketChat.getMessageLink(response.rid, response.id);&eol;    }&eol;    // Send thread message for trigger-based event.&eol;    else {&eol;        RocketChat.sendMessage(update, fields);&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ RocketChat Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_rc_msg_url}         |Rocket.Chat                                                 |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |28         |4   |VictorOps               |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var VictorOps = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        VictorOps.params = params;&eol;        if (VictorOps.params.endpoint) {&eol;            if (!VictorOps.params.endpoint.endsWith('/')) {&eol;                VictorOps.params.endpoint += '/';&eol;            }&eol;&eol;            if (typeof VictorOps.params.routing_key !== 'undefined'&eol;                    && VictorOps.params.routing_key !== '{ALERT.SENDTO}'&eol;                    && VictorOps.params.routing_key !== 'Default') {&eol;                VictorOps.params.endpoint += VictorOps.params.routing_key;&eol;            }&eol;        }&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        VictorOps.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    addFields: function (fields) {&eol;        var data = {};&eol;&eol;        if (typeof fields === 'object') {&eol;            Object.keys(fields)&eol;                .forEach(function(field) {&eol;                    if (fields[field] === '') {&eol;                        Zabbix.log(4, '[ VictorOps Webhook ] Field "' + field +&eol;                            '" can\'t be empty. The field ignored.');&eol;                    }&eol;                    else {&eol;                        try {&eol;                            var parts = field.split(':'),&eol;                                prefix = parts[0].split('_');&eol;&eol;                            if (typeof prefix[1] === 'undefined'&eol;                                    &pipe;&pipe; (prefix[1] === 'p' && params.event_value === '1'&eol;                                        && (params.event_update_status === '0'&eol;                                            &pipe;&pipe; params.event_update_status === '{EVENT.UPDATE.STATUS}'))&eol;                                    &pipe;&pipe; (prefix[1] === 'r' && params.event_value === '0'&eol;                                        && (params.event_update_status === '0'&eol;                                            &pipe;&pipe; params.event_update_status === '{EVENT.UPDATE.STATUS}'))&eol;                                    &pipe;&pipe; (prefix[1] === 'u' && params.event_update_status === '1')) {&eol;                                data[field.substring(field.indexOf(':') + 1)] = fields[field];&eol;                            }&eol;                        }&eol;                        catch (error) {&eol;                            Zabbix.log(4, '[ VictorOps Webhook ] Can\'t parse field "' + field +&eol;                                '". The field ignored.');&eol;                        }&eol;                    }&eol;                });&eol;        }&eol;&eol;        return data;&eol;    },&eol;&eol;    request: function (data) {&eol;        if (typeof VictorOps.params !== 'object' &pipe;&pipe; typeof VictorOps.params.endpoint === 'undefined'&eol;                &pipe;&pipe; VictorOps.params.endpoint === '' ) {&eol;            throw 'Required parameter is not set: "vops_endpoint".';&eol;        }&eol;&eol;        var response,&eol;            url = VictorOps.params.endpoint,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;&eol;        if (typeof VictorOps.HTTPProxy !== 'undefined' && VictorOps.HTTPProxy !== '') {&eol;            request.setProxy(VictorOps.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ VictorOps Webhook ] Sending request: ' + url +&eol;            ((typeof data === 'string') ? ('\n' + data) : ''));&eol;&eol;        response = request.post(url, data);&eol;&eol;        Zabbix.log(4, '[ VictorOps Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ VictorOps Webhook ] Failed to parse response received from VictorOps');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response !== null && typeof response.messages !== 'undefined') {&eol;                message += ': ' + JSON.stringify(response.messages);&eol;            }&eol;&eol;            throw message + '. Check debug log for more information.';&eol;        }&eol;&eol;        return response;&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        fields = {},&eol;        vops = {},&eol;        required_params = ['event_source', 'event_value', 'priority_update'],&eol;        severities = [&eol;            {name: 'not_classified', color: '#97AAB3'},&eol;            {name: 'information', color: '#7499FF'},&eol;            {name: 'warning', color: '#FFC859'},&eol;            {name: 'average', color: '#FFA059'},&eol;            {name: 'high', color: '#E97659'},&eol;            {name: 'disaster', color: '#E45959'},&eol;            {name: 'resolved', color: '#009900'},&eol;            {name: 'default', color: '#000000'}&eol;        ];&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('vops_')) {&eol;                vops[key.substring(5)] = params[key];&eol;            }&eol;            else if (key.startsWith('field')) {&eol;                fields[key.substring(5)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol;                throw 'Parameter "' + key + '" can\'t be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;            && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '7';&eol;    }&eol;&eol;    if (params.event_value === '0') {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    if (params.event_update_status === '1') {&eol;        fields[':message_type'] = params.priority_update;&eol;    }&eol;    else {&eol;        fields[':message_type'] = params['priority_' + severities[params.event_nseverity].name]&eol;            &pipe;&pipe; 'INFO';&eol;    }&eol;&eol;    if (params.event_info && params.event_source === '0') {&eol;        fields[':event_info'] = params.event_info;&eol;    }&eol;&eol;    VictorOps.setParams(vops);&eol;    VictorOps.setProxy(params.HTTPProxy);&eol;    VictorOps.request(VictorOps.addFields(fields));&eol;&eol;    return 'OK';&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ VictorOps Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |0           |0              |                                      |                                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |29         |4   |Brevis.one              |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var BrevisOne = {&eol;    params: [],&eol;&eol;    addParam: function (name, value) {&eol;        BrevisOne.params.push(name + '=' + encodeURIComponent(value));&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        BrevisOne.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    setPayload: function (params) {&eol;        var parts = params.send_to.split(':'),&eol;            defaultValues = {&eol;                ring: 'true',&eol;                flash: 'true',&eol;                telauto: 'false'&eol;            };&eol;&eol;        BrevisOne.addParam('username', params.username);&eol;        BrevisOne.addParam('password', params.password);&eol;        BrevisOne.addParam('text', params.text);&eol;&eol;        if (parts.length > 1) {&eol;            BrevisOne.addParam('mode', parts[0]);&eol;            BrevisOne.addParam('to', parts[1]);&eol;        }&eol;        else {&eol;            BrevisOne.addParam('to', parts[0]);&eol;        }&eol;&eol;        Object.keys(defaultValues)&eol;            .forEach(function (key) {&eol;                if (params[key] && params[key].trim() && params[key].toLowerCase() === defaultValues[key]) {&eol;                    BrevisOne.addParam(key, defaultValues[key]);&eol;                }&eol;            });&eol;    },&eol;&eol;    request: function () {&eol;        var response,&eol;            request = new HttpRequest(),&eol;            data = '?' + BrevisOne.params.join('&');&eol;&eol;        request.addHeader('Content-Type: multipart/form-data');&eol;&eol;        if (typeof BrevisOne.HTTPProxy !== 'undefined' && BrevisOne.HTTPProxy !== '') {&eol;            request.setProxy(BrevisOne.HTTPProxy);&eol;        }&eol;&eol;        Zabbix.log(4, '[ BrevisOne Webhook ] Sending request.');&eol;&eol;        response = request.post(params.endpoint + data);&eol;&eol;        Zabbix.log(4, '[ BrevisOne Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response);&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response) {&eol;                message += ': ' + response;&eol;            }&eol;&eol;            throw message + '. Check debug log for more information.';&eol;        }&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value);&eol;&eol;    ['endpoint', 'password', 'username', 'text', 'send_to'].forEach(function (field) {&eol;        if (typeof params !== 'object' &pipe;&pipe; typeof params[field] === 'undefined'&eol;                &pipe;&pipe; !params[field].trim()) {&eol;            throw 'Required parameter is not set: "' + field + '".';&eol;        }&eol;    });&eol;&eol;    if (params.send_to === '{ALERT.SENDTO}') {&eol;        throw 'Required parameter is not set: "send_to".';&eol;    }&eol;&eol;    BrevisOne.setProxy(params.HTTPProxy);&eol;    BrevisOne.setPayload(params);&eol;    BrevisOne.request();&eol;&eol;    return 'OK';&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ BrevisOne Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |0           |0              |                                      |                                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |30         |4   |Express.ms              |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Express = {&eol;    params: [],&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        Express.params = params;&eol;&eol;        if (typeof Express.params.url === 'string' && !Express.params.url.endsWith('/')) {&eol;            Express.params.url += '/';&eol;        }&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        Express.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    request: function (query, data) {&eol;        var response,&eol;            url = Express.params.url + query,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('Authorization: Bearer ' + Express.params.token);&eol;&eol;        if (typeof Express.HTTPProxy !== 'undefined' && Express.HTTPProxy !== '') {&eol;            request.setProxy(Express.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ Express Webhook ] Sending request: ' + url +&eol;            ((typeof data === 'string') ? ('\n' + data) : ''));&eol;&eol;        response = request.post(url, data);&eol;&eol;        Zabbix.log(4, '[ Express Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ Express Webhook ] Failed to parse response received from Express');&eol;                response = {};&eol;            }&eol;        }&eol;&eol;        if (response.status !== 'ok') {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (typeof response.reason !== 'undefined') {&eol;                message += ': ' + JSON.stringify(response.reason);&eol;            }&eol;&eol;            throw message + '. Check debug log for more information.';&eol;        }&eol;&eol;        return response.result;&eol;    },&eol;&eol;    postMessage: function (is_problem) {&eol;        var data,&eol;            url,&eol;            result = {tags: {}},&eol;            response;&eol;&eol;        if (is_problem) {&eol;            data = {&eol;                group_chat_id: Express.params.send_to,&eol;                notification: {&eol;                    status: 'ok',&eol;                    body: Express.params.message&eol;                }&eol;            };&eol;            url = 'api/v4/botx/notifications/direct';&eol;        }&eol;        else {&eol;            data = {&eol;                reply: {&eol;                    status: 'ok',&eol;                    body: Express.params.message&eol;                }&eol;            };&eol;            url = 'api/v3/botx/events/reply_event';&eol;&eol;            try {&eol;                var tags = JSON.parse(Express.params.tags);&eol;            }&eol;            catch (error) {&eol;                throw 'Value of "express_tags" is not JSON. Value: ' + Express.params.tags + '.';&eol;            }&eol;&eol;            tags.forEach(function(tag) {&eol;                if (tag.tag === '__zbx_ex_sync_id_' + Express.params.send_to) {&eol;                    data.source_sync_id = tag.value;&eol;                }&eol;            });&eol;&eol;            if (!data.source_sync_id) {&eol;                throw 'Cannot update data. sync_id for the provided sender is unknown.';&eol;            }&eol;        }&eol;&eol;        response = Express.request(url, data);&eol;&eol;        if (is_problem && response.sync_id) {&eol;            result.tags['__zbx_ex_sync_id_' + Express.params.send_to] = response.sync_id;&eol;&eol;            return JSON.stringify(result);&eol;        }&eol;        else {&eol;            return 'OK';&eol;        }&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        express = {},&eol;        required_params = [&eol;            'express_url', 'express_send_to', 'express_message', 'express_tags', 'express_token',&eol;            'event_source', 'event_value', 'event_update_status'&eol;        ];&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('express_')) {&eol;                express[key.substring(8)] = params[key];&eol;            }&eol;&eol;            if (required_params.indexOf(key) !== -1&eol;                    && (params[key].trim() === '' &pipe;&pipe; params[key] === '{ALERT.SENDTO}')) {&eol;                throw 'Parameter "' + key + '" can\'t be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Forcing event_value and event_update_status for non trigger-based events.&eol;    if (params.event_source !== '0' ) {&eol;        params.event_value = '1';&eol;        params.event_update_status = '0';&eol;    }&eol;&eol;    if (params.event_value !== '0' && params.event_value !== '1') {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    Express.setParams(express);&eol;    Express.setProxy(params.HTTPProxy);&eol;&eol;    return Express.postMessage(params.event_value === '1' && params.event_update_status === '0');&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ Express Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |0              |                                      |                                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |31         |4   |ManageEngine ServiceDesk|                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var MEngine = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;&eol;        MEngine.params = params;&eol;        if (typeof MEngine.params.url === 'string') {&eol;            if (!MEngine.params.url.endsWith('/')) {&eol;                MEngine.params.url += '/';&eol;            }&eol;&eol;            MEngine.params.url += 'api/v3/';&eol;        }&eol;&eol;        if (MEngine.params.on_premise.toLowerCase() !== 'true'&eol;                && typeof MEngine.params.on_demand_url_auth === 'string') {&eol;            if (!MEngine.params.on_demand_url_auth.endsWith('/')) {&eol;                MEngine.params.on_demand_url_auth += '/';&eol;            }&eol;&eol;            MEngine.params.on_demand_url_auth += 'oauth/v2/token?';&eol;        }&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        MEngine.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    createLink: function (id, url) {&eol;        return url + (url.endsWith('/') ? '' : '/') +&eol;            ((MEngine.params.on_premise.toLowerCase() === 'true')&eol;                ? ('WorkOrder.do?woMode=viewWO&woID=' + id)&eol;                : ('app/itdesk/ui/requests/' + id + '/details')&eol;            );&eol;    },&eol;&eol;    refreshAccessToken: function () {&eol;        [&eol;            'on_demand_url_auth',&eol;            'on_demand_refresh_token',&eol;            'on_demand_client_id',&eol;            'on_demand_client_secret'&eol;        ].forEach(function (field) {&eol;            if (typeof MEngine.params !== 'object' &pipe;&pipe; typeof MEngine.params[field] === 'undefined'&eol;                    &pipe;&pipe; MEngine.params[field].trim() === '' ) {&eol;                throw 'Required MEngine param is not set: "sd_' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            request = new HttpRequest(),&eol;            url = MEngine.params.on_demand_url_auth +&eol;                'refresh_token=' + encodeURIComponent(MEngine.params.on_demand_refresh_token) +&eol;                '&grant_type=refresh_token&client_id=' + encodeURIComponent(MEngine.params.on_demand_client_id) +&eol;                '&client_secret=' + encodeURIComponent(MEngine.params.on_demand_client_secret) +&eol;                '&redirect_uri=https://www.zoho.com&scope=SDPOnDemand.requests.ALL';&eol;&eol;        if (MEngine.HTTPProxy) {&eol;            request.setProxy(MEngine.HTTPProxy);&eol;        }&eol;&eol;        Zabbix.log(4, '[ ManageEngine Webhook ] Refreshing access token. Request: ' + url);&eol;&eol;        response = request.post(url);&eol;&eol;        Zabbix.log(4, '[ ManageEngine Webhook ] Received response with status code ' +&eol;        request.getStatus() + '\n' + response);&eol;&eol;        try {&eol;            response = JSON.parse(response);&eol;        }&eol;        catch (error) {&eol;            Zabbix.log(4, '[ ManageEngine Webhook ] Failed to parse response received from Zoho Accounts');&eol;        }&eol;&eol;        if ((request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) && !response.access_token) {&eol;            throw 'Access token refresh failed with HTTP status code ' + request.getStatus() +&eol;                '. Check debug log for more information.';&eol;        }&eol;        else {&eol;            MEngine.params.on_demand_auth_token = response.access_token;&eol;        }&eol;    },&eol;&eol;    request: function (method, query, data) {&eol;        var response,&eol;            url = MEngine.params.url + query,&eol;            input,&eol;            request = new HttpRequest(),&eol;            message;&eol;&eol;        if (MEngine.params.on_premise.toLowerCase() === 'true') {&eol;            request.addHeader('TECHNICIAN_KEY: ' + MEngine.params.on_premise_auth_token);&eol;        }&eol;        else {&eol;            request.addHeader('Authorization: Zoho-oauthtoken ' + MEngine.params.on_demand_auth_token);&eol;            request.addHeader('Accept: application/v3+json');&eol;        }&eol;&eol;        if (MEngine.HTTPProxy) {&eol;            request.setProxy(MEngine.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        input = 'input_data=' + encodeURIComponent(data);&eol;        Zabbix.log(4, '[ ManageEngine Webhook ] Sending request: ' + url + '?' + input);&eol;&eol;        switch (method) {&eol;            case 'post':&eol;                response = request.post(url, input);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, input);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ ManageEngine Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response);&eol;&eol;        try {&eol;            response = JSON.parse(response);&eol;        }&eol;        catch (error) {&eol;            Zabbix.log(4, '[ ManageEngine Webhook ] Failed to parse response received from ManageEngine');&eol;        }&eol;&eol;        if ((request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300)&eol;                && typeof response.response_status !== 'object') {&eol;            throw 'Request failed with HTTP status code ' + request.getStatus() +&eol;                '. Check debug log for more information.';&eol;        }&eol;        else if (typeof response.response_status === 'object' && response.response_status.status === 'failed') {&eol;            message = 'Request failed with status_code ';&eol;&eol;            if (typeof response.response_status.messages === 'object'&eol;                    && response.response_status.messages[0]&eol;                    && response.response_status.messages[0].message) {&eol;                message += response.response_status.messages[0].status_code +&eol;                    '. Message: ' + response.response_status.messages[0].message;&eol;            }&eol;            else {&eol;                message += response.response_status.status_code;&eol;            }&eol;&eol;            message += '. Check debug log for more information.';&eol;            throw message;&eol;        }&eol;        else if (response.request) {&eol;            return response.request.id;&eol;        }&eol;    },&eol;&eol;    createPaylaod: function (fields, isNote) {&eol;        var data = {},&eol;            result;&eol;&eol;        if (isNote) {&eol;            data.description = fields['field_string:description'].replace(/(?:\r\n&pipe;\r&pipe;\n)/g, '<br>');&eol;            result = {request_note: data};&eol;        }&eol;        else {&eol;            Object.keys(fields)&eol;                .forEach(function(field) {&eol;                    if (fields[field].trim() === '') {&eol;                        Zabbix.log(4, '[ ManageEngine Webhook ] Field "' + field +&eol;                            '" can\'t be empty. The field ignored.');&eol;                    }&eol;                    else {&eol;                        try {&eol;                            var prefix = field.split(':')[0],&eol;                                root;&eol;&eol;                            if  (prefix.startsWith('udf_') && !data.udf_fields) {&eol;                                data.udf_fields = {};&eol;                                root = data.udf_fields;&eol;                            }&eol;                            else if (prefix.startsWith('udf_')) {&eol;                                root = data.udf_fields;&eol;                            }&eol;                            else {&eol;                                root = data;&eol;                            }&eol;&eol;                            if (prefix.endsWith('string')) {&eol;                                root[field.substring(field.indexOf(':') + 1)&eol;                                    .toLowerCase()] = fields[field];&eol;                            }&eol;                            else {&eol;                                root[field.substring(field.indexOf(':') + 1)&eol;                                    .toLowerCase()] = {&eol;                                    name: fields[field]&eol;                                };&eol;                            }&eol;                        }&eol;                        catch (error) {&eol;                            Zabbix.log(4, '[ ManageEngine Webhook ] Can\'t parse field "' + field +&eol;                                '". The field ignored.');&eol;                        }&eol;                    }&eol;                });&eol;            if (data.description) {&eol;                data.description = data.description.replace(/(?:\r\n&pipe;\r&pipe;\n)/g, '<br>');&eol;            }&eol;&eol;            result = {request: data};&eol;        }&eol;&eol;        return result;&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        fields = {},&eol;        sd = {},&eol;        result = {tags: {}},&eol;        required_params = [&eol;            'sd_on_premise', 'field_string:subject', 'field_string:description',&eol;            'event_recovery_value', 'event_source', 'event_value', 'event_update_status'&eol;        ],&eol;        severities = [&eol;            {name: 'not_classified', color: '#97AAB3'},&eol;            {name: 'information', color: '#7499FF'},&eol;            {name: 'warning', color: '#FFC859'},&eol;            {name: 'average', color: '#FFA059'},&eol;            {name: 'high', color: '#E97659'},&eol;            {name: 'disaster', color: '#E45959'},&eol;            {name: 'default', color: '#000000'}&eol;        ];&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('sd_')) {&eol;                sd[key.substring(3)] = params[key];&eol;            }&eol;            else if (key.startsWith('field_') &pipe;&pipe; key.startsWith('udf_field_')) {&eol;                fields[key] = params[key];&eol;            }&eol;&eol;            if (required_params.indexOf(key) !== -1 && params[key].trim() === '') {&eol;                throw 'Parameter "' + key + '" can\'t be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol;        params.event_nseverity = '6';&eol;    }&eol;&eol;    if (params.event_update_status === '1' && (typeof params.sd_request_id === 'undefined'&eol;            &pipe;&pipe; params.sd_request_id.trim() === ''&eol;            &pipe;&pipe; params.sd_request_id === '{EVENT.TAGS.__zbx_sd_request_id}')) {&eol;        throw 'Parameter "sd_request_id" can\'t be empty for update operation.';&eol;    }&eol;&eol;    MEngine.setParams(sd);&eol;    MEngine.setProxy(params.HTTPProxy);&eol;&eol;    if (MEngine.params.on_premise.toLowerCase() !== 'true') {&eol;        MEngine.refreshAccessToken();&eol;    }&eol;&eol;    // Create issue for non trigger-based events.&eol;    if (params.event_source !== '0' && params.event_recovery_value !== '0') {&eol;        fields['field_object:priority'] = params['priority_' + severities[params.event_nseverity].name]&eol;        &pipe;&pipe; 'Normal';&eol;&eol;        MEngine.request('post', 'requests', MEngine.createPaylaod(fields));&eol;    }&eol;    // Create issue for trigger-based events.&eol;    else if (params.event_value === '1' && params.event_update_status === '0') {&eol;        fields['field_object:priority'] = params['priority_' + severities[params.event_nseverity].name]&eol;        &pipe;&pipe; 'Normal';&eol;&eol;        var id = MEngine.request('post', 'requests', MEngine.createPaylaod(fields));&eol;&eol;        result.tags.__zbx_sd_request_id = id;&eol;        result.tags.__zbx_sd_request_link = MEngine.createLink(id, params.sd_url);&eol;    }&eol;    // Update created issue for trigger-based event.&eol;    else {&eol;        if (params.event_update_status === '1') {&eol;            MEngine.request('post', 'requests/' + params.sd_request_id + '/notes',&eol;                MEngine.createPaylaod(fields, true)&eol;            );&eol;        }&eol;        delete fields['field_string:description'];&eol;        MEngine.request('put', 'requests/' + params.sd_request_id, MEngine.createPaylaod(fields));&eol;    }&eol;&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(3, '[ ManageEngine Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_sd_request_link}    |ManageEngine: {EVENT.TAGS.__zbx_sd_request_id}              |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |32         |4   |Github                  |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |3          |10s             |1           |var Github = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;        Github.params = params;&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        Github.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    urlCheckFormat: function (url) {&eol;&eol;        if (typeof url === 'string' && !url.endsWith('/')) {&eol;            url += '/';&eol;        }&eol;&eol;        if (url.indexOf('http://') === -1 && url.indexOf('https://') === -1) {&eol;            url = 'https://' + url;&eol;        }&eol;&eol;        return url;&eol;    },&eol;&eol;    createProblemURL: function (zabbix_url, triggerid, eventid, event_source) {&eol;        var problem_url = zabbix_url;&eol;&eol;        if (event_source === '0') {&eol;            problem_url += 'tr_events.php?triggerid=' + triggerid + '&eventid=' + eventid;&eol;        }&eol;&eol;        return problem_url;&eol;    },&eol;&eol;    request: function (method, url, data) {&eol;        ['token', 'user_agent'].forEach(function (field) {&eol;            if (typeof Github.params !== 'object' &pipe;&pipe; typeof Github.params[field] === 'undefined' &pipe;&pipe; Github.params[field] === '') {&eol;                throw 'Required Github param is not set: "' + field + '".';&eol;            }&eol;        });&eol;&eol;        var response,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('User-Agent: ' + Github.params.user_agent);&eol;        request.addHeader('Accept: application/vnd.github.v3+json');&eol;        request.addHeader('Authorization: token ' + Github.params.token);&eol;&eol;        if (typeof Github.HTTPProxy !== 'undefined' && Github.HTTPProxy !== '') {&eol;            request.setProxy(Github.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ Github Webhook ] Sending request: ' + url + ((typeof data === 'string')&eol;            ? ('\n' + data)&eol;            : ''));&eol;&eol;        switch (method) {&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'patch':&eol;                response = request.patch(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ Github Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ Github Webhook ] Failed to parse response received from Github');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (typeof response !== 'object') {&eol;            throw 'Failed to process response received from Github. Check debug log for more information.';&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response.message) {&eol;                message += ': ' + response.message;&eol;            }&eol;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        return response;&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        github = {},&eol;        url = '',&eol;        data = {},&eol;        comment_data,&eol;        result = { tags: {} },&eol;        required_params = [&eol;            'alert_subject', 'alert_message', 'event_source', 'event_value',&eol;            'event_update_status', 'event_recovery_value', 'event_severity',&eol;            'event_id', 'trigger_id', 'zabbix_url',&eol;            'github_token', 'github_url', 'github_user_agent'&eol;        ],&eol;        method = 'post',&eol;        process_tags = true;&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('github_')) {&eol;                github[key.substring(7)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol;                throw 'Parameter "' + key + '" can\'t be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    if (typeof params.zabbix_url !== 'string' &pipe;&pipe; params.zabbix_url.trim() === '' &pipe;&pipe; params.zabbix_url === '{$ZABBIX.URL}') {&eol;        throw 'Field "zabbix_url" cannot be empty.';&eol;    }&eol;&eol;    // Check for backslash in the end of url and schema.&eol;    github.url = Github.urlCheckFormat(github.url);&eol;    params.zabbix_url = Github.urlCheckFormat(params.zabbix_url);&eol;&eol;    // Default url for creating issue&eol;    url = github.url + 'repos/' + github.repo + '/issues';&eol;&eol;    data.title = params.alert_subject;&eol;    data.body = params.alert_message;&eol;    data.labels = [&eol;        { name: "Zabbix" }&eol;    ];&eol;&eol;    // Adding label corresponding to trigger severity in Zabbix.&eol;    if (params.event_severity !== 'undefined' && params.event_source === '0') {&eol;        data.labels.push({ name: params.event_severity });&eol;    }&eol;&eol;    // In case of update or resolve event.&eol;    if (params.event_source === '0' && (params.event_value === '0' &pipe;&pipe; params.event_update_status === '1')) {&eol;        process_tags = false;&eol;        method = 'patch';&eol;        url = github.url + 'repos/' + github.repo + '/issues/' + github.issue_number;&eol;        comment_data = Object.assign({}, data);&eol;        delete data.body;&eol;    } else {&eol;        problem_url = Github.createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source);&eol;        data.body += '\nEvent details in Zabbix: [' + problem_url + '](' + problem_url + ')';&eol;    }&eol;&eol;    Github.setParams(github);&eol;    Github.setProxy(params.HTTPProxy);&eol;&eol;    var response = Github.request(method, url, data);&eol;&eol;    // Leave a comment if comment_data present.&eol;    if (typeof comment_data === 'object') {&eol;        url = github.url + 'repos/' + github.repo + '/issues/' + github.issue_number + '/comments';&eol;        Github.request("post", url, comment_data);&eol;    }&eol;&eol;    if (process_tags) {&eol;        result.tags.__zbx_github_issue_number = response.number;&eol;        result.tags.__zbx_github_repo = github.repo;&eol;        result.tags.__zbx_github_link = response.html_url;&eol;    }&eol;&eol;    Zabbix.log(4, '[ Github Webhook ] Result: ' + JSON.stringify(result));&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(4, '[ Github Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_github_link}        |Github: Issue {EVENT.TAGS.__zbx_github_issue_number}        |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |33         |4   |GLPi                    |                |           |                  |         |          |        |      |0     |25       |0            |0               |0               |0                  |           |1          |1          |10s             |1           |var GLPi = {&eol;    params: {},&eol;&eol;    setParams: function (params) {&eol;        if (typeof params !== 'object') {&eol;            return;&eol;        }&eol;        GLPi.params = params;&eol;    },&eol;&eol;    setProxy: function (HTTPProxy) {&eol;        GLPi.HTTPProxy = HTTPProxy;&eol;    },&eol;&eol;    urlCheckFormat: function (url) {&eol;        if (typeof url === 'string' && !url.endsWith('/')) {&eol;            url += '/';&eol;        }&eol;&eol;        if (url.indexOf('http://') === -1 && url.indexOf('https://') === -1) {&eol;            url = 'https://' + url;&eol;        }&eol;&eol;        return url;&eol;    },&eol;&eol;    getAuthToken: function (url, token) {&eol;        var response,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('Authorization: user_token ' + token);&eol;&eol;        response = request.get(url + "apirest.php/initSession");&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ GLPi Webhook ] Failed to receive authentication token from GLPi.');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (Array.isArray(response)) {&eol;            if (response[1]) {&eol;                throw 'Error received from GLPi: ' + response[1];&eol;            } else {&eol;                throw 'Failed to receive authentication token from GLPi.';&eol;            }&eol;        }&eol;&eol;        if (typeof response !== 'object' &pipe;&pipe; !response.session_token) {&eol;            throw 'Failed to process response received from getting GLPi authentication token. Check debug log for more information.';&eol;        }&eol;&eol;        return response.session_token;&eol;    },&eol;&eol;    getProblemUrl: function (zabbix_url, triggerid, eventid, event_source) {&eol;        var problem_url = zabbix_url;&eol;&eol;        if (event_source === '0') {&eol;            problem_url += 'tr_events.php?triggerid=' + triggerid + '&eventid=' + eventid;&eol;        }&eol;&eol;        return problem_url;&eol;    },&eol;&eol;    request: function (method, url, data) {&eol;        if (typeof GLPi.params !== 'object' &pipe;&pipe; typeof GLPi.params.authToken === 'undefined' &pipe;&pipe; GLPi.params.authToken === '') {&eol;            throw 'Required GLPi param authToken is not set.';&eol;        }&eol;&eol;        var response,&eol;            request = new HttpRequest();&eol;&eol;        request.addHeader('Content-Type: application/json');&eol;        request.addHeader('Session-Token:' + GLPi.params.authToken);&eol;&eol;        if (typeof GLPi.HTTPProxy !== 'undefined' && GLPi.HTTPProxy !== '') {&eol;            request.setProxy(GLPi.HTTPProxy);&eol;        }&eol;&eol;        if (typeof data !== 'undefined') {&eol;            data = JSON.stringify(data);&eol;        }&eol;&eol;        Zabbix.log(4, '[ GLPi Webhook ] Sending request: ' + url + ((typeof data === 'string')&eol;            ? ('\n' + data)&eol;            : ''));&eol;&eol;        switch (method) {&eol;            case 'post':&eol;                response = request.post(url, data);&eol;                break;&eol;&eol;            case 'put':&eol;                response = request.put(url, data);&eol;                break;&eol;&eol;            default:&eol;                throw 'Unsupported HTTP request method: ' + method;&eol;        }&eol;&eol;        Zabbix.log(4, '[ GLPi Webhook ] Received response with status code ' +&eol;            request.getStatus() + '\n' + response);&eol;&eol;        if (response !== null) {&eol;            try {&eol;                response = JSON.parse(response);&eol;            }&eol;            catch (error) {&eol;                Zabbix.log(4, '[ GLPi Webhook ] Failed to parse response received from GLPi');&eol;                response = null;&eol;            }&eol;        }&eol;&eol;        if (typeof response !== 'object' &pipe;&pipe; typeof response === 'undefined' &pipe;&pipe; response === null) {&eol;            throw 'Failed to process response received from GLPi. Check debug log for more information.';&eol;        }&eol;&eol;        if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol;            var message = 'Request failed with status code ' + request.getStatus();&eol;&eol;            if (response.message) {&eol;                message += ': ' + response.message;&eol;            }&eol;&eol;            throw message + ' Check debug log for more information.';&eol;        }&eol;&eol;        return response;&eol;    }&eol;};&eol;&eol;try {&eol;    var params = JSON.parse(value),&eol;        glpi = {},&eol;        url = '',&eol;        data = {},&eol;        comment_data,&eol;        result = { tags: {} },&eol;        required_params = [&eol;            'alert_subject', 'alert_message', 'event_source', 'event_value',&eol;            'event_update_status', 'event_recovery_value',&eol;            'event_id', 'trigger_id', 'zabbix_url',&eol;            'glpi_token', 'glpi_url'&eol;        ],&eol;        method = 'post',&eol;        process_tags = true,&eol;        response;&eol;&eol;    Object.keys(params)&eol;        .forEach(function (key) {&eol;            if (key.startsWith('glpi_')) {&eol;                glpi[key.substring(5)] = params[key];&eol;            }&eol;            else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol;                throw 'Parameter "' + key + '" can\'t be empty.';&eol;            }&eol;        });&eol;&eol;    if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol;        throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol;    }&eol;&eol;    // Check {EVENT.VALUE} for trigger-based and internal events.&eol;    if (params.event_value !== '0' && params.event_value !== '1'&eol;        && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol;        throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol;    if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol;        throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol;    }&eol;&eol;    if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol;        throw 'Recovery operations are supported only for trigger-based actions.';&eol;    }&eol;&eol;    if (typeof params.zabbix_url !== 'string' &pipe;&pipe; params.zabbix_url.trim() === '' &pipe;&pipe; params.zabbix_url === '{$ZABBIX.URL}') {&eol;        throw 'Field "zabbix_url" cannot be empty.';&eol;    }&eol;&eol;    // Check for backslash in the end of url and schema.&eol;    glpi.url = GLPi.urlCheckFormat(glpi.url);&eol;    params.zabbix_url = GLPi.urlCheckFormat(params.zabbix_url);&eol;&eol;    glpi.authToken = GLPi.getAuthToken(glpi.url, glpi.token);&eol;    GLPi.setParams(glpi);&eol;&eol;    data = {&eol;        'input': {&eol;            'name': params.alert_subject,&eol;            'content': params.alert_message + '\n<a href=' + GLPi.getProblemUrl(params.zabbix_url, params.trigger_id, params.event_id, params.event_source) + '>Link to problem in Zabbix</a>',&eol;            'status': 1,  // Set status "New"&eol;            'urgency': params.event_nseverity&eol;        }&eol;    };&eol;&eol;    // In case of resolve&eol;    if (params.event_source === '0' && params.event_value === '0') {&eol;        process_tags = false;&eol;        dataFollowup = {&eol;            'input': {&eol;                'items_id': glpi.problem_id,&eol;                'itemtype': 'Problem',&eol;                'content': params.alert_message + '\n<a href=' + GLPi.getProblemUrl(params.zabbix_url, params.trigger_id, params.event_id, params.event_source) + '>Link to problem in Zabbix</a>'&eol;            }&eol;        };&eol;        dataProblem = {&eol;            'id': glpi.problem_id,&eol;            'input': {&eol;                'name': params.alert_subject,&eol;                'status': 5,  // Set status "Solved"&eol;                'urgency': params.event_nseverity&eol;            }&eol;        };&eol;&eol;        GLPi.request('put', glpi.url + 'apirest.php/Problem/' + glpi.problem_id, dataProblem);&eol;        GLPi.request('post', glpi.url + 'apirest.php/Problem/' + glpi.problem_id + '/ITILFollowup', dataFollowup);&eol;    }&eol;&eol;    // In case of update&eol;    else if (params.event_source === '0' && params.event_update_status === '1') {&eol;        process_tags = false;&eol;        dataFollowup = {&eol;            'input': {&eol;                'items_id': glpi.problem_id,&eol;                'itemtype': 'Problem',&eol;                'content': params.alert_message + '\n<a href=' + GLPi.getProblemUrl(params.zabbix_url, params.trigger_id, params.event_id, params.event_source) + '>Link to problem in Zabbix</a>'&eol;            }&eol;        };&eol;        dataProblem = {&eol;            'id': glpi.problem_id,&eol;            'input': {&eol;                'name': params.alert_subject,&eol;                'urgency': params.event_nseverity&eol;            }&eol;        };&eol;&eol;        GLPi.request('put', glpi.url + 'apirest.php/Problem/' + glpi.problem_id, dataProblem);&eol;        GLPi.request('post', glpi.url + 'apirest.php/Problem/' + glpi.problem_id + '/ITILFollowup', dataFollowup);&eol;    }&eol;&eol;    // In case of problem&eol;    else {&eol;        response = GLPi.request('post', glpi.url + 'apirest.php/Problem/', data);&eol;    }&eol;&eol;    if (process_tags) {&eol;        result.tags.__zbx_glpi_problem_id = response.id;&eol;        result.tags.__zbx_glpi_link = glpi.url + 'front/problem.form.php?id=' + response.id;&eol;    }&eol;&eol;    Zabbix.log(4, '[ GLPi Webhook ] Result: ' + JSON.stringify(result));&eol;    return JSON.stringify(result);&eol;}&eol;catch (error) {&eol;    Zabbix.log(4, '[ GLPi Webhook ] ERROR: ' + error);&eol;    throw 'Sending failed: ' + error;&eol;}|30s    |1           |1              |{EVENT.TAGS.__zbx_glpi_link}          |GLPi: Problem {EVENT.TAGS.__zbx_glpi_problem_id}            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |

TABLE |media_type_param
FIELDS|mediatype_paramid|mediatypeid|name                                            |value                                                                |
ROW   |1                |5          |zabbix_url                                      |{$ZABBIX.URL}                                                        |
ROW   |2                |5          |bot_token                                       |<YOUR BOT TOKEN>                                                     |
ROW   |3                |5          |mattermost_url                                  |<YOUR MATTERMOST URL>                                                |
ROW   |4                |5          |send_mode                                       |alarm                                                                |
ROW   |5                |5          |send_to                                         |{ALERT.SENDTO}                                                       |
ROW   |6                |5          |event_tags                                      |{EVENT.TAGS}                                                         |
ROW   |8                |5          |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |10               |5          |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |11               |5          |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |12               |5          |event_date                                      |{EVENT.DATE}                                                         |
ROW   |13               |5          |event_time                                      |{EVENT.TIME}                                                         |
ROW   |14               |5          |event_severity                                  |{EVENT.SEVERITY}                                                     |
ROW   |15               |5          |event_opdata                                    |{EVENT.OPDATA}                                                       |
ROW   |16               |5          |event_id                                        |{EVENT.ID}                                                           |
ROW   |18               |5          |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |19               |5          |trigger_description                             |{TRIGGER.DESCRIPTION}                                                |
ROW   |20               |5          |host_name                                       |{HOST.HOST}                                                          |
ROW   |21               |5          |host_ip                                         |{HOST.IP}                                                            |
ROW   |22               |5          |event_update_date                               |{EVENT.UPDATE.DATE}                                                  |
ROW   |23               |5          |event_update_time                               |{EVENT.UPDATE.TIME}                                                  |
ROW   |24               |5          |event_recovery_date                             |{EVENT.RECOVERY.DATE}                                                |
ROW   |25               |5          |event_recovery_time                             |{EVENT.RECOVERY.TIME}                                                |
ROW   |37               |6          |zbxurl                                          |{$ZABBIX.URL}                                                        |
ROW   |39               |7          |token                                           |<put your key>                                                       |
ROW   |40               |7          |eventid                                         |{EVENT.ID}                                                           |
ROW   |41               |7          |eventname                                       |{ALERT.SUBJECT}                                                      |
ROW   |42               |7          |hostname                                        |{HOST.NAME}                                                          |
ROW   |43               |7          |hostip                                          |{HOST.IP}                                                            |
ROW   |44               |7          |severity                                        |{EVENT.NSEVERITY}                                                    |
ROW   |45               |7          |triggerdesc                                     |{TRIGGER.DESCRIPTION}                                                |
ROW   |46               |7          |triggeropdata                                   |{EVENT.OPDATA}                                                       |
ROW   |47               |7          |eventtags                                       |{EVENT.TAGS}                                                         |
ROW   |48               |7          |triggerid                                       |{TRIGGER.ID}                                                         |
ROW   |49               |7          |eventdate                                       |{EVENT.DATE}                                                         |
ROW   |50               |7          |eventtime                                       |{EVENT.TIME}                                                         |
ROW   |52               |7          |eventack                                        |{EVENT.ACK.STATUS}                                                   |
ROW   |53               |7          |eventupdate                                     |{EVENT.UPDATE.STATUS}                                                |
ROW   |54               |7          |eventvalue                                      |{EVENT.VALUE}                                                        |
ROW   |55               |7          |url                                             |{$ZABBIX.URL}                                                        |
ROW   |56               |8          |token                                           |<PUSHOVER TOKEN HERE>                                                |
ROW   |57               |8          |user                                            |{ALERT.SENDTO}                                                       |
ROW   |58               |8          |message                                         |{ALERT.MESSAGE}                                                      |
ROW   |59               |8          |title                                           |{ALERT.SUBJECT}                                                      |
ROW   |60               |8          |url                                             |{$ZABBIX.URL}                                                        |
ROW   |61               |8          |url_title                                       |Zabbix                                                               |
ROW   |63               |8          |eventid                                         |{EVENT.ID}                                                           |
ROW   |64               |8          |triggerid                                       |{TRIGGER.ID}                                                         |
ROW   |65               |9          |zabbix_url                                      |{$ZABBIX.URL}                                                        |
ROW   |66               |9          |bot_token                                       |<PLACE YOUR KEY HERE>                                                |
ROW   |67               |9          |channel                                         |{ALERT.SENDTO}                                                       |
ROW   |68               |9          |slack_mode                                      |alarm                                                                |
ROW   |69               |9          |slack_as_user                                   |true                                                                 |
ROW   |71               |9          |event_tags                                      |{EVENT.TAGSJSON}                                                     |
ROW   |73               |9          |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |75               |9          |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |76               |9          |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |77               |9          |event_date                                      |{EVENT.DATE}                                                         |
ROW   |78               |9          |event_time                                      |{EVENT.TIME}                                                         |
ROW   |79               |9          |event_severity                                  |{EVENT.SEVERITY}                                                     |
ROW   |80               |9          |event_opdata                                    |{EVENT.OPDATA}                                                       |
ROW   |81               |9          |event_id                                        |{EVENT.ID}                                                           |
ROW   |83               |9          |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |84               |9          |trigger_description                             |{TRIGGER.DESCRIPTION}                                                |
ROW   |85               |9          |host_name                                       |{HOST.NAME}                                                          |
ROW   |87               |9          |event_update_date                               |{EVENT.UPDATE.DATE}                                                  |
ROW   |88               |9          |event_update_time                               |{EVENT.UPDATE.TIME}                                                  |
ROW   |89               |9          |event_recovery_date                             |{EVENT.RECOVERY.DATE}                                                |
ROW   |90               |9          |event_recovery_time                             |{EVENT.RECOVERY.TIME}                                                |
ROW   |91               |10         |zabbix_url                                      |{$ZABBIX.URL}                                                        |
ROW   |92               |10         |discord_endpoint                                |{ALERT.SENDTO}                                                       |
ROW   |93               |10         |use_default_message                             |false                                                                |
ROW   |94               |10         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |95               |10         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |96               |10         |event_name                                      |{EVENT.NAME}                                                         |
ROW   |97               |10         |event_id                                        |{EVENT.ID}                                                           |
ROW   |98               |10         |event_severity                                  |{EVENT.SEVERITY}                                                     |
ROW   |99               |10         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |100              |10         |event_opdata                                    |{EVENT.OPDATA}                                                       |
ROW   |101              |10         |event_tags                                      |{EVENT.TAGS}                                                         |
ROW   |102              |10         |event_time                                      |{EVENT.TIME}                                                         |
ROW   |103              |10         |event_date                                      |{EVENT.DATE}                                                         |
ROW   |104              |10         |event_recovery_date                             |{EVENT.RECOVERY.DATE}                                                |
ROW   |105              |10         |event_recovery_time                             |{EVENT.RECOVERY.TIME}                                                |
ROW   |106              |10         |event_update_date                               |{EVENT.UPDATE.DATE}                                                  |
ROW   |107              |10         |event_update_time                               |{EVENT.UPDATE.TIME}                                                  |
ROW   |108              |10         |event_update_action                             |{EVENT.UPDATE.ACTION}                                                |
ROW   |109              |10         |event_update_message                            |{EVENT.UPDATE.MESSAGE}                                               |
ROW   |110              |10         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |111              |10         |event_update_user                               |{USER.FULLNAME}                                                      |
ROW   |112              |10         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |113              |10         |host_ip                                         |{HOST.IP}                                                            |
ROW   |114              |10         |host_name                                       |{HOST.NAME}                                                          |
ROW   |115              |10         |trigger_description                             |{TRIGGER.DESCRIPTION}                                                |
ROW   |116              |10         |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |117              |8          |endpoint                                        |https://api.pushover.net/1/messages.json                             |
ROW   |118              |8          |retry                                           |60                                                                   |
ROW   |119              |8          |expire                                          |1200                                                                 |
ROW   |120              |11         |teamsecret                                      |{ALERT.SENDTO}                                                       |
ROW   |121              |11         |Subject                                         |{ALERT.SUBJECT}                                                      |
ROW   |122              |11         |Message                                         |{ALERT.MESSAGE}                                                      |
ROW   |123              |11         |Severity                                        |{EVENT.SEVERITY}                                                     |
ROW   |125              |11         |Hostname                                        |{HOST.NAME}                                                          |
ROW   |127              |12         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |128              |12         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |129              |12         |event_recovery_value                            |{EVENT.RECOVERY.VALUE}                                               |
ROW   |130              |12         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |131              |12         |event_tags_json                                 |{EVENT.TAGSJSON}                                                     |
ROW   |132              |12         |event_update_action                             |{EVENT.UPDATE.ACTION}                                                |
ROW   |133              |12         |event_update_message                            |{EVENT.UPDATE.MESSAGE}                                               |
ROW   |134              |12         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |135              |12         |event_update_user                               |{USER.FULLNAME}                                                      |
ROW   |136              |12         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |137              |12         |jira_issue_key                                  |{EVENT.TAGS.__zbx_jira_issuekey}                                     |
ROW   |138              |12         |jira_issue_type                                 |<PLACE ISSUETYPE NAME>                                               |
ROW   |139              |12         |jira_password                                   |<PLACE PASSWORD OR TOKEN>                                            |
ROW   |140              |12         |jira_project_key                                |<PLACE PROJECT KEY>                                                  |
ROW   |141              |12         |jira_url                                        |<PLACE YOUR JIRA URL>                                                |
ROW   |142              |12         |jira_user                                       |<PLACE LOGIN>                                                        |
ROW   |143              |12         |trigger_description                             |{TRIGGER.DESCRIPTION}                                                |
ROW   |144              |13         |<'DATETIME' CUSTOMFIELD FOR EVENT RECOVERY TIME>|{EVENT.RECOVERY.DATE}T{EVENT.RECOVERY.TIME}                          |
ROW   |145              |13         |<'DATETIME' CUSTOMFIELD FOR EVENT TIME>         |{EVENT.DATE}T{EVENT.TIME}                                            |
ROW   |146              |13         |<'NUMBER' CUSTOMFIELD FOR EVENT.ID>             |{EVENT.ID}                                                           |
ROW   |147              |13         |<'NUMBER' CUSTOMFIELD FOR TRIGGER.ID>           |{TRIGGER.ID}                                                         |
ROW   |148              |13         |<'STRING' CUSTOMFIELD FOR HOST\IP>              |{HOST.HOST} [{HOST.IP}]                                              |
ROW   |149              |13         |<'STRING' CUSTOMFIELD FOR OPERATIONAL DATA>     |{EVENT.OPDATA}                                                       |
ROW   |150              |13         |<'STRING' CUSTOMFIELD FOR SEVERITY>             |{EVENT.SEVERITY}                                                     |
ROW   |151              |13         |<'URL' CUSTOMFIELD FOR EVENT URL>               |{$ZABBIX.URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}|
ROW   |152              |13         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |153              |13         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |154              |13         |event_recovery_value                            |{EVENT.RECOVERY.VALUE}                                               |
ROW   |155              |13         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |156              |13         |event_tags_json                                 |{EVENT.TAGSJSON}                                                     |
ROW   |157              |13         |event_update_action                             |{EVENT.UPDATE.ACTION}                                                |
ROW   |158              |13         |event_update_message                            |{EVENT.UPDATE.MESSAGE}                                               |
ROW   |159              |13         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |160              |13         |event_update_user                               |{USER.FULLNAME}                                                      |
ROW   |161              |13         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |162              |13         |jira_issue_key                                  |{EVENT.TAGS.__zbx_jira_issuekey}                                     |
ROW   |163              |13         |jira_issue_type                                 |<PLACE ISSUETYPE NAME>                                               |
ROW   |164              |13         |jira_password                                   |<PLACE PASSWORD OR TOKEN>                                            |
ROW   |165              |13         |jira_project_key                                |<PLACE PROJECT KEY>                                                  |
ROW   |166              |13         |jira_url                                        |<PLACE YOUR JIRA URL>                                                |
ROW   |167              |13         |jira_user                                       |<PLACE LOGIN>                                                        |
ROW   |168              |13         |trigger_description                             |{TRIGGER.DESCRIPTION}                                                |
ROW   |169              |14         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |170              |14         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |171              |14         |event_date                                      |{EVENT.DATE}                                                         |
ROW   |172              |14         |event_id                                        |{EVENT.ID}                                                           |
ROW   |173              |14         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |174              |14         |event_opdata                                    |{EVENT.OPDATA}                                                       |
ROW   |175              |14         |event_recovery_date                             |{EVENT.RECOVERY.DATE}                                                |
ROW   |176              |14         |event_recovery_time                             |{EVENT.RECOVERY.TIME}                                                |
ROW   |177              |14         |event_severity                                  |{EVENT.SEVERITY}                                                     |
ROW   |178              |14         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |179              |14         |event_status                                    |{EVENT.STATUS}                                                       |
ROW   |180              |14         |event_tags                                      |{EVENT.TAGS}                                                         |
ROW   |181              |14         |event_time                                      |{EVENT.TIME}                                                         |
ROW   |182              |14         |event_update_action                             |{EVENT.UPDATE.ACTION}                                                |
ROW   |183              |14         |event_update_date                               |{EVENT.UPDATE.DATE}                                                  |
ROW   |184              |14         |event_update_message                            |{EVENT.UPDATE.MESSAGE}                                               |
ROW   |185              |14         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |186              |14         |event_update_time                               |{EVENT.UPDATE.TIME}                                                  |
ROW   |187              |14         |event_update_user                               |{USER.FULLNAME}                                                      |
ROW   |188              |14         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |189              |14         |host_ip                                         |{HOST.IP}                                                            |
ROW   |190              |14         |host_name                                       |{HOST.NAME}                                                          |
ROW   |191              |14         |teams_endpoint                                  |<PLACE WEBHOOK URL HERE>                                             |
ROW   |192              |14         |trigger_description                             |{TRIGGER.DESCRIPTION}                                                |
ROW   |193              |14         |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |194              |14         |use_default_message                             |false                                                                |
ROW   |195              |14         |zabbix_url                                      |{$ZABBIX.URL}                                                        |
ROW   |196              |15         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |197              |15         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |198              |15         |event_id                                        |{EVENT.ID}                                                           |
ROW   |199              |15         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |200              |15         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |201              |15         |event_update_message                            |{EVENT.UPDATE.MESSAGE}                                               |
ROW   |202              |15         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |203              |15         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |204              |15         |redmine_access_key                              |<PUT YOUR ACCESS KEY>                                                |
ROW   |205              |15         |redmine_issue_key                               |{EVENT.TAGS.__zbx_redmine_issue_id}                                  |
ROW   |206              |15         |redmine_project                                 |<PUT YOUR PROJECT ID OR NAME>                                        |
ROW   |207              |15         |redmine_tracker_id                              |<PUT YOUR TRACKER ID>                                                |
ROW   |208              |15         |redmine_url                                     |<PUT YOUR REDMINE URL>                                               |
ROW   |209              |15         |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |210              |15         |zabbix_url                                      |{$ZABBIX.URL}                                                        |
ROW   |211              |16         |Message                                         |{ALERT.MESSAGE}                                                      |
ROW   |212              |16         |ParseMode                                       |                                                                     |
ROW   |213              |16         |Subject                                         |{ALERT.SUBJECT}                                                      |
ROW   |214              |16         |To                                              |{ALERT.SENDTO}                                                       |
ROW   |215              |16         |Token                                           |<PLACE YOUR TOKEN>                                                   |
ROW   |216              |17         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |217              |17         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |218              |17         |event_id                                        |{EVENT.ID}                                                           |
ROW   |219              |17         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |220              |17         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |221              |17         |event_tags                                      |{EVENT.TAGS}                                                         |
ROW   |222              |17         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |223              |17         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |224              |17         |severity_average                                |normal                                                               |
ROW   |225              |17         |severity_default                                |-                                                                    |
ROW   |226              |17         |severity_disaster                               |urgent                                                               |
ROW   |227              |17         |severity_high                                   |high                                                                 |
ROW   |228              |17         |severity_information                            |low                                                                  |
ROW   |229              |17         |severity_not_classified                         |low                                                                  |
ROW   |230              |17         |severity_warning                                |normal                                                               |
ROW   |231              |17         |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |232              |17         |zbxurl                                          |{$ZABBIX.URL}                                                        |
ROW   |233              |17         |zendesk_issue_key                               |{EVENT.TAGS.__zbx_zdk_issuekey}                                      |
ROW   |234              |17         |zendesk_token                                   |<put your {enduser_email_address}/token:{api_token}>                 |
ROW   |235              |17         |zendesk_type                                    |incident                                                             |
ROW   |236              |17         |zendesk_url                                     |<put your Zendesk URL>                                               |
ROW   |237              |18         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |238              |18         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |239              |18         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |240              |18         |event_recovery_value                            |{EVENT.RECOVERY.VALUE}                                               |
ROW   |241              |18         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |242              |18         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |243              |18         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |244              |18         |servicenow_password                             |<PLACE PASSWORD HERE>                                                |
ROW   |245              |18         |servicenow_sys_id                               |{EVENT.TAGS.__zbx_servicenow_sys_id}                                 |
ROW   |246              |18         |servicenow_url                                  |{ALERT.SENDTO}                                                       |
ROW   |247              |18         |servicenow_user                                 |<PLACE USERNAME HERE>                                                |
ROW   |248              |18         |urgency_for_average                             |2                                                                    |
ROW   |249              |18         |urgency_for_disaster                            |1                                                                    |
ROW   |250              |18         |urgency_for_high                                |2                                                                    |
ROW   |251              |18         |urgency_for_information                         |3                                                                    |
ROW   |252              |18         |urgency_for_not_classified                      |3                                                                    |
ROW   |253              |18         |urgency_for_warning                             |3                                                                    |
ROW   |254              |19         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |255              |19         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |256              |19         |event_id                                        |{EVENT.ID}                                                           |
ROW   |257              |19         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |258              |19         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |259              |19         |event_tags                                      |{EVENT.TAGSJSON}                                                     |
ROW   |260              |19         |event_update_message                            |{EVENT.UPDATE.MESSAGE}                                               |
ROW   |261              |19         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |262              |19         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |263              |19         |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |264              |19         |zabbix_url                                      |{$ZABBIX.URL}                                                        |
ROW   |265              |19         |zammad_access_token                             |<PUT YOUR ACCESS TOKEN>                                              |
ROW   |266              |19         |zammad_customer                                 |<PUT YOUR CUSTOMER EMAIL>                                            |
ROW   |267              |19         |zammad_enable_tags                              |true                                                                 |
ROW   |268              |19         |zammad_ticket_id                                |{EVENT.TAGS.__zbx_zammad_ticket_id}                                  |
ROW   |269              |19         |zammad_url                                      |<PUT YOUR ZAMMAD URL>                                                |
ROW   |270              |20         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |271              |20         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |272              |20         |event_recovery_value                            |{EVENT.RECOVERY.VALUE}                                               |
ROW   |273              |20         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |274              |20         |event_tags_json                                 |{EVENT.TAGSJSON}                                                     |
ROW   |275              |20         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |276              |20         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |277              |20         |jira_password                                   |<PLACE PASSWORD OR TOKEN>                                            |
ROW   |278              |20         |jira_request_key                                |{EVENT.TAGS.__zbx_jira_requestkey}                                   |
ROW   |279              |20         |jira_request_type_id                            |<PLACE REQUEST TYPE ID>                                              |
ROW   |280              |20         |jira_servicedesk_id                             |<PLACE SERVICEDESK ID>                                               |
ROW   |281              |20         |jira_url                                        |<PLACE YOUR JIRA URL>                                                |
ROW   |282              |20         |jira_user                                       |<PLACE LOGIN>                                                        |
ROW   |283              |21         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |284              |21         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |285              |21         |event_id                                        |{EVENT.ID}                                                           |
ROW   |286              |21         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |287              |21         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |288              |21         |event_update_message                            |{EVENT.UPDATE.MESSAGE}                                               |
ROW   |289              |21         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |290              |21         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |291              |21         |otrs_auth_password                              |<PUT YOUR USER PASSWORD>                                             |
ROW   |292              |21         |otrs_auth_user                                  |<PUT YOUR USER NAME>                                                 |
ROW   |293              |21         |otrs_customer                                   |<PUT YOUR CUSTOMER EMAIL>                                            |
ROW   |294              |21         |otrs_default_priority_id                        |3                                                                    |
ROW   |295              |21         |otrs_queue                                      |<PUT YOUR QUEUE NAME>                                                |
ROW   |296              |21         |otrs_ticket_id                                  |{EVENT.TAGS.__zbx_otrs_ticket_id}                                    |
ROW   |297              |21         |otrs_ticket_state                               |new                                                                  |
ROW   |298              |21         |otrs_time_unit                                  |0                                                                    |
ROW   |299              |21         |otrs_url                                        |<PUT YOUR OTRS URL>                                                  |
ROW   |300              |21         |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |301              |21         |zabbix_url                                      |{$ZABBIX.URL}                                                        |
ROW   |302              |11         |Event_Ack_Status                                |{EVENT.ACK.STATUS}                                                   |
ROW   |303              |11         |Event_Date_Time                                 |{EVENT.DATE} {EVENT.TIME}                                            |
ROW   |304              |11         |Event_ID                                        |{EVENT.ID}                                                           |
ROW   |305              |11         |Event_Update_Action                             |{EVENT.UPDATE.ACTION}                                                |
ROW   |306              |11         |Event_Update_Status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |307              |11         |Host_IP                                         |{HOST.IP}                                                            |
ROW   |308              |11         |Trigger_ID                                      |{TRIGGER.ID}                                                         |
ROW   |309              |11         |Trigger_Status                                  |{TRIGGER.STATUS}                                                     |
ROW   |310              |11         |User                                            |{USER.FULLNAME}                                                      |
ROW   |311              |11         |Zabbix_URL                                      |{$ZABBIX.URL}                                                        |
ROW   |312              |10         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |313              |22         |.ILERT.ALERT.SOURCE.KEY                         |{ALERT.SENDTO}                                                       |
ROW   |314              |22         |.ILERT.INCIDENT.SUMMARY                         |                                                                     |
ROW   |315              |22         |ALERT.MESSAGE                                   |{ALERT.MESSAGE}                                                      |
ROW   |316              |22         |ALERT.SUBJECT                                   |{ALERT.SUBJECT}                                                      |
ROW   |317              |22         |EVENT.ACK.STATUS                                |{EVENT.ACK.STATUS}                                                   |
ROW   |318              |22         |EVENT.DATE                                      |{EVENT.DATE}                                                         |
ROW   |319              |22         |EVENT.ID                                        |{EVENT.ID}                                                           |
ROW   |320              |22         |EVENT.NAME                                      |{EVENT.NAME}                                                         |
ROW   |321              |22         |EVENT.NSEVERITY                                 |{EVENT.NSEVERITY}                                                    |
ROW   |322              |22         |EVENT.OPDATA                                    |{EVENT.OPDATA}                                                       |
ROW   |323              |22         |EVENT.RECOVERY.DATE                             |{EVENT.RECOVERY.DATE}                                                |
ROW   |324              |22         |EVENT.RECOVERY.TIME                             |{EVENT.RECOVERY.TIME}                                                |
ROW   |325              |22         |EVENT.RECOVERY.VALUE                            |{EVENT.RECOVERY.VALUE}                                               |
ROW   |326              |22         |EVENT.SEVERITY                                  |{EVENT.SEVERITY}                                                     |
ROW   |327              |22         |EVENT.TAGS                                      |{EVENT.TAGS}                                                         |
ROW   |328              |22         |EVENT.TIME                                      |{EVENT.TIME}                                                         |
ROW   |329              |22         |EVENT.UPDATE.ACTION                             |{EVENT.UPDATE.ACTION}                                                |
ROW   |330              |22         |EVENT.UPDATE.DATE                               |{EVENT.UPDATE.DATE}                                                  |
ROW   |331              |22         |EVENT.UPDATE.MESSAGE                            |{EVENT.UPDATE.MESSAGE}                                               |
ROW   |332              |22         |EVENT.UPDATE.STATUS                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |333              |22         |EVENT.UPDATE.TIME                               |{EVENT.UPDATE.TIME}                                                  |
ROW   |334              |22         |EVENT.VALUE                                     |{EVENT.VALUE}                                                        |
ROW   |335              |22         |HOST.HOST                                       |{HOST.HOST}                                                          |
ROW   |336              |22         |HOST.IP                                         |{HOST.IP}                                                            |
ROW   |337              |22         |HOST.NAME                                       |{HOST.NAME}                                                          |
ROW   |338              |22         |ITEM.ID1                                        |{ITEM.ID1}                                                           |
ROW   |339              |22         |ITEM.ID2                                        |{ITEM.ID2}                                                           |
ROW   |340              |22         |ITEM.ID3                                        |{ITEM.ID3}                                                           |
ROW   |341              |22         |ITEM.ID4                                        |{ITEM.ID4}                                                           |
ROW   |342              |22         |ITEM.ID5                                        |{ITEM.ID5}                                                           |
ROW   |343              |22         |ITEM.NAME1                                      |{ITEM.NAME1}                                                         |
ROW   |344              |22         |ITEM.NAME2                                      |{ITEM.NAME2}                                                         |
ROW   |345              |22         |ITEM.NAME3                                      |{ITEM.NAME3}                                                         |
ROW   |346              |22         |ITEM.NAME4                                      |{ITEM.NAME4}                                                         |
ROW   |347              |22         |ITEM.NAME5                                      |{ITEM.NAME5}                                                         |
ROW   |348              |22         |TRIGGER.DESCRIPTION                             |{TRIGGER.DESCRIPTION}                                                |
ROW   |349              |22         |TRIGGER.ID                                      |{TRIGGER.ID}                                                         |
ROW   |350              |22         |TRIGGER.NAME                                    |{TRIGGER.NAME}                                                       |
ROW   |351              |22         |TRIGGER.SEVERITY                                |{TRIGGER.SEVERITY}                                                   |
ROW   |352              |22         |TRIGGER.STATUS                                  |{TRIGGER.STATUS}                                                     |
ROW   |353              |22         |TRIGGER.URL                                     |{TRIGGER.URL}                                                        |
ROW   |354              |22         |TRIGGER.VALUE                                   |{TRIGGER.VALUE}                                                      |
ROW   |355              |22         |USER.FULLNAME                                   |{USER.FULLNAME}                                                      |
ROW   |356              |22         |ZABBIX.URL                                      |{$ZABBIX.URL}                                                        |
ROW   |357              |5          |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |358              |5          |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |359              |5          |discovery_host_dns                              |{DISCOVERY.DEVICE.DNS}                                               |
ROW   |360              |5          |discovery_host_ip                               |{DISCOVERY.DEVICE.IPADDRESS}                                         |
ROW   |361              |5          |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |362              |6          |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |363              |6          |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |364              |6          |event_id                                        |{EVENT.ID}                                                           |
ROW   |365              |6          |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |366              |6          |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |367              |6          |event_tags_json                                 |{EVENT.TAGSJSON}                                                     |
ROW   |368              |6          |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |369              |6          |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |370              |6          |opsgenie_api                                    |<put your opsgenie api>                                              |
ROW   |371              |6          |opsgenie_tags                                   |                                                                     |
ROW   |372              |6          |opsgenie_teams                                  |                                                                     |
ROW   |373              |6          |opsgenie_token                                  |<put your token>                                                     |
ROW   |374              |6          |opsgenie_web                                    |<put your opsgenie web>                                              |
ROW   |375              |6          |severity_average                                |P3                                                                   |
ROW   |376              |6          |severity_default                                |P5                                                                   |
ROW   |377              |6          |severity_disaster                               |P1                                                                   |
ROW   |378              |6          |severity_high                                   |P2                                                                   |
ROW   |379              |6          |severity_information                            |P5                                                                   |
ROW   |380              |6          |severity_not_classified                         |P5                                                                   |
ROW   |381              |6          |severity_warning                                |P4                                                                   |
ROW   |382              |6          |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |383              |6          |zbxuser                                         |{USER.FULLNAME}                                                      |
ROW   |384              |7          |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |385              |7          |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |386              |8          |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |387              |8          |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |388              |8          |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |389              |8          |priority_average                                |0                                                                    |
ROW   |390              |8          |priority_default                                |0                                                                    |
ROW   |391              |8          |priority_disaster                               |0                                                                    |
ROW   |392              |8          |priority_high                                   |0                                                                    |
ROW   |393              |8          |priority_information                            |0                                                                    |
ROW   |394              |8          |priority_not_classified                         |0                                                                    |
ROW   |395              |8          |priority_warning                                |0                                                                    |
ROW   |396              |9          |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |397              |9          |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |398              |9          |discovery_host_dns                              |{DISCOVERY.DEVICE.DNS}                                               |
ROW   |399              |9          |discovery_host_ip                               |{DISCOVERY.DEVICE.IPADDRESS}                                         |
ROW   |400              |9          |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |401              |9          |host_conn                                       |{HOST.CONN}                                                          |
ROW   |402              |23         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |403              |23         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |404              |23         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |405              |23         |event_recovery_value                            |{EVENT.RECOVERY.VALUE}                                               |
ROW   |406              |23         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |407              |23         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |408              |23         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |409              |23         |priority_average                                |Medium                                                               |
ROW   |410              |23         |priority_default                                |Low                                                                  |
ROW   |411              |23         |priority_disaster                               |Critical                                                             |
ROW   |412              |23         |priority_high                                   |High                                                                 |
ROW   |413              |23         |samanage_incident_id                            |{EVENT.TAGS.__zbx_solarwinds_inc_id}                                 |
ROW   |414              |23         |samanage_token                                  |<PUT YOUR TOKEN HERE>                                                |
ROW   |415              |23         |samanage_url                                    |<PUT YOUR INSTANCE URL HERE>                                         |
ROW   |416              |24         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |417              |24         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |418              |24         |event_id                                        |{EVENT.ID}                                                           |
ROW   |419              |24         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |420              |24         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |421              |24         |event_update_message                            |{EVENT.UPDATE.MESSAGE}                                               |
ROW   |422              |24         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |423              |24         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |424              |24         |sysaid_auth_password                            |<PUT YOUR USER PASSWORD>                                             |
ROW   |425              |24         |sysaid_auth_user                                |<PUT YOUR USER NAME>                                                 |
ROW   |426              |24         |sysaid_category_level_1                         |<PUT YOUR CATEGORY>                                                  |
ROW   |427              |24         |sysaid_category_level_2                         |<PUT YOUR SUB-CATEGORY>                                              |
ROW   |428              |24         |sysaid_category_level_3                         |<PUT YOUR THIRD LEVEL CATEGORY>                                      |
ROW   |429              |24         |sysaid_default_priority_id                      |1                                                                    |
ROW   |430              |24         |sysaid_incident_id                              |{EVENT.TAGS.__zbx_sysaid_incident_id}                                |
ROW   |431              |24         |sysaid_incident_state                           |1                                                                    |
ROW   |432              |24         |sysaid_template_id                              |<PUT YOUR TEMPLATE ID>                                               |
ROW   |433              |24         |sysaid_urgency_id                               |<PUT YOUR URGENCY ID>                                                |
ROW   |434              |24         |sysaid_url                                      |<PUT YOUR SYSAID URL>                                                |
ROW   |435              |24         |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |436              |24         |zabbix_url                                      |{$ZABBIX.URL}                                                        |
ROW   |437              |25         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |438              |25         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |439              |25         |event_id                                        |{EVENT.ID}                                                           |
ROW   |440              |25         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |441              |25         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |442              |25         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |443              |25         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |444              |25         |severity_average                                |P3                                                                   |
ROW   |445              |25         |severity_default                                |P5                                                                   |
ROW   |446              |25         |severity_disaster                               |P1                                                                   |
ROW   |447              |25         |severity_high                                   |P2                                                                   |
ROW   |448              |25         |severity_information                            |P5                                                                   |
ROW   |449              |25         |severity_not_classified                         |P5                                                                   |
ROW   |450              |25         |severity_warning                                |P4                                                                   |
ROW   |451              |25         |topdesk_api                                     |<put your TOPdesk API URL>                                           |
ROW   |452              |25         |topdesk_issue_key                               |{EVENT.TAGS.__zbx_tpd_issuekey}                                      |
ROW   |453              |25         |topdesk_password                                |<put your TOPdesk application password>                              |
ROW   |454              |25         |topdesk_status                                  |<put default status for new tickets>                                 |
ROW   |455              |25         |topdesk_user                                    |<put your TOPdesk username>                                          |
ROW   |456              |25         |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |457              |25         |zbxurl                                          |{$ZABBIX.URL}                                                        |
ROW   |458              |26         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |459              |26         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |460              |26         |event_recovery_value                            |{EVENT.RECOVERY.VALUE}                                               |
ROW   |461              |26         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |462              |26         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |463              |26         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |464              |26         |itop_api_version                                |1.3                                                                  |
ROW   |465              |26         |itop_class                                      |UserRequest                                                          |
ROW   |466              |26         |itop_comment                                    |Created by Zabbix action {ACTION.NAME}                               |
ROW   |467              |26         |itop_id                                         |{EVENT.TAGS.__zbx_itop_id}                                           |
ROW   |468              |26         |itop_log                                        |private_log                                                          |
ROW   |469              |26         |itop_organization_id                            |<PLACE ORGANIZATION ID>                                              |
ROW   |470              |26         |itop_password                                   |<PLACE PASSWORD OR TOKEN>                                            |
ROW   |471              |26         |itop_url                                        |<PLACE YOUR ITOP URL>                                                |
ROW   |472              |26         |itop_user                                       |<PLACE LOGIN>                                                        |
ROW   |473              |27         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |474              |27         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |475              |27         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |476              |27         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |477              |27         |event_update_action                             |{EVENT.UPDATE.ACTION}                                                |
ROW   |478              |27         |event_update_message                            |{EVENT.UPDATE.MESSAGE}                                               |
ROW   |479              |27         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |480              |27         |event_update_user                               |{USER.FULLNAME}                                                      |
ROW   |481              |27         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |482              |27         |field_1_full:Host                               |{HOST.NAME} [{HOST.IP}]                                              |
ROW   |483              |27         |field_2_short:Severity                          |{EVENT.SEVERITY}                                                     |
ROW   |484              |27         |field_3_short:Event time                        |{EVENT.DATE} {EVENT.TIME}                                            |
ROW   |485              |27         |field_3_short_r:Recovery time                   |{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}                          |
ROW   |486              |27         |field_4_short_r:Event duration                  |{EVENT.DURATION}                                                     |
ROW   |487              |27         |field_5_short:Operational data                  |{EVENT.OPDATA}                                                       |
ROW   |488              |27         |field_999_full_p:Trigger description            |{TRIGGER.DESCRIPTION}                                                |
ROW   |489              |27         |rc_api_url                                      |api/v1/                                                              |
ROW   |490              |27         |rc_msg_id                                       |{EVENT.TAGS.__zbx_rc_id}                                             |
ROW   |491              |27         |rc_room_id                                      |{EVENT.TAGS.__zbx_rc_rid}                                            |
ROW   |492              |27         |rc_send_to                                      |{ALERT.SENDTO}                                                       |
ROW   |493              |27         |rc_title_link                                   |{$ZABBIX.URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}|
ROW   |494              |27         |rc_url                                          |<PLACE YOUR INSTANCE URL HERE>                                       |
ROW   |495              |27         |rc_user_id                                      |<PLACE USER ID HERE>                                                 |
ROW   |496              |27         |rc_user_token                                   |<PLACE TOKEN HERE>                                                   |
ROW   |497              |27         |use_default_message                             |false                                                                |
ROW   |498              |28         |event_info                                      |{$ZABBIX.URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}|
ROW   |499              |28         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |500              |28         |event_recovery_value                            |{EVENT.RECOVERY.VALUE}                                               |
ROW   |501              |28         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |502              |28         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |503              |28         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |504              |28         |field:entity_display_name                       |{ALERT.SUBJECT}                                                      |
ROW   |505              |28         |field:entity_id                                 |{EVENT.ID}                                                           |
ROW   |506              |28         |field:hostname                                  |{HOST.NAME}                                                          |
ROW   |507              |28         |field:monitoring_tool                           |Zabbix                                                               |
ROW   |508              |28         |field:operational_data                          |{EVENT.OPDATA}                                                       |
ROW   |509              |28         |field:severity                                  |{EVENT.SEVERITY}                                                     |
ROW   |510              |28         |field:state_message                             |{ALERT.MESSAGE}                                                      |
ROW   |511              |28         |field_p:trigger_description                     |{TRIGGER.DESCRIPTION}                                                |
ROW   |512              |28         |field_r:event_duration                          |{EVENT.DURATION}                                                     |
ROW   |513              |28         |field_r:recovery time                           |{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}                          |
ROW   |514              |28         |priority_average                                |WARNING                                                              |
ROW   |515              |28         |priority_default                                |INFO                                                                 |
ROW   |516              |28         |priority_disaster                               |CRITICAL                                                             |
ROW   |517              |28         |priority_high                                   |WARNING                                                              |
ROW   |518              |28         |priority_information                            |INFO                                                                 |
ROW   |519              |28         |priority_not_classified                         |INFO                                                                 |
ROW   |520              |28         |priority_resolved                               |OK                                                                   |
ROW   |521              |28         |priority_update                                 |INFO                                                                 |
ROW   |522              |28         |priority_warning                                |INFO                                                                 |
ROW   |523              |28         |vops_endpoint                                   |<PLACE ENDPOINT URL HERE>                                            |
ROW   |524              |28         |vops_routing_key                                |{ALERT.SENDTO}                                                       |
ROW   |525              |29         |endpoint                                        |<PLACE HTTP API URL>                                                 |
ROW   |526              |29         |flash                                           |false                                                                |
ROW   |527              |29         |password                                        |<PLACE PASSWORD>                                                     |
ROW   |528              |29         |ring                                            |false                                                                |
ROW   |529              |29         |send_to                                         |{ALERT.SENDTO}                                                       |
ROW   |530              |29         |telauto                                         |true                                                                 |
ROW   |531              |29         |text                                            |{ALERT.MESSAGE}                                                      |
ROW   |532              |29         |username                                        |<PLACE USERNAME>                                                     |
ROW   |535              |30         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |536              |30         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |537              |30         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |538              |30         |express_message                                 |{ALERT.MESSAGE}                                                      |
ROW   |539              |30         |express_send_to                                 |{ALERT.SENDTO}                                                       |
ROW   |540              |30         |express_tags                                    |{EVENT.TAGSJSON}                                                     |
ROW   |541              |30         |express_token                                   |<PLACE BOT TOKEN>                                                    |
ROW   |542              |30         |express_url                                     |<PLACE INSTANCE URL>                                                 |
ROW   |543              |31         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |544              |31         |event_recovery_value                            |{EVENT.RECOVERY.VALUE}                                               |
ROW   |545              |31         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |546              |31         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |547              |31         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |548              |31         |field_ref:requester                             |<PLACE API USER NAME>                                                |
ROW   |549              |31         |field_string:description                        |{ALERT.MESSAGE}                                                      |
ROW   |550              |31         |field_string:subject                            |{ALERT.SUBJECT}                                                      |
ROW   |551              |31         |priority_average                                |Normal                                                               |
ROW   |552              |31         |priority_default                                |Normal                                                               |
ROW   |553              |31         |priority_disaster                               |High                                                                 |
ROW   |554              |31         |priority_high                                   |High                                                                 |
ROW   |555              |31         |priority_information                            |Low                                                                  |
ROW   |556              |31         |priority_not_classified                         |Low                                                                  |
ROW   |557              |31         |priority_warning                                |Medium                                                               |
ROW   |558              |31         |sd_on_demand_client_id                          |<PLACE ON DEMAND CLIENT ID>                                          |
ROW   |559              |31         |sd_on_demand_client_secret                      |<PLACE ON DEMAND CLIENT SECRET>                                      |
ROW   |560              |31         |sd_on_demand_refresh_token                      |<PLACE ON DEMAND REFRESH TOKEN>                                      |
ROW   |561              |31         |sd_on_demand_url_auth                           |<PLACE AUTHENTICATION URL FOR ON DEMAND>                             |
ROW   |562              |31         |sd_on_premise                                   |true                                                                 |
ROW   |563              |31         |sd_on_premise_auth_token                        |<PLACE ON PREMISE TECHNICIAN_KEY>                                    |
ROW   |564              |31         |sd_request_id                                   |{EVENT.TAGS.__zbx_sd_request_id}                                     |
ROW   |565              |31         |sd_url                                          |<PLACE INSTANCE URL>                                                 |
ROW   |566              |31         |trigger_description                             |{TRIGGER.DESCRIPTION}                                                |
ROW   |567              |32         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |568              |32         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |569              |32         |event_id                                        |{EVENT.ID}                                                           |
ROW   |570              |32         |event_recovery_value                            |{EVENT.RECOVERY.VALUE}                                               |
ROW   |571              |32         |event_severity                                  |{EVENT.SEVERITY}                                                     |
ROW   |572              |32         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |573              |32         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |574              |32         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |575              |32         |github_issue_number                             |{EVENT.TAGS.__zbx_github_issue_number}                               |
ROW   |576              |32         |github_repo                                     |{ALERT.SENDTO}                                                       |
ROW   |577              |32         |github_token                                    |<PLACE GITHUB TOKEN>                                                 |
ROW   |578              |32         |github_url                                      |https://api.github.com                                               |
ROW   |579              |32         |github_user_agent                               |Zabbix/6.0                                                           |
ROW   |580              |32         |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |581              |32         |zabbix_url                                      |{$ZABBIX.URL}                                                        |
ROW   |582              |33         |alert_message                                   |{ALERT.MESSAGE}                                                      |
ROW   |583              |33         |alert_subject                                   |{ALERT.SUBJECT}                                                      |
ROW   |584              |33         |event_id                                        |{EVENT.ID}                                                           |
ROW   |585              |33         |event_nseverity                                 |{EVENT.NSEVERITY}                                                    |
ROW   |586              |33         |event_recovery_value                            |{EVENT.RECOVERY.VALUE}                                               |
ROW   |587              |33         |event_source                                    |{EVENT.SOURCE}                                                       |
ROW   |588              |33         |event_update_status                             |{EVENT.UPDATE.STATUS}                                                |
ROW   |589              |33         |event_value                                     |{EVENT.VALUE}                                                        |
ROW   |590              |33         |glpi_problem_id                                 |{EVENT.TAGS.__zbx_glpi_problem_id}                                   |
ROW   |591              |33         |glpi_token                                      |<PLACE GLPI TOKEN>                                                   |
ROW   |592              |33         |glpi_url                                        |<PLACE GLPI URL>                                                     |
ROW   |593              |33         |trigger_id                                      |{TRIGGER.ID}                                                         |
ROW   |594              |33         |zabbix_url                                      |{$ZABBIX.URL}                                                        |

TABLE |media_type_message
FIELDS|mediatype_messageid|mediatypeid|eventsource|recovery|subject                                                          |message                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
ROW   |1                  |1          |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |2                  |1          |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Problem duration: {EVENT.DURATION}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                      |
ROW   |3                  |1          |0          |2       |Updated problem in {EVENT.AGE}: {EVENT.NAME}                     |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                     |
ROW   |4                  |1          |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |5                  |1          |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |6                  |3          |0          |0       |                                                                 |{EVENT.SEVERITY}: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;{EVENT.DATE} {EVENT.TIME}                                                                                                                                                                                                                                                                                                                                                                                                                                |
ROW   |7                  |3          |0          |1       |                                                                 |Resolved in {EVENT.DURATION}: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;{EVENT.DATE} {EVENT.TIME}                                                                                                                                                                                                                                                                                                                                                                                                                    |
ROW   |8                  |3          |0          |2       |                                                                 |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem in {EVENT.AGE} at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}                                                                                                                                                                                                                                                                                                                                                                                                           |
ROW   |9                  |3          |1          |0       |                                                                 |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
ROW   |10                 |3          |2          |0       |                                                                 |Autoregistration: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                  |
ROW   |11                 |4          |0          |0       |Problem: {EVENT.NAME}                                            |<b>Problem started</b> at {EVENT.TIME} on {EVENT.DATE}<br><b>Problem name:</b> {EVENT.NAME}<br><b>Host:</b> {HOST.NAME}<br><b>Severity:</b> {EVENT.SEVERITY}<br><b>Operational data:</b> {EVENT.OPDATA}<br><b>Original problem ID:</b> {EVENT.ID}<br>{TRIGGER.URL}                                                                                                                                                                                                                                                |
ROW   |12                 |4          |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |<b>Problem has been resolved</b> at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}<br><b>Problem name:</b> {EVENT.NAME}<br><b>Problem duration:</b> {EVENT.DURATION}<br><b>Host:</b> {HOST.NAME}<br><b>Severity:</b> {EVENT.SEVERITY}<br><b>Original problem ID:</b> {EVENT.ID}<br>{TRIGGER.URL}                                                                                                                                                                                                                  |
ROW   |13                 |4          |0          |2       |Updated problem in {EVENT.AGE}: {EVENT.NAME}                     |<b>{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem</b> at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.<br>{EVENT.UPDATE.MESSAGE}<br><br><b>Current problem status:</b> {EVENT.STATUS}<br><b>Age:</b> {EVENT.AGE}<br><b>Acknowledged:</b> {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                            |
ROW   |14                 |4          |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|<b>Discovery rule:</b> {DISCOVERY.RULE.NAME}<br><br><b>Device IP:</b> {DISCOVERY.DEVICE.IPADDRESS}<br><b>Device DNS:</b> {DISCOVERY.DEVICE.DNS}<br><b>Device status:</b> {DISCOVERY.DEVICE.STATUS}<br><b>Device uptime:</b> {DISCOVERY.DEVICE.UPTIME}<br><br><b>Device service name:</b> {DISCOVERY.SERVICE.NAME}<br><b>Device service port:</b> {DISCOVERY.SERVICE.PORT}<br><b>Device service status:</b> {DISCOVERY.SERVICE.STATUS}<br><b>Device service uptime:</b> {DISCOVERY.SERVICE.UPTIME}                 |
ROW   |15                 |4          |2          |0       |Autoregistration: {HOST.HOST}                                    |<b>Host name:</b> {HOST.HOST}<br><b>Host IP:</b> {HOST.IP}<br><b>Agent port:</b> {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                      |
ROW   |16                 |11         |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |17                 |11         |0          |1       |Resolved: {EVENT.NAME}                                           |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |18                 |11         |0          |2       |Updated problem: {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |19                 |11         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |20                 |11         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |21                 |12         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |22                 |12         |0          |1       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |23                 |12         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |24                 |12         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |25                 |12         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |26                 |13         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |27                 |13         |0          |1       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |28                 |13         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |29                 |13         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |30                 |13         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |31                 |14         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |32                 |14         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |33                 |14         |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |34                 |14         |0          |1       |Resolved: {EVENT.NAME}                                           |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |35                 |14         |0          |2       |Updated problem: {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |36                 |15         |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |37                 |15         |0          |1       |Resolved: {EVENT.NAME}                                           |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |38                 |15         |0          |2       |Updated problem: {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |39                 |15         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |40                 |15         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |41                 |16         |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |42                 |16         |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |43                 |16         |0          |2       |Updated problem: {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |44                 |16         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |45                 |16         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |46                 |17         |0          |0       |{EVENT.NAME}                                                     |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |47                 |17         |0          |1       |{EVENT.NAME}                                                     |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                    |
ROW   |48                 |17         |0          |2       |{EVENT.NAME}                                                     |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |49                 |17         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |50                 |17         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |51                 |17         |3          |0       |Internal problem: {EVENT.NAME}                                   |Internal problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}                                                                                                                                                                                                                                                                                                                            |
ROW   |52                 |18         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |53                 |18         |0          |1       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |54                 |18         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |55                 |18         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |56                 |18         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |57                 |19         |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |58                 |19         |0          |1       |Resolved: {EVENT.RECOVERY.NAME}                                  |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.RECOVERY.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                |
ROW   |59                 |19         |0          |2       |Updated problem: {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |60                 |19         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |61                 |19         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |62                 |20         |0          |0       |{EVENT.NAME}                                                     |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |63                 |20         |0          |1       |{EVENT.NAME}                                                     |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |64                 |20         |0          |2       |{EVENT.NAME}                                                     |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |65                 |20         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |66                 |20         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |67                 |21         |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |68                 |21         |0          |1       |Resolved: {EVENT.NAME}                                           |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |69                 |21         |0          |2       |Updated problem: {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |70                 |21         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |71                 |21         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |72                 |10         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |73                 |10         |0          |1       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |74                 |10         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |75                 |10         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |76                 |10         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |77                 |22         |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |78                 |22         |0          |2       |Updated problem in {EVENT.AGE}: {EVENT.NAME}                     |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                     |
ROW   |79                 |22         |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Problem duration: {EVENT.DURATION}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                      |
ROW   |80                 |5          |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |81                 |5          |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Problem duration: {EVENT.DURATION}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                      |
ROW   |82                 |5          |0          |2       |Updated problem in {EVENT.AGE}: {EVENT.NAME}                     |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                     |
ROW   |83                 |5          |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |84                 |5          |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |85                 |6          |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |86                 |6          |0          |2       |Updated problem in {EVENT.AGE}: {EVENT.NAME}                     |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                     |
ROW   |87                 |6          |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |88                 |6          |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |89                 |6          |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Problem duration: {EVENT.DURATION}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                      |
ROW   |90                 |7          |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |91                 |7          |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Problem duration: {EVENT.DURATION}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                      |
ROW   |92                 |7          |0          |2       |Updated problem in {EVENT.AGE}: {EVENT.NAME}                     |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                     |
ROW   |93                 |7          |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |94                 |7          |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |95                 |8          |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |96                 |8          |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Problem duration: {EVENT.DURATION}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                      |
ROW   |97                 |8          |0          |2       |Updated problem in {EVENT.AGE}: {EVENT.NAME}                     |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                     |
ROW   |98                 |8          |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |99                 |8          |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |100                |9          |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |101                |9          |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Problem duration: {EVENT.DURATION}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                      |
ROW   |102                |9          |0          |2       |Updated problem in {EVENT.AGE}: {EVENT.NAME}                     |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                     |
ROW   |103                |9          |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |104                |9          |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |105                |23         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;&eol;Trigger description: {TRIGGER.DESCRIPTION}                                                                                                                                                                                                                                                  |
ROW   |106                |23         |0          |1       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |107                |23         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |108                |23         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |109                |23         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |110                |24         |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |111                |24         |0          |1       |Resolved: {EVENT.NAME}                                           |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |112                |24         |0          |2       |Updated problem: {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |113                |24         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |114                |24         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |115                |25         |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |116                |25         |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Problem duration: {EVENT.DURATION}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                      |
ROW   |117                |25         |0          |2       |Updated problem in {EVENT.AGE}: {EVENT.NAME}                     |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                     |
ROW   |118                |25         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |119                |25         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |120                |26         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |121                |26         |0          |1       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |122                |26         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |123                |26         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |124                |26         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |125                |27         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |126                |27         |0          |1       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |127                |27         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |128                |27         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |129                |27         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |130                |28         |0          |0       |Problem: {EVENT.NAME}                                            |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |131                |28         |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Problem duration: {EVENT.DURATION}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                      |
ROW   |132                |28         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |133                |28         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |134                |28         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |135                |29         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |[{EVENT.STATUS}] {EVENT.NAME}&eol;Started at {EVENT.TIME} on {EVENT.DATE}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Event info: {$ZABBIX.URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}                                                                                                                                                                                                                                                         |
ROW   |136                |29         |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |[{EVENT.STATUS}] {EVENT.NAME}&eol;Resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Event info: {$ZABBIX.URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}                                                                                                                                                                                                                                                       |
ROW   |137                |29         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |[{EVENT.STATUS}] {EVENT.NAME}&eol;&eol;{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}                                                                                                                                                                                                                                                                                                                                                       |
ROW   |138                |29         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}&eol;Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}|
ROW   |139                |29         |2          |0       |Autoregistration: {HOST.HOST}                                    |Autoregistration: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                  |
ROW   |140                |30         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |[{EVENT.STATUS}] {EVENT.NAME}&eol;Started at {EVENT.TIME} on {EVENT.DATE}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Event info: {$ZABBIX.URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}                                                                                                                                                                                                                                                         |
ROW   |141                |30         |0          |1       |Resolved in {EVENT.DURATION}: {EVENT.NAME}                       |[{EVENT.STATUS}] {EVENT.NAME}&eol;Resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Event info: {$ZABBIX.URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}                                                                                                                                                                                                                                                       |
ROW   |142                |30         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |[{EVENT.STATUS}] {EVENT.NAME}&eol;&eol;{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}                                                                                                                                                                                                                                                                                                                                                       |
ROW   |143                |30         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}&eol;Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}|
ROW   |144                |30         |2          |0       |Autoregistration: {HOST.HOST}                                    |Autoregistration: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                  |
ROW   |145                |31         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |146                |31         |0          |1       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |147                |31         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |148                |31         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |149                |31         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |150                |32         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |151                |32         |0          |1       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |152                |32         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |153                |32         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |154                |32         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |
ROW   |155                |33         |0          |0       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem started at {EVENT.TIME} on {EVENT.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Operational data: {EVENT.OPDATA}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                                    |
ROW   |156                |33         |0          |1       |[{EVENT.STATUS}] {EVENT.NAME}                                    |Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&eol;Problem name: {EVENT.NAME}&eol;Host: {HOST.NAME}&eol;Severity: {EVENT.SEVERITY}&eol;Original problem ID: {EVENT.ID}&eol;{TRIGGER.URL}                                                                                                                                                                                                                                                                         |
ROW   |157                |33         |0          |2       |[{EVENT.STATUS}] {EVENT.NAME}                                    |{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&eol;{EVENT.UPDATE.MESSAGE}&eol;&eol;Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.                                                                                                                                                                                                                                                                                                         |
ROW   |158                |33         |1          |0       |Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}|Discovery rule: {DISCOVERY.RULE.NAME}&eol;&eol;Device IP: {DISCOVERY.DEVICE.IPADDRESS}&eol;Device DNS: {DISCOVERY.DEVICE.DNS}&eol;Device status: {DISCOVERY.DEVICE.STATUS}&eol;Device uptime: {DISCOVERY.DEVICE.UPTIME}&eol;&eol;Device service name: {DISCOVERY.SERVICE.NAME}&eol;Device service port: {DISCOVERY.SERVICE.PORT}&eol;Device service status: {DISCOVERY.SERVICE.STATUS}&eol;Device service uptime: {DISCOVERY.SERVICE.UPTIME}                                                                      |
ROW   |159                |33         |2          |0       |Autoregistration: {HOST.HOST}                                    |Host name: {HOST.HOST}&eol;Host IP: {HOST.IP}&eol;Agent port: {HOST.PORT}                                                                                                                                                                                                                                                                                                                                                                                                                                         |

TABLE |usrgrp
FIELDS|usrgrpid|name                     |gui_access|users_status|debug_mode|userdirectoryid|
ROW   |7       |Zabbix administrators    |0         |0           |0         |NULL           |
ROW   |8       |Guests                   |1         |0           |0         |NULL           |
ROW   |9       |Disabled                 |0         |1           |0         |NULL           |
ROW   |11      |Enabled debug mode       |0         |0           |1         |NULL           |
ROW   |12      |No access to the frontend|3         |0           |0         |NULL           |

TABLE |users_groups
FIELDS|id  |usrgrpid|userid|
ROW   |2   |8       |2     |
ROW   |3   |9       |2     |
ROW   |4   |7       |1     |

TABLE |scripts
FIELDS|scriptid|name                   |command                                                       |host_access|usrgrpid|groupid|description|confirmation|type|execute_on|timeout|scope|port|authtype|username|password|publickey|privatekey|menu_path|
ROW   |1       |Ping                   |ping -c 3 {HOST.CONN}; case $? in [01]) true;; *) false;; esac|2          |NULL    |NULL   |           |            |0   |2         |30s    |2    |    |0       |        |        |         |          |         |
ROW   |2       |Traceroute             |/usr/bin/traceroute {HOST.CONN}                               |2          |NULL    |NULL   |           |            |0   |2         |30s    |2    |    |0       |        |        |         |          |         |
ROW   |3       |Detect operating system|sudo /usr/bin/nmap -O {HOST.CONN}                             |2          |7       |NULL   |           |            |0   |2         |30s    |2    |    |0       |        |        |         |          |         |

TABLE |actions
FIELDS|actionid|name                                          |eventsource|evaltype|status|esc_period|formula|pause_suppressed|notify_if_canceled|
ROW   |2       |Auto discovery. Linux servers.                |1          |0       |1     |0         |       |1               |1                 |
ROW   |3       |Report problems to Zabbix administrators      |0          |0       |1     |1h        |       |1               |1                 |
ROW   |4       |Report not supported items                    |3          |0       |1     |1h        |       |1               |1                 |
ROW   |5       |Report not supported low level discovery rules|3          |0       |1     |1h        |       |1               |1                 |
ROW   |6       |Report unknown triggers                       |3          |0       |1     |1h        |       |1               |1                 |

TABLE |operations
FIELDS|operationid|actionid|operationtype|esc_period|esc_step_from|esc_step_to|evaltype|recovery|
ROW   |1          |2       |6            |0         |1            |1          |0       |0       |
ROW   |2          |2       |4            |0         |1            |1          |0       |0       |
ROW   |3          |3       |0            |0         |1            |1          |0       |0       |
ROW   |4          |4       |0            |0         |1            |1          |0       |0       |
ROW   |5          |5       |0            |0         |1            |1          |0       |0       |
ROW   |6          |6       |0            |0         |1            |1          |0       |0       |
ROW   |7          |3       |11           |0         |1            |1          |0       |1       |
ROW   |8          |4       |11           |0         |1            |1          |0       |1       |
ROW   |9          |5       |11           |0         |1            |1          |0       |1       |
ROW   |10         |6       |11           |0         |1            |1          |0       |1       |

TABLE |opmessage
FIELDS|operationid|default_msg|subject|message|mediatypeid|
ROW   |3          |1          |       |       |NULL       |
ROW   |4          |1          |       |       |NULL       |
ROW   |5          |1          |       |       |NULL       |
ROW   |6          |1          |       |       |NULL       |
ROW   |7          |1          |       |       |NULL       |
ROW   |8          |1          |       |       |NULL       |
ROW   |9          |1          |       |       |NULL       |
ROW   |10         |1          |       |       |NULL       |

TABLE |opmessage_grp
FIELDS|opmessage_grpid|operationid|usrgrpid|
ROW   |1              |3          |7       |
ROW   |2              |4          |7       |
ROW   |3              |5          |7       |
ROW   |4              |6          |7       |

TABLE |opgroup
FIELDS|opgroupid|operationid|groupid|
ROW   |1        |2          |2      |

TABLE |conditions
FIELDS|conditionid|actionid|conditiontype|operator|value|value2|
ROW   |2          |2       |10           |0       |0    |      |
ROW   |3          |2       |8            |0       |9    |      |
ROW   |4          |2       |12           |2       |Linux|      |
ROW   |6          |4       |23           |0       |0    |      |
ROW   |7          |5       |23           |0       |2    |      |
ROW   |8          |6       |23           |0       |4    |      |

TABLE |config
FIELDS|configid|work_period    |alert_usrgrpid|discovery_groupid|dbversion_status|geomaps_tile_provider|ldap_userdirectoryid|
ROW   |1       |1-5,09:00-18:00|7             |5                |                |OpenStreetMap.Mapnik |NULL                |

TABLE |graph_theme
FIELDS|graphthemeid|theme     |backgroundcolor|graphcolor|gridcolor|maingridcolor|gridbordercolor|textcolor|highlightcolor|leftpercentilecolor|rightpercentilecolor|nonworktimecolor|colorpalette                                                                                                                                      |
ROW   |1           |blue-theme|FFFFFF         |FFFFFF    |CCD5D9   |ACBBC2       |ACBBC2         |1F2C33   |E33734        |429E47             |E33734              |EBEBEB          |1A7C11,F63100,2774A4,A54F10,FC6EA3,6C59DC,AC8C14,611F27,F230E0,5CCD18,BB2A02,5A2B57,89ABF8,7EC25C,274482,2B5429,8048B4,FD5434,790E1F,87AC4D,E89DF4|
ROW   |2           |dark-theme|2B2B2B         |2B2B2B    |454545   |4F4F4F       |4F4F4F         |F2F2F2   |E45959        |59DB8F             |E45959              |333333          |199C0D,F63100,2774A4,F7941D,FC6EA3,6C59DC,C7A72D,BA2A5D,F230E0,5CCD18,BB2A02,AC41A5,89ABF8,7EC25C,3165D5,79A277,AA73DE,FD5434,F21C3E,87AC4D,E89DF4|
ROW   |3           |hc-light  |FFFFFF         |FFFFFF    |555555   |000000       |333333         |000000   |333333        |000000             |000000              |EBEBEB          |1A7C11,F63100,2774A4,A54F10,FC6EA3,6C59DC,AC8C14,611F27,F230E0,5CCD18,BB2A02,5A2B57,89ABF8,7EC25C,274482,2B5429,8048B4,FD5434,790E1F,87AC4D,E89DF4|
ROW   |4           |hc-dark   |000000         |000000    |666666   |888888       |4F4F4F         |FFFFFF   |FFFFFF        |FFFFFF             |FFFFFF              |333333          |199C0D,F63100,2774A4,F7941D,FC6EA3,6C59DC,C7A72D,BA2A5D,F230E0,5CCD18,BB2A02,AC41A5,89ABF8,7EC25C,3165D5,79A277,AA73DE,FD5434,F21C3E,87AC4D,E89DF4|

TABLE |globalmacro
FIELDS|globalmacroid|macro            |value |description|type|
ROW   |2            |{$SNMP_COMMUNITY}|public|           |0   |

TABLE |regexps
FIELDS|regexpid|name                                        |test_string|
ROW   |1       |File systems for discovery                  |ext3       |
ROW   |2       |Network interfaces for discovery            |eth0       |
ROW   |3       |Storage devices for SNMP discovery          |/boot      |
ROW   |4       |Windows service names for discovery         |SysmonLog  |
ROW   |5       |Windows service startup states for discovery|automatic  |

TABLE |expressions
FIELDS|expressionid|regexpid|expression                                                                                                                                                            |expression_type|exp_delimiter|case_sensitive|
ROW   |1           |1       |^(btrfs&pipe;ext2&pipe;ext3&pipe;ext4&pipe;reiser&pipe;xfs&pipe;ffs&pipe;ufs&pipe;jfs&pipe;jfs2&pipe;vxfs&pipe;hfs&pipe;apfs&pipe;refs&pipe;ntfs&pipe;fat32&pipe;zfs)$|3              |,            |0             |
ROW   |3           |3       |^(Physical memory&pipe;Virtual memory&pipe;Memory buffers&pipe;Cached memory&pipe;Swap space)$                                                                        |4              |,            |1             |
ROW   |5           |4       |^(MMCSS&pipe;gupdate&pipe;SysmonLog&pipe;clr_optimization_v2.0.50727_32&pipe;clr_optimization_v4.0.30319_32)$                                                         |4              |,            |1             |
ROW   |6           |5       |^(automatic&pipe;automatic delayed)$                                                                                                                                  |3              |,            |1             |
ROW   |7           |2       |^Software Loopback Interface                                                                                                                                          |4              |,            |1             |
ROW   |8           |2       |^(In)?[Ll]oop[Bb]ack[0-9._]*$                                                                                                                                         |4              |,            |1             |
ROW   |9           |2       |^NULL[0-9.]*$                                                                                                                                                         |4              |,            |1             |
ROW   |10          |2       |^[Ll]o[0-9.]*$                                                                                                                                                        |4              |,            |1             |
ROW   |11          |2       |^[Ss]ystem$                                                                                                                                                           |4              |,            |1             |
ROW   |12          |2       |^Nu[0-9.]*$                                                                                                                                                           |4              |,            |1             |

TABLE |config_autoreg_tls
FIELDS|autoreg_tlsid|tls_psk_identity|tls_psk|
ROW   |1            |                |       |

TABLE |role_rule
FIELDS|role_ruleid|roleid|type|name                  |value_int|value_str|value_moduleid|value_serviceid|
ROW   |1          |1     |0   |ui.default_access     |1        |         |NULL          |NULL           |
ROW   |2          |1     |0   |services.read         |1        |         |NULL          |NULL           |
ROW   |3          |1     |0   |services.write        |0        |         |NULL          |NULL           |
ROW   |4          |1     |0   |modules.default_access|1        |         |NULL          |NULL           |
ROW   |5          |1     |0   |api.access            |1        |         |NULL          |NULL           |
ROW   |6          |1     |0   |api.mode              |0        |         |NULL          |NULL           |
ROW   |7          |1     |0   |actions.default_access|1        |         |NULL          |NULL           |
ROW   |8          |2     |0   |ui.default_access     |1        |         |NULL          |NULL           |
ROW   |9          |2     |0   |services.read         |1        |         |NULL          |NULL           |
ROW   |10         |2     |0   |services.write        |1        |         |NULL          |NULL           |
ROW   |11         |2     |0   |modules.default_access|1        |         |NULL          |NULL           |
ROW   |12         |2     |0   |api.access            |1        |         |NULL          |NULL           |
ROW   |13         |2     |0   |api.mode              |0        |         |NULL          |NULL           |
ROW   |14         |2     |0   |actions.default_access|1        |         |NULL          |NULL           |
ROW   |15         |3     |0   |ui.default_access     |1        |         |NULL          |NULL           |
ROW   |16         |3     |0   |services.read         |1        |         |NULL          |NULL           |
ROW   |17         |3     |0   |services.write        |1        |         |NULL          |NULL           |
ROW   |18         |3     |0   |modules.default_access|1        |         |NULL          |NULL           |
ROW   |19         |3     |0   |api.access            |1        |         |NULL          |NULL           |
ROW   |20         |3     |0   |api.mode              |0        |         |NULL          |NULL           |
ROW   |21         |3     |0   |actions.default_access|1        |         |NULL          |NULL           |
ROW   |22         |4     |0   |ui.default_access     |1        |         |NULL          |NULL           |
ROW   |23         |4     |0   |services.read         |1        |         |NULL          |NULL           |
ROW   |24         |4     |0   |services.write        |0        |         |NULL          |NULL           |
ROW   |25         |4     |0   |modules.default_access|1        |         |NULL          |NULL           |
ROW   |26         |4     |0   |api.access            |0        |         |NULL          |NULL           |
ROW   |27         |4     |0   |actions.default_access|0        |         |NULL          |NULL           |