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 でどのように変わったのかを、ソースコードベースでレポートしたいと思います。
比較
途中略してますが、大体同じになるようにソースコードを書いています。以下の2つを見比べてみてください。
v1
'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
'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の方がより直感的で無駄がなくなったように感じますね。
まとめ
すごい大雑把ですが、以上です。
不足点多くて、もっと詳細に知りたい!って人は公式のリファレンスなど見に行ってください!私的には、Samples を見るのがおすすめです!
Author And Source
この問題について(Dialogflow と Firebase Cloud Functions で Actions On Google の Node.js Client Library v2対応), 我々は、より多くの情報をここで見つけました https://qiita.com/doki_k/items/f7a0f1e69baaefc297f2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .