質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

7942閲覧

PythonのSlackbotライブラリ実行時に’invalid_auth'エラーが出る

Kurokuro96

総合スコア1

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/10/28 09:17

前提・実現したいこと

PythonでSlackAPIを使用し、プライベート用のSlack Botアプリを作ることで、
日常生活を効率化したいなと思っています。

まず、準備として以下を実行しました。

  • Slack Appの作成
  • スコープの設定
  • アクセストークン の取得
  • ワークスペースへインストール

その後、Pythonでコーディングをしていきたいなと思い、

https://qiita.com/sukesuke/items/1ac92251def87357fdf6

上記のサンプルコードをもとに、同構成でまずはSlack Botを動かしてみたのですが
Mac環境のターミナルでrun.pyを実行時に、以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

File "/Users/xxxxxxxxxx/opt/anaconda3/lib/python3.7/site-packages/slacker/__init__.py", line 102, in _request raise Error(response.error) slacker.Error: invalid_auth

おそらく、OAuth認証系のエラーが発生しているのだろうと予測はできたのですが、
色々ネットを検索し解決策を調べて実行しても、解決に至らないため、質問に至った次第です。

該当のソースコード

####run.py

# coding: utf-8 from slackbot.bot import Bot def main(): bot = Bot() bot.run() if __name__ == "__main__": print('start slackbot') main()

####slackbot_setting.py

# coding: utf-8 import os # botアカウントのトークンを指定 API_TOKEN = ‘xoxb-XXXXXXXXX' # このbot宛のメッセージで、どの応答にも当てはまらない場合の応答文字列 DEFAULT_REPLY = “何言ってんだこいつ" # プラグインスクリプトを置いてあるサブディレクトリ名のリスト PLUGINS = ['plugins']

試したこと

  • APIトークン があっているかの確認

 →BotUserTokenの値を使用

  • APIトークン の再生成
  • Slackアプリの作り直し
  • 他の.pyファイルが実行できること
  • Slack 公式WEBサイト上のテスト方法での指定チャンネルへ投稿確認
  • SlackBotライブラリを使わないPythonスクリプトでのSlack指定チャンネルへ投稿確認
  • APITOKENを環境変数に入力してのrun.py実行
  • 同様のエラー質問の解決策

slackbotを作りたいと思ってます。初心者です。
https://teratail.com/questions/267032

slackbotを作成したい
https://teratail.com/questions/78959

Slack APIのOAuthでinvalid_codeでハマった話
https://qiita.com/Kontam/items/79fe0c3d338a78132c85

あとは、IPアドレスでの制限やSlackBot関連ファイルの構成ミスなどがあるかなと想定しています。

補足情報(FW/ツールのバージョンなど)

  • Slackアプリ設定 Manifest情報
_metadata: major_version: 1 minor_version: 1 display_information: name: Botくん features: bot_user: display_name: Bot always_online: true oauth_config: redirect_urls: - http://localhost:3000/callback scopes: bot: - commands - channels:read - channels:join - app_mentions:read - chat:write - incoming-webhook - workflow.steps:execute settings: org_deploy_enabled: false socket_mode_enabled: false token_rotation_enabled: false
  • OS:Mac OS Catalina 10.15.6
  • Python:3.7.6

以上、何かお分かりの方がいましたら、ご教示いただけると幸いです。
補足等もありましたら、確認し回答いたします。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

API_TOKEN に指定しているものが有効かどうか、こちらのテストページを使って試してみてはどうでしょうか? https://api.slack.com/methods/auth.test/test

投稿2021/10/29 04:56

seratch

総合スコア215

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kurokuro96

2021/10/29 05:48

回答ありがとうございます。 そちらも下記で試しており、 ・Slack 公式WEBサイト上のテスト方法での指定チャンネルへ投稿確認 トークン の有効性は確認できております。 再テストしても、下記の結果だったので、 そこは問題ないかなと思います。 { "ok": true, ・・・ }
seratch

2021/10/29 07:23

試してみましたが、やはりそのトークンが有効でない時以外はそのエラーパターンにはならないはずです。API テスターで検証したものと全く同じものか再度確認してみてください。過去にサポートした例だと最初や最後にスペースが入っていたり、途中で値が切れてしまっていたりということもありました。 あとは `run.py` の先頭に以下のようなログの設定変更を入れてみてはどうでしょう?何が起きているかわかるかもしれません。 ```python import logging logging.basicConfig(level=logging.DEBUG) ``` なお、これは質問に対する回答ではないのですが slackbot は RTM という旧式の接続方式にしか対応していないので、新しいアプリの開発でしたら、ソケットモードを検討された方がよいです。公式 SDK を使った方法を日本語で紹介しておりますので、もし検討される場合は参考にしてみてください。 * [https://qiita.com/seratch/items/1a460c08c3e245b56441](https://qiita.com/seratch/items/1a460c08c3e245b56441) * [https://slack.dev/bolt-python/ja-jp/tutorial/getting-started](https://slack.dev/bolt-python/ja-jp/tutorial/getting-started)
Kurokuro96

2021/10/29 09:33

ありがとうございます。 再度トークン が同一なものか、確認し、実行しましたが同様のエラーが出ました。 空白や途中で切れているかも確認しましたが、問題はなさそうに思えます。 また、ご教示いただいたログを仕込んでみましたが、下記のようなエラーになりました。 443エラーになっていそうな感じがするのですが、何か原因等お分かりだったりしますか? $python3 run.py start slackbot DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): slack.com:443 DEBUG:urllib3.connectionpool:https://slack.com:443 "GET /api/rtm.start?simple_latest=0&no_unreads=0&mpim_aware=0&token=xoxb-XXXXXXXXXXXXXXXXXXX HTTP/1.1" 200 55 Traceback (most recent call last): File "run.py", line 11, in <module> main() File "run.py", line 6, in main bot = Bot() File "/Users/XXXXXXXXX/opt/anaconda3/lib/python3.7/site-packages/slackbot/bot.py", line 27, in __init__ 'BOT_EMOJI') else None File "/Users/XXXXXXXXX/opt/anaconda3/lib/python3.7/site-packages/slackbot/slackclient.py", line 43, in __init__ self.rtm_connect() File "/Users/XXXXXXXXX/opt/anaconda3/lib/python3.7/site-packages/slackbot/slackclient.py", line 46, in rtm_connect reply = self.webapi.rtm.start(**(self.rtm_start_args or {})).body File "/Users/XXXXXXXXX/opt/anaconda3/lib/python3.7/site-packages/slacker/__init__.py", line 822, in start 'mpim_aware': int(mpim_aware), File "/Users/XXXXXXXXX/opt/anaconda3/lib/python3.7/site-packages/slacker/__init__.py", line 120, in get api, **kwargs File "/Users/XXXXXXXXX/opt/anaconda3/lib/python3.7/site-packages/slacker/__init__.py", line 102, in _request raise Error(response.error) slacker.Error: invalid_auth SDKのご案内ありがとうございます。公式の開発の方なんですね。 調査していくうちにSDKの存在は知りましたが、 こちらの原因がわからないまま、放置するのもよくないかな。。。と思い調査続行していましたが、 時間を割きすぎるのも良くないのでSDKで開発を進めようかなと思い始めています。 よろしくお願いいたします。
seratch

2021/10/29 12:38

このスタックトレースは普通にトークンの値がおかしいときのもので、私の方では意図的に不正な tokn を指定する以外の方法で再現もできていないので、これ以上は何もヘルプ出来なさそうです。 あとは他の可能性としては query string での token の受け渡しはサポートされなくなったのですが、それに反して GET リクエストで token を送信した場合にもこのエラーを受ける場合があります。 https://api.slack.com/changelog/2020-11-no-more-tokens-in-querystrings-for-newly-created-apps もし公式 SDK に切り替えるようでしたら、今後のメンテナンスを考えてもそちらの方がよいと思います。この Web API 呼び出しをしている slacker という package はもうメンテされていませんし。早く本題の Slack アプリ開発に集中できると良いですね。
Kurokuro96

2021/10/29 14:54

ありがとうございます。とりあえず、本形式での開発は解決できそうもないので、諦めようと思います。SDKでの開発で疑問点などございましたら、また質問させていただきます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問