[入門者向け] Slack AppのWebhooksでメッセージを送る
稼働中のシステムでエラーをなるはやで補足したい。
Slackに通知きたらええのに。
そんなあなたにSlack AppのWebHooks経由でSlackメッセージを送る方法をご説明します。
レガシーな方法
Incoming Webhooksという機能がありますが、現在こちらの機能は非推奨となってます。
削除するかもしれないから使わないでみたいなことが書いてます。
おすすめされているSlack Appを使いましょう。
さくっとSlack Appを作ってみる
-
Your Appsの右上の
Create New App
をクリックします。
-
モーダルが出てくるので、
From scratch
を選択します。
Manifestを選択してもいいですが、細かい設定はあとまわしでとりあえずAppを作るためにscratchを選択します。
-
App Nameに任意の名前、アプリを追加したいworkspaceを選択して
Create App
を押します。
App Nameはあとからでも変更できるので適当で大丈夫です。
workspaceは変更できません。
-
無事にAppが作れました!おめでとうございます😄
WebhookをAppに追加する
それではWebhook機能をAppに入れていきましょう。
-
左メニューから
Incoming Webhooks
を選択し、右上のトグルをONにしてIncoming Webhooksをアクティブにしましょう。
-
スクロールをすると
Add New Webhook to Workspace
というボタンが一番下に出てくるので選択してください。
-
続いて、どのchannelに通知を送るかを選択できる画面が出てくるので、セレクトメニューからchannelを設定し、
Allow
を押します。
私は、アプリの稼働状況をチェックするための#{AppName}_system_notification
のような名前の通知専用channelを作ったりしてます。
-
Allowを押すとIncoming Webhooks設定画面に戻ります。
Webhook URL
一覧に追加されているはずです。
Webhook URLにPOSTしてみる
簡単なコードでテストをしてみます。
node.jsとPythonのコードを書いたので、参考にしてください。
いずれの場合も、webhook_url
には先ほど生成したURLを入力してください。
node.jsの場合
公式のSlack SDKをインストールし、Webhookに対してPOSTリクエストを送信します。
npm install @slack/webhook
const { IncomingWebhook } = require('@slack/webhook');
// Webhook URL(Slackのアプリから取得したURLをここに設定します)
const webhook_url = 'https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXX';
// Webhookクライアントを作成
const webhook = new IncomingWebhook(webhook_url);
// メッセージを送信
(async () => {
try {
await webhook.send({
text: 'こんにちは!Node.jsからIncoming Webhookを使ってメッセージを送信しています。',
});
console.log('メッセージが送信されました。');
} catch (error) {
console.error('エラーが発生しました:', error);
}
})();
Pythonの場合
requestsライブラリを使って、Webhookに対してPOSTリクエストを送信します。
pip install requests
import requests
import json
# ここにWebhook URLを入力
webhook_url = "https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXX"
def send_message_via_webhook(message_text):
payload = {
"text": message_text # 送信するメッセージ
}
headers = {'Content-Type': 'application/json'}
response = requests.post(webhook_url, data=json.dumps(payload), headers=headers)
if response.status_code == 200:
print("Message sent successfully")
else:
print(f"Failed to send message. Status code: {response.status_code}")
# メッセージを送信
send_message_via_webhook("こんにちは!PythonからIncoming Webhookを使ってメッセージを送っています。")
実行結果を確認
アプリケーションを実行すると、Slackにメッセージが届きます。
メッセージをレイアウトする
メッセージのレイアウトや内容を調整することもできます。
普通のSlackのように絵文字を使ったり、通知の種類によって色を変えたり、@channel
のようにメンションをつけたり。
Block Kit Builderを使うと、リッチな見た目やインタラクティブな機能も、実際に表示を確かめられながら組み立てられるのでおすすめです。
同時にJSONも生成してくれるので、Payloadのコードを張り付けるだけで表示を再現できます。
最後に
はじめてSlack Appを使ってみたのですが、めちゃくちゃさっくり作れて、使い勝手もよいと感じました。
詳しく知りたい方は公式のドキュメントをぜひ見てみてください。
Sending messages using incoming webhooks
Discussion