20200611_Slackbot_with_proxy_において複数GROWIがmodalを開く場合の挙動の検討
問題
-
webClient を使ってリクエストを投げる場合、毎回 { ok: bool } を返す必要がある
- webClient は受け取った response に ok = false が入っている場合 error を投げる
- ok がない場合、webClientは再度リクエストを投げてしまう
-
複数GROWI が同時に Modal を開くときにエラーが発生する
/growi create
を実行したタイミング- 後からリクエストした GROWI の view.open において trigger_id が被ってしまうのがエラーの原因
- ここで 400 を GROWI に返すと webClient は再度リクエストを投げようとしてしまう
解決策
絶対必要(1の解決策)
- webClient 中継する場合は必ず ok をレスポンスに含める
- これは view.open に限らず発生するので実施する
- GW-6288 で実施
どちらかを実施(2の解決策)
-
trigger_id が被ってしまう場合は ok = true を GROWI 本体に返す(trigger_idのエラーをGROWI側は知る必要がない)
- Proxy が createは複数GROWIに対応してません と slack に postMessage を実行。
- コスト小だが、先にレスポンスを返したGROWI に対してしかページの作成(Modal の submit 処理)ができない
-
そもそもリクエストを片方の GROWI にしか投げない
- Proxy が create コマンドを検知したときに、一旦 relation から接続している GROWI を取得してくる
- Proxy -> slack にどの GROWI にリクエストを飛ばすか選択させる Modal を返す
- 選ばれた GROWI にのみリクエストを飛ばす
- コスト大だが、ユーザーが選択できる
- タスクは用意している
- GW-6287 で実施
memo
export interface WebAPICallResult { ok: boolean; error?: string; response_metadata?: { warnings?: string[]; next_cursor?: string; scopes?: string[]; acceptedScopes?: string[]; retryAfter?: number; messages?: string[]; }; [key: string]: unknown; }