Python Slack SDKのchat.postMessageを使って,Slackのチャンネルへ通知する
Python Slack SDKのchat.postMessageを使って,Slackのチャンネルへ通知します。
Slack Appの作成
-
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のコードは以下の公式サンプルを使用します。
- "SLACK_BOT_TOKEN"は,OAuth Access Tokenを入れます
- export SLACK_BOT_TOKEN=
SLACK_BOT_TOKEN
で読み込めるようにします
- export 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を招待すれば解決できます。
Discussion