Dialogflow代理可在Google模拟器中使用,在控制台和Web链接中失败

时间:2018-06-30 06:57:44

标签: javascript webhooks dialogflow fulfillment

我正在使用Dialogflow V2 API。

通过Google模拟器上的“操作”,一切都可以完美地进行测试。请找到所附的图片。

但是,当尝试使用Dialogflow中的控制台(右列)以及Web集成链接时,它不起作用。

Agent能够从用户输入中检测适当的实体,但无法调用Webhook中声明的意图。 https://bot.dialogflow.com/acc64a26-8d1d-4459-8ce0-24c890acb6d7

我尝试在Dialogflow论坛中发帖,但发帖时出错。使用Dialogflow提高支持的情况类似。

Google模拟器代理的图片(有效):

enter image description here

公共链接代理的图像(失败):

enter image description here

在webhook js文件和控制台中声明的响应图像:

enter image description here

请在下面找到我的index.js Webhook的一部分。我正在使用Dialogflow的嵌入式编辑器。

'use strict';

const functions = require('firebase-functions')
const { dialogflow } = require('actions-on-google')

const app = dialogflow()

app.intent('Default Welcome Intent', conv => {
  conv.ask('Welcome to Zera! We provide medicine and drug advice. What seems to be bothering you today?')
})

app.intent('QSpecific Problem', (conv, {SpecificProb}) => {
  conv.contexts.set('specificprob', 10, {SpecificProb: SpecificProb})
  conv.ask(`Do you have these problems before?`)
})

app.intent('QRecurring', (conv, {Recurring}) => { 
  conv.contexts.set('recurring', 10, {Recurring: Recurring})
  if (Recurring === "Recur") { 
    conv.ask(`Have you taken any medication for this?`);    
  } else { 
    const specProb = conv.contexts.get('specificprob')
    conv.ask(`How long have you been having this ${specProb.parameters.SpecificProb}?`) 
  } 
})


exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app)

1 个答案:

答案 0 :(得分:1)

我实际上写信给Dialogflow的支持团队以寻求帮助。我和瑞尔(Riel)进行了交谈,后者很有帮助。请在下面查看他的回复:

  

您的代理按预期在“ Google模拟器上的操作”中可以正常工作,因为   您使用的库专门用于Google上的操作。的   您一直在使用的库是Google Node.js客户端库上的操作。

     

如果您还希望使用网络演示集成来进行响应,   您可以使用具有集成功能的Dialogflow的实现库   使用AoG客户端库与Google助手配合使用。

     

您可以参考此示例代码来实现。 “严格使用”;

const functions = require('firebase-functions');
const { WebhookClient } = require('dialogflow-fulfillment');

process.env.DEBUG = 'dialogflow:debug';

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });

function welcome(agent) {
let conv = agent.conv();
conv.ask('Welcome to my agent!');
agent.add(conv);
}

let intentMap = new Map();
intentMap.set('Default Welcome Intent', welcome);
agent.handleRequest(intentMap);
});

Dialogflow的支持团队非常有帮助,他们的回复很快。我建议您写信,因为每个人的问题都不一样,而且很具体!您可以通过support@dialogflow.com

与他们联系