【IT技術】google homeでアプリ開発(Fulfillmentを使ってさらに高度な処理を可能に)

これまではほぼノンプログラミングで会話処理を実現してきましたが
Fulfillment機能を使うとGoogleCloudFunctionでさらに高度な処理が実現できます

googlehome、action on google、api.ai、Fulfillment(Cloudfunction)の役割分担は
以下図がわかりやすいです

※これまでの連携に加えて、Cloudfunctionが使えるので外部連携+スクラッチ開発やり放題でほぼなんでもできるようになります

手順的には以下の流れで進めます
1)これまでのapi.aiを使った手順でintentを作成
2)Firebaseを使ってGCPのCloudFunctionを起動
3)CloudFunctionのサービスURLをFulfillmentに登録

サンプルアプリとしては、
「ユーザーが発言した内容の文字数をカウントする」
という機能的にはあまり意味がないアプリとします。。


1)までは前の章で説明しているので簡単に、、
Intentの質問内容だけ以下のように修正しておきます

1番目のintent

2番目のintent
「そうめん」という単語のユーザー発言例を以下のようにパターン登録

2)Firebaseを使ってGCPのCloudFunctionを起動

※作業は、何らかのLinuxサーバー(GCPでなくてもよい)で行う想定
(Windowsでもできるとは思いますが、、)
※今回はfedora/centos想定の手順

□node.jsインストール
※npmコマンドを使えるようにする
curl –silent –location https://rpm.nodesource.com/setup_6.x | sudo bash –
sudo yum -y install nodejs

□firebase-toolsインストール
※firebase経由でcloudfunctionを起動するため
npm install -g firebase-tools

□firebaseの設定(アカウント)
firebase login –no-localhost
で認証用URLが表示されるので、ブラウザにコピペして認証。
その後、画面に認証コードが出るのでコンソールにコピペ
※認証する対象は、googlehomeで紐づけているアカウントが無難

□firebaseの設定(プロジェクト)
firebase init functions
でプロジェクトIDを表示して
firebase use プロジェクトID
で指定する。
※指定するプロジェクトは、api.aiで使っているプロジェクト

□action-on-googleインストール
※cloudfunction内で読み込んで使う
npm install actions-on-google –save

□index.jsを修正する
今回は以下の内容にする

※api.aiのintent(make_name)から変数anyを受け取って、wordcount

'use strict';

process.env.DEBUG = 'actions-on-google:*';
const App = require('actions-on-google').ApiAiApp;
const functions = require('firebase-functions');

const NAME_ACTION = 'make_name';
const WORD_ARGUMENT = 'any';

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

function makeName (app) {
 var word = app.getArgument(WORD_ARGUMENT);
 var wordcount = word.length;
 app.tell('あなたの発言した単語は、'
 + word + 'ですね。'
 + 'この単語の文字数は、' + wordcount + 'です。');
 }

let actionMap = new Map();
 actionMap.set(NAME_ACTION, makeName);
 app.handleRequest(actionMap);
});

□cloudfunctionにdeploy
functionsフォルダへ移動後
firebase deploy –only functions

3)CloudFunctionのサービスURLをFulfillmentに登録

Function URL (WordCount): https://us-central1-triple-visitor-163607.cloudfunctions.net/WordCount
の部分をコピーして
api.aiのfulfillmentのURLに入力する

□動作確認
バッチリねらいどおりの動作です
google homeでも試してみてください