2017-11-24 24 views
2

Dialogflow를 사용하여 응용 프로그램을 작성하고 있습니다. 사용자는 몇 가지 질문에 답하고 나중에 답변을 검토 할 수 있습니다. 내 문제는 사용자의 이전 답변을 반환하도록 서버를 구축하는 것입니다. DialogFlowApp에 대한 actionMap을 사용하여 하나의 함수에 여러 개의 인 텐트 매핑하기

는 지금까지 의도가 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); 
}); 

뿐만 아니라 GRATEFUL_2 응답에 매핑하는 기능을 '반영' GRATEFUL_1 (으)로 나는이 작업을 수행하는 방법을 알고 있지만 어떻게 모두 의도를 포함하려면이 다음 비트를 변경합니까 :

당신은 또한 reflect() 기능에 갈 수있는 QUESTION_2 의도를 원한다면
actionMap.set(QUESTION_1, reflect); 

답변

2

, 당신은 간단하게 추가 할 수 있습니다

actionMap.set(QUESTION_2, reflect); 

하지만 그건 당신 문제라고 생각하지 않습니다. reflect() 안에 어떤 의도가 있었는지 알아야합니다.

app.getIntent()을 사용하여 의도 이름이있는 문자열을 얻은 다음이를 응답하려는 응답과 일치시킬 수 있습니다. 이렇게 뭔가가 작동 할 수도 있습니다.

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()을 실제로 사용하지 않아도됩니다. 의도 문자열을 기반으로 어떤 출력을 내 보내야 하는지를 결정할 다른 방법이 있다면, 그것을 자유롭게 사용할 수 있습니다.