Actions on GoogleのReleaseで、Mic is open without promptで苦しんだ話

# 背景

つい先日、GoogleHomeアプリ、というかActions on GoogleにアクションをReleaseしてみました！
が、しかし。
先人さん達の資料を参考にしていたつもりでしたが、三度も同じ要因で "was not approved" を喰らいましたので、そのときの情報をまとめます。恥を忍んで・・

# "was not approved"の理由・三度共通

```
During our testing, we found that your app would sometimes leave the mic open for the user without any prompt. Make sure that your app always says something before leaving the mic open for the user, so that the user knows what they can say. This is particularly important when your app is first triggered.
開発ご担当者様
お世話になっております。
この度はご申請ありがとうございました。
本アプリはActions on Googleポリシーに則り、下記内容をご修正いただく必要がございます。

■Mic is open without prompt
ユーザが何を回答すればわからない（会話内容が終了したと思われる）場合、アプリ側がマイクをオープンにすることはActions on Googleのポリシーに反します。この場合、アプリ側は新たに問いかけを作成し会話を継続するか、会話を終了しなければなりません。
```

# アプリの特徴とか、申請前に気をつけたこととか

申請したアプリは、「ゴミの分け方」アプリでした。

思っていたこと

+ ゴミの分け方アプリだよ？ 
  + ゴミの名前しか入れないよね？まさか音楽聴かせてとか言わないよね？？
  + いつも「はい、xxxxxxxx（アプリ名）のテストバージョンです」って名乗ってくれているよね？（←罠でした。後述）
+ いくつかの先人さんの資料に書かれていた、”終了用インテントを用意する”は準備したぜ！


準備していたこと

+ 終了用のIntentを用意する
+ Defalut Fallback Intentで終了用のIntentを案内する


# 一度目の"was not approved"

一度目の"was not approved"は、冒頭のテンプレートだけが記入されていました。
「アプリ側がマイクをオープン」って何だよ？何なんだよ？？と、とても悩みました。


こちらの資料を参考に、修正を加えました。
https://qiita.com/flatfisher/items/f6afa2a9055e5ee3cf87

+ Default Welcome IntentのResponsesは複数入れる
+ ヘルプ用のIntentを用意する
+ Default Welcome Intentでヘルプや終了の方法を案内する


# 二度目の"was not approved"

二度目の"was not approved"には、テンプレートに続けてこんな一文がありました。

```
なお、会話中にアプリを終了する場合はバイバイと発話するような指示がありますが、
実際にはバイバイといってもアプリを終了することができませんでした。
従いまして、”終了”及びアプリを終えるワードが正常に作動するようご修正頂けますでしょうか。
上記をご検討ご修正の上、またのご申請をお待ちしております
```

## 原因

終了用のIntentのTraining phrases に「ばいばい」を登録していました。
ですが、マイクから拾われた文字列は「バイバイ」でした・・・・ orz

さよなら、さようなら、ありがとう、などいろんな言葉を入れていたんですが、まさかカタカナの「バイバイ」が漏れているとは。


## 対策

終了用のIntentのTraining phrases に「ばいばい」だけでなく「バイバイ」を追加。



# 三度目の"was not approved"

三度目の"was not approved"にも、テンプレートに続けてさらに別の具体例がありました。

```
例)
ユーザー: アイスノ袋
アプリケーション: アイスの袋は食品包装プラスチックです プラマークのついているもの。 汚れを落としてから袋に入れる。(mic open)
```

## 原因

ゴミの分け方を教えてくれるアプリですから、ユーザーはゴミの名前くらいしか言わないと思ってたんですよね・・。


## 対策

Actionsからの応答の最後に、次にどうすれば良いのかを追加する。
```
例)
ユーザー: アイスノ袋
アプリケーション: アイスの袋は食品包装プラスチックです プラマークのついているもの。 汚れを落としてから袋に入れる。\n
　詳しい情報を知りたいときは「詳しく」、他のゴミについて知りたいときはその名前を、終了するときは「バイバイ」と言ってください。
```


# ~~審査通過後に分かったこと~~ 

~~> いつも「はい、xxxxxxxx（アプリ名）のテストバージョンです」って名乗ってくれているよね？~~ 

~~ここが大きな間違いでした。
一般公開されたアクションは、名乗りはしませんでした・・。
いきなりDefault Welcome Intentが発声されます。~~ 

~~となると、誤認識でこのアプリに来たりすると、何のアプリか分からなくなるかもですね・・。~~ 

（2018.11 修正）
少なくとも現在は、アプリに切り替わるタイミングで「xxxxxxxx（アプリ名）です」と読み上げられます。以前がどうだったか記憶があいまいなのですが、上記記述は撤回させていただきます。


# まとめ

Actions On Google で"was not approved"の理由として"Mic is open without prompt"が来たとき、対策として私が行ったこと。

+ 終了用のIntentを用意する
+ ヘルプ用のIntentを用意する
+ Default Welcome Intentで、ヘルプや終了の方法を案内する
+ Defalut Fallback Intentでも、終了用のIntentを案内する
+ 終了用のIntentのTraining phrases には、なるだけたくさんの言葉・表現を入れる
  + ひらがなとカタカナの違いも意識する（「ばいばい」と「バイバイ」）
+ アプリが発声する場合、次にユーザーが何を話せば良いのか明示する

これで無事に"was approved"されました。

## 参考資料

1. https://qiita.com/flatfisher/items/f6afa2a9055e5ee3cf87
2. https://qiita.com/miso_develop/items/c56fd334f333160a9130
3. https://qiita.com/megadreams14/items/98fbf6c5990ef5a42ffa


# ひとりごと

## 1
コレを書きながら先人さんの資料を読み直していたら、同じ所で嵌まっておられた方がたくさん居られたんですね・・
資料2，3は最初の申請前から読んでいたつもりでしたが、ちゃんと読みこめていなかったなぁと反省中です。。

## 2

「ばいばい」では"バイバイ"がヒットしませんでしたが、同様に「空きビン」と登録していても"空き瓶"と解析されて検索失敗、というケースが多発しました。ということは・・ Training phrases や Entity に言葉を登録する場合、さまざまな表記を登録する、あるいは逐一実機テストをする必要があるってコトでしょうかね・・・


---
以上、何らかの参考になれば・・