Implicit/Explicit Invocation ~ Actions on Gogoleの呼び出し方を考える AoGを一発で呼び出すために ~


最近スマートスピーカーの話が沢山ですね。
実際問題 まだまだ家電が対応していないので、超便利になったとは感じられないのが悲しいところです。

ところでAoGを開発していると、「OK Google、~を使わせて」「〜させて」と2段階の会話が必要になるのが、
ストレスじゃありませんか?

手順が多いことで、コミュニケーションとしてのめんどくささを感じることが多いです。
ただAoGには、もっと効率的に機能を呼び出す方法があります。
今回はこの「呼び出し方法」「Implict/Explict Invoication」について書きたいと思います。


## AoGの呼び出し方 Implicit/Explicit Invocationとは?

AoGの呼び出し方には大きく分けて2種類の方法があります。

1. Explicit Invocation (明示的な呼び出し)
2. Implicit Invocation (暗黙的な呼び出し)

### Explicit Invocation

AoGの紹介記事でもよく見る、「OK Google、ほげほげにつなげて」という明示的にGoogle Assistantに対して、
アプリケーションを伝える呼び出し方です。

![Kobito.EV1rc5.png](https://qiita-image-store.s3.amazonaws.com/0/2965/2408c8fa-5382-91d5-0b36-3f87f070f33f.png "Kobito.EV1rc5.png")
CC BY 3.0 from https://developers.google.com/actions/discovery/explicit

実際にこの呼び出し方のみをよく見るのですが、Explict Invocationの文法はこれだけではありません。

#### Explicit Invocationの要素

公式ページに掲載されている画像は以下です。
![Kobito.fVm3J8.png](https://qiita-image-store.s3.amazonaws.com/0/2965/026fbc20-7891-fa97-8ca8-a36ba4fb2f3e.png "Kobito.fVm3J8.png")
CC BY 3.0 from https://developers.google.com/actions/discovery/explicit


日本語にすると以下です。
![ei.png](https://qiita-image-store.s3.amazonaws.com/0/2965/7b108155-9269-f76d-c60c-58a593c7881c.png "ei.png")

actionの呼び出しは「action invocation phrase」という名称のままでいいと思います。

ここで大事なのはこの「action invocation phrase」です。
つまり「「OK Google、ほげほげにつなげて」ではなく「OK Google、ほげほげでふがふがさせて」といえば、
一回の命令で、「アプリケーションの呼び出し」と「機能の呼び出し」をすることが出来ます。


### Implicit Invocation

Explict Invocationは機能を利用するユーザが明示的にアプリケーションを指名する必要があり、
逆に言えばユーザがアプリケーションの名前を知らない場合は、何も行うことが出来ません。

それに対して、Implict Invocationはユーザがアプリケーションの名前を知らないとしても、アプリケーションの機能を呼び出すことができる呼び出し方法です。

![Kobito.F8IV5F.png](https://developers.google.com/actions/images/implicit-invocation.png "Kobito.F8IV5F.png")
CC BY 3.0 from https://developers.google.com/actions/discovery/implicit

Implict InvocationではユーザがGoogle Assistantに対して何か「ほげほげをしたい」というと、Google AssistantがアプリケーションからAction Invocation Phraseを探し、アプリケーションをお勧めしてくれます。
![Screenshot_20171204-021323.png](https://qiita-image-store.s3.amazonaws.com/0/2965/de786dd6-e905-e802-f66e-0e229365ccae.png "Screenshot_20171204-021323.png")
※スマートフォンにて シミュレータだとうまくいったことがない....


### Action invocation phraseの設定

Implicit/Explicit Invocationでaction invocation phraseを使うためには設定が必要です。
※ドキュメント上、Implict Invocationのところのみにaction invocation phraseの設定方法が書いてありますが、多分Explicit Invocationでも必要だと思います。

action invocation phraseを設定するにはまずDialogflowのIntegration画面を表示します。

![Dialogflow1.png](https://qiita-image-store.s3.amazonaws.com/0/2965/7b110449-7e4e-06cd-97cd-154305aee970.png "Dialogflow1.png")

次にGoogle AssistantのSettingsをクリックして、設定画面を表示します。
中断の「Additional triggering intents」の下にある「Select intent」を選択して、
intentを追加します。

![Dialogflow2.png](https://qiita-image-store.s3.amazonaws.com/0/2965/aa7ce287-b0fb-775e-de2f-652be0525993.png "Dialogflow2.png")

追加を行ったら「Update Draft」をクリックします。
設定が行われているかを確認するにはAction Consoleを開きます。
そして、「Overview」→「Action discovery and re-engagement.」を表示します。

![Dialogflow3.png](https://qiita-image-store.s3.amazonaws.com/0/2965/2ff5dc62-b982-ca6d-6027-2ab9564d40a3.png "Dialogflow3.png")

画面内に設定したIntentが表示されていればOKです。

![Dialogflow4.png](https://qiita-image-store.s3.amazonaws.com/0/2965/bff5a077-6253-edda-24d9-85b9cfeb58a4.png "Dialogflow4.png")


あとは実機かシミュレータで試してみてください。
なおImplicit Invocationはシミュレータでうまくいったことがないです。。。。

![Actions_on_Google.png](https://qiita-image-store.s3.amazonaws.com/0/2965/306c4cdd-df4e-7806-e3a8-3e8cfc51e9df.png "Actions_on_Google.png")

なお、私が作っているAoGだと何故か、Action Invocation Phraseとして使えるものと使えないものが発生しています。

![Kobito.J1jzgJ.png](https://qiita-image-store.s3.amazonaws.com/0/2965/8402ac4b-0c94-b700-1d57-90ef1a921cd3.png "Kobito.J1jzgJ.png")
※LEDを赤色にしてというIntentはあるのに、Action Invocation Phraseとして使えてない

このあたりはまだ調査中なのでよくわかりません。。。。

## まとめ

今回はImplicit/Explicit Invocationについて書きました。
結構AoGを使っているのですが、この機能に気がつくまで時間がかかりました。。。。
ちゃんとドキュメントは読まないとだめですね。

Implicit/Explicit Invocationをしっかり理解すると、ユーザがアプリケーションにたどり着くまでの手順を減らすことが出来ます。
これはユーザにとっても、提供者にとってもとてもメリットが有ることです。
ただ、ユーザストーリーや、フレーズにも気をつけないとUXがとても悪くなります。
このあたりについてもドキュメントがあるので一度よんでおくといいと思います


## 参考

[Invocation and Discovery](https://developers.google.com/actions/discovery/)