先日、alexaスキルアワードのハッカソンに行ってきました。中の人や参加者の方々から学んだこと・思ったことをまとめます。
準備編
-
Visual Studio Live Shareが便利(そう)
- ぼっちでのコーディングだったので出番はありませんでしたが、複数人で手元のPCでコードシェアしながら開発できる。
- TypeScript
- 補完できるのがやっぱり強い。
create-react-app
のような、alexa版の雛形プロジェクト作成ツールが欲しい。(ask new --template
あるから、最新のask-sdkなどをちゃんと追従するテンプレート作ればいけそうな気も。)
- 補完できるのがやっぱり強い。
- Serverless Framework
- 凝ったスキル作るを場合はDBや複数環境欲しくなると思うので、slsデプロイが良さそう。IAMの設定も手動でぽちぽちしなくて済む。(別途IAMの払い出しは必要)
準備に時間取られるのは勿体無いので、「宇宙の豆知識」がそれぞれで動く環境をサクッと作れたら準備編はよさそう。
というわけで、次回やるときは、VS + TypeScript + Serverless Framework + モデルやスロットはdeveloper console がいいかなーという感じ。
alexa関連編
- S3とDynamoDBのPersistenceAdapterを同時に使うのはできない
- 2種類のデータを保存したい要件が発生し(しかも主キーはそれぞれで異なる)、サクッと作りたいので手抜きできないかなと思って聞いてみたけどだめそうでした。結局、aws-sdkを使って自前でDynamoDBとの繋いで対応。
- alexa発でユーザーにお知らせする方法は4つある(話はできない)
- プロアクティブイベント
- リマインダーAPI
- 定型アクション(時間指定で任意の会話)
- スマートホーム
定型アクションとスマートホームは裏技的な立ち位置。プロアクティブイベントも定義済みのイベントに限るし、リマインダーもalexaからの一方通行なので、キャッチボールできるかつalexa発で話をできる方法があると嬉しいよね
-
SSMLでゆっくりやさしく話しかける
-
<prosody>
のrateやpitchだけでなく、単語の間に<break time="0.1s"/>
などを挟むことでより自然な会話になる。
-
-
言葉を考える
-
より自然な会話にするために、フィラー(えーっと、あのーなど)や相槌を設計する
-
ユーザーが答えやすいように正しく誘導する
-
デバッグ
-
音声入力の履歴をブラウザ上で確認できる。リアルタイムで反映されるのですごく便利。
-
うまく発話が認識されない場合は、developer consoleの「テスト」 で、開発中と非公開をON/OFFしたり、実機の場合は手でalexaを持って話しかけると認識されるケースがある。(床に音が反射して、誤動作する?根拠はあまりない、体験談。)
-
-
SSMLのテストはdeveloper consoleの「テスト」の「音声と語調」が便利。声のトーンや効果音は割と軽視されがちですが、ちょっと装飾するだけでも雰囲気が変わるので積極的に使うのがよし。
アイディア編
- 声や画面を超えた体験を提供するスキルが目立っていた
- 全身を使ったゲーム(WiiFitみたいな)やボードゲームなどをサポートするスキル
- 結婚したり、童話を聞かせて続話は配送するスキル
- HW組み合わせたスキル
- マルチデバイス連携に期待
- alexa複数台を連携させて動作させるスキル
- ゲーム(しりとりなど)で対戦できたらおもしろそう
- マッチング(ペアリング)はアカウントリンクなどの外部で連携が現実的っぽい
その他
- ハッカソンへの参加目的を整理しておくと良い
- 技術を磨きたいのか、プロダクトを作りたいのか、ファシリテーションしたいのかなど
- 目的に沿ったチーム・アイディアを選択することでより楽しめる
- 困ったらすぐにexpertの方々に質問できる&フィードバックもらえる
- こういうスキル作りたいんですけど、いいやり方ないですかねーという漠然としたもの
- SSMLを使ってより自然な会話にする方法ないですか
- handlerの設計ってこういう感じでどうでしょう
総括
- 技術的にも発想的にも、モチベーション的にもすごく上がったり、何より楽しかったので、今後も頑張っていきます。運営の方々、参加者の皆さん、本当にありがとうございました。