【发布时间】:2020-06-11 09:46:33
【问题描述】:
我正在为每天签到的员工构建一个 Slack 应用程序。员工在 Slack 中使用 /checkin 斜杠命令签到。 Slack 要求在 3 秒内响应斜杠命令。如果没有,那么它会向启动命令的人提供 operation_timeout 错误。
在我的设置中,斜杠命令第一次对每个用户都失败,但第二次总是有效。与其依靠这个问题消失,有没有办法确保脚本在 3 秒内响应? Google Apps Script 似乎有点慢。即使返回一个简单的响应也似乎很慢。
我可以先快速回复 Slack,然后再处理数据吗?看来我的 logUser 函数执行时间比 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 函数一个参数的能力?
编辑: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 吗?
【问题讨论】:
-
你能展示你的
logUser()函数吗? -
@RafaGuillermo 添加。执行确实需要时间。我想我需要在将消息返回给 Slack 后能够运行它。不知道如何。
-
是否有可能多人同时或大约同时登录?另外,您在记录的登录时间上有多少余地?
-
@RafaGuillermo 很可能很多人会在同一时间运行该脚本。记录签到时间的余地很大。如果需要,几分钟。
标签: javascript google-apps-script v8 slack slack-api