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

Google Chat中Google Apps Script执行异常问题咨询

Google Chat粘贴URL触发Web App/第三方链接预执行的底层机制解析

核心原因:Google Chat的链接预抓取功能

Google Chat为了生成友好的链接预览卡片(显示标题、描述、缩略图),会在你**粘贴URL到输入框时(甚至未发送消息)**自动发起HTTP请求抓取目标链接内容,这个过程叫「链接预抓取」。

为什么doGet被执行两次?

  • 预抓取通常会发起至少两次请求:
    1. 第一次是HEAD请求:快速获取资源头部信息(比如Content-Type、Content-Length),判断是否为可预览内容
    2. 第二次是GET请求:抓取完整页面内容,提取<title>标签、Open Graph元数据等生成预览
  • Google Apps Script Web App默认会把HEAD请求转换成GET请求处理,所以doGet(e)会被触发两次。

第三方确认链接被提前激活的原因

多数网站的账户确认逻辑是:只要服务器收到该链接的GET请求,就标记账户已激活,不管请求来自用户浏览器还是预抓取工具。Google Chat的预抓取相当于替你「点击」了一次确认链接,等你实际点击时,链接已经被消耗,因此显示账户已激活。

针对Web App的优化方案

如果你的Web App需要避免预抓取触发核心逻辑,可以通过以下方式区分请求来源:

  • 检查请求的User-Agent:Google Chat预抓取请求会带有Googlebot或Google Chat相关标识,在doGet(e)中判断:
    function doGet(e) {
      const userAgent = e.headers['User-Agent'];
      // 识别预抓取请求,仅返回预览元数据
      if (userAgent && /Googlebot|Google Chat/i.test(userAgent)) {
        return HtmlService.createHtmlOutput('<title>我的Web App</title><meta name="description" content="这是我的Web App">');
      }
      // 正常用户请求的业务逻辑
      return HtmlService.createHtmlOutput('欢迎使用我的Web App');
    }
    
  • 添加验证参数:比如仅当请求包含?action=run这类指定参数时,才执行核心操作,避免预抓取误触发。

内容的提问来源于stack exchange,提问作者Michiel the Temp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:32:45