slash commandの3秒ルールをどうにかする。
SlackApiで作成できるslash commandではレスポンスを3秒以内に返さないとタイムアウトしてしまうが、GASをサーバとして使用する場合、この問題は相性が最悪だと思う。
そもそもGASは非同期処理を推奨していないようでsetTimeout系が全く使えない。
Lambdaの場合は、callbackでレスポンスだけ先に返すこともできるようだが、当然GASではそんなことできない。
そのため、リアルタイム処理で時間がかかりそうなものはcookieやcacheにキューとして保存して、別途定期実行で処理を行うやり方がググると出てくる。
ただ、GASの定期実行は最短が1分毎なので、リアルタイムで実行したい場合は厳しい。
その場合、コード内でイベントトリガーを作成して実行すると、限りなくリアルタイムに近い非同期処理が可能になる。
var d = new Date(); d.setMinutes(d.getMinutes() + 1);// 1 分後 ScriptApp.newTrigger("function_name").timeBased().at(d).create();
上記newTriggerを使用して時間指定でイベントを設定し、別途処理を行えば何とかなる。
追記 19/06/07
全然リアルタイムじゃなかったです。
newTrigger自体が発火までに最大15分ずれることがあるとのことなので、リアルタイムは難しい。
それと追加したトリガーは都度消さないとトリガーが貯まって怒られます。
var triggers = ScriptApp.getProjectTriggers(); for(var i=0; i < triggers.length; i++) { ScriptApp.deleteTrigger(triggers[i]); }
- 全てのトリガーを削除