Python で slack のチャンネルに投稿する
2023/09/01, last updated 2023/09/01 - ~2 Minutes
python で slack のチャンネルに投稿する方法
サンプルコード
slack api のサンプルコード より引用
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}")
チャンネルIDを書き換える
slack アプリを開いて、チャンネル名の上で右クリックし、「チャンネル詳細を表示する」をクリックする。
チャンネル詳細画面の一番下にチャンネル ID が表示されている。
サンプルコードの channel_id = “〜” の部分をこのチャンネル ID に書き換える。
Slack app を作る
詳細は Quickstart を参照。
- Your Apps 画面を開く。
- Create New App ボタンを押す。
- 「Create an app」ダイアログが表示される。From scratch を選択する。
- 「Name app & coose workspace」ダイアログが表示される。App Name に適当な名前を入力する。Pick a workspace… では Workspace を選択する。Create App ボタンを押す。
bot token の取得
Slack api のサイドバーの Features の中に、OAuth & Permissions というメニューがある。
Scopes の下に Bot Token Scopes という欄があるので、Add an OAuth Scope ボタンを押すと入力欄が表示される。chat:write と入力する。
App を Workspace にインストール
- Slack api のサイドバーの Settings / Basic Information を表示する。
- Install your app の下の Install to Workspace ボタンを押す。
- 許可する。
- Slack api のサイドバーの Features / OAuth & Permissions サイドバーを選択する。OAuth Tokens for Your Workspace に Bot User OAuth Token というのが表示されている。サンプルコードの場合であれば、SLACK_BOT_TOKEN 環境変数に設定する。
export SLACK_BOT_TOKEN="xoxb-〜"
チャンネルに App を追加
- Slack アプリを開き、post しようとしているチャンネルを選択する。
- メッセージの入力欄に /i を入力する。
- 「このチャンネルにアプリを追加する」を選択する。
- アプリ一覧から、追加するアプリの右にある「追加」ボタンを押す。
これをやっておかないと、サンプルプログラムを実行した時に、not_in_channel というエラーが返ってくる。
not_in_channel
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'}
実行
python slack-hello.py