Querier

Slack新方式Webhook完全ガイド | Webhook URLの取得・初期設定からPython・JS・Goによる実装まで

2023.07.07に公開 | 2023.07.07に更新

Querier運営

@querier_io@querierinc

「Querier(クエリア)」は社内向け管理画面を圧倒的な速さで、かつビジネスのスケールに合わせて柔軟に構築することができるローコードツールです。

管理画面の構築もWeb上で完結
エンジニアのためのローコードツール

Querierについて詳しく見る

近年、開発者コミュニティーにおいてチャットツールとして広く活用されているSlack。

その中でも「Slack Webhook」は、外部のシステムやサービスとSlackを繋げるための重要な手段です。

しかし、SlackのWebhookには新旧の方式が存在します。

本記事では、Slack Webhookについて深く掘り下げ、新しい方式のSlack Webhookの使い方やその活用法について解説していきます。

Slack Incoming Webhookは非推奨?

SlackのWebhookは、その歴史の中で大きく2つのフェーズがあります。

初期のフェーズ:Incoming Webhook

  • 最初に提供されていたWebhookです。
  • 外部のアプリケーションやシステムから特定のSlackチャネルへメッセージを送信するためのシンプルなAPI。
  • 特定のURLに対してHTTPリクエストを行うだけでメッセージを送信できる簡便な仕組みでした。

現在のフェーズ:新方式のSlack Webhook

  • より柔軟な操作が可能なWebhookです。
  • メッセージの送信先を動的に変更できるようになりました。
  • 詳細な権限設定や複数チャネルへの投稿が可能。

Incoming Webhookの問題点

  • 送信先のチャネルが固定されていた。
  • 一度設定を行うとその後の変更が難しかった。

これらの問題点により、Incoming Webhookは現在非推奨となっています。

その代わりに、現在は新方式のSlack Webhookが主流となっており、Slack自体も新方式の利用を推奨しています。

旧式のIncoming Webhookを利用することも可能ですが、新たにSlack連携を検討している場合や、既存のIncoming Webhookを改善したい場合は、新方式のSlack Webhookを利用することをおすすめします。

新方式のSlack Webhookとは

新しい方式の「Slack Webhook」は、Slack Appsを利用して、より詳細な権限設定や複数のチャネルへの投稿を可能にします。この新方式により、開発者は自由度を享受できるようになりました。

新方式のSlack Webhookは、Web APIとして機能し、HTTPリクエストにより操作を行うことができます。これにより、あらゆるプログラミング言語からSlackとの連携が可能となります。

新方式のSlack Webhookの使い方、Webhook URLの確認方法

1. Slackのアプリケーション作成

まずはじめに、Slackのアプリ管理ページを開きます。ページ右上の [Create New App] ボタンをクリックし、新しいAppを作成します。もし既存のAppを使用する場合は、該当のAppを選択します。

2. アプリケーション設定

アプリケーションの設定ページに移動したら、左サイドバーの [Incoming Webhooks] をクリックします。
その後、右側の画面で [Activate Incoming Webhooks] をオンに切り替えます。

3. Webhookの作成

[Incoming Webhooks] 画面下部の [Add New Webhook to Workspace] ボタンをクリックします。
このボタンをクリックすると、新たなWebhookを設定するためのページに移動します。

4. Webhook URLの確認と保存

設定が完了したら [Incoming Webhooks] ページに戻り、作成したWebhookの Webhook URL を確認します。このURLは、あとでPython、JS、Goなどのコードから利用しますので、安全な場所にコピーして保存しておいてください。

以上が新方式のSlack Webhookの設定とWebhook URLの確認方法です。設定自体は簡単で、いくつかのクリックと選択だけで完了します。

新方式のSlack Webhookをコードから利用する方法

Python

Pythonでは、requestsというライブラリを使用してWebhookを通じてSlackにメッセージを送ることができます。以下に簡単なサンプルコードを示します。

import json
import requests

webhook_url = 'your-webhook-url'

data = {
    'text': 'Hello, World!',
    'attachments': [
        {
            'fallback': 'Fallback text',
            'color': '#36a64f',
            'pretext': 'This is an attachment',
            'author_name': 'Author',
            'title': 'Title',
            'text': 'This is the attachment text',
        }
    ],
}

response = requests.post(
    webhook_url, 
    data=json.dumps(data),
    headers={'Content-Type': 'application/json'}
)

if response.status_code != 200:
    raise ValueError(
        'Request to Slack returned an error %s, the response is:\n%s'
        % (response.status_code, response.text)
    )

ここで、webhook_urlには先程取得したWebhook URLを指定します。

JavaScript

JavaScriptでは、axiosというライブラリを使用します。以下にNode.jsでのサンプルコードを示します。

const axios = require('axios');

const webhookUrl = 'your-webhook-url';

const data = {
    text: 'Hello, World!',
    attachments: [
        {
            fallback: 'Fallback text',
            color: '#36a64f',
            pretext: 'This is an attachment',
            author_name: 'Author',
            title: 'Title',
            text: 'This is the attachment text',
        }
    ],
};

axios.post(webhookUrl, data)
    .then(response => {
        console.log('Sended successfully');
    })
    .catch(error => {
        console.error(error);
    });

Go

Go言語では、標準のnet/httpパッケージを使用します。以下にサンプルコードを示します。

package main

import (
	"bytes"
	"encoding/json"
	"net/http"
)

type Attachment struct {
	Fallback string `json:"fallback"`
	Color    string `json:"color"`
	Pretext  string `json:"pretext"`
	AuthorName string `json:"author_name"`
	Title    string `json:"title"`
	Text     string `json:"text"`
}

type Message struct {
	Text        string       `json:"text"`
	Attachments []Attachment `json:"attachments"`
}

func main() {
	webhookUrl := "your-webhook-url"

	attachment := Attachment{
		Fallback:   "Fallback text",
		Color:      "#36a64f",
		Pretext:    "This is an attachment",
		AuthorName: "Author",
		Title:      "Title",
		Text:       "This is the attachment text",
	}
	msg := Message{
		Text:        "Hello, World!",
		Attachments: []Attachment{attachment},
	}

	b, err := json.Marshal(msg)
	if err != nil {
		panic(err)
	}

	resp, err := http.Post(webhookUrl, "application/json", bytes.NewBuffer(b))
	if err != nil {
		panic(err)
	}

	if resp.StatusCode != http.StatusOK {
		panic("Request to Slack returned an error")
	}
}

以上がPython, JavaScript, GoでのSlack Webhookの利用例です。

具体的なコードは各状況により調整が必要となりますが、基本的な使い方はこれになります。

詳細な仕様や最新の情報については、こちらの公式ドキュメントをご参照ください。

さいごに

このように、新しい方式のSlack Webhookを使うことで、様々な言語から簡単にSlackと連携することができます。新旧のSlack Webhookについて理解し、開発の効率化に役立ててください。

本記事が「Slack Webhook」の設定や使い方についての理解の一助となれば幸いです。

「Querier(クエリア)」は社内向け管理画面を圧倒的な速さで、かつビジネスのスケールに合わせて柔軟に構築することができるローコードツールです。

最新の記事

【告知】値の参照時の仕様変更のお知らせ

このたび2024年11月11日に値の参照に関する仕様変更を予定しておりますので詳細について報告いたします。

more

管理画面の構築もWeb上で完結
エンジニアのためのローコードツール

Querierについて詳しく見る