如何从数据库中获取数据(姓名、号码等)以供 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,但我有一个问题和几个问题。
调用 IVR 后,我如何从输入小部件获取输入?
我假设“SELECT * FROM Users WHERE account_number =”[input_from_user]”,但是如何引用该用户输入以将其插入查询?
之后如何仅从数据库中检索名称以便 '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
阅读更多关于 returning 数据和使用它的信息
我正在使用 Twilio Studio 生成 IVR。我希望它通过输入帐号或类似内容来搜索数据库以查找他们的记录。
我已经按照他们关于使用 ngrok 连接到数据库的文档并使用了他们的示例 'read database' code,但我有一个问题和几个问题。
调用 IVR 后,我如何从输入小部件获取输入? 我假设“SELECT * FROM Users WHERE account_number =”[input_from_user]”,但是如何引用该用户输入以将其插入查询?
之后如何仅从数据库中检索名称以便 '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