はじめに
どうも!生産技術部のエンジニアです。Mattermostサーバを立ち上げ、現在、50人以上のユーザが利用しており、それぞれのチームを作り活動しています。管理者からすべてのチームに、メンテナンス等の通知を送るため、BOTアカウントとシェルスクリプトを利用しました。スクリプトから通知を一斉送信する方法を紹介します。

環境
$ mattermost-cli version
Version: 5.14.0
Build Number: 5.14.2
Build Date: Fri Aug 30 20:20:48 UTC 2019
Build Hash: 817ee89711bf26d33f840ce7f59fba14da1ed168
Build Enterprise Ready: false
DB Version: 5.14.0
jqコマンドによりjsonファイルからデータ抽出を実施するため、jqコマンドを導入する必要があります。
実施方法
- 送信用のスクリプト(mattermost_admin_notification.sh)
 - 通知設定ファイル(notification_setting.json)
 - 送信メッセージ設定ファイル(message.json)
 
上記3つのファイルを同じ階層に配置し、スクリプトを実行する事で送信できます。
# 初回のみchmodを実施し、ファイルのアクセス権を変更する
$ chmod 755 mattermost_admin_notification.sh
# 通知を一斉送信する
$ ./mattermost_admin_notification.sh
送信用のスクリプト
jsonファイルをjqコマンドで展開し、curlコマンドで送信します。
mattermost_admin_notification.sh
# !/bin/bash
bot_access_token=$(cat notification_setting.json | jq -r '.["bot-access-token"]')
mattermost_url=$(cat notification_setting.json | jq -r '.["mattermost-url"]')
teams=$(cat notification_setting.json | jq '.teams')
# team数を取得
len=$(echo $teams | jq length)
# team毎のchannel-idを取得し、curlで送信
for i in $( seq 0 $(($len - 1)) ); do
    channel=$(echo $teams | jq .[$i])
    channel_id=$(echo $channel | jq '.["channel-id"]')
    message=$(cat message.json | jq '.channel_id|='$channel_id)
    curl --noproxy 10.75.94.188 -i -X POST -H 'Content-Type: application/json' -d "$message" -H 'Authorization: Bearer '"$bot_access_token" http://$mattermost_url/api/v4/posts
done
通知設定ファイル
<bot-access-token>にはボット生成時のトークンを記入します。<channel-id>は、MattermostのQ&Aを参考に取得しました。
notification_setting.json
{
    "bot-access-token":"<bot-access-token>",
    "mattermost-url":"10.75.94.188:8001",
    "teams":[
        {
            "name":"Tomoyuki",
            "channel":"off-topic",
            "channel-id":"<channel-id>"
		},
        {
            "name":"Elec",
            "channel":"off-topic",
            "channel-id":"<channel-id>"
		}
    ]    
}
送信メッセージ設定ファイル
Mattermost#message-attachmentsを参考に作成しました。
message.json
{
    "channel_id":"",
    "message":"This is a message from a admin_notification_bot",
    "props":
    {
        "attachments": 
        [
            {
				"color": "#FF8000",
                "pretext": "管理者からのお知らせです。",
				"text": "@here 今週末にサーバを一時的に停止します。停止中はサービスをご利用できません。",
				"author_name": "Tomoyuki Sugiyama",
				"fields": [
					{
					  "short":false,
					  "title":"目的",
					  "value":"サーバが正常な状態を維持できるように、定期的にシステムアップデート・セキュリティアップデートを実施します。"
					},
					{
					  "short":true,
					  "title":"停止日",
					  "value":"5/1 17:00"
					},
					{
					  "short":true,
					  "title":"再稼働日",
					  "value":"5/11 9:00"
					},
					{
					"short":false,
					"title":"その他",
					"value":"分からないことがあれば@tomoyukiまでダイレクトメッセージを送ってください。"
					}
				  ]
            }
        ]
    }
}