概要
- SlackとGASを連携した仕組みを用意したい
- GASでPost APIを用意したが、Slack BotのEvent Subscriptions → Request URL Verifiedが3秒以内で返す必要がありなかなかパスできない
- ということでやり方を考えたのでメモ
結論
- Challenge responseを返すコードのみにして、デプロイする
- デプロイバージョンを覚えておく※①
- Request URL Verifiedをパスする
- 真のコード群に変更し保存してデプロイする
- デプロイバージョンを覚えておく※②
- デプロイ管理から、①を編集し、②のバージョンに切り替える
なぜこういうことをしているのか
- コード量にもよるが、割とスプシへのRead/Write処理をいれるだけで処理完了時間が3秒超えがち
- そうすると、SlackのRequest URL Verifiedでパスできない(タイムアウトする)
- 下記コード量であれば1秒ぐらいで返せるようになるため、こいつでパスすれば良し
- ただし、GASはデプロイ単位でURLが変更になる...
- デプロイするとURLは変わるが、デプロイバージョンを編集すると別のバージョンにURLが同じでも切り替えることができる
- ので、一度パスするコードをデプロイして、その後に本当の実装のバージョンに切り替えることができる
- 補足するとRequest URL Verifiedは3秒タイムアウトがあるが、Slack Bot自体はおそらく正確なタイムアウト値はあるだろうが、10秒ぐらいだったら動作してくれる
Challengeを返すコード
function doPost(e) {
var params = JSON.parse(e.postData.contents);
return ContentService.createTextOutput(params.challenge);
}
これだけなら1秒ぐらいで返してくれる
雑感
めっちゃハマった。。。