added Telegram media type with topics notification
This commit is contained in:
parent
c3b5196b24
commit
e9aaf4bbf6
|
@ -13,6 +13,8 @@ Templates, scripts and hints for Zabbix.
|
|||
* [certificate](templates/components/certificate/6.0)
|
||||
* [Sensors](templates/sensors)
|
||||
* [ds18b20](templates/sensors/ds18b20/6.0)
|
||||
* [Media](templates/media)
|
||||
* [Telegram](templates/media/telegram/6.0)
|
||||
|
||||
## Useful links
|
||||
|
||||
|
|
13
templates/media/telegram/6.0/README.md
Normal file
13
templates/media/telegram/6.0/README.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
# Telegram webhook
|
||||
|
||||
This template is modifided version of [original](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram) webhook. Template additionally supports topics notification.
|
||||
|
||||
## Zabbix setup
|
||||
|
||||
1\. In the "Administration > Media types" section, import the media_telegram.yaml.
|
||||
|
||||
2\. Configure the added media type:
|
||||
Copy and paste your Telegram bot token into the "telegramToken" field.
|
||||
|
||||
3\. To receive notifications in Telegram, you need to create a Zabbix user and add Media with the Telegram type.
|
||||
In the "Send to" field enter Telegram user chat ID or group ID or topic ID (example: ```-100123456789_123```) obtained during Telegram setup.
|
202
templates/media/telegram/6.0/media_telegram.yaml
Normal file
202
templates/media/telegram/6.0/media_telegram.yaml
Normal file
|
@ -0,0 +1,202 @@
|
|||
zabbix_export:
|
||||
version: '6.0'
|
||||
date: '2023-12-25T00:00:00Z'
|
||||
media_types:
|
||||
-
|
||||
name: Telegram
|
||||
type: WEBHOOK
|
||||
parameters:
|
||||
-
|
||||
name: Message
|
||||
value: '{ALERT.MESSAGE}'
|
||||
-
|
||||
name: ParseMode
|
||||
-
|
||||
name: Subject
|
||||
value: '{ALERT.SUBJECT}'
|
||||
-
|
||||
name: To
|
||||
value: '{ALERT.SENDTO}'
|
||||
-
|
||||
name: Token
|
||||
value: '<PLACE YOUR TOKEN>'
|
||||
script: |
|
||||
var Telegram = {
|
||||
token: null,
|
||||
to: null,
|
||||
message: null,
|
||||
proxy: null,
|
||||
parse_mode: null,
|
||||
|
||||
escapeMarkup: function (str, mode) {
|
||||
switch (mode) {
|
||||
case 'markdown':
|
||||
return str.replace(/([_*\[`])/g, '\\$&');
|
||||
|
||||
case 'markdownv2':
|
||||
return str.replace(/([_*\[\]()~`>#+\-=|{}.!])/g, '\\$&');
|
||||
|
||||
default:
|
||||
return str;
|
||||
}
|
||||
},
|
||||
|
||||
sendMessage: function () {
|
||||
var params = {
|
||||
chat_id: Telegram.to,
|
||||
text: Telegram.message,
|
||||
disable_web_page_preview: true,
|
||||
disable_notification: false
|
||||
},
|
||||
data,
|
||||
response,
|
||||
request = new HttpRequest(),
|
||||
url = 'https://api.telegram.org/bot' + Telegram.token + '/sendMessage';
|
||||
|
||||
if (Telegram.to.includes('_')) {
|
||||
params['chat_id'] = Telegram.to.split('_')[0];
|
||||
params['message_thread_id'] = Telegram.to.split('_')[1];
|
||||
}
|
||||
|
||||
if (Telegram.parse_mode !== null) {
|
||||
params['parse_mode'] = Telegram.parse_mode;
|
||||
}
|
||||
|
||||
if (Telegram.proxy) {
|
||||
request.setProxy(Telegram.proxy);
|
||||
}
|
||||
|
||||
request.addHeader('Content-Type: application/json');
|
||||
data = JSON.stringify(params);
|
||||
|
||||
// Remove replace() function if you want to see the exposed token in the log file.
|
||||
Zabbix.log(4, '[Telegram Webhook] URL: ' + url.replace(Telegram.token, '<TOKEN>'));
|
||||
Zabbix.log(4, '[Telegram Webhook] params: ' + data);
|
||||
response = request.post(url, data);
|
||||
Zabbix.log(4, '[Telegram Webhook] HTTP code: ' + request.getStatus());
|
||||
|
||||
try {
|
||||
response = JSON.parse(response);
|
||||
}
|
||||
catch (error) {
|
||||
response = null;
|
||||
}
|
||||
|
||||
if (request.getStatus() !== 200 || typeof response.ok !== 'boolean' || response.ok !== true) {
|
||||
if (typeof response.description === 'string') {
|
||||
throw response.description;
|
||||
}
|
||||
else {
|
||||
throw 'Unknown error. Check debug log for more information.';
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
var params = JSON.parse(value);
|
||||
|
||||
if (typeof params.Token === 'undefined') {
|
||||
throw 'Incorrect value is given for parameter "Token": parameter is missing';
|
||||
}
|
||||
|
||||
Telegram.token = params.Token;
|
||||
|
||||
if (params.HTTPProxy) {
|
||||
Telegram.proxy = params.HTTPProxy;
|
||||
}
|
||||
|
||||
params.ParseMode = params.ParseMode.toLowerCase();
|
||||
|
||||
if (['markdown', 'html', 'markdownv2'].indexOf(params.ParseMode) !== -1) {
|
||||
Telegram.parse_mode = params.ParseMode;
|
||||
}
|
||||
|
||||
Telegram.to = params.To;
|
||||
Telegram.thread = params.Thread;
|
||||
Telegram.message = params.Subject + '\n' + params.Message;
|
||||
|
||||
if (['markdown', 'markdownv2'].indexOf(params.ParseMode) !== -1) {
|
||||
Telegram.message = Telegram.escapeMarkup(Telegram.message, params.ParseMode);
|
||||
}
|
||||
|
||||
Telegram.sendMessage();
|
||||
|
||||
return 'OK';
|
||||
}
|
||||
catch (error) {
|
||||
Zabbix.log(4, '[Telegram Webhook] notification failed: ' + error);
|
||||
throw 'Sending failed: ' + error + '.';
|
||||
}
|
||||
timeout: 10s
|
||||
description: |
|
||||
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram
|
||||
|
||||
1. Register bot: send "/newbot" to @BotFather and follow instructions
|
||||
2. Copy and paste the obtained token into the "Token" field above
|
||||
3. If you want to send personal notifications, you need to get chat id of the user you want to send messages to:
|
||||
3.1. Send "/getid" to "@myidbot" in Telegram messenger
|
||||
3.2. Copy returned chat id and save it in the "Telegram Webhook" media for the user
|
||||
3.3. Ask the user to send "/start" to your bot (Telegram bot won't send anything to the user without it)
|
||||
4. If you want to send group notifications, you need to get group id of the group you want to send messages to:
|
||||
4.1. Add "@myidbot" to your group
|
||||
4.2. Send "/getgroupid@myidbot" in your group
|
||||
4.3. Copy returned group id save it in the "Telegram Webhook" media for the user you created for group notifications
|
||||
4.4. Send "/start@your_bot_name_here" in your group (Telegram bot won't send anything to the group without it)
|
||||
message_templates:
|
||||
-
|
||||
event_source: TRIGGERS
|
||||
operation_mode: PROBLEM
|
||||
subject: 'Problem: {EVENT.NAME}'
|
||||
message: |
|
||||
Problem started at {EVENT.TIME} on {EVENT.DATE}
|
||||
Problem name: {EVENT.NAME}
|
||||
Host: {HOST.NAME}
|
||||
Severity: {EVENT.SEVERITY}
|
||||
Operational data: {EVENT.OPDATA}
|
||||
Original problem ID: {EVENT.ID}
|
||||
{TRIGGER.URL}
|
||||
-
|
||||
event_source: TRIGGERS
|
||||
operation_mode: RECOVERY
|
||||
subject: 'Resolved in {EVENT.DURATION}: {EVENT.NAME}'
|
||||
message: |
|
||||
Problem has been resolved in {EVENT.DURATION} at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
|
||||
Problem name: {EVENT.NAME}
|
||||
Host: {HOST.NAME}
|
||||
Severity: {EVENT.SEVERITY}
|
||||
Original problem ID: {EVENT.ID}
|
||||
{TRIGGER.URL}
|
||||
-
|
||||
event_source: TRIGGERS
|
||||
operation_mode: UPDATE
|
||||
subject: 'Updated problem: {EVENT.NAME}'
|
||||
message: |
|
||||
{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.
|
||||
{EVENT.UPDATE.MESSAGE}
|
||||
|
||||
Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.
|
||||
-
|
||||
event_source: DISCOVERY
|
||||
operation_mode: PROBLEM
|
||||
subject: 'Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}'
|
||||
message: |
|
||||
Discovery rule: {DISCOVERY.RULE.NAME}
|
||||
|
||||
Device IP: {DISCOVERY.DEVICE.IPADDRESS}
|
||||
Device DNS: {DISCOVERY.DEVICE.DNS}
|
||||
Device status: {DISCOVERY.DEVICE.STATUS}
|
||||
Device uptime: {DISCOVERY.DEVICE.UPTIME}
|
||||
|
||||
Device service name: {DISCOVERY.SERVICE.NAME}
|
||||
Device service port: {DISCOVERY.SERVICE.PORT}
|
||||
Device service status: {DISCOVERY.SERVICE.STATUS}
|
||||
Device service uptime: {DISCOVERY.SERVICE.UPTIME}
|
||||
-
|
||||
event_source: AUTOREGISTRATION
|
||||
operation_mode: PROBLEM
|
||||
subject: 'Autoregistration: {HOST.HOST}'
|
||||
message: |
|
||||
Host name: {HOST.HOST}
|
||||
Host IP: {HOST.IP}
|
||||
Agent port: {HOST.PORT}
|
Loading…
Reference in New Issue
Block a user