Twilio Function接收Duda表单手机号发起AutoPilot SMS会话问题咨询
问题排查与修复方案
疑问解答
- 该操作逻辑本身正确,但需要确认两个配置项:Duda表单后台的Webhook触发规则需设置为表单提交时发送POST请求,同时Twilio Function的访问权限要设置为允许公开调用,否则Duda的请求会被Twilio拦截。
- 不可直接判定。如果Twilio Function的调用日志没有任何调用记录,才说明请求未送达Twilio服务;如果有调用记录但无报错,是因为原代码未捕获fetch异步逻辑的错误,且提前执行了callback返回响应,异步逻辑的报错不会被日志捕获。
- 原代码存在两个核心问题:
- 异步逻辑顺序错误:fetch是异步请求,原代码在fetch还未返回结果时就提前执行了callback返回响应,导致手机号获取逻辑实际未生效,且fetch抛出的错误没有捕获机制
- Duda API返回结构解析错误:直接取
json[0].Phone不符合Duda表单接口的返回结构,才会触发后续fieldsData未定义的报错
报错原因说明
你看到的Cannot read property 'fieldsData' of undefined报错,是因为接口返回的表单列表为空,或者你调用的接口路径对应的站点ID错误,导致取到的数组元素为undefined,访问其属性时触发了报错。
修复后的Twilio Function代码
exports.handler = async function(context, event, callback) { const fetch = require('node-fetch'); const client = context.getTwilioClient(); try { // 调用Duda接口获取表单数据 const response = await fetch('https://api.duda.co/api/sites/multiscreen/get-forms/e5712b84', { method: 'GET', headers: { 'Authorization': 'Basic ' + Buffer.from(`${context.DUDA_API_KEY}:${context.DUDA_API_SECRET}`).toString('base64') } }); const formList = await response.json(); // 校验返回结构合法性 if (!formList || !formList.length) { throw new Error('未获取到有效表单提交数据'); } // 提取手机号,需将代码中「手机号字段名」替换为你Duda表单内手机号输入框的实际字段名 const phoneNumber = formList[0].fields_data.find(item => item.name === '手机号字段名').value; console.log('获取到的提交手机号:', phoneNumber); // 发送第一条短信触发AutoPilot会话 await client.messages.create({ from: context.TWILIO_PHONE_NUMBER, to: phoneNumber, body: '您好,接下来将为您提供智能会话服务', channel: 'sms', autopilot: context.TWILIO_AUTOPILOT_URL }); // 返回AutoPilot跳转配置 return callback(null, { actions: [ { redirect: { method: 'POST', uri: 'task://greeting' } } ] }); } catch (err) { console.error('执行出错:', err); return callback(err); } };
配置调整说明
- 需先在Twilio Function的环境变量配置中添加
DUDA_API_KEY、DUDA_API_SECRET、TWILIO_PHONE_NUMBER、TWILIO_AUTOPILOT_URL四个变量,对应填入你自己的平台凭证,不要硬编码在代码中避免泄露 - 代码中的
手机号字段名需替换为你Duda表单里手机号输入框的实际字段名,可先打印formList[0].fields_data查看所有字段的name值确认 - 确认Duda接口路径中的站点ID
e5712b84是你当前部署表单的站点正确ID,同时确认你使用的Duda API凭证有对应站点的表单数据访问权限
内容的提问来源于stack exchange,提问作者crossbeats
相关产品推荐
相关产品推荐

