You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:47:22