115 lines
4.0 KiB
Markdown
Executable File
115 lines
4.0 KiB
Markdown
Executable File
# zabbix to tg dashboard
|
||
|
||
swagger - https://osnova-api-alert.sm8255082.ru/docs
|
||
|
||
endpoints:
|
||
- https://osnova-api-alert.sm8255082.ru/ping (get, post)
|
||
без авторизации, без параметров
|
||
- https://osnova-api-alert.sm8255082.ru/api/v1/zbx/send-to-dashboard (post)
|
||
в заголовке должен быть токен 'x-api-key: токен'
|
||
должны предаваться в data:
|
||
|
||
```json
|
||
{
|
||
"message": "str - текст сообщения вместе с темой",
|
||
"event_id": "int - id алерта",
|
||
"event_value": "int - 0, если ОК, 1, если проблема ",
|
||
"tg_tread_id": "int - id подчата ",
|
||
"tg_chat_id": "int - id чата",
|
||
"tg_token": "str - токен телеграм бота"
|
||
|
||
```
|
||
|
||
Параметры для mediatype:
|
||
|
||
```
|
||
parameters:
|
||
- name: ApiToken
|
||
value: страшносекурныйтокен
|
||
- name: ApiURL
|
||
value: 'https://example.com/api/v1/zbx/send-to-dashboard'
|
||
- name: event_id
|
||
value: '{EVENT.ID}'
|
||
- name: event_severity
|
||
value: '{EVENT.SEVERITY}'
|
||
- name: event_value
|
||
value: '{EVENT.VALUE}'
|
||
- name: message
|
||
value: '{ALERT.MESSAGE}'
|
||
- name: subject
|
||
value: '{ALERT.SUBJECT}'
|
||
- name: tg_chat_id
|
||
value: '{$TG_CHAT_ID}'
|
||
- name: tg_token
|
||
value: '{$TG_BOT_TOKEN}'
|
||
- name: tg_tread_id
|
||
value: '{ALERT.SENDTO}'
|
||
```
|
||
|
||
Пример js для заббикса:
|
||
|
||
```javascript
|
||
function sendMessage(value) {
|
||
var params = JSON.parse(value),
|
||
data,
|
||
response,
|
||
request = new HttpRequest(),
|
||
url = params.ApiURL;
|
||
request.addHeader('Content-Type: application/json');
|
||
request.addHeader('x-api-key: ' + params.ApiToken);
|
||
if (params.event_severity === 'Not classified') {
|
||
params.message = '⚪️' + params.subject + '⚪️' + '\n' + params.message;
|
||
} else if (params.event_severity === 'Information') {
|
||
params.message = '🔵' + params.subject + '🔵' + '\n' + params.message;
|
||
} else if (params.event_severity === 'Warning') {
|
||
params.message = '🟡' + params.subject + '🟡' + '\n' + params.message;
|
||
} else if (params.event_severity === 'Average') {
|
||
params.message = '🟠' + params.subject + '🟠' + '\n' + params.message;
|
||
} else if (params.event_severity === 'High') {
|
||
params.message = '🔴' + params.subject + '🔴' + '\n' + params.message;
|
||
} else if (params.event_severity === 'Disaster') {
|
||
params.message = '🟤' + params.subject + '🟤' + '\n' + params.message;
|
||
} else {
|
||
params.message = params.subject + '\n' + params.message;
|
||
}
|
||
data = JSON.stringify(params);
|
||
response = request.post(url, data);
|
||
|
||
if (request.getStatus() === 200) {
|
||
return 'OK';
|
||
}
|
||
else {
|
||
if (typeof response.description === 'string') {
|
||
throw response.description;
|
||
}
|
||
else {
|
||
throw 'Unknown error. Check debug log for more information.';
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
try {
|
||
sendMessage(value);
|
||
return 'OK';
|
||
}
|
||
catch (error) {
|
||
throw 'Unknown error ' + error;
|
||
}
|
||
```
|
||
|
||
|
||
You can try to get the message_thread_id from the message link
|
||
|
||
- send a message to the topic you need from the application
|
||
- right click on the sent message and choose "Copy message link"
|
||
- paste link somewhere
|
||
- you will see something like this: https://t.me/c/1112223334/25/33
|
||
- the value 25(value after long number) from the link will be message_thread_id
|
||
|
||
I assume that -100 + 1112223334 - will be equal chat_id
|
||
|
||
The number after will be message_thread_id
|
||
|
||
And the last one should be message_id
|