当前位置: 首页 > 知识库问答 >
问题:

在dialogflow联机编辑器中从实现访问参数时出错

楚昊明
2023-03-14

A.我做的步骤

>

        "@google-cloud/firestore": "^0.16.1",
         "actions-on-google": "^2.12.0",
         "firebase-admin": "^8.10.0",
         "firebase-functions": "^3.6.0",
         "dialogflow": "^0.6.0",
         "googleapis": "^27.0.0",
         "dialogflow-fulfillment": "^0.6.1",
         "request": "^2.85.0",
         "uuid": "^3.0.1"

在index.js中添加管理员权限

         var admin = require('firebase-admin');
         var app = admin.initializeApp(); 

映射意图

          intentMap.set('getVisaCountry', ffVisaCountry);

创建函数ffVisaCountry

B.我的代码

    'use strict';
 
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

var admin = require('firebase-admin');
var app = admin.initializeApp();


process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements
 
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
 
  function welcome(agent) {
    agent.add(`Welcome to my agent!`);
  }
 
  function fallback(agent) {
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
  }
  
  function ffVisaCountry(agent) {
   let visaCountry = agent.parameters.visaCountry;
    agent.add(`FF reply: ${visaCountry}`);  
  }

'https://developers.google.com/actions/images/badges/XPM_BADGING_GoogleAssistant_VER.png',
  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);
  intentMap.set('Default Fallback Intent', fallback);
  intentMap.set('getVisaCountry', ffVisaCountry);
  agent.handleRequest(intentMap);
});

C.我试着遵循交替论证。

  1. 用常量和var替换let

D.代理人的预期和实际行为

预期行为:FF回复:{用户键入的国家名称}

实际行为:FF回复:[对象]

共有3个答案

申高卓
2023-03-14

但是,为了使用从意图中的混合实体派生的参数(而不是@sys.geo-country等系统实体)

代码应写为

add(FF回复:${visaccountry['geo-country']});

谢谢

归德厚
2023-03-14

谢谢你的及时回答。正如你正确提到的,我在我的意图“getVisaCountry”中使用了混合实体“visaCountry”。根据您的解决方案,我使用@sys.geo-国家作为参数,在所述意图,问题解决。感谢您的支持和技术上完美的答案

逄学潞
2023-03-14

问题在于visaccountry是一个JavaScript对象而不是字符串。当您尝试将其转换为行中的字符串时

agent.add(`FF reply: ${visaCountry}`);

JavaScript不知道如何做到这一点,所以它将其表示为一个通用字符串“[对象对象”。

如果您只想查看对象符号,您可以使用JSON. stringify()方法将对象转换为JSON字符串。像这样的东西

agent.add(`FF reply: ${JSON.stringify(visaCountry)}`);

可能会给你这个结果

{ "name": "Canada", "alpha-2": "CA", "numeric": 124, "alpha-3": "CAN" }

如果您只是想要ISO-3166-1国家代码,您可以通过以下方式访问它

let countryCode = visaCountry['alpha-2'];

但是为什么Dialogflow要发送一个对象呢?

您不会显示正在使用的意图,但如果您使用的是@sys.geo country code实体类型,则Dialogflow会将其作为对象发送给您的履行。

如果只需要名称,则可以使用@sys.geo country实体类型。这将以当前语言环境中的字符串形式发送给您的代理。

 类似资料:
  • 我已经将Dialogflow配置为在询问名称后发出POST请求。当我在联机请求查看器中查看信息时,我可以在查询字符串部分中看到我想要的信息: 然而,在Django,我找不到这些信息。我试图在数据库中保存完整的请求和request.meta。 服务器上收到的请求如下所示: {http_content_type':'application/json'、'http_host':'www.mysite.i

  • 问题内容: 我正在尝试对Hibernate 5.0.7.Final使用JPA2类型安全的条件查询。 root.get总是抛出异常。元模型类用于通过产生。 在未填充的JPA /Hibernate静态元模型属性中提出了类似的问题-NullPointerException,但这一次这两个类位于同一包中。 堆栈跟踪: 我的代码: 我用来确保它们将具有的接口。 模型类 生成的元模型Person_类 我随Pe

  • 我试图访问选择参数设置的这个构建是参数化在一个Groovy构建脚本,为一个Jenkins自由式工作。 我尝试将列表用作,但它不起作用,并给出了以下输出: 我在Stackoverflow上引用了其他类似的帖子,但似乎没有什么对我有用。我还尝试了

  • 本文向大家介绍简单实现winform编辑器,包括了简单实现winform编辑器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了winform编辑器的具体实现代码,供大家参考,具体内容如下 就是写了一个挺简单的在winform里进行填写文本,里面用到的ADO.NET来链接数据库,在新建文本的时候需要写入.txt后缀名,打开或者是删除的时候需要先点击一下文本名。 写的不足请见谅! 以上就

  • 问题内容: 这是我的一部分: This is the item reader: 这是Spring Batch在运行时所说的: 怎么了 在Spring 3.0中,我在哪里可以了解有关这些机制的更多信息? 问题答案: 如前所述,你的阅读器需要进行“逐步”调整。你可以通过注释完成此操作。如果你将该注释添加到阅读器,则它应该对你有用,如下所示: 该范围默认情况下不可用,但是如果你正在使用XML名称空间,则

  • 嗨,伙计们,我试图检索数据从我的数据库使用HQL编辑器查询。我遵循了示例“在JavaSwing应用程序中使用Hibernate”中的步骤。我的配置文件如下: 映射: 使用这个:或我得到以下错误: org.hibernate.exception.SQLGrammarExcture:无法在org.hibernate.exception.SQLStateConverter.convert(SQLStat