👻

Python Slack SDKのchat.postMessageを使って,Slackのチャンネルへ通知する

2023/10/07に公開

Python Slack SDKのchat.postMessageを使って,Slackのチャンネルへ通知します。

Slack Appの作成

  • https://api.slack.com/apps へアクセス

  • Create New Appを押下

  • Create an appで「from scratch」を選択

  • App Name と workspace を選択し,Create Appを押下

  • Featuresの「OAuth & Permissions」を押下

  • Scopesの「Bot Token Scopes」で「Add an OAuth Scope」を押下

  • 「chat:write」を選択

  • 上の方にある,「OAuth Tokens for Your Workspace」>「Install to Workspace」を押下

  • 「App Name is requesting permission to access the myworkspace Slack workspace What will MySlackApp be able to do?」の画面が出るので,「Allow」を押下

  • OAuth Tokens for Your Workspace>Bot User OAuth Token にOAuth Access Tokenが出るようになります

  • このOAuth Access TokenをPython Slack SDKのWebClientで使用します。

chat.postMessageからSlackへの通知

Python Slack SDKを用いて,Slackのチャンネルへ通知する。

Pythonのコードは以下の公式サンプルを使用します。
https://api.slack.com/methods/chat.postMessage/code

  • "SLACK_BOT_TOKEN"は,OAuth Access Tokenを入れます
    • export SLACK_BOT_TOKEN=SLACK_BOT_TOKEN で読み込めるようにします
  • channel_idは,通知したいSlackのチャンネルのChannel IDを入れます
    • Channel IDは,チャンネルを右クリックし,View channel detailsを押下すると,Aboutの一番下にあります
import logging
import os
# Import WebClient from Python SDK (github.com/slackapi/python-slack-sdk)
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

# WebClient instantiates a client that can call API methods
# When using Bolt, you can use either `app.client` or the `client` passed to listeners.
client = WebClient(token=os.environ.get("SLACK_BOT_TOKEN"))
logger = logging.getLogger(__name__)

# ID of the channel you want to send the message to
channel_id = "C12345"

try:
    # Call the chat.postMessage method using the WebClient
    result = client.chat_postMessage(
        channel=channel_id, 
        text="Hello world"
    )
    logger.info(result)

except SlackApiError as e:
    logger.error(f"Error posting message: {e}")

Pythonの仮想環境を用意して,slack-sdkをpipでインストールします。
今回はvenvを利用しました。

python -m venv .venv
source .venv/bin/activate

pip install slack-sdk

さきほどのPythonコードを実行します。

python test.py

すると,以下のエラーが出ました。

Error posting message: The request to the Slack API failed. (url: https://www.slack.com/api/chat.postMessage)
The server responded with: {'ok': False, 'error': 'not_in_channel'}

これについては,メッセージを投稿しようとしているボットが対象のチャンネルのメンバーでないことから発生しています。そのため,該当のチャンネルに作成したAppを招待すれば解決できます。

GitHubで編集を提案

Discussion