Dialogflow 및 Firebase Cloud Functions에서 Actions On Google의 Node.js Client Library v2 지원

이전에 Dialogflow 및 Firebase Cloud Functions에서 Actions On Google 만들기 을 쓰고 나서 반년 정도. . 시대의 흐름은 빠른 것으로, 그 리포트대로 해도 움직이지 않는다! !

그래서 간단한 포인트 정리입니다.

이전 보고서와 같이 작동하지 않는 이유는 Firebase Cloud Functions 템플릿을 사용하면 DialogflowApp의 Node.js Client Library가 v2가 되기 때문입니다.



억지로 v1을 사용할 수도 있지만 위의 그림 (Actions on Google 참조에서 인용)과 같이 v1은 이미 "deprecated"입니다. 그러므로 그에 따라 v2를 사용하는 방식으로 이동합니다.
v1 과 v2 로 어떻게 바뀌었는지를, 소스 코드 베이스로 보고하고 싶습니다.

비교



도중 생략하고 있습니다만, 대략 동일하게 되도록 소스 코드를 쓰고 있습니다. 다음 두 가지를 비교해보십시오.

v1

index_v1.js
'use strict';

process.env.DEBUG = 'actions-on-google:*';

const { DialogflowApp } = require('actions-on-google');
const functions = require('firebase-functions');

exports.funcDecisionAction = functions.https.onRequest((request, response) => {
    const app = new DialogflowApp({ request, response });

    function funcHandler(app) {
        let speechStr = "";
        let func_id = app.getArgument(funcid);
        console.log(app.getRawInput());

        ....

        if (speechStr === "") {
            speechStr = "値ないよ!最初からやり直して!!";
            app.tell(speechStr);
        } else {
            app.ask(speechStr);
        }
    }

    const actionMap = new Map();
    actionMap.set('action.funcdecision', funcHandler);

    app.handleRequest(actionMap);
});

v2

index_v2.js
'use strict';

const { dialogflow } = require('actions-on-google');
const functions = require('firebase-functions');

const app = dialogflow({ debug: true });

app.intent('funcdecisionIntent', (conv, { funcid }) => {
    let speechStr = "";
    let func_id = funcid;
    console.log(conv.input.raw);

    ....

    if (speechStr === "") {
        speechStr = "値ないよ!最初からやり直して!!";
        conv.close(speechStr);
    } else {
        conv.ask(speechStr);
    }
});

exports.funcDecisionAction = functions.https.onRequest(app);

Dialogflow 측에 "funcdecisionIntent"라는 이름의 Intent, "funcid"라는 이름의 Entity가 있다고 가정합니다. (v1에서는 Intent에 "action.funcdecision"이라는 Action 이름이 추가되어 있다고 가정합니다.)

포인트로서는 다음을 들 수 있습니다.
  • "app"대신 "conv"
  • ".tell"이 ".close"로
  • 처리에 Intent 이름을 직접 지정하도록 (action 이름을 붙이지 않아도 좋고, 마지막으로 정리해 action 이름과 처리의 첨부를 실시하지 않아도 되었다)
  • Entity명을 인수로 지정해 처리로 사용한다

  • v2가 더 직관적이고 낭비가 없어진 것처럼 느껴지네요.

    요약



    굉장히 대략적입니다만, 이상입니다.
    부족점 많아서 더 자세히 알고 싶다! 라고 사람은 공식의 레퍼런스등 보러 가 주세요! 개인적으로는 샘플을 보는 것이 좋습니다!

    좋은 웹페이지 즐겨찾기