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

如何从数据库获取数据供Twilio IVR的say widget使用及问题解决

报错修复方案

针对Error: Packets out of order. Got: 45 Expected: 0的报错,按以下顺序排查修改:

  • 删除代码中db.connection.connect()这一行,Database类构造函数已经通过mysql.createConnection(config)初始化了连接,重复触发连接逻辑是该报错的高频诱因
  • 检查你的MySQL服务版本,若使用8.0及以上版本,可将依赖的mysql包替换为兼容度更高的mysql2包,旧版mysql包对MySQL 8.0的新认证协议适配存在缺陷
  • 修正代码中的变量名错误:你将查询结果存入了users变量,但后续console.log(Patients)、callback(null, Patients)两处直接使用了表名作为变量,会触发变量未定义错误,需将Patients改为users

问题1:获取Input组件用户输入并代入查询

  1. 在Twilio Studio的流程配置中,找到调用数据库查询Function的组件,在参数配置栏新增自定义参数,例如命名为account_input,参数值填写{{widgets.你的Input组件ID.digits}},即可将用户输入的内容传递到Function中
  2. 在Function代码中通过event.account_input即可拿到用户输入值,建议使用参数化查询避免SQL注入风险,查询语句写法参考:
const userInput = event.account_input;
// 假设账号字段名为account_number,用?作为占位符,参数放在数组中传入
const users = await db.query("select * from Patients where account_number = ?", [userInput]);

问题2:提取指定字段供Say组件使用

  1. 先调整Function的返回值结构,返回明确的字段信息,参考写法:
try {
  const db = new Database(config);
  const userInput = event.account_input;
  const users = await db.query("select * from Patients where account_number = ?", [userInput]);
  await db.close();
  // 处理查询结果,假设姓名字段为user_name
  if(users.length > 0) {
    callback(null, {
      findUser: true,
      userName: users[0].user_name
    });
  } else {
    callback(null, {
      findUser: false,
      userName: "未匹配到用户"
    });
  }
} catch (e) {
  callback(e);
}
  1. 在Twilio Studio的Say组件中,直接用模板语法引用返回的字段即可,示例话术写法:
    {{widgets.你的Function组件ID.function.body.userName}},您有未支付账单……

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:39:01