おはようございます!!
昨日は日曜日、プログラミングの日でした。
今回も、少しだけ書かせていただきます。
液晶対応スキル作成の話
初心者には無謀ではありますが、引き続き頑張ってます。
音声認識をしくじった際にエラーで止まってしまう現象
前回も書きました、デバッグ中に出てくる嫌なヤツがコレ↓ですね。
実は、過去に同じ現象がありました。(既に半年経ってるのにビックリ!)
・・が、あの時と違って、今回はLambdaからJSONが返ってきています。
Lambdaの関数自体は正常に動いている(ように見える)のに、Alexaに返ってきた途端に終わってしまうんですね。
ログを見ると、こんなエラーが出てました。
相変わらず(ちょっとググったぐらいでは)ログの見方がわかりませんので、何が問題なのかさっぱり理解できません。
片っ端からconsole.logを突っ込もうにも、問題のIntent以外には飛んでこないので、意味がわからず、困り果てました。
・・・がようやく原因がわかりました。
IntentでのSlot値の取り方が間違っていて内部的にエラーが出ていたようです。
Slotにある単語を発話している分には普通に動いてたので、全く気づきませんでした。
これを修正したことで、変な発話を受け取った場合でも正常に動作するようになりました。
完成までの試行錯誤
それはもう、ネット中探し回って勉強させていただきました。
特に大事だったのが、これら2つですね。
最初何も考えずにEchoSpotで動いて満足していたのですが、Echo Dotでやってみたら思いっきりエラーで落ちてしまいました。
きちんとディスプレイ付機種を判断させて動作を切り替える必要があるんですね。
この記事をなんとか解釈して動くようになりました。
実は、Alexa道場の畠中先生の記事なのですが、私のような初心者には理解が・・・で、かなり苦しみました。
★ Alexa ディスプレイ端末対応時にセッションをクローズする時の注意点
以前、セミナーで清野さんから「忘れちゃだめよ!」って言われてたので入れました。
ただ、当初から入れなくても普通に動作してShouldEndSessionがtrueで返ってきてました。
私の環境(EchoSpot)は、そのままでもよかったのか?それとも??
そもそも上の畠中先生の記事には何も触れられてませんし、絶対に必要なのかがよくわかりません。
この辺、大御所の方にお聞きしたいのですが・・・
呼び出し名とサンプルフレーズを一致される必要があるという話
このツイートの話です。興味のある方はリンクも読んでいただけると嬉しいです。
Alexaの
・呼び出し名は、ユーザーの発話をAlexaが認識した結果
・サンプルフレーズは、ユーザーが説明を読んで口にする言葉
ですよね?この2つを一致させないといけないようですが、漢字の固有名詞を含むので、どうしても別の漢字に認識してしまいます。
全て平仮名では意味がありませんし・・・— すますぴ!~初心者の為のスマートスピーカーサイト~ (@AI_Speaker_M) 2018年12月6日
これがなぜ必要か?はよくわかりません。
表示する漢字が違えば意味が異なるのに、
言葉にしてしまうと同じ単語になってしまう、んですね。
本国では「呼び出し名とサンプルフレーズは一致すること」とあるのかもしれませんが、これをそのまま日本語で守ろうとすると、今後は固有名詞を使う場合に問題が出てくるように感じます。
もともと本国では問題にならなかった日本語独特の問題かもしれません。
審査されてる方も不思議に思っておられるのではないかと・・・
・・・で、現在再々審査中です。
以上です。
いろいろ教えていただいた方に感謝いたします。(ペコリ)
細かくいろいろ書こうと思うと、まったく時間が足りません。
ブログを書いているだけで1日が終わりそうです。
本来はプログラムに専念する為の日曜日なのですが・・・
(※ サイバーマンデーに気を取られていたのは内緒です)
書けなかったことは、またあらためて・・・
(おわり)