Appearance
/mypage 失敗通知 Slack 連携 E2E手順
目的
求職者向け /mypage/:token のスケジュール操作で以下を確認する。
- 画面上でエラーメッセージ(トースト/表示)が出る
- フロントから
/api/v1/public/candidates/:token/schedule-errorsが呼ばれる - バックエンドから Slack Webhook へ通知される
前提
SLACK_WEBHOOK_URLが有効値で設定されている- Backend が起動している(
http://127.0.0.1:8787) - Frontend が起動している
- テスト用の有効な
public_tokenを1つ用意している - Slack 側で通知先チャンネルを確認できる
起動
bash
# backend
npm run dev --workspace=backend
# frontend(別ターミナル)
npm run dev --workspace=frontendhttp://localhost:3000/mypage/<public_token> を開き、スケジュール タブへ移動する。
1. GET失敗の通知確認(Queryエラー)
手順
- ブラウザDevToolsを開く
- Network request blocking に次を追加して有効化する
*/api/v1/public/candidates/*/schedules* /mypageのスケジュールタブを再読み込みする
期待結果
- 画面にエラー表示
エラーが発生しました。時間をおいて再試行してください。 schedule-errorsへのPOSTが発生し、202が返るschedule-errorsリクエストBodyに以下が含まれるsource: "query"message: "エラーが発生しました。時間をおいて再試行してください。"
- Slack に
/mypage スケジュールエラー通知が届く
確認後、request blocking は無効化する。
2. 更新失敗の通知確認(Mutationエラー)
手順(簡易: ネットワーク失敗を意図的に作る)
- DevTools の request blocking に次を追加して有効化
*/api/v1/public/candidates/*/schedules/* - 既存の「空き」スケジュールを1件開き、削除を実行する
空き枠がない場合は先に1件作成してから削除操作する
期待結果
- トーストが表示される
- 例:
エラーが発生しました。時間をおいて再試行してください。
- 例:
schedule-errorsへのPOSTが発生し、202が返るschedule-errorsリクエストBodyに以下が含まれるsource: "mutation"
- Slack に通知が届く
確認後、request blocking は無効化する。
3. 429(レート制限)の通知確認
分単位制限(20回/分)を先に消費し、次のUI操作で 429 を発生させる。
手順
- 以下で同一トークンに対して
POST /schedulesを20回実行する
bash
TOKEN="<public_token>"
for i in $(seq 1 20); do
curl -s -o /dev/null -w "%{http_code}\n" \
-X POST "http://127.0.0.1:8787/api/v1/public/candidates/${TOKEN}/schedules" \
-H "Content-Type: application/json" \
-d '{"start_time":"2026-02-09T10:00:00+09:00","end_time":"2026-02-09T11:00:00+09:00","adaptability":"どちらも可"}'
done- 1分以内に
/mypage画面から空き時間の作成または削除を1回実行する
期待結果
- UIにレート制限メッセージ
アクセスが集中しています。しばらく待ってから再試行してください。
schedule-errorsへのPOSTが発生し、202が返るschedule-errorsリクエストBodyに以下が含まれるsource: "mutation"code: "RATE_LIMITED"
- Slack に通知が届く
4. Slack送信成功の確認ポイント
DevTools で schedule-errors リクエストを開き、Response が次であること:
json
{ "data": { "success": true, "skipped": false } }success: true= Webhook送信成功skipped: true=SLACK_WEBHOOK_URL未設定などで送信未実行
補足(直接送信確認)
UIを使わず通知経路だけ確認する場合:
bash
curl -i -X POST \
"http://127.0.0.1:8787/api/v1/public/candidates/<public_token>/schedule-errors" \
-H "Content-Type: application/json" \
-d '{"source":"mutation","code":"RATE_LIMITED","message":"実送信テスト"}'202 と {"data":{"success":true,"skipped":false}} が返れば送信成功。