(2024年8月時点)監視メッセージをTeamsチャネルに送信する
突然のお知らせ
Microsoft Teams 内の Office 365 コネクタの廃止
突然のお知らせに困惑しつつも、Microsoftの恩恵を預かっているのでしょうがない。
そう決めて、取り組んだことを改めて文章にします。
CopilotやChatGPT等に投げやすくするため、コードは最小限にしました。
下のソースから派生させてみてください。
これまで
監視メッセージ(基本的にはエラーメッセージ)を特定のディレクトリに配置し、
BashプログラムでチャネルごとのURLにPOSTする仕組みでした。
具体的には、2つのシェルを使用しています。
①複数サーバーから出されるメッセージをファイル化した後、特定のディレクトリに配置する
②特定のディレクトリに配置されたメッセージファイルをもとに送信すべきTeamsチャネルを判定し、チャネルにPOSTする
今回のOffice 365 コネクタ廃止に関して、影響を受けるのは②です。
最も各チャネルのコネクタURLにPOSTしていることが影響原因です。
これから
上記ページに記載されている通り、推奨移行先はPower Automateです。
Power Automateの紹介は割愛しますが、Copilotの力を借りてちょちょいとフローを組めました。
Powerautomate
使用するフロー
- 「Teams Webhook 要求を受信したとき」
- 「チャットやチャネルにカードを投稿する」
これらを直列につなぎ、各項目を設定するだけでOKです。
Adaptive card欄には「添付ファイルアダプティーカード」をいれてください。
※この添付ファイルアダプティーカードがカギです。
※割愛していますが、送信先チャネルの判定を入れています。
Bash
バージョン
Linux: Red Hat Enterprise Linux release 8.4 (Ootpa)
コード
#!/bin/bash
export MSGDIR="いわゆる特定のディレクトリ"
export ERRORMSGDIR="xxx"
handle_error() {
local ERRORMSG=$1
local ERRORFILE=$2
echo `date +"%Y/%m/%d %H:%M:%S"` "${ERRORMSG} ${ERRORFILE}" >> ${ERRORMSGDIR}/failed_send_msg_to_teams.log
}
send_message() {
local MSGDIR=$1
local MSGFILE=$2
local AUTOMATE_URL="Power AutomateのフローのURL"
local POSTMSG=$(cat ${MSGDIR}/${MSGFILE} | nkf --oc=UTF-8-BOM)
if [ $? -ne 0 ]; then
handle_error "文字コード変換に失敗しました。" ${MSGDIR}/${MSGFILE}
fi
data=$(cat << EOS
{
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.4",
"msTeams": {
"width": "full"
},
"body": [
{
"type": "Container",
"items": [
{
"type": "RichTextBlock",
"inlines": [
{
"type": "TextRun",
"text": "${POSTMSG}",
"wrap": true
}
]
}
]
}
]
}
}
]
}
EOS
)
curl -H "Content-Type: application/json" -d "${data}" ${AUTOMATE_URL}
if [ $? -ne 0 ]; then
handle_error "メッセージ送信に失敗しました。" ${MSGDIR}/${MSGFILE}
else
fi
}
for MSG in `ls -tr ${MSGDIR}/`; do
send_message ${MSGDIR} ${MSG}
done
exit 0
こちらのシェルの実行時に、特定のディレクトリにメッセージファイルがなければ、空振りします。
cronでぶん回すため、空振りしても問題ないようにしています。
※その他に、変数名や細かなコメント、排他処理等を追加および変更しています。
まとめ
Incoming hookを使用していた時に比べ、コード量が減少しました。
送信先チャネルの判定をPower Automateで行っているからです。
維持管理しやすくなったので、これはこれで良かったです。
また、Microsoftからの突然のお知らせに困惑することがあると思いますが、
実はうれしいことかもしれません。
Discussion