<目次>
(1) SlackのRequest URLで「Your URL didn’t respond with the value of the challenge parameter.」エラーが出た時の対処方法
(1-1) 事象
(1-2) 原因
(1-3) 対処方針
(1-4) 対処手順
(1) SlackのRequest URLで「Your URL didn’t respond with the value of the challenge parameter.」エラーが出た時の対処方法
(1-1) 事象
Slackアプリ(
https://api.slack.com/apps/)の「Event Subscription」⇒「Request URL」の設定で、イベントの連携先URLを入力した際に「Your URL didn’t respond with the value of the challenge parameter.」のエラーが出て、URLの登録が出来なかった。
(図111)
(1-2) 原因
Event Subscriptionでは入力したURLに対して、簡単なValidation(チェック)が入るのですが、そのチェックが通らなかったのが原因です。
(原文)
We’ll send HTTP POST requests to this URL when events occur. As soon as you enter a URL, we’ll send a request with a challenge parameter, and your endpoint must respond with the challenge value. Learn more.
URLを入力すると、そこに対して自動でPOSTリクエストを送りますが、この時「challenge」というパラメータを付与して送ってきます。レスポンス(応答)では、その値を取得して「そのまま返却」する事で、チェックを通過できます。
(図121①)
(1-3) 対処方針
POSTリクエスト(要求)に対するレスポンス(応答)では、リクエストに含まれる「challenge」キーの値を取得して、それを「そのまま返却」する事でチェックを通過できます。今回はPythonの例ですが、その手順をご紹介します。
全体像としては次のような感じで、Slackアプリがクライアント相当の位置づけで、指定のアドレス(例:http://a05f-106-131-76-39.ngrok.io)に対してPOSTリクエストを送ります。ngrokでこのリクエストを検知し、ローカルのアドレス(例:http://localhost:5000)に対してリクエストを転送します。その転送されたリクエストをFlaskで捌いて、レスポンス(応答)としてchallengeの値をそのまま返却します。
(図130①)
(1-4) 対処手順
・①必要なライブラリのインストール
上記プログラムを実行するためには、コマンドプロンプトを開きpipで「flask」をインストールします。
> pip install flask
(図131①)
↓
・②チェック通過用のプログラムの作成
(サンプル)
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def respond_message():
# Slackから送られてくるPOSTリクエストのBodyの内容を取得
json = request.json
print(json)
# レスポンス用のJSONデータを作成
# 受け取ったchallengeのKey/Valueをそのまま返却する
d = {'challenge' : json["challenge"]}
# レスポンスとしてJSON化して返却
return jsonify(d)
if __name__ == "__main__":
app.run(debug=True)
if __name__ == "__main__":
app.run(debug=True)
(図132①)
↓
・③「ngrok」のインストール
「ngrok」は「パブリックなIPアドレスやドメイン」を「ローカルのWebサーバ」にルーティングできるツールです。これをインストールする事で、ご自身のローカル端末をWebサーバ代わりにする事が出来ます。
(図133②)サイトにアクセス
↓
(図133④)任意の場所に配置
↓
・④flask起動
下記はPythonのvenvを使用している場合の起動コマンドの例です(xxxxxx.pyはご自身のPythonモジュール名)
& .\.venv\Scripts\python.exe .\xxxxxx.py
↓
(図134①)
・⑤ngrokの起動
ngrokコマンドでngrokを起動します。下記例の5000はポート番号で、flaskはデフォルトでポート5000を使うためです。
(例)
> ngrok http 5000
(図134②)
↓
(図134③)
・⑥SlackのRequest URLの画面でグローバルアドレスのURLを入力
⇒エラーが解消されて「Verified」と表示された事を確認
(図135①)