こんにちは、こんです。
Slack勤怠ボットMVPのCloud Run公開をすべて完了して、さぁ実行だって思ったら、
Slack AppのEvent Subscriptionの設定で 確かに「Verified」と出たのに、うまくいかない。
こんな試しにはまって、あれこれ追跡調査した結果、原因と対策をまとめることができたので、Noteに残しておきます。
🌎 現象の摘要
Event Subscription の画面で https://xxxxx.run.app/slack/events を入力
"Verified"と表示されるが
スプレッドシートに反映されない
これ、Slack側のバグにも見えるんですが、実際は自分側の設定ミスも原因になりがちなので、一つずつ確認しましょう。
⚡ Check 1. /slack/eventsが404を返していないか
Slackの証明は「200 OKを返してくれるWebエンドポイントかどうか」で評価されます。
URL証明時のログに
POST /slack/events 404
とあったらそれはNG。Cloud Run側のルート設定を見直しましょう
Flask では /slack/events を route登録
app = flask_app を忘れずに Cloud Run 用に設定
⚡ Check 2. IAM認証を外しているか
Cloud Runは初期設定で "IAMで認証"されたサービスとして動きます。Slackはそれを読みとれないため 403 Forbidden を返し、Event Subscription が無効になることがあります
Cloud Run 設定画面 → サービス選択
[セキュリティ] タブ → 認証 の項目
"IAM を使用して認証" のチェックを 外す
⚡ Check 3. Slack側の "Subscribe to bot events"が無効
よくあるパターンは
Event Subscription で URL 証明 OK
でも Slack 側の「Subscribe to bot events」が空
そのままページリロード → 無効化される
必ず message.im と app_mention など、何か一つイベントを Subscribe しておくことが必須です。
⚡ Check 4. POST /slack/events が 503 / 502 になっていないか
URL 自体は正しくても、Cloud Run 側の返信エラーで "Upstream error"を返してる場合も
Cloud Run のログを確認
特に textPayload の最後が 503 502 なら、アプリ側のバグの可能性高
☑ 結論
SlackのEvent Subscriptionは、この上記いずれか1つでもミスると
Verifiedになったのに無効
などの現象を起こすことがあります。
コードに問題があるのではないので、まずは1つずつチェックしていきましょう。
次回は「Cloud Runで環境変数が反映されない。.envが効かない理由と解決策」を記事化します!
#Slackボット開発 #CloudRun #Flask #DX #SlackAPI #EventSubscription #100日チャレンジ