Google Assistantアプリ入門(Actions on Google + Dialogflow)

Google Assistantアプリを作る機会があったので、まとめてみます。
ここでは細かいツールの使い方ではなく、作成していく上での大枠をまとめてみます。
以下で説明する、Actions on GoogleやDialogflowの利用法は公式ガイドなどを見てください。

# Google Asssistantとは

Googleの提供するAIアシスタントです。
会話形式でユーザの呼びかけに応えてくれます。

スマートフォン、スピーカー、スマートディスプレイ、テレビなどなど、色々なハードの上にGoogle Assistantが載っており、呼び出すことができます。

# Google Assistantアプリ作れます

Google Assistant自体で天気を聞いたり、リマインダーをセットしたり、電気をつけたりできますが、実は **自分でアプリを作ることができます。**
作ったアプリは公開することができます。
現在たくさんのアプリが公開されており、[ここ](https://assistant.google.com/explore/
)から見ることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96747/1909d476-38a7-19a0-97f5-fc891284f5e4.png)

知名度がありそうな大手のアプリや、個人で出しているようなアプリもあります。

- 一例
  - [Yahoo!路線](https://assistant.google.com/services/a/uid/000000e1cae20f7c)
  - [ヤマト運輸](https://assistant.google.com/services/a/uid/000000f28a180cfe)
  - [SUUMO](https://assistant.google.com/services/a/uid/0000005ac9ab2635)

# 最初の一歩のおすすめチュートリアル

コードラボをやるのがいいかと思います。以下のツールの紹介では、コードラボで作るアプリの題材を例として説明します。

[Build Actions for the Google Assistant (Level 1)](https://codelabs.developers.google.com/codelabs/actions-1/index.html)

## 利用イメージ

ぜひ自分で試してもらうといいかと思いますが、以下のように、Googleアシスタントに「Ok Google `アプリの名前` につないで」と言って呼び出すと、アプリが起動し、会話形式で利用することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96747/6fccbc0b-edd0-2d29-0e78-694268ff119d.png)

# どうやってつくるのか

Googleの専用のプラットフォーム、ツールを利用すると思ったより簡単に作れます。以下で紹介します。

# Actons on Google

[Actions on Google](https://developers.google.com/assistant)とは、Google Assistantで利用可能なアプリ開発ができるプラットフォームです。
[Actions console](https://console.actions.google.com/)にログインすると、アプリを作成することができます。アプリ名を決めたり、アプリの声やアイコン背景色、配信設定などを行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96747/b4d28048-65f2-a86d-e8c8-c69d8cdbccde.png)


アプリを公開するにはGoogleの審査があります。審査に合格するとアプリを世に出すことができます。
ユーザとの会話を設計する必要あり、その設計が肝な部分になります。以下のツールを使うのが推奨されています。

# Dialogflow

[Dialogflow](https://dialogflow.com/)は、 `会話` を作成できるプラットフォームになります。[^1]
実はGoogle Assistantだけでなく、Slack, Twitter, LINEなどの他のプラットフォームとも連携することができます。
ユーザの発話したフレーズに対して、返答(Intent)を対応づけることができます。
特徴的だと思う使い方があり、Intentを定義して、いくつか反応させたいフレーズを入力し学習させると、似たような言い回しでも反応するようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96747/8c5b6600-156a-285c-3be5-2c94b44688f0.png)

また、ここもすごいと思うのですが、パラメータを定義して、フレーズとひもづけると、文中の文字をパラメータとして取得することができます。

- 例1: `黄色` が好きです -> color: yellow
- 例2: `東京` に住んでます -> location: tokyo

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96747/e3d02c72-df9d-e154-34ba-a9ec89281864.png)

また、ユーザが発言した内容から、動的にレスポンスを作成したい場合などのために、外部Webhook(WebAPI)と連携することができます。[^2]
Webhookにパラメータを渡し、Webhook側で返答を作成し、決まった形式のレスポンスをDialogflowに返すことで、ユーザに返答することができます。[^3]


# 全体像

上記のツールを含め、アプリを作る上での全体像を図にしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96747/13600e5b-199d-2e82-190c-2a0d6cc353d8.png)

①では、ユーザが呼び出したのち、ユーザが発音したSpeechがTextに変換され、Dialogflowまで連携されます。アプリの呼び出しなので、Welcome Intentが反応し、DialogflowがGoogle Assistantにレスポンスを返し、ユーザに返答されます。

②では、Dialogflowでテキストが連携され、そのテキストに反応したFavarite color intentが反応します。ここで外部のWebhookのAPIを呼び出し、入力に応じて返答するテキストを生成後、決まったレスポンスをDialogflowに返すことで、ユーザに返答することができます。

# まとめ

上記のGoogle様のツールのおかげで、簡単にGoogle assistantアプリを作ることができます。
作ってみた印象ですが、Dialogflowをうまく使って会話の設計をすることが大事だと思います。うまく反応できなかった場合にどう返すのかなど、会話の設計によってユーザの体感が変わりそうです。


# おまけ

会社のPRなどでよくアプリが作られています。意外と面白かったりするので、遊んでみるといいかも。

- [アナ雪](https://assistant.google.com/services/a/uid/0000000a93bd33a1)
- [ピカチュウトーク](https://assistant.google.com/services/a/uid/000000395cb2424a)
- [「OK Google, おばけやしきにつれてって。」Google のおばけやしき、期間限定でオープン](https://japan.googleblog.com/2018/08/ok-google-google.html)

[^1]: 元はApi.aiという名前で別会社でしたが、Googleによる買収後にDialogflowにサービス名が変更されました。
[^2]: Webhookではなく、Inline EditorでDialogflow内でもコードを書いて処理を記述することができます。
[^3]: [Actions on GoogleSDK](https://github.com/actions-on-google)を利用すれば、Dialogflowのレスポンスを簡単に作成することができます。