mattermost로 BOT에서 여러 팀에게 알림을 일괄 전송

소개



아무래도! 생산 기술부의 엔지니어입니다. 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までダイレクトメッセージを送ってください。"
                        }
                      ]
    
                }
            ]
        }
    }
    

    좋은 웹페이지 즐겨찾기