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 を参照。

  1. Your Apps 画面を開く。
  2. Create New App ボタンを押す。
  3. 「Create an app」ダイアログが表示される。From scratch を選択する。
  4. 「Name app & coose workspace」ダイアログが表示される。App Name に適当な名前を入力する。Pick a workspace… では Workspace を選択する。Create App ボタンを押す。

bot token の取得

Slack api のサイドバーの Features の中に、OAuth & Permissions というメニューがある。

OAuth & Permissions

Scopes の下に Bot Token Scopes という欄があるので、Add an OAuth Scope ボタンを押すと入力欄が表示される。chat:write と入力する。

App を Workspace にインストール

  1. Slack api のサイドバーの Settings / Basic Information を表示する。
  2. Install your app の下の Install to Workspace ボタンを押す。
  3. 許可する。
  4. Slack api のサイドバーの Features / OAuth & Permissions サイドバーを選択する。OAuth Tokens for Your Workspace に Bot User OAuth Token というのが表示されている。サンプルコードの場合であれば、SLACK_BOT_TOKEN 環境変数に設定する。
export SLACK_BOT_TOKEN="xoxb-〜"

チャンネルに App を追加

  1. Slack アプリを開き、post しようとしているチャンネルを選択する。
  2. メッセージの入力欄に /i を入力する。
  3. 「このチャンネルにアプリを追加する」を選択する。
  4. アプリ一覧から、追加するアプリの右にある「追加」ボタンを押す。

このチャンネルにアプリを追加する

これをやっておかないと、サンプルプログラムを実行した時に、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

slack-hello の実行結果