onFormSubmit无法获取表单响应:e对象缺失values属性排查
问题
使用Google Apps Script的onFormSubmit(e)触发器获取表单响应时,返回的事件对象为{"authMode":"FULL","response":{},"source":{},"triggerUid":"604XXXXX"},完全缺失values和namedValues属性。怀疑是OAuth权限范围不足,但不确定具体缺少哪一项。
当前代码:
function onFormSubmit(e) { Logger.log(JSON.stringify(e)); Logger.log('Named Values: ' + JSON.stringify(e.namedValues)); var URL = e.namedValues['URL'] ? e.namedValues['URL'][0] : null; }
已配置的OAuth权限:
"oauthScopes": [ "https://www.googleapis.com/auth/forms", "https://www.googleapis.com/auth/script.external_request" ]
需求:获取包含有效e.values(或等价响应数据)的事件对象。
解决办法
- 确认触发器绑定对象
- 若触发器绑定在表单关联的Google表格上,事件对象会自带
values/namedValues;但如果绑定在表单本身,响应数据会存在e.response中,且需要对应权限才能读取。
- 若触发器绑定在表单关联的Google表格上,事件对象会自带
- 补充必要权限范围
- 必须添加
https://www.googleapis.com/auth/forms.currentonly权限(该权限专门用于读取当前绑定表单的响应数据,比宽泛的forms权限更适配场景)。更新后的权限配置:
"oauthScopes": [ "https://www.googleapis.com/auth/forms", "https://www.googleapis.com/auth/forms.currentonly", "https://www.googleapis.com/auth/script.external_request" ] - 必须添加
- 重新授权脚本
- 修改权限后,打开脚本编辑器执行任意函数,按照提示完成OAuth授权流程,确保新权限被正确授予。
- 调整代码适配表单触发器的事件结构
- 表单触发器的响应数据存储在
e.response中,需通过getItemResponses()方法获取,不能直接使用e.values:
function onFormSubmit(e) { // 获取所有响应值数组,顺序与表单问题对应 var allValues = e.response.getItemResponses().map(itemResp => itemResp.getResponse()); Logger.log('All Response Values: ' + JSON.stringify(allValues)); // 根据问题标题获取指定的URL响应 var urlItemResp = e.response.getItemResponses().find(itemResp => { return itemResp.getItem().getTitle() === 'URL'; }); var urlValue = urlItemResp ? urlItemResp.getResponse() : null; Logger.log('URL Value: ' + urlValue); } - 表单触发器的响应数据存储在
内容的提问来源于stack exchange,提问作者Trey
相关产品推荐
相关产品推荐

