问题描述
每个Dialogflow聊天机器人都与一个项目相关联。显然,可以创建的聊天机器人的数量没有限制。但是,他们可能使用的资源(例如履行功能)是要收费的。在GCP中使用试用帐户时,我只能有3个可计费项目(除非我要求升级)。但是,没有什么可以拒绝使用由另一个项目的可计费帐户托管的资源(例如功能或数据存储区)。因此,我试图对这些可付费项目之一中托管的聊天机器人使用实现功能。这里没有问题。我可以调用该函数,并且可以正常工作。但是我需要在数据存储区中进行查询,并且它在这种情况下不起作用。我在同一项目的另一个函数中运行了相同的代码,查询结果还可以。但是查询不会在意图映射的函数(函数topic(agent){...})内运行。 这是这两个功能的摘录:
(1)返回查询结果
exports.helloWorld = (req,res) => {
const query = datastore
.createquery('Synonym')
.filter('synonym',"annual salary");
datastore.runQuery(query,(err,entities,info) => {
// entities = An array of records.
// Access the Key object for an entity.
var message = "<h3>Synonyms for ANNUAL SALARY</h3>";
for (const entity of entities) {
const entityKey = entity[datastore.KEY];
message += entityKey.name + " is synonym of " + entity["synonym"] + "</br>";
}
res.status(200).send(message);
});
};
返回:
年薪的同义词
年薪是年薪的代名词
年薪是年薪的代名词
...
(2)不返回结果
exports.HRchatbotFulfillment = functions.https.onRequest((request,response) => {
const agent = new WebhookClient({ request,response });
...
function topic(agent) {
const topic = agent.parameters['topic'];
var message = "Synonyms for " + topic + "\n";
const query = datastore.createquery('Synonym').filter('synonym',topic);
datastore.runQuery(query,info) => {
// entities = An array of records.
// Access the Key object for an entity.
for (const entity of entities) {
const entityKey = entity[datastore.KEY];
message += entityKey.name + " is synonym of " + entity["synonym"] + "\n";
}
});
agent.add(message);
}
返回:
“年薪的代名词”
实现状态 Webhook执行成功
我将不胜感激任何建议。 谢谢。
更新
我花了一些时间弄清楚如何处理这个异步调用,但是我已经知道了:
const runQuery = (query) => new Promise((resolve,reject) => {
datastore.runQuery(query,info) => {
if (err) {
return reject(err)
}
return resolve([entities,info])
})
});
async function topic(agent) {
const topic = agent.parameters['topic'];
var message = "Synonyms for " + topic.toupperCase() + "\r\n";
const query = datastore
.createquery('Synonym')
.filter('synonym',topic);
try {
const [entities,info] = await runQuery(query);
for (const entity of entities)
{
const entityKey = entity[datastore.KEY];
message += entityKey.name + "\r\n";
}
}
catch(err){
agent.add("Err: " + err);
}
agent.add(message);
}
谢谢大家的关注。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)