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

最新の記事

2〜3ヶ月と見積もっていた開発期間を、クエリアを導入することでわずか1週間に短縮できました

2012年5月創業のフルカイテン株式会社。 「在庫をフル回転させる」をコンセプトに、機械学習を駆使したSaaS『FULL KAITEN』を提供し、在庫問題の解決に取り組む。

more

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

Querierについて詳しく見る