mattermostでBOTから複数のチームに通知を一斉送信する

## はじめに
どうも！生産技術部のエンジニアです。Mattermostサーバを立ち上げ、現在、50人以上のユーザが利用しており、それぞれのチームを作り活動しています。管理者からすべてのチームに、メンテナンス等の通知を送るため、BOTアカウントとシェルスクリプトを利用しました。スクリプトから通知を一斉送信する方法を紹介します。
![notification.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/451049/0b45267f-7366-f610-4bba-84eccb0cd599.png)


## 環境
```bash
$ 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つのファイルを同じ階層に配置し、スクリプトを実行する事で送信できます。

```bash
# 初回のみchmodを実施し、ファイルのアクセス権を変更する
$ chmod 755 mattermost_admin_notification.sh
# 通知を一斉送信する
$ ./mattermost_admin_notification.sh
```

## 送信用のスクリプト
jsonファイルをjqコマンドで展開し、curlコマンドで送信します。

```sh: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](https://forum.mattermost.org/t/how-do-i-extract-posts-from-a-mattermost-channel/6285)を参考に取得しました。

```json: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](https://docs.mattermost.com/developer/message-attachments.html#message-attachments)を参考に作成しました。

```json: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までダイレクトメッセージを送ってください。"
					}
				  ]

            }
        ]
    }
}
```