由于我将Dialogflow升级为使用v2 API,因此出现以下错误:
Dialogflow IntentHandler not found for intent: myIntent
由于某些原因,我的意图在动作名称相同时不再被识别 - myIntent。
这就是我使用NodeJS(express V4)应用程序返回响应的方式:
dialogflowApp.intent('myIntent', (conv, {version}) => {
conv.close('test');
});
可能出了什么问题?
答案 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接口
中找到答案 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});
然后您有两个选择:
用意图名称替换“ myIntent”
将您的意图名称更改为“ 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>/
虽然这也不理想,但它可以让事情变得更容易。