调用Google Form API无法获取表单响应中受访者邮箱的问题
Google Forms API 返回
respondentEmail 为 undefined 的排查方案 - 第一优先级检查表单后台配置
这个字段返回的前提是表单本身开启了邮箱收集规则:打开对应表单的设置页,找到响应收集板块,必须勾选「收集受访者邮箱地址」选项;如果开启了「仅组织内用户可填写+自动记录身份」也会自动收集邮箱。默认新建的表单是关闭邮箱收集的,这种情况下不管API怎么调,都不会返回该字段。 - 检查API调用的权限范围
你使用的OAuth凭证必须挂载响应读取权限,最低需要forms.responses.readonly权限,如果只申请了表单元数据读取、表单编辑但没开响应读取的权限,接口会自动隐去邮箱这类敏感的用户信息字段。 - 检查是否误配置字段掩码
调用接口时如果传了fields参数做返回字段过滤,必须手动把respondentEmail加到字段列表里,比如你只写了fields: "responses(answers,createTime)",那不在列表里的邮箱字段就会被直接过滤掉,返回体里自然找不到。如果不需要裁剪返回字段,不要传这个参数即可拿到全量返回。 - 检查对应响应的提交场景
如果某条响应是匿名提交的、或者提交时用户选择了不关联自己的邮箱账号,哪怕表单开了收集邮箱,该条响应的respondentEmail也不会有值;如果是你通过API手动创建的测试响应,没有主动传入respondentEmail参数的话,这个字段也不会自动生成。 - 检查SDK版本
如果你用的是Node.js官方的@googleapis/formsSDK,版本低于1.0.2的旧版本存在字段序列化bug,会漏掉顶层的respondentEmail字段,升级到最新稳定版即可修复。
配置正确的最小调用示例:
const { google } = require('googleapis'); // 提前初始化好带对应权限的OAuth2客户端 const formsClient = google.forms({ version: 'v1', auth: oauth2Client }); async function fetchResponse(formId, responseId) { const { data } = await formsClient.forms.responses.get({ formId, responseId // 无特殊需求不要传fields参数 }); console.log('受访者邮箱:', data.respondentEmail); }
内容的提问来源于stack exchange,提问作者Neeha Choudhary
相关产品推荐
相关产品推荐

