おはようございます!!
昨日はプログラミングの日でした。
今回は、ちょっと気合いを入れて平日頑張ったのですが・・・
目次
6/11(月)~14(木) Alexa道場第4回の復習を行いました。
実は、この第4回は結構なイベントがありました。
AWSとサーバーにアカウントを作り、そのサーバー上に関数を作った関数に前回作ったスキルを接続して動かすところまでです。
動画セミナーでは問題なく動く内容ではありますが、うまくいかないところがいろいろありましたので、メモ的に書いていきます。
AWSアカウント取得でハマった話
前回は開発者アカウントでしたが、今回はAWSというサーバーのアカウントでした。
前者は通常のAmazonを利用しているとカードの情報なども不要でしたが、今回は全て新規なのでカードの登録が必要でした。
とりあえずは無料期間があるので引き落としされないとはいえ、敷居が高いですよね。
あとハマったのが認証があることでした。
よくあるのは
・携帯電話番号を入力するとSMSで暗証番号が届くので、それを登録フォームに入力する
というパターンなのですが、今回は
・登録フォームに暗証番号が表示された後、携帯に電話が掛かってくるので、それを携帯のテンキーから入力する
という珍しいパターンでした。
普通に考えれば何の問題も無いのですが、私の場合その番号のSIMを古いOSのAndroidスマホに入れていたから大変でした。
こちらのページなどに詳しく書いていますが、通話中にダイヤルキーボードが表示されないバグがありました。
設定を変えてもダメでOSをアップデートする必要が出てきたのですが、あまりにも馬鹿らしいのでiPhoneにSIMを入れ替えて登録作業を続行しました。
普段使ってないAndroid機だったので、そんなバグがあるとはつゆ知らず・・でした。
これって結構有名なバグなのでしょうか?
lambda関数の作成で異常終了
alexa-skill-kit-sdk-factskillを選び、新しいIAMロールの作成でロール名はlambda_basic_executionのままで実行したところ、こんな画面になりました。
以前も、開発者フォーラムを見ていたら出てきた事があったのですが、よくあることなのでしょうか?
再度やったら、既にできていると出てきました。
とりあえず末尾に2を付けて続行しましたが、その後消し方もわからないのでそのままです。
lambda関数の作成でトリガーに「Alexa Skills Kit」が見つからない現象
最初から関数を作り直しても出てきません。
そういえば、最近はV2という新しいバージョンが出てきているという話も聞きますので、その影響で変更された?・・とか、いろいろ疑ってググってみたのですが、情報が見つかりません。
延々数時間調べたり聞いたりしても解決方法が見つからないので、とりあえず動画を先に進めたらしっかり説明されていました。
右上のリージョンを東京にしていなかったことが原因でした。
初期状態では「米国(オハイオ)」なのですが、これだと「Alexa Skills Kit」は出てこないようです。
まさに、
「早く言ってよぉ~!!」
状態だったのですが、私も一度生放送で見ているはずなので文句は言えません。
スキルが「スキルからの応答に問題があります」で動かない
学校や講習会と一番違うのがここですね。
教科書や参考書、そして今回のような動画セミナーでは基本的に一方通行なので動かなかった場合のフォローは一切されません。
(※ 生でAlexa道場を見ていると最後のQ&Aで聞く事はできますが、さすがに個々のエラーまでは聞けないですよね。)
今回も、順番に進めて行ってようやくスキルを動作させるところでこのエラーが出てきて動きませんでした。
動画ではエラーが出たときの対処方法を説明することはなく、その先の解説に進みます。
本当に空しい時間です。
結局、いろいろやって動作するようになったのですが、考えられる要因はこちらです。
- lambdaの関数が「保存されていない状態」になっていた。
触ると2つある状態になったのでやり直しているうちにちゃんと保存された。
(そのうち1つは、スキルIDの検証が無効になっていなかった?) - Orderintentになっていたので、OrderIntentに修正。(「I」を大文字へ)
- その後、スキルがビルドできていなかったことに気づいたのでビルドした。
「保存されていない状態」は、いまだによくわかりません。
その後のビルドも、上の方に書いた関数の作成時の異常終了もそうなのですが、オンラインで作業していると時間がかかって変な状態になることがよくあります。
今回のコードなんてわずか10数行なので、本来なら一瞬で処理されるはずです。
今どきのプログラマーなら当たり前の話なのかもしれませんが、不思議です。
あと、OrderIntentは動画で読みずらく「i」としていたのを「I」にした次第です。
ちなみに、後から気づいたのですが、エラーが出て動かないときの対処はハンズオンテキストのP37に「うまく動かない場合」として解決方法が書いてありました。
・Lambda関数のモニタリングから、呼び出しアカウントのログにジャンプを開きErrorのある行を探しだして、そのログを見る。
ムチャクチャ大変ですね。
コーヒー以外を注文しても、コーヒーが注文されてしまう。
まだ「とりあえず動く」という状態であれば、どんなエラーが出るのか試してみたくなり、あえてミルクを注文してみました。
ちなみに、コードはこんな状態です。
OrderIntentとして処理されなかったのなら、エラーになるか、注文を聞いてくるはずです。
OrderIntentとして処理されたから「コーヒーですね・・・」と返ってきたのでしょう。
・・・なのに、選択肢の中に「ミルクを注文」はありません。
なぜこんな事になるのか理解できません。
以上です。
本来日曜日は勉強する日だったのですが、今週はまとめの記事を書く作業で終わってしまいました。
同じようにAlexa道場で躓いている方がいるかもしれませんので、これはこれでありかと思います。
(おわり)