Google I/O 2018で発表されたActions on Google関連の新機能

現在Google I/O 2018が開催されています。既に2日目が終わっていますが、例年このI/Oのタイミングに合わせて数多くの新しいことが登場します。 もちろん、Googleアシスタント関連でも、多くの発表がありました。

Keynoteを見ていた方は、Google Duplexでのあの「人間と機械の会話」にびっくりしたと思います。もう、人間の会話力の方が低いのでは?と 言わざるを得ないデモでしたね。下にある動画で、その会話のデモを実際に目にしてください。衝撃です。

その他にも、Keynoteでは以下がありました。

  • Continued Conversation(毎度毎度「Ok Google」と言わなくても良くなる)。
  • Multiple Actions(「○○ and ○○」と話しかけると、それぞれをちゃんと理解してくれてそれぞれ応答してくれる)
  • Pretty Please(子供向けに「Pleaseを付けると褒めてくれる」機能)。
  • 声の種類が6個増える。
  • Visual Experienceとして、Smart Displayが7月くらいから発売される。
  • Food pick-up & delivery(買いたい飲食品選んで、配達先住所を決めると、商品が届く)
  • Google Mapsでのナビ中にもGoogleアシスタントが応答してくれる。

Googleアシスタント自体の機能の進化がKeynoteでは発表されていましたが、開発者向けにも、もっと数多くの発表がありました。それらは、 Googleアシスタントを中心として、多くのGoogle Productが連携する姿を実現するためのものでした。Developers Keynoteで発表されていたものや、 こっそりとリリースされていたものも含め、僕の方で現時点で認識している「GoogleアシスタントやActions on Google関連での新機能」について 以下に紹介したいと思います。

かなりあるのと、詳細はまだ把握していないので、概要の紹介にここではとどめます・・・。

Actions on Google Developer Console

最初に、開発者コンソールについての紹介です。

Developer Consoleのデザインが変わった

デザインが結構変わりました。特に、左のナビメニューがわかりやすくなったと思います。GCPのコンソールに近づいた、かもしれません。

良くなった点としては、Overviewで「公開までにやるべきこと」がよりわかりやすくなったことが挙げられると思います。ただし、”App name” が “Directory title” に変更されていたりするので、注意も必要です。

Theme customization が追加された

左のメニューに Theme customization という項目があるのがわかると思います。それをクリックすると、以下のような画面になります。

これは何でしょうか?僕も正確にはこの設定がどこに反映されるのか、まだわかっていません。おそらく「Smart Display向けの設定だろう」という話を 他のAssistant GDEとしています。たぶん関連するセッションがあると思うので、分かり次第お伝えしたいと思っています。

ちなみに、これに関連して、Simulatorにも “Display” という項目が追加されています。

・・・と思っていましたが、これが何者かわかりました。Undocumentedじゃん、って思っていたのですが、ドキュメントに書いてありました。

Customizing your responses

つまり、この Theme customization にてデザインをブランドに合わせるなりして定義しておくことで、Basic card や Carousel などの actions.capability.SCREEN_OUTPUT サーフェスをサポートするデバイス向けに送信可能な Rich Response の見た目をユニークにする ことができる、という機能でした。。。

Alpha and Beta Environments

今までは、何かアシスタントアプリを新規に作っている時は、自分のGoogleアカウントでしか動作確認をすることができませんでした。 さらに、公開後に何か変更したい場合も同様でした。しかし、Alpha and Beta Environments 機能の登場によって、自分以外の 限定された数人に対して、事前に動作確認を行ってもらうことが可能になります。

これは結構待っていた人が多かったんじゃないかな、と思う機能ですね。AlphaとBetaの違いは、以下となります。

  • Alpha -> Googleの審査なしで可能だが、警告がユーザに出る。
  • Beta -> Googleの審査後に可能、警告は出ない。

具体的には、AlphaとBetaそれぞれでURLが発行されるので、動作確認して欲しい人を事前にコンソールから登録しておいて、その人にURLを送って アクセスしてもらう、っていう流れになります。

Linking to your Actions

Developers Keynoteの中で “Action Links” と表現されていた機能です。特定のアクションに直接ディープリンクするURLを生成することができます。 “Build > Actions” 内で生成可能です。

以下は、イートアンドバイトという僕が作ったアプリを呼び出すためのURLです。

https://assistant.google.com/services/invoke/uid/000000b349693dc4

そのURLにアクセスすると、以下のようなポップアップが表示されました。

Android端末を選択すると、以下のように通知が来ました。

「試してみる」をタップしてみました。Googleアシスタントが起動しましたが、残念ながら何も起きませんでした。期待した動作は、イートアンドバイト アプリがInvokeされる動きでしたが・・・。今後に期待です。

Actions on Google API

次は、API関連の紹介です。

Built-in Intents

ビルトインインテントは、特定のカテゴリのユーザー要求を満たすのに適していることをアシスタントに伝える一意の識別子です。これは実は内部的には 前から存在していて、気がついていました。というのも、Analyticsにて、”actions.intent.PLAY_GAME” といった呼び出しが記録されていて、 「なんだろうなぁ」と思っていたからです。

Built-in Intentsの解説は、ここ にあります。日本語ではまだ 使えないようです。

実はこれ、後述する App Actions と密接な関係があります。

Routine Suggestion

米国のみの提供ですが、現在 Routine という機能がGoogleアシスタントにあります。これは、”Ok Google, good morning” と言うだけで、 ライトが付いて、天気を教えてくれて、音楽やニュースが流れて、といった一連の複数のアクションを起こしてくれる機能です。

Get help with your daily routines

今回、ユーザのRoutineにアクションを追加することを促すためのRoutine Suggestion APIが追加されました。実際のコードは、こちらです。

conv.ask(new Suggestions('Add to routine'));

これにより、ユーザに「このアクションをRoutineに追加しますか?」とGoogleアシスタントが聞いてきます。Developers Keynoteでそのデモがありました。 小さいですが、GoogleアシスタントがRoutineに追加するかどうか聞いてきています。

そして、実際のRoutineの呼び出し時に、追加したスターバックスへのコーヒーの注文アクションが起動した、っていう感じです。

上記は明示的にAPIで追加を促していましたが、コンソール内で特定のアクションについて、Routineへの追加を勧めるように指示するUIもあります。

Google Sign-in for Assistant

今までの Account Linking は、汎用的なOAuth 2のプロトコルに沿ったサーバとの統合のみでしたが、Googleアカウントを使ったサインインについては 今回もっと簡単に組み込みができるようになりました。

Google Sign-in for the Assistant

基本的には、コンソールでGoogle Sign-inを利用することを以下のように設定しておいて、

Dialogflowであれば、以下のようにするだけです。本当はもう少し準備(JWTなど)がありますが、基本的には簡単な手順で組み込めます。

const app = dialogflow({
  clientId: CLIENT_ID,
});

app.intent('Default Welcome Intent', conv => {
  conv.ask(new SignIn('To get your account details'));
});

// Create a Dialogflow intent with the `actions_intent_SIGN_IN` event
app.intent('Get Signin', (conv, params, signin) => {
  if (signin.status === 'OK') {
    const payload = conv.user.profile.payload;
    conv.ask(`I got your account details, ${payload.name}. What do you want to do next?`);
  } else {
    conv.ask(`I won't be able to save your data, but what do you want to do next?`);
  }
});

Table card

まさに表形式(3x3)のレスポンスが、Table cardです。以下のようなレスポンスになります。

これを送信するためには、以下のようなコードを書きます。

conv.ask('Simple Response')
conv.ask(new Table({
  dividers: true,
  columns: ['header 1', 'header 2', 'header 3'],
  rows: [
    ['row 1 item 1', 'row 1 item 2', 'row 1 item 3'],
    ['row 2 item 1', 'row 2 item 2', 'row 2 item 3'],
  ],
}))

詳しくは、Table card を参照ください。

また、 actions-on-google-nodejs の Version 2.1.0 にて、Table card がサポートされました。

For Android Developers

Googleアシスタントという視野においては、Actions on Googleにおける会話型アプリなどの他にも、今回はGoogleアシスタントがAndroidアプリと より深く統合されることが発表されました。そのために、いくつかの機能がアナウンスされています。

App Actions

これは、ユーザのニーズを満たす方法をアプリが推奨することができる機能です。今まさに着目されているコンテンツ(Content)に対して、ユーザが 次に何を行いたいのか(Action)、その候補をAIが判断し、そのActionを実行可能なアプリを候補としてユーザに提示することができ、ユーザが選択 すればそのActionを達成する(Fulfillment)ためにアプリが起動する、という流れです。

ユーザに候補が提示される場所としては、Googleアシスタントの他にも、Google検索や、テキスト選択した時など、かなりの広範囲な場所になるっぽいです。

例えば、Coursera(大学の講義を誰でもオンライン上で受けられるWebサービス)に対して、以下のように Actions.xml ファイルを定義したとします。

<?xml version="1.0" encoding="utf-8"?>
<actions>
  <action intentName="actions.intent.TAKE_COURSE">
    <parameter name="course">
      <entity-set-reference
          entityType="org.schema.type.Course"
          urlFilter="https://www.coursera.org/.*" />
    </parameter>
    <fulfillment urlTemplate="{url}?referrer=actions-on-google-previews" />
  </action>
</actions>

これにより、例えばGoogleアシスタントで “What is deep learning” と聞いたときに、ユーザに「CourseraでDeep Learningのコースを見るか?」 という意味の提案が表示されます。

ユーザがそれを選択すれば、Deep-linkによって、Courseraアプリが起動し、Deep Learningのコースの動画が流れる、という動作です。

上記の actions.intent.TAKE_COURSE というインテント名、これがこのエントリの最初の方に紹介した Built-in Intents です。つまり、 ビルトインインテントカテゴリが、Androidアプリにも、Actions on Googleでのアシスタントアプリでも、共通に適用されます。

App Actionsに関する詳しいことは、ここ を参照してください。

Slices

今までは基本的にAndroidアプリは「フルスクリーンの状態で」利用するものでした。これは、ユーザの感覚からすると、「明示的に特定のアプリを 起動して利用する」という認識です。しかし、Slicesの登場によって、ユーザの感覚は「コンテンツに対して行いたいことを選択した結果、何らかの アプリの機能が使われた」という認識に変わります。

Slicesは、Google検索やGoogleアシスタントの中で、迅速にアプリのコア機能を利用できるようにする新しい仕組みです。フルスクリーンでのアプリの UIから、コア機能を利用するためのシンプルなUIを切り出す、という感じです。

ポイントは、先ほどのApp ActionsのFulfillmentとして、このSlicesを提供することができる、ということでしょう(と理解しています)。

Slicesに関する詳しいことは、ここ を参照してください。

For Web Developers

Googleアシスタントに、AMPと構造化されたマークアップを使って、Webコンテンツを統合することができるようになります。

これについては、まだよく分かっていないので、セッションの動画を見た後に新規にエントリを投稿したいと思います。

Actions on Google Documents

Actions on Googleのドキュメントについては、章立てがかなり変わりました。しかし、各ページの内容は、ほとんど変わっていません。 Actions on Google Developer Consoleが変わったので、それに追随していくつかのページに手が入っています。が、もっと入っても良いはず なので、今後も修正が行われると思います。

新規に追加されたページは、以下となります。

まとめ

盛りだくさんです。Dialogflowの変更までまだ全然キャッチアップする余裕がありません。それだけ、Googleアシスタントの進化が激しいこと だと思います。

個別の機能については、詳細をエントリ投稿していこうと思います。

このエントリーをはてなブックマークに追加

Yoichiro

(よういちろう)