无法从另一个项目中托管的dialogflow实现中的数据存储中获取结果-已解决

问题描述

每个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 (将#修改为@)