如何从数据库中获取数据(姓名、号码等)以供 IVR 的 say 小部件使用?

How to get data (name, number, etc) from a database to be used by the IVR's say widget?

我正在使用 Twilio Studio 生成 IVR。我希望它通过输入帐号或类似内容来搜索数据库以查找他们的记录。

我已经按照他们关于使用 ngrok 连接到数据库的文档并使用了他们的示例 'read database' code,但我有一个问题和几个问题。

  1. 调用 IVR 后,我如何从输入小部件获取输入? 我假设“SELECT * FROM Users WHERE account_number =”[input_from_user]”,但是如何引用该用户输入以将其插入查询?

  2. 之后如何仅从数据库中检索名称以便 'say widget' 播放“John Doe,您有未付余额...”之类的消息?在示例代码中,我看到类似 {{widgets.function_read_db.function.body}} 的东西将数据包含在文本中,但他们没有更深入地了解如何处理数据。

至于错误,我按照所有设置步骤将名称替换为我自己的数据库名称和表,它连接到数据库,但我收到错误

Error: Packets out of order. Got: 45 Expected: 0

我的完整修改代码:

const mysql = require("mysql");

exports.handler = async function(context, event, callback) {
  context.callbackWaitsForEmptyEventLoop = false;
  const config = {
    host: context.host,
    port: context.port,
    user: context.user,
    password: context.password,
    database: context.database
  };

  console.log("connected", config);
  try {
    const db = new Database(config);

    db.connection.connect();
    const users = await db.query("select * from Patients");
    await db.close();
    console.log(Patients);
    callback(null, Patients);
  } catch (e) {
    callback(e);
  }
};

class Database {
  constructor(config) {
    this.connection = mysql.createConnection(config);
  }
  query(sql, args) {
    return new Promise((resolve, reject) => {
      this.connection.query(sql, args, (err, rows) => {
        if (err) return reject(err);
        resolve(rows);
      });
    });
  }
  close() {
    return new Promise((resolve, reject) => {
      this.connection.end(err => {
        if (err) return reject(err);
        resolve();
      });
    });
  }
}

这里是 Twilio 开发人员布道者。

互联网上关于 mysql 错误的内容并不多。有 similar issues on the mysql module's GitHub,他们大多建议端口号不正确,并且您连接的不是 mysql。因此,我只能建议您确认您的数据库具有正确的主机和端口。

关于访问 Studio 小部件中的数据。最好的办法是格式化您的数据并将其 return 设置为 JSON(即,在 callback 中使用 JavaScript 对象进行响应)。然后,在 Studio 中,您可以使用 liquid 变量 widgets.function_read_db.parsed.

引用其他小部件中的响应

例如,如果您 return:{ "message": "Hi", "person": { "name": "Bob", "age": 40 } },您可以在后续小部件中引用该数据:

widgets.function_read_db.parsed.message

widgets.function_read_db.parsed.person.name

widgets.function_read_db.parsed.person.age

您可以在 Run Function Widget reference.

阅读更多关于 returning 数据和使用它的信息