[ZBX-19641] Webhook timeout MS Teams Created: 2021 Jul 06  Updated: 2021 Jul 09

Status: Need info
Project: ZABBIX BUGS AND ISSUES
Component/s: Frontend (F)
Affects Version/s: 5.0.12
Fix Version/s: None

Type: Problem report Priority: Trivial
Reporter: Fabrizio Assignee: Aleksandrs Petrovs-Gavrilovs
Resolution: Unresolved Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

RHEL 7.9


Attachments: PNG File 1.PNG     JPEG File error import.JPG     XML File media_msteams.xml     XML File media_msteams_5.xml    

 Description   

i from my zabbix server i can resolve MSteams webhook URL, i've tried with nslookup and resolve correctly.
My zabbix server use a proxy for internet access and the rule is open.

but the error is:

1755:20210706:100902.800 [ MS Teams Webhook ] ERROR: Error: cannot get URL: Timeout was reached.

Any ideas?

i'm using the standard script Zabbix MSteams whook

 

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 "event_source" parameter given: "' + params.event_source + '".\nMust be 0-3.';
 }
// Set "use_default_message" 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' && params.event_value !== '1'
 && (params.event_source === '0' || params.event_source === '3')) {
 throw 'Incorrect "event_value" parameter given: "' + params.event_value + '".\nMust be 0 or 1.';
 }
// Check {EVENT.UPDATE.STATUS} only for trigger-based events.
 if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {
 throw 'Incorrect "event_update_status" parameter given: "' + params.event_update_status + '".\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: 'Zabbix',
 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 + '&eventid=' + params.event_id
 : params.zabbix_url
 }
 ]
 }
 ]
 };
if (params.use_default_message.toLowerCase() !== 'true') {
 // Problem message.
 if (params.event_value === '1' && 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 += '<br>Message:<br>' + 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 && params.event_severity !== '{EVENT.SEVERITY}') {
 facts.push({
 name: 'Severity',
 value: params.event_severity
 });
 }
if (params.event_opdata && params.event_opdata !== '{EVENT.OPDATA}') {
 facts.push({
 name: 'Operational data',
 value: params.event_opdata
 });
 }
if (params.event_tags && params.event_tags !== '{EVENT.TAGS}') {
 facts.push({
 name: 'Event tags',
 value: params.event_tags
 });
 }
Object.keys(params)
 .forEach(function (key) {
 if (key.startsWith('fact') && params[key] !== '') {_
 facts.push({
 name: key.substring(5),
 value: params[key]
 });
 }
 else if (key.startsWith('openUri') && params[key] !== '' && !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, '<br>');
request.AddHeader('Content-Type: application/json');
if (typeof params.HTTPProxy === 'string' && 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;

 



 Comments   
Comment by Dmitry Krupornitsky [ 2021 Jul 06 ]

Hello, 

Please try curl for testing if you can get the access to URL:

curl -H "Content-Type: application/json" -d "{\"text\": \"Hello World\"}" <WEBHOOK URL>

If the POST succeeds, you must see a simple 1 output by curl.

Please double-check the webhook setup: https://www.zabbix.com/ru/integrations/msteams and https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using?tabs=cURL

Possibly proxy issue. Is it possible to check URL without proxy?

Comment by Fabrizio [ 2021 Jul 06 ]

Thanks Dmitry it's workd i've received the message on MS Teams!

command launch from my zabbix server.

Very strange it's not work from my frontend.

I've added macros {$ZABBIX.URL} = http://localhost/zabbix

There is a link for download this media type so i can try to re-import in my zabbix?

 

 

Comment by Dmitry Krupornitsky [ 2021 Jul 06 ]

Yep, here is: https://github.com/zabbix/zabbix/tree/release/5.0/templates/media/msteams

Comment by Fabrizio [ 2021 Jul 06 ]

Ouch error during import media_msteams.xml

Comment by Aleksandrs Petrovs-Gavrilovs [ 2021 Jul 08 ]

Hello,

Could you please try this file:
media_msteams_5.xml

Best Regards,
Aleksandrs

Generated at Tue Apr 29 10:11:31 EEST 2025 using Jira 9.12.4#9120004-sha1:625303b708afdb767e17cb2838290c41888e9ff0.