-
-
Save chusiang/895f6406fbf9285c58ad0a3ace13d025 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# ============================================================================= | |
# Author: Chu-Siang Lai / chusiang (at) drx.tw | |
# Filename: teams-chat-post.sh | |
# Modified: 2021-10-18 00:09 | |
# Description: Post a message to Microsoft Teams. | |
# Reference: | |
# | |
# - https://gist.github.com/chusiang/895f6406fbf9285c58ad0a3ace13d025 | |
# | |
# ============================================================================= | |
# Help. | |
if [[ "$1" == "-h" || "$1" == "--help" ]]; then | |
echo 'Usage: teams-chat-post.sh "<webhook_url>" "<title>" "<color>" "<message>"' | |
exit 0 | |
fi | |
# Webhook or Token. | |
WEBHOOK_URL=$1 | |
if [[ "${WEBHOOK_URL}" == "" ]] | |
then | |
echo "No webhook_url specified." | |
exit 1 | |
fi | |
shift | |
# Title . | |
TITLE=$1 | |
if [[ "${TITLE}" == "" ]] | |
then | |
echo "No title specified." | |
exit 1 | |
fi | |
shift | |
# Color. | |
COLOR=$1 | |
if [[ "${COLOR}" == "" ]] | |
then | |
echo "No status specified." | |
exit 1 | |
fi | |
shift | |
# Text. | |
TEXT=$* | |
if [[ "${TEXT}" == "" ]] | |
then | |
echo "No text specified." | |
exit 1 | |
fi | |
# Convert formating. | |
MESSAGE=$( echo ${TEXT} | sed 's/"/\"/g' | sed "s/'/\'/g" ) | |
JSON="{\"title\": \"${TITLE}\", \"themeColor\": \"${COLOR}\", \"text\": \"${MESSAGE}\" }" | |
# Post to Microsoft Teams. | |
curl -H "Content-Type: application/json" -d "${JSON}" "${WEBHOOK_URL}" |
Is there a way to send a message to a group chat, not Teams?
MESSAGE=$( echo ${TEXT} | sed 's/"/\"/g' | sed "s/'/\'/g" )
should be rewritten:
MESSAGE=$( echo ${TEXT} | sed 's/"/\\"/g')
No need to escape simple quote as you don't use it in your JSON fields representation.
And the most important thing: you should escape the baskslash before " otherwise after the $MESSAGE evaluation in your JSON variable you'll have something like below. Imagine your TEXT received is => The content of my "message".
After you've escaped the double quote (but not the backslash), your $TEXT variable will be evaluated as The content of my "message" causes a problem.
JSON="{\"title\": \"your title\", \"themeColor\": \"TheColorCode\", \"text\": \"The content of my \"message\" causes a problem.\" }"
And as you can see the value of your text field is cut at its middle.
And last thing: no need to declare a new variable MESSAGE, you can juste have:
TEXT=$(echo ${TEXT} | sed 's/"/\\"/g' | sed "s/'/\'/g")
Hi all, the Zabbix v5.0 has build-in the webhook of Microsoft Teams.
- What's New in Zabbix 5.0 LTS | Zabbix official
- Microsoft Teams monitoring and integration with Zabbix | Zabbix official
Enjoy it.
how do you achieve that formatting?, tabs/alignment for example
The Event time
, Severity
and Operational data
fields are "Facts", name/value pairs that are rendered in a table format.
This script indicates /bin/sh but is full of bashism...
You probably should execute it using /bin/bash