![見出し画像](https://assets.st-note.com/production/uploads/images/111758010/rectangle_large_type_2_32a1f0a48a0434f2ea97e4751bd928e5.png?width=1200)
アプリケーションからSlackに投稿する #397
本日タイムリーに障害が発生していたSlackのWebhookについてです。
業務で触る機会があり大雑把に学んだのでメモしておきます。
アプリケーションからSlackへ投稿するには、大きく以下の手順です。
Webhook URLを取得して使用可能にする
投稿内容をJSONで記述する
Webhook URLにPOSTリクエストする
Webhook URLを取得して使用可能にする
公式の手順通りに実施します。
簡単な4ステップで完了します。
完了すると、以下のようなURLを取得できます。
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
上記のURLは漏洩しないように注意してください。
Keep it secret, keep it safe. Your webhook URL contains a secret. Don't share it online, including via public version control repositories. Slack actively searches out and revokes leaked secrets.
このステップの中で投稿先となるチャンネルを指定しますが、後ほど記述するJSONで指定すればどのチャンネルにも投稿できます。
ただ、一つのアプリケーションの投稿先は一つのチャンネルに絞る、というのが推奨みたいです(そうも言ってられない場面が多いとは思いますが。。)
投稿内容をJSONで記述する
URLが取得できたので、投稿内容をJSONで定義します。
以下は記述例です。
・後続でPOSTリクエストするためdataという変数に格納しています。
・attachmentsは公式からの引用で、下に結果の画像も貼っています。
data = {
"text": "本文を記入する。ここがslack上でメッセージを入力する部分に該当する。",
"channel": "your_channel",
"username": "your_name",
"attachments": [
{
"mrkdwn_in": ["text"],
"color": "#36a64f",
"pretext": "Optional pre-text that appears above the attachment block",
"author_name": "author_name",
"author_link": "http://flickr.com/bobby/",
"author_icon": "https://placeimg.com/16/16/people",
"title": "title",
"title_link": "https://api.slack.com/",
"text": "Optional `text` that appears within the attachment",
"fields": [
{
"title": "A field's title",
"value": "This field's value",
"short": false
},
{
"title": "A short field's title",
"value": "A short field's value",
"short": true
},
{
"title": "A second short field's title",
"value": "A second short field's value",
"short": true
}
],
"thumb_url": "http://placekitten.com/g/200/200",
"footer": "footer",
"footer_icon": "https://platform.slack-edge.com/img/default_application_icon.png",
"ts": 123456789
}
]
}
}
![](https://assets.st-note.com/img/1690363293798-2FIE2jk3DW.png?width=1200)
画像は引用のもので、attachments部分のみを表しています。上記のJSONと厳密には一致しないのでご了承ください。
Webhook URLにPOSTリクエストする
ここまで来れば後は簡単です。取得していたWebhook URLにPOSTリクエストします。
import requests
requests.post(SLACK_WEBHOOK_URL, data=json.dumps(data))
Pythonで記述すると上記のようになります。
ちなみに本日の障害でこの投稿機能は止まっていましたが、現在は無事に復旧しました。対応スピード早すぎてびっくりしました。
ここまでお読みいただきありがとうございます!