📨

Pythonでslackを使う(1): slackのメッセージ送信

2022/12/08に公開

結論

zsh

% source {任意の仮想環境 = venv}/bin/activate
(venv) % pip install "slack_sdk>=3.0" 
(venv) % pip install aiohttp #必要であれば

zshenv

export SLACK_API_TOKEN="hogehogehoge" #your token

python

import os
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

def send_slack_message(text = "Hello from your app! :tada:", channel = "random"):

    slack_token = os.environ["SLACK_API_TOKEN"]
    client = WebClient(token=slack_token)

    try:
        response = client.chat_postMessage(
            channel=channel,
            text=text
        )
    except SlackApiError as e:
        # You will get a SlackApiError if "ok" is False
        assert e.response["error"] 
	

内容

導入

プログラムの実行過程を把握するポピュラーな方法は以下です。

  • printなどで出力
  • loggerなどでlogをファイルに保存
  • LINEやslackで通知等、他ツールを用いる

それぞれ話すと長くなるので(今後はそれぞれを記事にします)省略しますが、今回は3番目のアイテマイズのslackでプログラムの実行過程を把握する方法を説明します。

slackはLINE(line-notify)に比べて業務や研究色が強く、Gmailと比べて気軽に閲覧できるのでオススメです。

pythonでslackを扱うための手順は以下です。

  1. API_TOKENの取得
  2. ローカル環境の設定(ライブラリ(slack_sdk)のインストールと環境変数)
  3. プログラム記述

それぞれ以下で説明していきます。

1. SLACK_API_TOKENの取得

手順は以下です[2]。

  1. slack api(https://api.slack.com/) からアプリを作成
  2. Permissions -> Scopeからchat:write権限を追加
  3. slackワークスペースにアプリをインストール
  4. Bot User OAuth Access TokenのAPI tokenを取得(tokenが複数あるので該当のものであるか要確認)

2.ローカル環境の設定

SLACK_API_TOKENを環境変数に設定

取得したSLACK_API_TOKENは必ず環境変数に入れてプログラムレベルには記述しないようにしましょう。ターミナルでexportするか以下のようにシェルの環境設定ファイルで読み込むようにしましょう。

安全性の観点から前者でexportしてhistoryを消す方が良いですが、個人的にはログを残すという意味で後者でいいかなと思います。そもそもシェルの環境設定ファイルは隠しファイルで、見つからないという前提です。

zshenv

export SLACK_API_TOKEN="hogehogehoge" #your token

ライブラリ(slack_sdk)のインストール

pythonでslackを扱うのに必要なライブラリをインストールします。
本家[1]に従うと以下のようになります。
また筆者は、slack_sdkのみをインストールして後述のプログラムを実行すると、ModuleNotFoundError: No module named 'aiohttp'というエラーが出たので、追加でaiohttppip installした。

zsh

% source {任意の仮想環境 = venv}/bin/activate
(venv) % pip install "slack_sdk>=3.0" 
(venv) % pip install aiohttp #必要であれば

3.プログラム

プログラムは以下です。関数化するとどこでも呼べるので便利です。

import os
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

def send_slack_message(text = "Hello from your app! :tada:", channel = "random"):

    slack_token = os.environ["SLACK_API_TOKEN"]
    client = WebClient(token=slack_token)

    try:
        response = client.chat_postMessage(
            channel=channel,
            text=text
        )
    except SlackApiError as e:
        # You will get a SlackApiError if "ok" is False
        assert e.response["error"] 

send_slack_message()	

最後に

Pythonでslackを使うシリーズは計3回を予定しています。
ご期待があればLINEやNotion APIなども使っていくので、コメントいただけるとありがたいです!!

関連

https://zenn.dev/sergicalsix/articles/067065d4eccb9a

参考

[1] slack_sdk: https://slack.dev/python-slack-sdk/faq.html#installation-issues
[2] SLACK_API_TOKENの取得: https://risaki-masa.com/how-to-get-api-token-in-slack/

Discussion