2017-02-27 2 views
1

Googleスプレッドシートにデータを保存するためのカスタムスラッシュコマンドを設定しました。すべてが完全に動作します(スクリプトは起動し、その魔法を実行します)を除いて応答が長すぎます(指定された最大値は3000ms以上です)、スラックはtimeoutエラーをスローします。タイムアウトエラーを返すGoogle Scriptへのスラックコマンド

簡略化され、Googleのスクリプト:

function doPost(request) { 

    //// get data from slack payload 
    var params = request.parameters; 

    //// call a function with given parameters 
    custom_function(params); 

    //// 
    var output = {"text":"SUCCESS"}; 

//// respond to slacks POST request 
return ContentService.createTextOutput(JSON.stringify(output)).setMimeType(ContentService.MimeType.JSON); 

} 

結果:原因custom_function();終了return ContentService. ...の長い実行時間に が緩み

に=(過去の3000msがTIMELIMIT)遅すぎるtimeoutエラーが来ます追加情報:UrlFetchApp.fetch(url,options);で遅延応答を設定しました。コードはです。- これらの応答はタイムアウトエラーとともにSlackで受信されています。

質問:私はcustom_function();が終了するまで待って、すぐに戻っていくつかのHTTP 200 OKを送信する必要はありませんどのような方法がありますか?私の場合のdoPost();にはcustom_functionから何も必要ありません。

感謝!

答えて

3

将来コードを実行するための時間ベースのトリガーを作成することができます。特に、ClockTriggerBuilderのafterメソッドは、将来xミリ秒のコードを実行できます。

https://developers.google.com/apps-script/reference/script/clock-trigger-builder#after(Integer)

function doPost(){ 

//execute the the script function "myFunction" 100 ms in the future 
ScriptApp.newTrigger("myFunction") 
    .timeBased() 
    .after(100) 
    .create(); 

return ContentService.createTextOutput("OK"); 
} 
+0

だから、ポストスクリプトは、トリガをセットアップするコードを終了し、xミリ秒後に私のcustom_functionがトリガされますか?それがとてもシンプルであることを期待していなかった:D ...これを今試みよう!ありがとう! –

+0

したがって、トリガーを設定することはチャームのように機能し、実際にその機能をトリガーします。唯一のこと:私はSlackから受け取ったパラメータをその関数にどのように渡すのですか? 'Class PropertiesService'で? –

+0

感謝@Spencerイーストン!今はA +のように機能します!私は 'JSON.stringify'と' JSON.parse'を使用してPropertyServiceにすべての値を格納する必要がありました。 –

関連する問題