🐻‍❄️

[入門者向け] Slack AppのWebhooksでメッセージを送る

2024/10/15に公開

稼働中のシステムでエラーをなるはやで補足したい。
Slackに通知きたらええのに。
そんなあなたにSlack AppのWebHooks経由でSlackメッセージを送る方法をご説明します。

レガシーな方法

Incoming Webhooksという機能がありますが、現在こちらの機能は非推奨となってます。

削除するかもしれないから使わないでみたいなことが書いてます。
おすすめされているSlack Appを使いましょう。


さくっとSlack Appを作ってみる

  1. Your Appsの右上のCreate New Appをクリックします。

  2. モーダルが出てくるので、From scratchを選択します。
    Manifestを選択してもいいですが、細かい設定はあとまわしでとりあえずAppを作るためにscratchを選択します。

  3. App Nameに任意の名前、アプリを追加したいworkspaceを選択してCreate Appを押します。
    App Nameはあとからでも変更できるので適当で大丈夫です。
    workspaceは変更できません。

  4. 無事にAppが作れました!おめでとうございます😄


WebhookをAppに追加する

それではWebhook機能をAppに入れていきましょう。

  1. 左メニューからIncoming Webhooksを選択し、右上のトグルをONにしてIncoming Webhooksをアクティブにしましょう。

  2. スクロールをするとAdd New Webhook to Workspaceというボタンが一番下に出てくるので選択してください。

  3. 続いて、どのchannelに通知を送るかを選択できる画面が出てくるので、セレクトメニューからchannelを設定し、Allowを押します。
    私は、アプリの稼働状況をチェックするための#{AppName}_system_notificationのような名前の通知専用channelを作ったりしてます。

  4. 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