Node.js 使用DialogFlowApp的actionMap将多个意图映射到一个函数

Node.js 使用DialogFlowApp的actionMap将多个意图映射到一个函数,node.js,webhooks,dialogflow-es,actions-on-google,Node.js,Webhooks,Dialogflow Es,Actions On Google,我正在使用Dialogflow构建一个应用程序。用户回答了一些问题,以后可以查看他们的答案。我的问题是构建服务器以返回用户以前的答案 这是到目前为止的代码,其中意图是问题1和问题2,参数是感恩1和感恩2: 'use strict'; process.env.DEBUG = 'actions-on-google:*'; const App = require('actions-on-google').DialogflowApp; const functions = require('fireba

我正在使用Dialogflow构建一个应用程序。用户回答了一些问题,以后可以查看他们的答案。我的问题是构建服务器以返回用户以前的答案

这是到目前为止的代码,其中意图是问题1和问题2,参数是感恩1和感恩2:

'use strict';

process.env.DEBUG = 'actions-on-google:*';
const App = require('actions-on-google').DialogflowApp;
const functions = require('firebase-functions');

// a. the action names from the Dialogflow intents
const QUESTION_1 = 'Question-1';
const QUESTION_2 = 'Question-2';

// b. the parameters that are parsed from the intents
const GRATEFUL_1 = 'any-grateful-1';
const GRATEFUL_2 = 'any-grateful-2';

exports.JournalBot = functions.https.onRequest((request, response) => {
  const app = new App({request, response});
  console.log('Request headers: ' + JSON.stringify(request.headers));
  console.log('Request body: ' + JSON.stringify(request.body));

  // Return the last journal entry
  function reflect (app) {
    let grateful_1 = app.getArgument(GRATEFUL_1);
    app.tell('Here is your previous entry: ' + grateful_1);
  }

  // Build an action map, which maps intent names to functions
  let actionMap = new Map();
  actionMap.set(QUESTION_1, reflect);

  app.handleRequest(actionMap);
});
我希望将“reflect”函数映射到感恩响应2和感恩响应1。我知道如何做到这一点,但如何更改下一位以包含这两个意图:

  actionMap.set(QUESTION_1, reflect);

如果希望问题2也转到
reflect()
函数,只需添加

actionMap.set(QUESTION_2, reflect);
但我不认为这是你的问题。在
reflect()
中,你需要知道是什么意图让你达到了目的

您可以使用
app.getIntent()
获取一个包含intent名称的字符串,然后将其与要给出的响应进行匹配。所以类似的方法可能会奏效:

function reflect( app ){
  let intent = app.getIntent();
  var grateful;
  switch( intent ){
    case QUESTION_1:
      grateful = GRATEFUL_1;
      break;
    case QUESTION_2:
      grateful = GRATEFUL_2;
      break;
  }
  var response = app.getArgument( grateful );
  app.tell( 'You previously said: '+response );
}
当然,还有其他变体

根本不要求您实际使用
actionMap
app.handleRequest()
。如果您有另一种方法根据意图字符串确定要给出的输出,您可以自由使用它