Slackにpythonからファイルをアップロードする

slackにメッセージを送信するのはこちらの記事が参考になる。Slackにpythonからメッセージを送信する – Qiita

前提

今回はAPIのトークンが取得できていることを前提とする。前提ができていない人はこちらの記事が参考になる。Slackにpythonからメッセージを送信する – Qiita

  • slackのワークスペースの作成
  • slack-appの作成・tokenの取得
  • slack appをチャネルに追加

pythonでapiを叩く

ファイルをアップロードするときはfile.upload apiを使用する。apiの詳細については公式サイトの説明がわかりやすい。files.upload method | Slack

pythonでのサンプルコードがなかったので、エラーでつまずかないための注意点も記録する。

pythonコード

実際のコードは以下になる。token、ファイルパス、チャネル名を正しく設定する必要がある。

import requests


class SlackDriver:

    def __init__(self, _token):
        self._token = _token  # api_token

    def send_image(self, file_path, message, channel):
        files = {'file': open(file_path, 'rb')}
        params = {"token": self._token, 'channels': channel, 'initial_comment': message}

        r = requests.post('https://slack.com/api/files.upload',
                          params=params,
                          files=files)
        print("return ", r.json())


if __name__ == '__main__':
    token = ''  # TODO your token.
    slack = SlackDriver(token)
    slack.send_image("image.png", "This is the comment of the image", "#random")

注意するエラー

okが返ってきているがslackに送信されていない

チャネル名があっているか確かめる。パラメータとしてchannelsを設定することにも注意する「s」が必要である。

invalid_form_data エラー

headersを指定するとinvalid_form_data エラーとなる。content typesの指定(multipart/form-dataなど)は不要!

参考サイト

関連記事

Comments

  1. yoko より:

    パラメータとしてchannelsを設定することにも注意する「s」が必要である。
    ↑これにまさにひっかかっていました、情報ありがとうございます。

タイトルとURLをコピーしました