Googleアシスタント用アプリを作ってみる
お疲れ様です、s.masayaです。
Googleアシスタント用アプリを作る試みです。
早速やっていきましょう。
以下の流れで進めます。
- Googleアシスタント
- プロジェクト作成
- アプリ作成
- テスト
1.Google アシスタント
Googleアシスタントとは、Googleの対話型エージェントです。2016年に発表され、2021年1月時点でGoogle Nestシリーズやスマートフォン等に搭載されています。Googleアシスタントに話かけることで、音楽を再生してくれたり、予定を読み上げてくれたり、ニュースを教えてくれたりします。AIが音声認識を行い、声で操作をすることが可能である点が最も大きな特徴です。
このAIが音声認識を行ってくれる、という機能をサードパーティ製アプリのマン・マシンインタフェースとして利用できたらいいなぁと思っています。
様々な外部WebアプリケーションとユーザをGoogleアシスタントを介して音声で接続し、煩雑な手続きや操作を一切廃したアプリの開発を目指します。
今回はその第一回として、Googleアシスタント専用のアプリケーションの開発環境であるActions Builderの利用方法の解説を行います。
2.プロジェクト作成
早速作ってみます。アプリの作成にはまずActions Consoleという場所でプロジェクトを作成する必要があります。
https://console.actions.google.com
「New project」を押下します。
プロジェクト名と言語、リージョンを入力し作成を行います。「What kind of Action do you want to build?」という画面が表示されます(ここらへんはコロコロ変わるのでスクショ載せたりはしません)。はっきりと作りたいものが決まっている場合は該当するものを選ぶと良いのでしょう。今回は「Custom」を選択して進めます。
「How do you want to build it?」という画面が表示されます。「Blank project」を指定します。
とりあえず下のような画面まで進めれば開発を進めることができます。
3.アプリ作成
ぶっちゃけコードラボ通りにやれば作成自体はすぐにできます。
https://codelabs.developers.google.com/codelabs/actions-builder-1/#0
https://codelabs.developers.google.com/codelabs/actions-builder-2/#0
でもこれはリファレンス読めばコード書けるよ位に投げっぱなしジャーマンなので、基礎的なアクションの作成法について書いて行きたいと思います。
3.1.Developタブのsettingsメニューから、アプリのDisplay nameを決定(2単語以上使用してください、じゃないと後で怒られます)
3.2.DevelopタブのMain incocationメニューから、以下の部分を自由に編集してSave
Send promptsで編集した通りにGoogleアシスタントは発話を行います。
3.3.シーン、と呼ばれるものを作成します
シーンとは何かについてというところはネットの他に参考になる記事等に譲りますが、ざっくり言えばシーンは会話の場面、フェーズそのものです。
物事の流れ、手続きの流れをこの複数のシーンを組み合わせることで実現します。
それでは、赤丸で囲った部分の「+」ボタンを押下しシーンに名前をつけてみます。
今回は「start」としました。
アクションの開始を表すシーンです。
作成できるとこんな画面になります。
3.4.startシーンでユーザと対話する!
ここでstartシーンにて以下を実現したいと思います。
- startシーンに遷移したとき、ユーザに「おはようございます。出勤申請を行いますか?」と発話する
- ユーザから「yes」または「no」の返答を受け取る
- 「no」で答えられた場合、出勤申請を行わず(そういうふりをして)アプリを終了する
- 「yes」で答えられた場合、出勤申請を行い(そういうふりをして)アプリを終了する
それではまず、ユーザに「おはようございます。出勤申請を行いますか?」と発話するようにします。
on enterのSend promptsを以下の様に編集します。
次にユーザから「yes」または「no」の返答を受け取る為に、プロジェクトにカスタムインテントと呼ばれるものを定義します。
カスタムインテントとは、ユーザの発する言葉と意味との対応を定義することができるものです。
これから行う作業は、「yes」という意味を表す「言葉」をAIに教え込む作業です。例えば、「yes」を表す言葉、「ええ」「はい」「そうです」等です。これらの言葉をユーザが発話した時、AIは「yes」インテントを発火します。別にAIは意味を理解しているわけではないですが、作る側が「yes」インテントが発火した時に、「yes」インテント用の動作を定義しておきさえすればユーザ視点では会話ができていることになります。
しかもGoogleアシスタントは英国人よりは賢いので、ある程度トレーニングフレーズを入力しておけば似たような言葉で発火してくれます。
それでは、以下の様に「yes」というインテントを定義します。
次にトレーニングフレーズを入力していきます。
大体こんな感じになってると思います。
因みに、英語版だとyesとかnoとかrepeat等のカスタムインテントがビルトインで提供されているらしいですが、日本語版にはありません……
頑張って入力していきましょう!
インテントを定義出来たら再びstartシーンに戻ります。
では、作成したインテントをstartシーンに組込んで利用してみます。
user intent handlingを選択し、作成した「yes」インテントを選択します。
次に、Send promptsを選択し出勤申請を行ったふりをしてアプリの終了へと遷移します。
これと同様に「no」のパターンも作成します。
カスタムインテントを作成し、startに取り込んで動作と遷移先を指定します。
最終的なstartシーンは下の様になると思います。
3.5.シーンの繋ぎこみをします!
startシーンとアプリの発火点を繋いで、全体の流れを通します。
Main invocationのTransitionをstartに指定します。
以下の様な感じになるはずです。
4.テスト
(テストに通れば)完成の筈です。
全体の流れをおさらいしましょう。
まず、最初に設定したアプリの名前を呼ぶとアプリが起動します。その後startシーンに遷移し、出勤申請をするかどうか聞かれる筈です。yesなら出勤申請を行い、noなら行いません。どちらに遷移してもアプリは終了です。
では、Testタブに移動して「{アプリ名}につないで」を押下してみます。
はい、表示されました。
画面に表示されている「はい」、「いいえ」を選んでもいいですし、マイクを繋いで喋りかけても動作します。
いかがでしたでしょうか。
想像より簡単ではないでしょうか。
もし上手く行かなかった場合は、カスタムインテントのトレーニングフレーズと、アプリに発話した言葉の一致を確認してみてください。
応用としては、出勤申請を実際のサードパーティ製アプリにwebhookを使用して送信してみる、みたいなのを考えています!
今回はIDEの操作方法だけ説明しましたので、次回はActionBuilderの設計思想等、抽象化しつつ今回のアプリを解説していきたいと思います。
以上です。
ありがとうございました。