未找到intentog的Dialogflow IntentHandler:myIntent(Dialogflow V2)

时间:2018-04-23 11:22:25

标签: dialogflow

由于我将Dialogflow升级为使用v2 API,因此出现以下错误:

Dialogflow IntentHandler not found for intent: myIntent

由于某些原因,我的意图在动作名称相同时不再被识别 - myIntent。

这就是我使用NodeJS(express V4)应用程序返回响应的方式:

dialogflowApp.intent('myIntent', (conv, {version}) => {
    conv.close('test');
});

可能出了什么问题?

6 个答案:

答案 0 :(得分:2)

请确保Dialogflow和NodeJS webhook函数中的myIntent拼写相同,否则会出现此错误。这就是我在webhook中编写和访问函数的方式:

//函数执行 dialogflowApp.intent('myIntent', myIntentFunction);

//功能定义 function myIntentFunction(conv, {version}){ conv.close('test'); }

如果我回答了您的问题,请告诉我

答案 1 :(得分:1)

V2 Actions SDK使用 Intent 名称而不是操作名称。 Intent名称可以在您的请求中找到,也可以直接从DialogFlow intent接口

中找到

Screenshot from Actions on Google Documentation

DialogFlow V1 to V2 Migration Documentation

答案 2 :(得分:1)

还尝试从DialogFlow和javascript函数调用中定义的意图名称中删除空格。这可以解决我的问题(在Azure函数中运行)

之前:

app.intent('Open Car Gate', conv => {
    conv.close('OK, je vais ouvrir le portail en grand !');
});

之后:

app.intent('OpenCarGate', conv => {
    conv.close('OK, je vais ouvrir le portail en grand !');
});

答案 3 :(得分:1)

在V2中,您必须使用意图名称而不是动作名称。首先,您在索引文件的开头定义它:

'use strict';
const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');
const app = dialogflow({debug: true});

然后,您必须为每个意图添加代码:

app.intent('intentName1', (conv, {parameterName}) => {
     conv.close('Answer text');
});

app.intent('intentName2', (conv, {parameterName}) => {
     conv.ask('Answer text');
});

最后,在索引文件的末尾,有必要设置DialogflowApp对象以处理HTTPS POST请求。像这样:

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

在您的示例中:

dialogflowApp.intent('myIntent', (conv, {version}) => {
    conv.close('test');
});

您应该在索引文件的开头检查是否已定义“ dialogflowApp”:

const dialogflowApp = dialogflow({debug: true});

然后您有两个选择:

  1. 用意图名称替换“ myIntent”

  2. 将您的意图名称更改为“ myIntent”

重要提示:由于必须区分大小写,因此必须确保dialogflow中的意图名称与代码中的意图名称完全相同。

“版本”应该是从该意图接收到的参数的名称。

还要检查索引文件的末尾是否有此文件:

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(dialogflowApp);

希望这会有所帮助! :)

答案 4 :(得分:0)

尝试将您的意图处理程序置于快速'/'后路线之外:

dialogflowApp.intent('myIntent', (conv, {version}) => {
    conv.close('test');
});
express().post('/', function(req, res)) {
})

答案 5 :(得分:0)

根据Github上的这个comment,Google +上的操作与action不匹配,而是匹配intent.name。我还没有找到一种顺畅的方法来查找Dialogfow name的{​​{1}}属性,但是我已经能够通过在右栏中测试后查看诊断信息来找到它。

注意:您在屏幕顶部命名的意图是intent,而不是Display Name

更新:打开意图后,可在网址中找到name的部分内容。目前intent.name的格式如下:

  

项目/<用户名> /剂/意图/<意向UUID>

intent.name可以在路径的最后部分找到:

  

https://console.dialogflow.com/api-client/#/agent/<agent-uuid>/editIntent/<intent-uuid>/

虽然这也不理想,但它可以让事情变得更容易。