Dialogflow チュートリアルをActions on Google API v2 対応にする


はじめに

軽くDialogflow を触ってみようとググったらGoogle 公式っぽいチュートリアルが見つかったので試してみたところ、Actions on Google でエラーになったので対応をメモしておきます。

試したチュートリアルはこちら。
Dialogflow で初めてのアプリをビルドする

※ 2018/07/10 時点の情報なので、チュートリアルページがアップデートされたらこの記事は不要になります。

Dialogflow とは

Google のチャットボットフレームワーク、でいいのかな。昔はApi.ai という名前でした。Actions on Google やSlack などと連携して音声/テキストのユーザーインタフェースを作れます。

Dialogflow

その他出てくるサービス名などはチュートリアルを実施する方なら説明不要と思うので、説明は省略。

チュートリアルでエラー発生

順調に進めていたんですが、「フルフィルメントを構築する」のところでエラーが発生しました(Actions on Google で返事が戻らなかった)。フルフィルメント(Fulfillment) はWebhook でFirebase のFunctions を呼ぶところですね。

Firebase コンソールでログを確認すると次の行がありました。

Error: Dialogflow v2 is not currently supported

何が問題だったのか

ログにあるとおり、Dialogflow API がv1 からv2 にバージョンアップしていました。
Dialogflow のページにアクセスすると上部に警告表示されていたので「へー」と思って即[DISMISS]してたんですが、チュートリアルも対応未済でした。

v1 からv2 へのマイグレーションについては、警告内の「Learn how to migrate your V1 agents here」のリンク先でもいいんですが、Actions on Google のドキュメントの方がv1 とv2 の対応コードも記載されていて分かりやすいので、こちらを参照すると良いと思います。

Actions on Google Node.js Client Library Version 1 Migration Guide

API v2 への対応コード

ひとまずチュートリアルを動かしたところなのでv2 での変更点は本記事では解説しませんが、対応したチュートリアルのコードを載せておきます。

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

// a. the action name from the make_name Dialogflow intent
const NAME_ACTION = 'make_name';

// b. the parameters that are parsed from the make_name intent 
const COLOR_ARGUMENT = 'color';
const NUMBER_ARGUMENT = 'number';

const app = dialogflow();

// c. The function that generates the silly name
app.intent(NAME_ACTION, (conv => {
  let number = conv.parameters[NUMBER_ARGUMENT];
  let color = conv.parameters[COLOR_ARGUMENT];
  conv.close('Alright, your silly name is ' +
             color + ' ' + number +
             '! I hope you like it. See you next time.');
}));

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

まとめ

チュートリアル等の日本語訳はありがたいんですが、最新への追従が遅れていたりするので注意が必要ですね。(チュートリアル最終更新日が2018/3/20、API v2への移行が2018/4/16……つらい)(チュートリアルがアップデートされたらこの記事は不要になります)