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

我正在使用Dialogflowbuild立一个应用程序。 用户回答一些问题,稍后可以查看他们的答案。 我的问题是与build立服务器返回用户以前的答案。

这是迄今为止的代码,意图是QUESTION_1和QUESTION_2,参数是GRATEFUL_1和GRATEFUL_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); }); 

我希望将“reflection”函数映射到GRATEFUL_2响应以及GRATEFUL_1。 我知道如何做到这一点,但是我该如何改变这一点,以包括两个意图:

  actionMap.set(QUESTION_1, reflect); 

如果你想QUESTION_2意图也去reflect()函数,你可以简单地添加

 actionMap.set(QUESTION_2, reflect); 

但我不认为这是你的问题。 在里面reflect()你需要知道是什么意图,让你在那里。

您可以使用app.getIntent()获取一个带有意图名称的string,然后将其与您想要提供的响应进行匹配。 所以这样的事情可能会起作用:

 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 ); } 

当然还有其他的变种。

根本没有要求你实际上使用actionMapapp.handleRequest() 。 如果您有另外一种方法想根据意图string确定要输出的输出,则可以自由使用它。