質問: ### 前提・実現したいこと slack側からslash commandsでGASのウェブアプリケーションを叩き、GAS側でSpreadsheetに変更をかけるシステム。 そのタイムアウトを無くす(減らす)。 ### 発生している問題・エラーメッセージ slackの各種APIは応答に3秒以内というルールがあり、それを超えた場合エラーが表示されます。 Spreadsheetを弄る事はGASの特性上時間を要するのですが、slack側への応答はその処理とは関係がありません(「ok」等適当な事を返せれば十分)。 そのため、slack側へは即時応答してもらい、その後ゆっくりSpreadsheetを触る仕様を実現したいと思っています。 しかし、GASのウェブアプリケーションを叩いた場合GAS上でreturnしなければslackへ応答はできません。 そして当たり前ですが、returnするとGASで発火しているdoPost()は終了するため、その後処理を実行できません。 おかしな話ではありますが、実現したい事をそのまま言うと、returnの後処理を行うGASウェブアプリケーションです。 ### 試したこと GASはAPIを叩くほど時間に遅延が発生するため、APIを叩く回数を減らす等によって時間の短縮が見込めるため、極力のチューニングは行ったつもりです。 今回はそのチューニングではなく、上記の方法で問題を解決する手段はないかと質問させていただきました。
回答: もしこれがJSならばsetTimeoutという技が使えるんですが、 GASにはsetTimeoutではなく、Utilities.sleepという同期処理のメソッドが用意されており、裏で実行する裏技的なものを徹底的に排除しようとしているように思えます。 参考サイト: 普通にSlackボットを立ち上げるか、 Webサーバを設置してリクエストが来たらタスクとして登録だけ行いすぐにレスポンスを返し、 そして後にバッチやワーカー的なプロセスがタスクを読み取ってGASのAPIを代理で実行する。 上記の二択になるんじゃないでしょうか?