访问 webhook URL 时出现错误“操作错误:没有匹配的意图处理程序:null”

Posted

技术标签:

【中文标题】访问 webhook URL 时出现错误“操作错误:没有匹配的意图处理程序:null”【英文标题】:getting error "Action Error: no matching intent handler for: null" while accessing webhook URL 【发布时间】:2018-05-13 08:11:15 【问题描述】:

我正在尝试从对话流中调用 webhook,但没有从 webhook 获得响应,这是我从响应部分获得的响应,我已经有意。我还为每个意图启用了 webhook,并将从 firebase CLI 生成的 webhook URL 放在了实现 URL 部分。我附上了我们在对话框流“显示 JSON”和 index.js 文件中看到的 firebase 日志和 JSON 响应的屏幕截图。我被困了 2 周才能解决它。

'use strict';

process.env.DEBUG = 'actions-on-google:*';
const  DialogflowApp  = require('actions-on-google');
const functions = require('firebase-functions');
let express = require('express');
let bodyParser = require('body-parser');

// Constants for Dialogflow Agent Actions
let app = express();
app.use(bodyParser.urlencoded( extended: true ));
app.use(bodyParser.json(type: 'application/json'));

const BYE_RESPONSE = 'input.search';
const WELCOME = 'input.welcome';

exports.helloAssistant = functions.https.onRequest((req, res) => 
  console.log('Request headers: ' + JSON.stringify(req.headers));
  console.log('Request body: ' + JSON.stringify(req.body));
  const asst = new DialogflowApp(request: req, response: res);


  // Welcome
  function welcome(asst) 
    asst.ask('Want to search product or order history');
    asst.tell('hello Neeraj!');
  

  // Leave conversation with SimpleResponse

  function byeResponse (asst) 
    app.post('/',function (req, res) 
      var myProduct = req.body.result.parameters["productParameter"];
      //let intent=asst.getIntent();
      var address ="https://ipadress/rest/v2/electronics/products/search";
      var address1="https://ipadress";
      switch(myProduct)
        case 'BYE_RESPONSE':
          req.post(address);
          break;

        case 'WELCOME':
          asst.tell('welcome!');
          break;

        default:
          req.post(address1);
          break;
      

      asst.tell('We swear to serve the master of the Precious.');
    );
  

  const actionMap = new Map();
  actionMap.set(WELCOME, welcome);

  actionMap.set(BYE_RESPONSE, byeResponse);
  actionMap.set(WELCOME, welcome);
  asst.handleRequest(actionMap);
);

.json response in dialogflow

.firebase log

【问题讨论】:

您可以添加来自 Dialogflow 的 input.search Intent 和 input.welcome Intent 的屏幕截图吗? 这是我的意图的图片网址 这里是来自 Dialogflow 的我的意图的图像网址。 1.imgur.com/a/NcM4z 2.imgur.com/a/NcM4z 3.imgur.com/a/NcM4z 4.imgur.com/a/NcM4z 不确定这是否有任何影响,但您设置了两次 WELCOME 操作图。也许尝试删除它,看看会发生什么? 我删除了重复的 WELCOME 动作图。实际上,该错误是由于我在代理的 API 版本部分中启用的“Dialogflow v2 API”引起的,现在我已禁用它,问题现在已修复。感谢您的宝贵支持。 【参考方案1】:

感谢大家的宝贵回复。不知何故,我能够修复这个空错误。实际上,我在代理的 API 版本部分启用了“Dialogflow V2 API”。现在,我禁用了它,它对我有用。

【讨论】:

【参考方案2】:

我刚刚遇到了同样的错误,这是因为我忘记将我的意图名称放在 Actions 部分的 Enter action name 字段中。

所以,它通过 null 作为意图名称,因为我没有指定一个。

我只是通过非常仔细地重新阅读https://developers.google.com/actions/dialogflow/first-app才弄明白的。

【讨论】:

感谢您的回复,但我已将操作名称放在操作部分。这是我的意图的屏幕截图链接。 imgur.com/a/NcM4z【参考方案3】:

对于每个代理,都需要一个unknown Intent 处理程序来处理空等意外情况

'input.unknown': () => 
  // The default fallback intent has been matched, try to recover.
  // Define the response users will hear
  responseJson.speech = 'I\'m having trouble, can you try that again?';
  // Define the response users will see
  responseJson.displayText = 'I\'m having trouble :-/ can you try that again?';
  // Send the response to API.AI
  // response.json(responseJson);
  callback(null, responseJson);

【讨论】:

我已将“input.unknown”添加到我的脚本中,但没有出现同样的错误。

以上是关于访问 webhook URL 时出现错误“操作错误:没有匹配的意图处理程序:null”的主要内容,如果未能解决你的问题,请参考以下文章

访问 Payeezy Url 时出现 kCFErrorDomainCFNetwork 错误

从我的 Java 程序访问 URL 时出现 HTTP 503 错误 [重复]

访问令牌 url 时出现 keycloak 内部服务器错误

除非禁用 UAC,否则尝试访问报表管理器 URL 时出现权限错误

访问 Azure 应用服务暂存槽 URL 时出现 HTTP 错误 401

Java Jersey Rest:未找到提供程序类。 (访问 URL 时出现 404 错误)