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

Twilio Function接收Duda表单手机号发起AutoPilot SMS会话问题咨询

问题排查与修复方案

疑问解答

  1. 该操作逻辑本身正确,但需要确认两个配置项:Duda表单后台的Webhook触发规则需设置为表单提交时发送POST请求,同时Twilio Function的访问权限要设置为允许公开调用,否则Duda的请求会被Twilio拦截。
  2. 不可直接判定。如果Twilio Function的调用日志没有任何调用记录,才说明请求未送达Twilio服务;如果有调用记录但无报错,是因为原代码未捕获fetch异步逻辑的错误,且提前执行了callback返回响应,异步逻辑的报错不会被日志捕获。
  3. 原代码存在两个核心问题:
  • 异步逻辑顺序错误: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);
  }
};

配置调整说明

  1. 需先在Twilio Function的环境变量配置中添加DUDA_API_KEY、DUDA_API_SECRET、TWILIO_PHONE_NUMBER、TWILIO_AUTOPILOT_URL四个变量,对应填入你自己的平台凭证,不要硬编码在代码中避免泄露
  2. 代码中的手机号字段名需替换为你Duda表单里手机号输入框的实际字段名,可先打印formList[0].fields_data查看所有字段的name值确认
  3. 确认Duda接口路径中的站点IDe5712b84是你当前部署表单的站点正确ID,同时确认你使用的Duda API凭证有对应站点的表单数据访问权限

内容的提问来源于stack exchange,提问作者crossbeats

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 23:33:00