0
0

Slack API 作成と python でSlack SDKを利用してチャンネルにメッセージを投稿

Posted at

Slack Bot 作成

① Slack API のアプリケーション管理ページにアクセスします。
https://api.slack.com/apps

② 「Create an App」ボタンをクリックします。
image.png

image.png

③「App Name」に任意のアプリ名を入力し、「Development Slack Workspace」で対象となるワークスペースを選択して、「Create App」ボタンをクリックします。

image.png

④ 左側のメニューで「OAuth & Permissions」を選択します。
image.png

⑤「Scopes」の下の「Bot Token Scopes」の「Add an OAuth Scope」ボタンをクリックし、必要な権限を追加します。本例では、chat:write(メッセージの送信)を追加します。
image.png
image.png

⑥ 左側のメニューで「App Home」を選択します。
image.png

⑦「App Home」ページ内の「Your App’s Presence in Slack」の下にある「Edit」ボタンをクリックし、「Display Name」および「Default Username」に任意の名前を入力して保存します。

image.png

⑧「OAuth & Permissions」ページに戻り、「Install to Workspace」をクリックし、アプリをインストールします。この時点で Bot Token が生成されます。
image.png

image.png

image.png

Slack API トークンの取得

① 作成した Bot の設定ページにアクセスします。
② 「OAuth & Permissions」のページを開き、「Bot Token」欄に表示されている API トークンをコピーします。このトークンは、「xoxb-」で始まります。
③ API トークンを環境変数の設定で使用するために、.env ファイルに以下の形式で追加します。

SLACK_API_BOT_TOKEN=slack_api_bot_token # Slack API トークン

これで Slack 側で Bot が作成され、API トークンも取得できました。

Slack Python SDK でチャンネルにメッセージを投稿

1 必要なライブラリのインストール

① slack_sdk :Slack SDK
  詳細はPython Slack SDK 公式サイトから確認させてください。
  https://slack.dev/python-slack-sdk/installation/index.html
② python-dotenv: .env ファイルから環境変数を読み込むためのライブラリ

 pip install slack_sdk 
 pip install python-dotenv

2 環境変数の設定

プロジェクトのルートディレクトリに .env という名前のファイルを作成し、以下のように環境変数を記述。
① SLACK_API_BOT_TOKEN: Slack API トークン
② SLACK_CHANNEL: Slack 通知を送信するチャンネル名
image.png

3 実行スクリプト

import os
import logging
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
from dotenv import load_dotenv

# デバッグレベルのログを出力します
logging.basicConfig(level=logging.DEBUG)

load_dotenv(verbose=True)
slack_token = os.getenv("SLACK_API_BOT_TOKEN")
slack_channel = os.getenv("SLACK_CHANNEL")
client = WebClient(token=slack_token)

try:
    
    blocks = [
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": ":wave: 連携成功かな :bow:",
            },
        },
    ]
    response = client.chat_postMessage(
        channel=slack_channel,
        text="はじめまして :wave: pythonからSlackへ通知テスト:bow:",
        blocks=blocks
    )
except SlackApiError as e:
    # You will get a SlackApiError if "ok" is False
    # str like 'invalid_auth', 'channel_not_found'
    assert e.response["error"]   

実行結果
image.png

補足/権限追加について

 ① 権限追加
 image.png
 ② 「Reinstall to Workspace」をクリック
image.png
 ③「許可」をクリック
image.png

Webhoot 機能よりメッセージ投稿については以下記事を参考してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0