Bolt For Javascriptを使用しました。
ざっくり言うと、以下のようなアプリを作りたかったのです。
①スラッシュコマンドやショートカットから登録画面を表示
②入力してもらって登録ボタンをぽち
③登録結果をユーザーに返す
登録画面で登録ボタンぽちっとするのだから、登録結果もViewで返した方がいいと思ったのです。
でも無理だったのでMessageで返しました。
なにが無理だったのか。
※無理と思っていたのですが、コメントでできる方法を教えていただきました!!
Viewをsubmit → 続けて別のViewをopenするのは無謀っぽい
まずは素直に「登録画面でサブミット → 登録処理 → 登録結果画面表示」を考えました。
でもViewオープンには3秒ルールがあり、登録処理には3秒以上かかることが見込まれていたので、
①登録画面で登録ボタンを押す
②サーバでview_submissionを受け取り、処理中画面をview.openする。登録処理を実行する。
③登録処理が終わったら、処理中画面を登録結果返却画面にview.updateしてユーザーに結果を通知する。
としました。
これは一見うまくいったように見えました。
ですが
ですが処理中画面が表示されなかったり、登録結果画面への更新が失敗することがあります。サイレントで失敗する時と、Slackからエラー画面(なんか亀さんがいるエラー画面)を出された時がありました。
でも毎回じゃないし、view.openやview.updateのAPIレスポンスは正常となっているのに「なぜ??」と唸っていました。
結果
同じように困っている人はいないのかな?とネット検索してみたのですが同志は見つからず、「Viewサブミットの結果をユーザーに返したいのであれば、Messageで返す」のサンプルは見つかりました。思えば公式でもこの方法で紹介してたな、この方法が無難なんだな…という結果になりました。
多分
「Viewサブミット→即Viewオープン」は想定されていなくて、Slack側で描画が追いついてないとかそういうことなのかなあ、と想像しています