Google Home や Google アシスタントの会話インタフェース用のアプリを作るには、Actions on Google でアプリを作る必要がある。ここで、とりあえず試してみるとすると、GUIDES にある Build Your First App を試してみるのが簡単。ここでは、AI を使った会話インタフェースである Diagflow (つい先日まで API.AI ) を使ったサンプル、Build Your First App with Diagflow を試してみるのだが、このサンプルは node.js を使うことを前提としているので、今回は node.js の代わりに GAE (Google App Engine) を使ってみた。しかも日本語で。
Actions on Google の右上にある「ACTIONS CONSOLE」にいけるので、ガイドにあるように新規プロジェクトを作成する。この際、Country/Region に Japan を選択しておく。
そして次もまた、ガイドにある通り「Diagflow」で「BUILD」から Diagflow のコンソールを開く。Diagflow のプロジェクトの設定画面で、DEFAULT LANGUAGE を Japanese-ja を選んでプロジェクトを保存する。
あとはガイドの通りに設定すればいいのだが、Diagflow での会話についてはすべて日本語で作っておく。今回は、ガイドにあるサンプルにと同じように、
- 好きな番号
- 好きな色
を聞くと、それをもとにしたニックネームを返すというシンプルなアプリにする。
例えば、Default Welcome Intent には
「こんにちは!雑な名前メーカーへようこそ。お好きな番号を教えてください」
とする。こんな感じ。
そして、もう一つ Intent を作成し、number と color のパラメーターを聞く質問を作成する。こんな感じ。
このあとガイドには node.js を使うサンプルになるのだが、ここでは GAE を使うことにする。node.js のサンプルは、firebase の functions としてデプロイするのだが、node.js はあまり普段使わないというかよく知らないので、勝手知ったる GAE で処理する作りに変えてみる。
ちなみに、なんで Diagflow のサンプルで node.js だったり GAE が必要になるかというと、Diagflow によって会話から抽出したパラメーターを使って、何か処理をする必要があり、その処理を行うのが firebase の function として node.js か、はたまた GAE を使うかということである。Diagflow から URL Post できて、JSON 形式で応答ができれば、別になんでもいい。
Diagflow では、必要となるパラメーターが揃うと、Fulfillment に設定された Webhook が呼び出され、その時にこれらのパラメーターが一緒に POST される。そして処理が終わったら、JSON 形式で戻り値を返してあげれば良い。
ということで、Webhook に指定した URL として、今回は GAE 上の URL を指定する。
GAE で呼び出す先の Python プログラムのサンプルはこちら。
#coding:utf-8
import logging
import webapp2
import json
class NameMaker(webapp2.RequestHandler):
def post(self):
req = self.request.body
logging.info('request:' + str(req))
reqjson = json.loads(req)
name_color = reqjson['result']['parameters']['color']
name_num = reqjson['result']['parameters']['number']
logging.info(name_color + ' ' + str(name_num) + ' received')
# create output
speech = u'あなたのニックネームは' + name_color + unicode(str(name_num), 'utf-8') + u'号です。気に入りましたか?ではまた。'
outjson = {
'speech':speech,
'displayText':speech
}
logging.info(json.dumps(outjson, ensure_ascii=False))
self.response.headers['Content-type'] = 'application/json'
self.response.out.write(json.dumps(outjson, ensure_ascii=False))
app = webapp2.WSGIApplication([
('/namemaker', NameMaker),
], debug=True)
一応これでうまくいく。
ちなみに、Google Home があれば当然テストもできる。Actions on Google にログインしたアカウントで Google Home も設定されていれば、そのデバイス上でテストができるのでなんか楽しい。単に「何色何号」って返されるだけなんだけど。
一応会話はこんな感じになる。
自分「オッケーグーグル、テストアプリにつないで」
Google Home 「テス用アプリにつなぎます」
Google Home 「こんにちは。雑な名前メーカーへようこそ。好きな番号を教えてください。」
自分「7」
Google Home 「好きな色は何?」
自分「緑
Google Home 「あなたのニックネームは緑7号です。きにいりましたか。ではまた」
ユーザー情報とかと連携できるといろいろなことができそうだ。
0 件のコメント:
コメントを投稿