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

如何在Google表单切换章节时捕获数据并实现OTP验证?

如何在Google表单切换章节时捕获数据并实现OTP验证?

我完全懂你现在的困扰——想在用户点击Google表单的「下一步」按钮时,立刻捕获前一节填写的邮箱地址,用来发送OTP做验证,但折腾下来发现官方的Apps Script根本没提供监听「下一步」的触发器,这事儿我之前也踩过坑,咱们好好捋一捋:

首先要肯定你的判断:你说得没错,Google Apps Script确实没法直接解决这个问题。因为「下一步」按钮是纯客户端操作,切换章节时不会把数据同步到服务器,而Apps Script的触发器只有onOpen(打开表单时)和onSubmit(提交整个表单时),完全覆盖不到中途切换章节的场景——服务器端根本拿不到这时候的用户输入。

不过也不是没有办法,给你几个可行的技术方案,根据你的使用场景选:

方案一:自定义Web表单+Google Apps Script后端(最灵活,适合公开场景)

如果能接受不用原生Google表单的前端,这个方案体验最好:

  • 自己写一个简单的两步网页:第一步让用户输入邮箱,第二步输入OTP。
  • 用Google Apps Script搭建一个Web App作为后端:
    1. 写doPost()方法接收前端传来的邮箱地址,用MailApp.sendEmail()发送生成的随机OTP(比如6位数字)。
    2. 把OTP和邮箱地址临时存在ScriptProperties或者Google Sheets里,设置一个过期时间(比如10分钟)防止滥用。
  • 用户提交邮箱后,前端调用这个Web App接口,确认OTP发送成功后再跳转到OTP输入页;用户输入OTP后,再调用Web App的验证接口,匹配成功后再把最终数据存入Google Sheets或者其他数据库。
  • 部署Web App时记得设置成「任何人,甚至匿名」都能访问,同时要加简单的参数校验(比如检查邮箱格式),避免恶意请求。

方案二:原生表单注入自定义脚本(适合内部/可控场景)

如果必须用原生Google表单,可以用前端脚本注入的方式实现:

  • 用Tampermonkey(油猴脚本)或者自定义Chrome扩展,在Google表单页面注入JS代码:
    1. 监听「下一步」按钮的点击事件,用DOM操作获取当前章节的输入框内容(比如邮箱)。
    2. 通过fetch()调用你自己的后端服务(比如方案一里的Apps Script Web App)发送OTP。
    3. 在OTP章节,同样用脚本监听输入,实时调用验证接口,甚至可以禁用提交按钮直到OTP验证通过。
  • 这个方法的缺点是需要每个用户都安装油猴脚本/扩展,适合团队内部使用,不适合面向外部用户的公开表单。

方案三:拆分表单的曲线救国方案(纯原生服务,无需额外开发)

如果不想搞前端和后端开发,用原生Google服务也能凑合用:

  • 把原来的表单拆成两个独立的Google表单:
    1. 第一个表单只收集邮箱地址,设置提交后跳转到第二个表单(用来输入OTP和其他内容)。
    2. 给第一个表单加onSubmit触发器,触发时用Apps Script发送OTP到用户邮箱,同时把OTP和邮箱记录到Google Sheets里。
    3. 用户跳转到第二个表单后输入OTP,第二个表单的onSubmit触发器触发时,去Sheets里验证OTP是否匹配,匹配就保存数据,不匹配可以发送提醒或者手动处理。
  • 这个方案的优点是完全用原生工具,不用额外开发,但用户体验会打折扣——需要两次提交,而且OTP只能在第二次提交后验证,没法实时反馈。

入门资源提示

  • 写Apps Script Web App:重点看官方文档里的doPost()方法、MailApp服务和ScriptProperties的用法,学会如何接收前端请求和返回响应。
  • 写油猴脚本:先掌握基本的DOM查询(document.querySelector())和事件监听,再结合fetch()发送请求。
  • 拆分表单:熟悉Google表单的「提交后跳转」设置,以及FormApp和SpreadsheetApp结合操作数据的方法。

备注:内容来源于stack exchange,提问作者Karthik C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:43:13