AWS Lambdaを利用して、変数dialogsに格納された文字列をテキストファイルにしてSlackに投稿する機能を実装したいと考えております。
ランタイムはPython3.8で、コードは以下の通りです。
import os import requests def lambda_handler(event, context): SLACK_TOKEN = os.environ['SLACK_TOKEN'] SLACK_CHANNEL = os.environ['SLACK_CHANNEL'] data = { "token": SLACK_TOKEN, "channels": SLACK_CHANNEL, "title": "Dialog_Bot", "initial_comment": "投稿がありました" } f = open('/tmp/Slack.txt','w+b') f.write(dialogs.encode('utf-8')) f.seek(0) f.read() f.close() files = {'file': open('/tmp/Slack.txt', 'rb')} response = requests.post(url="https://slack.com/api/files.upload", params=data, files=files) print(response.text)
ログを確認し、response.textの値を見ていると以下のようにエラーが表示されていました。
{ "ok": false, "error": "invalid_auth" }
トークンの値が間違っていたのかと疑っていたのですが、同じトークンの値を使ってローカル環境でcurlコマンドを実行した場合は処理が成功しました。
%curl --request POST \ --form channels=XXXXXXXXXXXX(環境変数SLACK_CHANNELと同じ値) \ --form token=xoxb-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXX(環境変数SLACK_TOKENと同じ値) \ --form file=@/./test.txt \ --form title=テスト \ --form initial_comment=テスト \ https://slack.com/api/files.upload {"ok":true,"file":{"id":……(以下ステータス情報が続く)
https://api.slack.com/methods/files.upload
エラーコードの原因を調べると、「認証の一部の側面を検証できません。提供されたトークンが無効であるか、要求が要求の実行を許可されていないIPアドレスから発信されています。」と書かれています。
トークンはSlack apiのOAuth&Permissionsのページで発行したBot User OAuth Tokenの値をそのまま利用しているのと、
許可されるIPアドレス範囲の設定は初期(何も設定していない)状態にしております。
IPアドレスの許可設定はどの状態が最適解なのか、それとも他のところに原因があるのでしょうか。
考えられる原因と解決策をご存知でしたら教えていただけると有り難いです。
〜〜〜〜〜
追記(2021.10.05)
curlがフォームデータ、lambdaがJSONデータとして投稿していたので、JSON形式に問題があるかと思いmultipart-formを利用して、以下のように編集しました。
編集前 files = {'file': open('/tmp/Slack.txt', 'rb')} 編集後 file_name = open('/tmp/Slack.txt', 'rb') files = {'file': ('Slack.txt', file_name, 'text/plain')}
しかしながら、挙動に変化は無く、また別の原因を探している所です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/04 08:03
2021/10/04 08:07
2021/10/04 08:47