Dialogflow 및 Firebase Cloud Functions에서 Actions On Google의 Node.js Client Library v2 지원
그래서 간단한 포인트 정리입니다.
이전 보고서와 같이 작동하지 않는 이유는 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 이름이 추가되어 있다고 가정합니다.)
포인트로서는 다음을 들 수 있습니다.
'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);
});
'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);
v2가 더 직관적이고 낭비가 없어진 것처럼 느껴지네요.
요약
굉장히 대략적입니다만, 이상입니다.
부족점 많아서 더 자세히 알고 싶다! 라고 사람은 공식의 레퍼런스등 보러 가 주세요! 개인적으로는 샘플을 보는 것이 좋습니다!
Reference
이 문제에 관하여(Dialogflow 및 Firebase Cloud Functions에서 Actions On Google의 Node.js Client Library v2 지원), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/doki_k/items/f7a0f1e69baaefc297f2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Dialogflow 및 Firebase Cloud Functions에서 Actions On Google의 Node.js Client Library v2 지원), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/doki_k/items/f7a0f1e69baaefc297f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)