SuperAPI AI 工具集

google-no-code

办公与效率

查看项目

更新于 10-23 02:19

技能介绍

用途

Google No-Code Forms Automation 用于指导用户在不编写自定义集成、不离开浏览器的前提下,构建 Google 表单并将其连接到 Google Apps Script 触发器。它覆盖表单设计、Apps Script 编辑器、onFormSubmit 触发器,以及表单提交后自动运行的小型响应处理脚本。

何时使用

  • 用户想要构建 Google 表单并自动化提交后发生的事情。
  • 用户需要邮件提醒、电子表格记录或对表单回复进行条件处理。
  • 用户想要可粘贴到表单绑定脚本项目中的 Apps Script 代码片段。

如果用户需要自定义 UI、付费 API 或完整的独立 Apps Script 应用,则不应使用本技能。

主要能力与使用方式

第 1 步:在表单界面中定义表单

在 Google 表单中创建表单,设置清晰的问题、答案类型(简答、多选、复选框)和必填字段。让问题 ID 与脚本后续需要的内容相匹配。为表单添加说明,让填写者知道预期内容。

第 2 步:打开绑定的 Apps Script 编辑器

在表单中依次进入“扩展程序”>“Apps Script”。这会打开一个绑定到该表单的项目。脚本可以通过 e.response 事件对象读取每次提交。

第 3 步:编写响应处理函数

添加一个接收 onFormSubmit 事件的函数,使用 getItemResponses() 读取 e.response,然后执行所需操作:发送邮件、写入电子表格或根据答案分支。

第 4 步:安装触发器

在 Apps Script 中打开时钟/触发器菜单,选择 onFormSubmit 函数,事件来源选择“来自表单”,事件类型选择“表单提交”,然后保存并授权。此后每次新提交都会自动运行该函数。

第 5 步:用真实提交进行测试

从隐私/无痕窗口提交一条测试回复,确认邮件、表格行或日志只到达一次。在 Apps Script 执行页面(编辑器中的“执行记录”)检查错误,若失败则阅读堆栈跟踪。

示例

示例 1:每次回复发送邮件通知

function onFormSubmit(e) {
  const response = e.response;
  const email = getEmail(response);
  MailApp.sendEmail({
    to: email,
    subject: "Form submission received",
    body: "Thank you. We have recorded your response."
  });
}

function getEmail(response) {
  // Requires Forms' VERIFIED email collection, not an email question or responder input.
  const form = FormApp.getActiveForm();
  if (!form.collectsEmail()) throw new Error("Verified email collection is required");
  // Configure the form to Verified in the UI; Apps Script's boolean alone does not prove it.
  if (PropertiesService.getScriptProperties().getProperty("VERIFIED_EMAIL_COLLECTION_APPROVED") !== "yes") {
    throw new Error("Owner must verify and approve the form's email-collection mode");
  }
  const email = response.getRespondentEmail();
  if (!email || !/^[^\s,@]+@[^\s,@]+\.[^\s,@]+$/.test(email)) throw new Error("Missing verified recipient");
  // Limit one receipt per verified address per six hours under an atomic script lock.
  const lock = LockService.getScriptLock();
  lock.waitLock(5000);
  try {
    const cache = CacheService.getScriptCache();
    if (cache.get(email)) throw new Error("Receipt already sent");
    if (MailApp.getRemainingDailyQuota() < 20) throw new Error("Mail quota reserve reached");
    cache.put(email, "sent", 21600);
  } finally { lock.releaseLock(); }
  return email;
}

示例 2:将每条回复记录到 Google 表格

function onFormSubmit(e) {
  const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName("Responses");
  const itemResponses = e.response.getItemResponses();
  const asText = value => {
    const text = Array.isArray(value) ? value.join(", ") : String(value ?? "");
    return /^[\s\u0000-\u001f]*[=+@-]/.test(text) ? "'" + text : text;
  };
  const row = [new Date()].concat(itemResponses.map(r => asText(r.getResponse())));
  sheet.appendRow(row);
}

示例 3:根据多选题答案分支

function onFormSubmit(e) {
  const items = e.response.getItemResponses();
  for (const item of items) {
    if (item.getItem().getTitle().toLowerCase() === "priority") {
      const priority = item.getResponse();
      const subject = priority === "High" ? "[URGENT] " : "";
      MailApp.sendEmail({ to: MANAGER_EMAIL, subject: subject + "New submission", body: itemResponsesText(e) });
    }
  }
}

最佳实践

  • ✅ 在告诉用户可用之前,用真实提交测试每个触发器。
  • ✅ 使用清晰、稳定的问题标题,让脚本按标题匹配项目,而不是依赖脆弱的索引。
  • ✅ 将密钥和 API 密钥保存在脚本属性中,绝不硬编码在文件里。
  • ✅ 在处理逻辑周围添加 try/catch,并用 Logger.log 记录错误,使失败在执行页面中显现。
  • ❌ 不要授予宽泛的权限范围;以表单操作所需的最小权限运行。
  • ❌ 不要向表单未合法收集的地址发送邮件。

限制

  • 适用 Apps Script 配额(邮件速率限制、每日触发器、执行时间);高流量需要评估。
  • 只有表单提交会触发事件;用户对回复的编辑默认不会触发 onFormSubmit。
  • 该技能生成的是用户必须自行粘贴、授权和部署的脚本;它本身无法创建 Google 表单项目。
  • 表格集成需要表格的 ID 和权限,必须与用户确认。

安全与安全说明

  • 脚本在用户的 Google 账户内以其声明的权限范围运行。请审查授权提示,只授予最小请求范围。
  • 不要在表单脚本或共享文件中记录、打印或嵌入密码、OAuth 令牌或 API 密钥。
  • 表单回复可能来自任何被分享该表单的人;在采取行动前验证输入。
  • 先在受控环境中测试;触发器一旦上线,每次提交都会发送邮件或追加行。

常见陷阱

  • 问题:处理函数对每次提交都运行并重复工作。 解决:优先使用单一事件对象 e.response;不要在 onFormSubmit 内单独查询表单已存储的回复。
  • 问题:item.getResponse() 对可选问题返回 undefined。 解决:用真值检查进行防护,或将问题设为必填。
  • 问题:邮件发到了错误地址。 解决:按包含“email”的问题标题进行匹配,并在发送前验证收集到的值属于填写者。

相关技能

  • @google-sheets-automation - 当回复记录目标是需要自身自动化的表格时使用。
  • @google-docs-automation - 当表单输出应创建或更新 Google 文档时使用。