[英]Google Apps Script / Slack - async or a quick response
我正在為進行日常簽到的員工構建一個 Slack 應用程序。 員工在 Slack 中使用/checkin
斜杠命令簽入。 Slack 要求在 3 秒內響應斜杠命令。 如果沒有,那么它會給發起命令的人一個 operation_timeout 錯誤。
在我的設置中,斜杠命令第一次對每個用戶都失敗,但第二次總是有效。 與其依靠這個問題消失,有沒有辦法確保腳本在 3 秒內響應? Google Apps Script 似乎有點慢。 即使返回一個簡單的響應似乎也很慢。
我可以先快速回復 Slack,然后再處理數據嗎? 看來我的 logUser function 的執行時間比 3s 長。 或者它可以以非阻塞方式運行嗎? 但即便如此,反應似乎還是慢得不合理。
function doPost(request){ var params = request.parameters; var user = params.user_id; var text = params.text; if(text == ''){ logUser(user); return ContentService.createTextOutput(':white_check_mark: Checked In; Thank you! <@' + user + '> '); } }
編輯:我想我可以使用ScriptApp.newTrigger("logUser").timeBased().after(200).create();
延遲 logUser 的運行,讓消息提前返回給 Slack。 但是后來我失去了給logUser function一個參數的能力?
編輯:按要求logUser
function logUser(user){ var checkinSheet = getTodaySheet(); var name = getNameFromId(user); var date = new Date(); var time = date.getTime(); checkinSheet.appendRow([name, user[0], "TRUE"]); }
logUser 正在選擇正確的 Google 表格(我們每天都有一個),根據員工電子表格檢查啟動 Slack 命令的人的 SlackID,找到啟動它的人的姓名,然后將該姓名發布到正確的谷歌表。 這可能很耗時,所以我可以理解為什么這會阻止響應。
將響應返回給 Slack 后可以運行 logUser 嗎?
使用PropertiesService
將用戶名存儲到腳本的屬性中,然后在您返回 Slack 后運行 function logUser()
。
您可以將信息直接存儲為腳本屬性,然后在logUser()
function 中使用它來登錄用戶。這將需要對您當前的代碼進行一些修改,但基本運行如下:
userId
存儲為腳本屬性logUser()
然后觸發logUser()
:
首先在您的doPost()
中:
function doPost(request){
var params = request.parameters;
var user = params.user_id;
var text = params.text;
if(text == ''){
PropertiesService.getScriptProperties().setProperty(user, "logged-in");
ScriptApp.newTrigger("logUser").timeBased().after(200).create();
return ContentService.createTextOutput(':white_check_mark: Checked In! Thank you! <@' + user + '> ');
}
}
然后為您的logUser()
function:
function logUser(){
var checkinSheet = getTodaySheet();
var usersToLogIn = PropertiesService.getScriptProperties().getKeys();
var date = new Date();
var time = date.getTime();
usersToLogIn.forEach(function(user) {
var name = getNameFromId(user);
checkinSheet.appendRow([name, user[0], "TRUE"]);
PropertiesService.getScriptProperties().deleteProperty(user);
});
}
我希望這對你有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.