Hi fellas
I am doing an integration with MS teams to my ZABBIX server.
I am getting this issue:

I am using this XML ms_teams
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>5.0</version>
<date>2022-06-07T04:48:40Z</date>
<media_types>
<media_type>
<name>MS Teams</name>
<type>WEBHOOK</type>
<parameters>
<parameter>
<name>alert_message</name>
<value>{ALERT.MESSAGE}</value>
</parameter>
<parameter>
<name>alert_subject</name>
<value>{ALERT.SUBJECT}</value>
</parameter>
<parameter>
<name>event_date</name>
<value>{EVENT.DATE}</value>
</parameter>
<parameter>
<name>event_id</name>
<value>{EVENT.ID}</value>
</parameter>
<parameter>
<name>event_nseverity</name>
<value>{EVENT.NSEVERITY}</value>
</parameter>
<parameter>
<name>event_opdata</name>
<value>{EVENT.OPDATA}</value>
</parameter>
<parameter>
<name>event_recovery_date</name>
<value>{EVENT.RECOVERY.DATE}</value>
</parameter>
<parameter>
<name>event_recovery_time</name>
<value>{EVENT.RECOVERY.TIME}</value>
</parameter>
<parameter>
<name>event_severity</name>
<value>{EVENT.SEVERITY}</value>
</parameter>
<parameter>
<name>event_source</name>
<value>{EVENT.SOURCE}</value>
</parameter>
<parameter>
<name>event_status</name>
<value>{EVENT.STATUS}</value>
</parameter>
<parameter>
<name>event_tags</name>
<value>{EVENT.TAGS}</value>
</parameter>
<parameter>
<name>event_time</name>
<value>{EVENT.TIME}</value>
</parameter>
<parameter>
<name>event_update_action</name>
<value>{EVENT.UPDATE.ACTION}</value>
</parameter>
<parameter>
<name>event_update_date</name>
<value>{EVENT.UPDATE.DATE}</value>
</parameter>
<parameter>
<name>event_update_message</name>
<value>{EVENT.UPDATE.MESSAGE}</value>
</parameter>
<parameter>
<name>event_update_status</name>
<value>{EVENT.UPDATE.STATUS}</value>
</parameter>
<parameter>
<name>event_update_time</name>
<value>{EVENT.UPDATE.TIME}</value>
</parameter>
<parameter>
<name>event_update_user</name>
<value>{USER.FULLNAME}</value>
</parameter>
<parameter>
<name>event_value</name>
<value>{EVENT.VALUE}</value>
</parameter>
<parameter>
<name>host_ip</name>
<value>{HOST.IP}</value>
</parameter>
<parameter>
<name>host_name</name>
<value>{HOST.NAME}</value>
</parameter>
<parameter>
<name>teams_endpoint</name>
<value>&lt;PLACE WEBHOOK URL HERE&gt;</value>
</parameter>
<parameter>
<name>trigger_description</name>
<value>{TRIGGER.DESCRIPTION}</value>
</parameter>
<parameter>
<name>trigger_id</name>
<value>{TRIGGER.ID}</value>
</parameter>
<parameter>
<name>use_default_message</name>
<value>false</value>
</parameter>
<parameter>
<name>zabbix_url</name>
<value>{$ZABBIX.URL}</value>
</parameter>
</parameters>
<script>var SEVERITY_COLORS = [
'#97AAB3', // Not classified.
'#7499FF', // Information.
'#FFC859', // Warning.
'#FFA059', // Average.
'#E97659', // High.
'#E45959', // Disaster.
'#009900', // Resolved.
'#000000' // Default.
];
try {
var params = JSON.parse(value);
if (typeof params.teams_endpoint !== 'string' || params.teams_endpoint.trim() === '') {
throw 'Cannot get teams_endpoint';
}
else if (!params.teams_endpoint.startsWith('http')) {
throw 'Invalid MS Teams webhook URL: ' + params.teams_endpoint;
}
params.zabbix_url = (params.zabbix_url.endsWith('/'))
? params.zabbix_url.slice(0, -1) : params.zabbix_url;
if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {
throw 'Incorrect &quot;event_source&quot; parameter given: &quot;' + params.event_source + '&quot;.\nMust be 0-3.';
}
// Set &quot;use_default_message&quot; to true for non trigger-based events.
if (params.event_source !== '0') {
params.use_default_message = 'true';
}
// Check {EVENT.VALUE} for trigger-based and internal events.
if (params.event_value !== '0' &amp;&amp; params.event_value !== '1'
&amp;&amp; (params.event_source === '0' || params.event_source === '3')) {
throw 'Incorrect &quot;event_value&quot; parameter given: &quot;' + params.event_value + '&quot;.\nMust be 0 or 1.';
}
// Check {EVENT.UPDATE.STATUS} only for trigger-based events.
if (params.event_update_status !== '0' &amp;&amp; params.event_update_status !== '1' &amp;&amp; params.event_source === '0') {
throw 'Incorrect &quot;event_update_status&quot; parameter given: &quot;' + params.event_update_status + '&quot;.\nMust be 0 or 1.';
}
if (params.event_value == 0) {
params.event_nseverity = '6';
}
if (!SEVERITY_COLORS[params.event_nseverity]) {
params.event_nseverity = '7';
}
var request = new CurlHttpRequest(),
facts = [],
body = {
themeColor: SEVERITY_COLORS[params.event_nseverity].replace('#', ''),
summary: params.alert_subject,
sections: [
{
markdown: 'false',
activityTitle: params.alert_subject,
activitySubtitle: 'On ' + params.host_name + ' [' + params.host_ip + ']',
text: (params.use_default_message.toLowerCase() == 'true')
? params.alert_message
: params.trigger_description
}
],
potentialAction: [
{
'@type': 'OpenUri',
name: (params.event_source === '0')
? 'Event Info'
: 'Zabbix Home',
targets: [
{
os: 'default',
uri: (params.event_source === '0')
? params.zabbix_url + '/tr_events.php?triggerid=' +
params.trigger_id + '&amp;eventid=' + params.event_id
: params.zabbix_url
}
]
}
]
};
if (params.use_default_message.toLowerCase() !== 'true') {
// Problem message.
if (params.event_value === '1' &amp;&amp; params.event_update_status === '0') {
facts.push({
name: 'Event time',
value: params.event_time + ' ' + params.event_date
});
}
// Update message.
else if (params.event_update_status === '1') {
body.sections[0].text = params.event_update_user + ' ' + params.event_update_action + '.';
if (params.event_update_message) {
body.sections[0].text += '&lt;br&gt;Message:&lt;br&gt;' + params.event_update_message;
}
facts.push({
name: 'Event update time',
value: params.event_update_time + ' ' + params.event_update_date
});
}
// Resolved message.
else {
facts.push({
name: 'Recovery time',
value: params.event_recovery_time + ' ' + params.event_recovery_date
});
}
if (params.event_severity &amp;&amp; params.event_severity !== '{EVENT.SEVERITY}') {
facts.push({
name: 'Severity',
value: params.event_severity
});
}
if (params.event_opdata &amp;&amp; params.event_opdata !== '{EVENT.OPDATA}') {
facts.push({
name: 'Operational data',
value: params.event_opdata
});
}
if (params.event_tags &amp;&amp; params.event_tags !== '{EVENT.TAGS}') {
facts.push({
name: 'Event tags',
value: params.event_tags
});
}
Object.keys(params)
.forEach(function (key) {
if (key.startsWith('fact_') &amp;&amp; params[key] !== '') {
facts.push({
name: key.substring(5),
value: params[key]
});
}
else if (key.startsWith('openUri_') &amp;&amp; params[key] !== '' &amp;&amp; !params[key].startsWith('{')) {
body.potentialAction.push({
'@type': 'OpenUri',
name: key.substring(8),
targets: [
{
os: 'default',
uri: params[key]
}
]
});
}
});
body.sections[0].facts = facts;
}
body.sections[0].text = body.sections[0].text.replace(/(?:\r\n|\r|\n)/g, '&lt;br&gt;');
request.AddHeader('Content-Type: application/json');
if (typeof params.HTTPProxy === 'string' &amp;&amp; params.HTTPProxy !== '') {
request.SetProxy(params.HTTPProxy);
}
Zabbix.Log(4, '[ MS Teams Webhook ] JSON: ' + JSON.stringify(body));
var response = request.Post(params.teams_endpoint, JSON.stringify(body));
Zabbix.Log(4, '[ MS Teams Webhook ] Response: ' + response);
if (response === '1') {
return 'OK';
}
else {
Zabbix.Log(4, '[ MS Teams Webhook ] FAILED with response: ' + response);
throw response;
}
}
catch (error) {
Zabbix.Log(3, '[ MS Teams Webhook ] ERROR: ' + error);
throw 'Sending failed: ' + error;
}</script>
<message_templates>
<message_template>
<event_source>DISCOVERY</event_source>
<operation_mode>PROBLEM</operation_mode>
<subject>Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}</subject>
<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}</message>
</message_template>
<message_template>
<event_source>AUTOREGISTRATION</event_source>
<operation_mode>PROBLEM</operation_mode>
<subject>Autoregistration: {HOST.HOST}</subject>
<message>Host name: {HOST.HOST}
Host IP: {HOST.IP}
Agent port: {HOST.PORT}</message>
</message_template>
<message_template>
<event_source>TRIGGERS</event_source>
<operation_mode>PROBLEM</operation_mode>
<subject>Problem: {EVENT.NAME}</subject>
<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}</message>
</message_template>
<message_template>
<event_source>TRIGGERS</event_source>
<operation_mode>RECOVERY</operation_mode>
<subject>Resolved: {EVENT.NAME}</subject>
<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}</message>
</message_template>
<message_template>
<event_source>TRIGGERS</event_source>
<operation_mode>UPDATE</operation_mode>
<subject>Updated problem: {EVENT.NAME}</subject>
<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}.</message>
</message_template>
</message_templates>
</media_type>
</media_types>
</zabbix_export>
Any solution tho this issue?
Thank you
I am doing an integration with MS teams to my ZABBIX server.
I am getting this issue:
I am using this XML ms_teams
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>5.0</version>
<date>2022-06-07T04:48:40Z</date>
<media_types>
<media_type>
<name>MS Teams</name>
<type>WEBHOOK</type>
<parameters>
<parameter>
<name>alert_message</name>
<value>{ALERT.MESSAGE}</value>
</parameter>
<parameter>
<name>alert_subject</name>
<value>{ALERT.SUBJECT}</value>
</parameter>
<parameter>
<name>event_date</name>
<value>{EVENT.DATE}</value>
</parameter>
<parameter>
<name>event_id</name>
<value>{EVENT.ID}</value>
</parameter>
<parameter>
<name>event_nseverity</name>
<value>{EVENT.NSEVERITY}</value>
</parameter>
<parameter>
<name>event_opdata</name>
<value>{EVENT.OPDATA}</value>
</parameter>
<parameter>
<name>event_recovery_date</name>
<value>{EVENT.RECOVERY.DATE}</value>
</parameter>
<parameter>
<name>event_recovery_time</name>
<value>{EVENT.RECOVERY.TIME}</value>
</parameter>
<parameter>
<name>event_severity</name>
<value>{EVENT.SEVERITY}</value>
</parameter>
<parameter>
<name>event_source</name>
<value>{EVENT.SOURCE}</value>
</parameter>
<parameter>
<name>event_status</name>
<value>{EVENT.STATUS}</value>
</parameter>
<parameter>
<name>event_tags</name>
<value>{EVENT.TAGS}</value>
</parameter>
<parameter>
<name>event_time</name>
<value>{EVENT.TIME}</value>
</parameter>
<parameter>
<name>event_update_action</name>
<value>{EVENT.UPDATE.ACTION}</value>
</parameter>
<parameter>
<name>event_update_date</name>
<value>{EVENT.UPDATE.DATE}</value>
</parameter>
<parameter>
<name>event_update_message</name>
<value>{EVENT.UPDATE.MESSAGE}</value>
</parameter>
<parameter>
<name>event_update_status</name>
<value>{EVENT.UPDATE.STATUS}</value>
</parameter>
<parameter>
<name>event_update_time</name>
<value>{EVENT.UPDATE.TIME}</value>
</parameter>
<parameter>
<name>event_update_user</name>
<value>{USER.FULLNAME}</value>
</parameter>
<parameter>
<name>event_value</name>
<value>{EVENT.VALUE}</value>
</parameter>
<parameter>
<name>host_ip</name>
<value>{HOST.IP}</value>
</parameter>
<parameter>
<name>host_name</name>
<value>{HOST.NAME}</value>
</parameter>
<parameter>
<name>teams_endpoint</name>
<value>&lt;PLACE WEBHOOK URL HERE&gt;</value>
</parameter>
<parameter>
<name>trigger_description</name>
<value>{TRIGGER.DESCRIPTION}</value>
</parameter>
<parameter>
<name>trigger_id</name>
<value>{TRIGGER.ID}</value>
</parameter>
<parameter>
<name>use_default_message</name>
<value>false</value>
</parameter>
<parameter>
<name>zabbix_url</name>
<value>{$ZABBIX.URL}</value>
</parameter>
</parameters>
<script>var SEVERITY_COLORS = [
'#97AAB3', // Not classified.
'#7499FF', // Information.
'#FFC859', // Warning.
'#FFA059', // Average.
'#E97659', // High.
'#E45959', // Disaster.
'#009900', // Resolved.
'#000000' // Default.
];
try {
var params = JSON.parse(value);
if (typeof params.teams_endpoint !== 'string' || params.teams_endpoint.trim() === '') {
throw 'Cannot get teams_endpoint';
}
else if (!params.teams_endpoint.startsWith('http')) {
throw 'Invalid MS Teams webhook URL: ' + params.teams_endpoint;
}
params.zabbix_url = (params.zabbix_url.endsWith('/'))
? params.zabbix_url.slice(0, -1) : params.zabbix_url;
if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {
throw 'Incorrect &quot;event_source&quot; parameter given: &quot;' + params.event_source + '&quot;.\nMust be 0-3.';
}
// Set &quot;use_default_message&quot; to true for non trigger-based events.
if (params.event_source !== '0') {
params.use_default_message = 'true';
}
// Check {EVENT.VALUE} for trigger-based and internal events.
if (params.event_value !== '0' &amp;&amp; params.event_value !== '1'
&amp;&amp; (params.event_source === '0' || params.event_source === '3')) {
throw 'Incorrect &quot;event_value&quot; parameter given: &quot;' + params.event_value + '&quot;.\nMust be 0 or 1.';
}
// Check {EVENT.UPDATE.STATUS} only for trigger-based events.
if (params.event_update_status !== '0' &amp;&amp; params.event_update_status !== '1' &amp;&amp; params.event_source === '0') {
throw 'Incorrect &quot;event_update_status&quot; parameter given: &quot;' + params.event_update_status + '&quot;.\nMust be 0 or 1.';
}
if (params.event_value == 0) {
params.event_nseverity = '6';
}
if (!SEVERITY_COLORS[params.event_nseverity]) {
params.event_nseverity = '7';
}
var request = new CurlHttpRequest(),
facts = [],
body = {
themeColor: SEVERITY_COLORS[params.event_nseverity].replace('#', ''),
summary: params.alert_subject,
sections: [
{
markdown: 'false',
activityTitle: params.alert_subject,
activitySubtitle: 'On ' + params.host_name + ' [' + params.host_ip + ']',
text: (params.use_default_message.toLowerCase() == 'true')
? params.alert_message
: params.trigger_description
}
],
potentialAction: [
{
'@type': 'OpenUri',
name: (params.event_source === '0')
? 'Event Info'
: 'Zabbix Home',
targets: [
{
os: 'default',
uri: (params.event_source === '0')
? params.zabbix_url + '/tr_events.php?triggerid=' +
params.trigger_id + '&amp;eventid=' + params.event_id
: params.zabbix_url
}
]
}
]
};
if (params.use_default_message.toLowerCase() !== 'true') {
// Problem message.
if (params.event_value === '1' &amp;&amp; params.event_update_status === '0') {
facts.push({
name: 'Event time',
value: params.event_time + ' ' + params.event_date
});
}
// Update message.
else if (params.event_update_status === '1') {
body.sections[0].text = params.event_update_user + ' ' + params.event_update_action + '.';
if (params.event_update_message) {
body.sections[0].text += '&lt;br&gt;Message:&lt;br&gt;' + params.event_update_message;
}
facts.push({
name: 'Event update time',
value: params.event_update_time + ' ' + params.event_update_date
});
}
// Resolved message.
else {
facts.push({
name: 'Recovery time',
value: params.event_recovery_time + ' ' + params.event_recovery_date
});
}
if (params.event_severity &amp;&amp; params.event_severity !== '{EVENT.SEVERITY}') {
facts.push({
name: 'Severity',
value: params.event_severity
});
}
if (params.event_opdata &amp;&amp; params.event_opdata !== '{EVENT.OPDATA}') {
facts.push({
name: 'Operational data',
value: params.event_opdata
});
}
if (params.event_tags &amp;&amp; params.event_tags !== '{EVENT.TAGS}') {
facts.push({
name: 'Event tags',
value: params.event_tags
});
}
Object.keys(params)
.forEach(function (key) {
if (key.startsWith('fact_') &amp;&amp; params[key] !== '') {
facts.push({
name: key.substring(5),
value: params[key]
});
}
else if (key.startsWith('openUri_') &amp;&amp; params[key] !== '' &amp;&amp; !params[key].startsWith('{')) {
body.potentialAction.push({
'@type': 'OpenUri',
name: key.substring(8),
targets: [
{
os: 'default',
uri: params[key]
}
]
});
}
});
body.sections[0].facts = facts;
}
body.sections[0].text = body.sections[0].text.replace(/(?:\r\n|\r|\n)/g, '&lt;br&gt;');
request.AddHeader('Content-Type: application/json');
if (typeof params.HTTPProxy === 'string' &amp;&amp; params.HTTPProxy !== '') {
request.SetProxy(params.HTTPProxy);
}
Zabbix.Log(4, '[ MS Teams Webhook ] JSON: ' + JSON.stringify(body));
var response = request.Post(params.teams_endpoint, JSON.stringify(body));
Zabbix.Log(4, '[ MS Teams Webhook ] Response: ' + response);
if (response === '1') {
return 'OK';
}
else {
Zabbix.Log(4, '[ MS Teams Webhook ] FAILED with response: ' + response);
throw response;
}
}
catch (error) {
Zabbix.Log(3, '[ MS Teams Webhook ] ERROR: ' + error);
throw 'Sending failed: ' + error;
}</script>
<message_templates>
<message_template>
<event_source>DISCOVERY</event_source>
<operation_mode>PROBLEM</operation_mode>
<subject>Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}</subject>
<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}</message>
</message_template>
<message_template>
<event_source>AUTOREGISTRATION</event_source>
<operation_mode>PROBLEM</operation_mode>
<subject>Autoregistration: {HOST.HOST}</subject>
<message>Host name: {HOST.HOST}
Host IP: {HOST.IP}
Agent port: {HOST.PORT}</message>
</message_template>
<message_template>
<event_source>TRIGGERS</event_source>
<operation_mode>PROBLEM</operation_mode>
<subject>Problem: {EVENT.NAME}</subject>
<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}</message>
</message_template>
<message_template>
<event_source>TRIGGERS</event_source>
<operation_mode>RECOVERY</operation_mode>
<subject>Resolved: {EVENT.NAME}</subject>
<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}</message>
</message_template>
<message_template>
<event_source>TRIGGERS</event_source>
<operation_mode>UPDATE</operation_mode>
<subject>Updated problem: {EVENT.NAME}</subject>
<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}.</message>
</message_template>
</message_templates>
</media_type>
</media_types>
</zabbix_export>
Any solution tho this issue?
Thank you
Comment