/
Said
/
Zabbix_bitrix
Обзор
Документация
Войти
/
Said
/
Zabbix_bitrix
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
webhook_create_task_bitrix.js
272 строки
10 KB
Саид Гаджиев
first_commit
06 июл 2026, 11:23
06 июл 2026, 11:23
3d28c30
Код
Авторство
О чём код?
var Bitrix24Task = { webhookUrl: null, webhookUrlList: null, webhookURLmessege: null, creatorId: null, responsibleId: null, auditorsId: null, hostName: null, eventId: null, eventName: null, eventSeverity: null, eventDate: null, eventMessage: null, priority: 'average', validateSSL: true, // Поиск существующих открытых задач для хоста findExistingTask: function () { var params = { filter: { REAL_STATUS: ['2', '3', '4'], // Активные статусы: 2=ждет выполнения, 3=выполняется, 4=ожидает контроля TITLE: this.hostName // Поиск по названию хоста (используется SQL-подобный шаблон %) }, select: ['ID', 'TITLE', 'REAL_STATUS', 'CREATED_DATE'] }, data, response, request = new HttpRequest(); if (this.validateSSL === false) { request.setValidatePeer(false); } request.addHeader('Content-Type: application/json'); request.addHeader('Accept: application/json'); data = JSON.stringify(params); Zabbix.log(4, '[Bitrix24 Task] Searching for existing tasks...'); Zabbix.log(4, '[Bitrix24 Task] Search URL: ' + this.webhookUrlList); Zabbix.log(4, '[Bitrix24 Task] Search params: ' + data); response = request.post(this.webhookUrlList, data); Zabbix.log(4, '[Bitrix24 Task] HTTP code: ' + request.getStatus()); Zabbix.log(4, '[Bitrix24 Task] Response: ' + response); try { response = JSON.parse(response); } catch (error) { Zabbix.log(4, '[Bitrix24 Task] Parse error: ' + error); return null; } // Ответ приходит в формате result.tasks if (request.getStatus() === 200 && typeof response.result !== 'undefined' && typeof response.result.tasks !== 'undefined') { var tasks = response.result.tasks; if (tasks && tasks.length > 0) { Zabbix.log(4, '[Bitrix24 Task] Found ' + tasks.length + ' existing task(s)'); return tasks[0]; } } Zabbix.log(4, '[Bitrix24 Task] No existing tasks found'); return null; }, // Отправка сообщения в чат существующей задачи (новый метод) sendMessageToTask: function (taskId) { var params = { taskId: parseInt(taskId), fields: { POST_MESSAGE: this.eventMessage, AUTHOR_ID: 852, } }, data, response, request = new HttpRequest(); if (this.validateSSL === false) { request.setValidatePeer(false); } request.addHeader('Content-Type: application/json'); request.addHeader('Accept: application/json'); data = JSON.stringify(params); Zabbix.log(4, '[Bitrix24 Task] Sending message to task ' + taskId); Zabbix.log(4, '[Bitrix24 Task] Message URL: ' + this.webhookURLmessege); Zabbix.log(4, '[Bitrix24 Task] Message params: ' + data); response = request.post(this.webhookURLmessege, data); Zabbix.log(4, '[Bitrix24 Task] HTTP code: ' + request.getStatus()); Zabbix.log(4, '[Bitrix24 Task] Response: ' + response); try { response = JSON.parse(response); } catch (error) { Zabbix.log(4, '[Bitrix24 Task] Parse error: ' + error); return false; } if (request.getStatus() === 200 && typeof response.result !== 'undefined') { Zabbix.log(4, '[Bitrix24 Task] Message sent successfully'); return true; } else { Zabbix.log(4, '[Bitrix24 Task] Failed to send message: ' + JSON.stringify(response)); return false; } }, // Создание новой задачи createTask: function () { var title = '🔴 [' + this.eventSeverity + '] ' + this.hostName + ': ' + this.eventName; var description = '[b]Хост:[/b] ' + this.hostName + '\n' + '[b]Событие: УЗЕЛ НЕ ДОСТУПЕН[/b] ' + this.eventName + '\n' + '[b]Важность:[/b] ' + this.eventSeverity + '\n' + '[b]Дата:[/b] ' + this.eventDate + '\n\n' + '[b]Описание:[/b]' + this.eventMessage + '\n\n' + '[b]Event ID:[/b] ' + this.eventId + '\n' + '[i]Задача создана автоматически из Zabbix[/i]'; var auditors = null; if (this.auditorsId && this.auditorsId.length > 0) { auditors = this.auditorsId.map(function(id) { return parseInt(id); }); } var params = { fields: { TITLE: title, DESCRIPTION: description, DESCRIPTION_IN_BBCODE: 'Y', CREATOR_ID: parseInt(this.creatorId), RESPONSIBLE_ID: parseInt(this.responsibleId), PRIORITY: this.priority, STATUS: '2', GROUP_ID: '121' } }; if (auditors) { params.fields.AUDITORS = auditors; } var data, response, request = new HttpRequest(); if (this.validateSSL === false) { request.setValidatePeer(false); } request.addHeader('Content-Type: application/json'); request.addHeader('Accept: application/json'); data = JSON.stringify(params); Zabbix.log(4, '[Bitrix24 Task] Creating new task...'); Zabbix.log(4, '[Bitrix24 Task] Create URL: ' + this.webhookUrl); Zabbix.log(4, '[Bitrix24 Task] params: ' + data); response = request.post(this.webhookUrl, data); Zabbix.log(4, '[Bitrix24 Task] HTTP code: ' + request.getStatus()); Zabbix.log(4, '[Bitrix24 Task] response: ' + response); try { response = JSON.parse(response); } catch (error) { response = null; } if (request.getStatus() !== 200 || typeof response.result === 'undefined') { if (typeof response.error !== 'undefined' && typeof response.error.message === 'string') { throw response.error.message; } else { throw 'Unknown error. Check debug log for more information.'; } } return response.result.task.id; } }; try { var params = JSON.parse(value); if (typeof params.WebhookURL === 'undefined') { throw 'Parameter "WebhookURL" is missing'; } if (typeof params.WebhookURLList === 'undefined') { throw 'Parameter "WebhookURLList" is missing (needed for checking existing tasks)'; } if (typeof params.WebhookURLmessege === 'undefined') { throw 'Parameter "WebhookURLmessege" is missing (needed for sending messages)'; } if (typeof params.CreatorID === 'undefined') { throw 'Parameter "CreatorID" is missing'; } if (typeof params.ResponsibleID === 'undefined') { throw 'Parameter "ResponsibleID" is missing'; } Bitrix24Task.webhookUrl = params.WebhookURL; Bitrix24Task.webhookUrlList = params.WebhookURLList; Bitrix24Task.webhookURLmessege = params.WebhookURLmessege; Bitrix24Task.creatorId = params.CreatorID; Bitrix24Task.responsibleId = params.ResponsibleID; if (typeof params.AuditorsID !== 'undefined' && params.AuditorsID) { Bitrix24Task.auditorsId = params.AuditorsID.split(',').map(function(id) { return id.trim(); }); } Bitrix24Task.hostName = params.HostName || 'Unknown'; Bitrix24Task.eventId = params.EventId || ''; Bitrix24Task.eventName = params.EventName || 'Problem'; Bitrix24Task.eventSeverity = params.EventSeverity || 'Average'; Bitrix24Task.eventDate = params.EventDate + ' ' + params.EventTime || ''; Bitrix24Task.eventMessage = params.Message || ''; if (typeof params.ValidateSSL !== 'undefined') { Bitrix24Task.validateSSL = (params.ValidateSSL.toString().toLowerCase() === 'true'); } var severity = Bitrix24Task.eventSeverity.toLowerCase(); if (severity === 'disaster' || severity === 'high') { Bitrix24Task.priority = '2'; } else if (severity === 'average') { Bitrix24Task.priority = '4'; } else { Bitrix24Task.priority = '5'; } var existingTask = Bitrix24Task.findExistingTask(); if (existingTask) { var taskId = existingTask.id || existingTask.ID; var taskTitle = existingTask.title || existingTask.TITLE; Zabbix.log(4, '[Bitrix24 Task] Task already exists: ID=' + taskId + ', Title=' + taskTitle); // Отправляем сообщение в чат существующей задачи var messageSent = Bitrix24Task.sendMessageToTask(taskId); if (messageSent) { return 'OK. Message sent to existing task: ID ' + taskId; } else { return 'Warning. Task exists but message failed: ID ' + taskId; } } var newTaskId = Bitrix24Task.createTask(); return 'OK. Task created: ID ' + newTaskId; } catch (error) { Zabbix.log(4, '[Bitrix24 Task] Error: ' + error); throw 'Task creation failed: ' + error + '.'; }