App Script获取Google表单响应ID发邮件报错问题求助
问题排查及修复方案
- 核心错误点1:方法名拼写错误,FormResponse类获取ID的方法是
getId(),首字母I之后的d为小写,你编写的getID()是不存在的方法,这是抛出未定义错误的根本原因 - 核心错误点2:手动遍历所有响应取最后一条存在并发风险,短时间内多份提交时可能拿到错误的响应ID
- 核心错误点3:事件对象用法错误,表单提交触发的事件对象
e直接携带当前提交的响应实例,不需要调用getResponses方法,该方法也不存在于事件对象上 - 核心错误点4:URL字符串缺少引号,你定义url的代码中
https://docs.google.com/forms/d/没有用引号包裹,会触发语法错误
写法1:使用事件对象(更推荐,无并发问题)
function onFormSubmit(e) { // 基础配置 var formID = '你从表单URL中复制的ID'; var emailAddress = '你的工单队列收件邮箱'; var emailSubject = '表单有新提交'; // 直接从事件对象获取当前提交的响应,无需遍历 var currentResponse = e.response; var responseID = currentResponse.getId(); // 拼接有效链接 var url = "https://docs.google.com/forms/d/" + formID + "/edit#response=" + responseID; var emailBody = "你收到了一条新的表单提交,直达链接:" + url; // 发送邮件 MailApp.sendEmail(emailAddress, emailSubject, emailBody); }
注意:使用该写法需要在脚本编辑器的「触发器」设置中,给
onFormSubmit函数添加表单提交触发事件,触发源选择对应Google表单
写法2:手动取最新响应(仅适合低提交频率的表单)
function onFormSubmit() { // 基础配置 var formID = '你从表单URL中复制的ID'; var emailAddress = '你的工单队列收件邮箱'; var emailSubject = '表单有新提交'; // 遍历获取最新响应 var form = FormApp.openById(formID) var formResponses = form.getResponses(); var lastResponse = formResponses[formResponses.length-1]; var responseID = lastResponse.getId(); // 拼接有效链接 var url = "https://docs.google.com/forms/d/" + formID + "/edit#response=" + responseID; var emailBody = "你收到了一条新的表单提交,直达链接:" + url; // 发送邮件 MailApp.sendEmail(emailAddress, emailSubject, emailBody); }
内容的提问来源于stack exchange,提问作者user3642728
相关产品推荐
相关产品推荐

