20200611_Slackbot_with_proxy_において複数GROWIがmodalを開く場合の挙動の検討

問題

  1. webClient を使ってリクエストを投げる場合、毎回 { ok: bool } を返す必要がある

    • webClient は受け取った response に ok = false が入っている場合 error を投げる
    • ok がない場合、webClientは再度リクエストを投げてしまう
  2. 複数GROWI が同時に Modal を開くときにエラーが発生する

    • /growi create を実行したタイミング
    • 後からリクエストした GROWI の view.open において trigger_id が被ってしまうのがエラーの原因
    • ここで 400 を GROWI に返すと webClient は再度リクエストを投げようとしてしまう

解決策

https://github.com/weseek/growi/blob/feat/growi-bot/packages/slackbot-proxy/src/controllers/growi-to-slack.ts#L164-L206 external_link

絶対必要(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; }