notebook

都内でWEB系エンジニアやってます。

シェルスクリプトでslackへ通知を送ってみる

日々の業務で「これ人力でやる必要あるの?」みたいなものって結構ありますよね

そんな面倒な確認や告知は自動化してしまいましょう

という事で今回はslackのincoming webhooksを使ってslackへ通知をしてみます

slack integrationの設定

Incoming WebHooksの設定を行います

f:id:swfz:20151118000131p:plain

デフォルトでPOSTするチャンネルを選んでボタンを押下するとURLが作成されます

後でも変更できるようなので特に考える必要はなさそうです

integrationを追加したら次の画面で各種設定項目を入力します

説明、名前、アイコン、送信するチャンネルなどが設定できます

ここで作成したWebhook URLの項目をメモしておきます

POST

まずは簡単なものからポストしてみます

curl -X POST --data-urlencode 'payload={"channel": "#webhook_test", "username": "webhookbot", "text": "This is posted to #general and comes from a bot named webhookbot.", "icon_emoji": ":abc:"}' <webhook URL>

これだけでも通知としては十分です

f:id:swfz:20151118000139p:plain

スクリプトから

次はシェルスクリプトでなんか作ってみます

USERNAME="webhookbot"
CHANNEL="#webhook_test"
ICON=":bike:"
WEBHOOK_URL="http://......"

author="author name"

data=`cat << EOF
    payload={
    "channel": "$CHANNEL",
    "username": "$USERNAME",
    "icon_emoji": "$ICON",
    "link_names": 1 ,
    "attachments": [{
        "fallback": "branchの整理をしてください",
        "color": "#003399",
        "pretext": "$PERIOD_MONTH ヶ月以上更新されて無いbranchがあります" ,
        "title": "対象branch",
        "text": "確認をお願いします @$author:"
      }]
  }
EOF`

curl -X POST --data-urlencode "$data" $WEBHOOK_URL

実行してみます

f:id:swfz:20151118000148p:plain

attachmentsを追加してあげれば割と自由に投稿をコントロールできます,書き方に関しては下記から

Attachments

実際に書いてみるとこんな感じですよーっていう例ですね

curlシェルスクリプトで叩く時、JSONの整形がなかなかうまくいかずに苦戦しました。。。

結局一度変数に持たせてからポストするのが楽という感じに落ち着きました

あとは要件に合わせて文言なり変えてあげれば色々自動化できそうですね!