如何在Google Apps Script中给Slack返回HTTP 200且不终止脚本?
解决方案:通过时间驱动触发器实现异步处理
要解决Slack请求超时问题,核心思路是先返回200响应,再通过Google Apps Script的时间驱动触发器异步执行业务逻辑,具体实现步骤如下:
1. 主处理函数:立刻返回响应并创建触发器
在接收Slack POST请求的doPost函数中,先生成200响应,再创建延迟触发器触发业务逻辑,同时用缓存存储请求数据(因为触发器函数无法直接接收请求参数):
function doPost(e) { // 直接返回空的200响应给Slack,满足3秒超时要求 const response = ContentService.createTextOutput("").setMimeType(ContentService.MimeType.TEXT); // 将请求数据存入临时缓存,有效期5分钟(足够业务逻辑处理) const cache = CacheService.getScriptCache(); cache.put('slackRequestPayload', JSON.stringify(e), 300); // 创建1秒延迟的时间触发器,触发业务处理函数 ScriptApp.newTrigger('handleSlackBusinessLogic') .timeBased() .after(1000) .create(); return response; }
2. 业务逻辑函数:异步处理请求
单独封装业务逻辑函数,从缓存中读取请求数据后执行耗时操作:
function handleSlackBusinessLogic() { const cache = CacheService.getScriptCache(); const storedData = cache.get('slackRequestPayload'); // 无有效数据则直接退出 if (!storedData) return; // 解析缓存中的请求参数 const requestData = JSON.parse(storedData); const slackPayload = JSON.parse(requestData.postData.contents); // -------------------------- // 这里编写你的耗时业务逻辑 // 比如处理Slack消息、调用外部API、操作Google Sheets等 // -------------------------- // 处理完成后删除缓存数据,避免重复执行 cache.remove('slackRequestPayload'); }
注意事项
- 触发器配额:免费版Google Apps Script每天最多创建20个时间驱动触发器,若请求量较大,需评估是否升级付费版(配额更高)。
- 缓存有效期:根据业务处理时长调整缓存有效期,确保在业务逻辑执行前数据不会被清除。
- 权限授权:首次运行脚本时,需授权触发器创建和缓存访问的权限,否则无法正常执行。
内容的提问来源于stack exchange,提问作者Levi Seese
相关产品推荐
相关产品推荐

