2018-06-30-gaaamii
復帰したといいつつ更新せず2週間も経ってしまっていた...
なんかやるぞ〜
Echo Dot買ったのでAlexaスキルをなにかしら書いてみたい
elmでNekobito書いてたときみたいにだらだらこちらに書き残そうかと思います。
まずHello Worldやろうと思って、https://twitter.com/gaaamii/status/1010885773481033729 みたいなことをしていた。
ご本人の音声じゃないとなにも面白くないことに気づいたが、とりあえず自前スキルを手元で確かめられることがわかった。
今回はAlexa経由で使えるStudyplusみたいなかんじの勉強記録サービスのプロトタイプを作りたい。tommy.icon /icons/よさそう.icon
仕様
Alexaに「Alexa, 勉強します」というとその時刻を記録
Alexaに「Alexa, 勉強終わりました」というとその時刻を記録
開始時間と終了時間をなんかしらのグラフで画面に表示
とりあえずここまでできればネタにはなりそう。
できれば画面側はElmでつくりたい。
まずプロジェクトを作ろう。
https://developer.amazon.com/alexa/console/ask の画面でスキルを作成
これでなにすればいいんだっけ
「スキルビルダーのチェックリスト」というところに親切にガイドが出てる
https://gyazo.com/a90f7106d210add127354d7dd8895352
呼び出し名
「勉強」とかでいいと思うけどどうしよう、こんなことが書いてある。
呼び出し名は2語以上でなければなりません。また、使用できるのはひらがな、カタカナ、漢字、小文字のアルファベット、スペースのみです。数字などは文字で表現しなければなりません。(例: 「二十一」など)
なんかユニークなあれを考えないとか
ほんとうにだめなのか?
「勉強」でモデルをビルドしてみる。
なんかエラーでた
Missing sample utterance. At least one sample utterance is required.エラーコード: MissingSampleUtterance
一語だからだめって感じでもない
先にインテントとか設定しないとだめなんだっけ
インテントってなんだ
インテントとは、ユーザーの音声によるリクエストを満たすアクションを表します。インテントでは、スロットという引数を任意で使用することもできます。たとえば、旅行を計画するスキルで、fromCity、toCity、およびtravelDateという名前のスロットを含むPlanMyTripという名前のインテントを定義することができます。ユーザーが次のように話すとします。
ユーザー: アレクサ、トリッププランを開いて次の金曜日にシアトルからポートランドまでの旅行を計画して
Alexaサービスは、トリッププランサービスにPlanMyTripインテントを送ります。その際、fromCityスロットには値「シアトル」、toCityスロットには「ポートランド」、travelDateスロットには次の金曜日の日付を指定します。サービスはこの情報を保存し、テキストを送り返して音声に変換します。
https://developer.amazon.com/ja/docs/custom-skills/use-the-skill-builder-beta-to-define-intents-slots-and-dialogs.html#intents-slots-dialogs
ほほ〜ん(よくわからん)
Alexaのdeveloper console、読み込みが遅めでちょっとつらい
なんか雰囲気だけ先につくった
https://gyazo.com/225e9c76e344c28fed3c3880f93ce090
「勉強くんを開いて」っていう呼びかけくそだるいけど細かいことはあとで
現在こんな感じ
https://gyazo.com/057863e30fd89185d6263bb5f417536a
勉強開始時刻と終了時刻を実際に記録しよう
どうやるんだ
なんかこのLambdaからDBへ送りたいよね
何をつかうんだ
AWSで揃えたほうがいいのか、自前でなんか作るほうがいいのか
さっぱりわからん、とりあえずDynamoDBってやつをあれしよう
雑にテーブルつくってみよう
https://gyazo.com/612a8449fc3b8fe1f6b8d786804e2487
プライマリキー?普通にidでいいか
NoSQLだし勝手がわからない
idというか自動連番みたいなものじゃなさそうな雰囲気を感じる
わからんけど idにしておこう。さっぱりわからん。
一旦雑でいいからとりあえずLambdaからDynamoDB扱えるようにしたい
どうやるんだ
よくわからんけど開始時刻を入れるところまではできた(?)
https://gyazo.com/6b88f6b881efa6d49dd9bfa64d55d3ca
あとは終了時に update(key, { ended_at: new Date().getTime() })みたいなことがしたい
どうやればいいんだ
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#put-property
ここまででできていることのデモ tommy.icon /icons/いいぞ!.icon
https://vimeo.com/277766823
2018-06-30 gaaamii日報