generated at
2018-06-30-gaaamii
復帰したといいつつ更新せず2週間も経ってしまっていた...
なんかやるぞ〜
Echo Dot買ったのでAlexaスキルをなにかしら書いてみたい
elmNekobito書いてたときみたいにだらだらこちらに書き残そうかと思います。
まずHello Worldやろうと思って、https://twitter.com/gaaamii/status/1010885773481033729 みたいなことをしていた。
ご本人の音声じゃないとなにも面白くないことに気づいたが、とりあえず自前スキルを手元で確かめられることがわかった。
今回はAlexa経由で使えるStudyplusみたいなかんじの勉強記録サービスのプロトタイプを作りたい。tommy よさそう
仕様
Alexaに「Alexa, 勉強します」というとその時刻を記録
Alexaに「Alexa, 勉強終わりました」というとその時刻を記録
開始時間と終了時間をなんかしらのグラフで画面に表示
とりあえずここまでできればネタにはなりそう。
できれば画面側はElmでつくりたい。
まずプロジェクトを作ろう。
https://developer.amazon.com/alexa/console/ask の画面でスキルを作成
これでなにすればいいんだっけ
「スキルビルダーのチェックリスト」というところに親切にガイドが出てる
呼び出し名
「勉強」とかでいいと思うけどどうしよう、こんなことが書いてある。
> 呼び出し名は2語以上でなければなりません。また、使用できるのはひらがな、カタカナ、漢字、小文字のアルファベット、スペースのみです。数字などは文字で表現しなければなりません。(例: 「二十一」など)
なんかユニークなあれを考えないとか
ほんとうにだめなのか?
「勉強」でモデルをビルドしてみる。
なんかエラーでた
> Missing sample utterance. At least one sample utterance is required.エラーコード: MissingSampleUtterance
一語だからだめって感じでもない
先にインテントとか設定しないとだめなんだっけ
インテントってなんだ
> インテントとは、ユーザーの音声によるリクエストを満たすアクションを表します。インテントでは、スロットという引数を任意で使用することもできます。たとえば、旅行を計画するスキルで、fromCity、toCity、およびtravelDateという名前のスロットを含むPlanMyTripという名前のインテントを定義することができます。ユーザーが次のように話すとします。
> ユーザー: アレクサ、トリッププランを開いて次の金曜日にシアトルからポートランドまでの旅行を計画して
> Alexaサービスは、トリッププランサービスにPlanMyTripインテントを送ります。その際、fromCityスロットには値「シアトル」、toCityスロットには「ポートランド」、travelDateスロットには次の金曜日の日付を指定します。サービスはこの情報を保存し、テキストを送り返して音声に変換します。
>
ほほ〜ん(よくわからん)
Alexaのdeveloper console、読み込みが遅めでちょっとつらい
なんか雰囲気だけ先につくった
「勉強くんを開いて」っていう呼びかけくそだるいけど細かいことはあとで
現在こんな感じ

勉強開始時刻と終了時刻を実際に記録しよう
どうやるんだ
なんかこのLambdaからDBへ送りたいよね
何をつかうんだ
AWSで揃えたほうがいいのか、自前でなんか作るほうがいいのか
さっぱりわからん、とりあえずDynamoDBってやつをあれしよう
雑にテーブルつくってみよう
プライマリキー?普通に id でいいか
NoSQLだし勝手がわからない
idというか自動連番みたいなものじゃなさそうな雰囲気を感じる
わからんけど id にしておこう。さっぱりわからん。
一旦雑でいいからとりあえずLambdaからDynamoDB扱えるようにしたい
どうやるんだ
よくわからんけど開始時刻を入れるところまではできた(?)
あとは終了時に update(key, { ended_at: new Date().getTime() }) みたいなことがしたい
どうやればいいんだ
ここまででできていることのデモ tommy いいぞ!