Raspberry Pi に Actions on Google で会話アプリをつくる 【Google Assistant SDK/API.ai】

先日Google Assistant SDKを利用してRaspberry Piを利用して音声認識エンジンを利用することが出来たのですが、もう少し細かく自分の意図した音声コマンドを認識させてみたいと思いました。

Google Assistantでは「Actions on Google」というツールを使い音声コマンドを利用した会話アプリの制作が行えるようです。早速試してみました。

[![Raspberry Pi Actions on Google ](http://img.youtube.com/vi/DIOr4o5s2nE/0.jpg)](https://www.youtube.com/watch?v=DIOr4o5s2nE)

[Raspberry Pi Actions on Google   - YouTube](https://www.youtube.com/watch?v=DIOr4o5s2nE)

## 環境(RaspberryPi)

![DSC_0107.JPG](https://qiita-image-store.s3.amazonaws.com/0/47128/d5d65522-db8e-639c-8145-cbb1aa03b567.jpeg)


- Raspberry Pi3 (RASPBIAN JESSIE WITH PIXEL 4.4　/ Python 3.4.2)
- LOGICOOL ウェブカム HD画質 120万画素 C270
- Amazonベーシック USB A100 マルチメディアスピーカー
- 7インチ(1024*600) IPS液晶パネル　ディスプレイ
- 秋葉原で買った500円位のプッシュボタン

## 環境（Ubuntu16.04）

- node.js 6.9.1

## Actions on Google

![Actions on Google     Actions on Google     Google Developers.png](https://qiita-image-store.s3.amazonaws.com/0/47128/0941ffb7-5011-cce0-b685-a74cb3745ddd.png)

[Actions on Google](https://developers.google.com/actions/)

リニューアルして使いやすくなっていました。トップページには「30分でアプリが作れるよ！」みたいに書いてあります。今回はこちらのチュートリアルに沿って試してみたいと思います。

サンプルプログラムで会話形式のアクションがあるので、こちらを試してみました。

![actions on google apiai facts about google nodejs  Facts about Google API.AI sample for Actions on Google.png](https://qiita-image-store.s3.amazonaws.com/0/47128/0e9b5880-7168-2632-3c31-db4c90d96611.png)

[actions-on-google/apiai-facts-about-google-nodejs - GitHub](https://github.com/actions-on-google/apiai-facts-about-google-nodejs)

このレポジトリをクローンしてきます。

![アクティビティ管理.png](https://qiita-image-store.s3.amazonaws.com/0/47128/29c37fd2-51d0-aa88-9500-c1bd9527fa91.png)

[アクティビティ管理](https://myaccount.google.com/activitycontrols)

続いてGoogleアカウントの「ウェブとアプリのアクティビティ」「端末情報」「音声アクティビティ」を有効にします。

![Actions on Google.png](https://qiita-image-store.s3.amazonaws.com/0/47128/d04ed67a-5856-f4b3-295c-b3272d2989ca.png)

[Actions on Google Developer Console.](https://console.actions.google.com/)

「Actions on Google」の開発者コンソールでアプリの設定をします。GoogleCloudPlatformのプロジェクトIDが必要になりますので、事前にID登録は済ませ、課金を有効にします。（発生する料金は各自ご確認下さい）

今回はAPI.aiを利用します。

![Actions on Google2.png](https://qiita-image-store.s3.amazonaws.com/0/47128/bca700d3-e6fd-e161-8fcb-f046f26d8357.png)

「CREATE ACTION ON API.ai｣よりGCPのプロジェクトIDと紐付いたエージェントが自動的に作成されます。

## API.ai

![API.AI0.png](https://qiita-image-store.s3.amazonaws.com/0/47128/30e6b89d-cf40-2a99-cc75-8df6c74ce1b9.png)

[API.ai](https://api.ai/)

昨年Googleに買収されたBot作成のライブラリです。GUIを利用して会話を組み立てることが出来ます。

作成したエージェントの会話パターンはzipファイルに読み込み・書き出しが行えます。今回は上述のサンプルより会話パターンのzipファイルを読み込んでみます。

![API.AI.png](https://qiita-image-store.s3.amazonaws.com/0/47128/6ae95642-5138-e7ff-6a64-bcc4bf6952d9.png)

ちょっと分かりづらいのですが、エージェント設定画面の「Export and Inport」タブからzipファイルに読み込み・書き出しが行えます。今回はサンプルプログラムの「FactsAboutGoogle.zip」を読み込みます。

読み込みが終わると会話パターンが自動的に反映されます。

![API.AI2.png](https://qiita-image-store.s3.amazonaws.com/0/47128/3e372618-0df1-06e4-1b4e-6547226e8bb0.png)

API.aiの最大のポイントは入力した様々なキーワードの選択をして、ｗebhookのエンドポイントに手軽にリクエストを送れることです。

Botのキーワード取得のためだけにAPIサーバーを立てる必要がありません。

Google Assistantの音声認識して得られたテキストをAPI.aiに送付し、キーワードに対するアクションをwebhookのエンドポイントに送付することが出来るという仕組みです。

Webhookのエンドポイントに送られたjsonデータを元に、Google Cloud Functionsを起動させ、Google Assistantに返事をさせます。

## デプロイ

![Deploy Fulfillment     Actions on Google     Google Developers.png](https://qiita-image-store.s3.amazonaws.com/0/47128/3d0e98a5-f953-ca81-453d-b05fbb843793.png)

[Deploy Fulfillment - Actions on Google](https://developers.google.com/actions/get-started/deploy-fulfillment)

チュートリアルでは、ローカル環境にを利用する方法と、GoogleCloudPlatformを利用する方法の2種類紹介されています。

今回はGCPにデプロイしてみます。必要なツールや有効化するライブラリがいくつかありますので簡単にまとめてみます。

### Google Cloud SDK

![Google Cloud SDK ドキュメント     Cloud SDK     Google Cloud Platform.png](https://qiita-image-store.s3.amazonaws.com/0/47128/80f99171-02dc-465c-2518-c865d49b3207.png)

上記アドレスよりOSに合わせてSDKをダウンロードします。ここではUbuntu16.04用のものをインストールしました。`sudo apt-get install`で入れられます。（Mac環境だとインストールにPython2系が必要になり、少し面倒です）

パスがきちんと通れば`sudo gcloud init`でGCPのアカウントや使用するプロジェクト、リージョンなどの設定が可能になります。

Actions on Googleを利用するにあたり以下のGCPアプリケーションが必要になります。

音声認識する毎にnode.jsを実行させるためにGoogle Cloud Functionsというサーバレスアーキテクチャが必要になります。

また、そのデータを保管するためにのCloud Storageバケットが必要になります。

### Google Cloud Functions

![API Manager   test.png](https://qiita-image-store.s3.amazonaws.com/0/47128/0337f683-f2e3-6857-3f73-64fadb1e37d7.png)

GCPの管理画面から使用するプロジェクトでGoogle Cloud FunctionsAPIを有効にします。

### Cloud Storageバケット

![参照   test.png](https://qiita-image-store.s3.amazonaws.com/0/47128/4af1f655-f25a-9e26-5bc9-6f30a262e891.png)

同じくGCPの管理画面から使用するプロジェクトでバゲットの作成をします。

### Google Cloud SDKからデプロイ

チュートリアルにあるように`gcloud`コマンドを使いデプロイします。

```bash
$ sudo gcloud init
```
デプロイしたいnode.jsのファンクションネームを調べます（ここでは`factsAboutGoogle`）。もうひとつ、先ほど作成したバゲットの名前を使います。

```bash
$ cd apiai-facts-about-google-nodejs
$ sudo gcloud beta functions deploy factsAboutGoogle --trigger-http --stage-bucket <storage_bucket_name>
```
デプロイ出来ました。デプロイしたアドレスをAPI.aiのWebhookに指定します。

![API.AI5.png](https://qiita-image-store.s3.amazonaws.com/0/47128/2f89e33b-7922-9de6-4346-db09f30eb24d.png)


## Raspberry PiでGoogle Assistantを使う

こちらの記事

[Raspberry Pi にGoogle Assistant SDKを搭載して「OK Google」してみる。 - Qiita](http://qiita.com/PonDad/items/52eaa93338496b06cb1a)

をご参照下さい。ただ、SDKが0.0.2にバージョンアップしており、記事中のインストールでは実行できません。

[Download the Library and Run the Sample - Google Assistant SDK
](https://developers.google.com/assistant/sdk/prototype/getting-started-pi-python/run-sample)

こちらにあるアドレスからインストールして下さい。

```bash
$ python3 -m pip install --upgrade https://github.com/googlesamples/assistant-sdk-python/releases/download/0.3.0/google_assistant_library-0.0.2-py2.py3-none-linux_armv7l.whl
```
さて、もう少しです。

![Actions on Google4.png](https://qiita-image-store.s3.amazonaws.com/0/47128/035d3664-5130-e38c-b314-eef59c63a1b7.png)


冒頭で設定したActions on Googleのアプリ設定画面の必要事項を記入して（呼びかけのホットワード設定やアプリアイコンなど）完成させます。

さて、30分で完成出来たでしょうか？

## まとめ


嬉しいことに先日のGoogleの開発者会議でGoogle Assistantの日本語対応が発表されました。

[対話型音声入力Googleアシスタントが日本語対応へ。スマートスピーカーGoogle Homeも今夏国内発売 - Engadget 日本版](http://japanese.engadget.com/2017/05/17/google-google-home/)

管理画面にもこっそりJapaneseの文字が...。

![Actions on Google３.png](https://qiita-image-store.s3.amazonaws.com/0/47128/0a5b1291-26dd-12e7-cbab-7c1225c3cf88.png)

楽しみですね。