やっていきFMのalexaスキルを公開しました

soramugi
8 min readMar 4, 2018

やっていきFMのpodcastを再生するalexaスキルを公開しました。

Amazon Alexaのアプリで「やっていき」で検索すれば出てくるのでスキルを有効にすることで使うことができます。

alexaスキルとは

alexaとはスマートスピーカー(Amazon echo)の中のos、alexaスキルとはiPhoneで言うアプリです。個人や企業が開発して自由に公開できるアプリケーションです。

Amazon echo = iPhone

alexa = iOS,siri

alexaスキル = アプリ

の認識で概ね問題はないかと。

今回作成したのは、Alexa Skills Kitのカスタム対話モデルなので、正確に言うと、iPhoneアプリの場合はネットワークの通信を行わないものが公開できますが、alexaスキルは通信が必須。

これは端末向けのアプリケーション作成をするのではなく、alexaから届くjsonを受け取ってjsonを返すAPIを作成するだけでalexaスキルを作成、公開することができます。

公開してどうなったか

2月の中旬、半月前に公開したのですが結構使われてるようです。

公開したスキルはamazon alexaアプリ上からしか検索と閲覧ができないのと、Twitterなどでの宣伝もなにもしていなかったんですが3~4件補足されているツイートを見たので、割と公開しただけでも見ている人がいるんだなという認識です。

あとSmartHacksさんは人力でalexaスキル試してるの文字起こしして動画撮って公開してるのがすごい。

データベース化されると機能追加したときに開発者のハンドリングが出来なくなるけど、勝手に宣伝してくれるのはありがたい。

alexaスキルの作り方

alexaスキルでのpodcastの再生、音声ファイルの再生スキルを作るには以下のパターンがあります。

  • 対話モデルでAudioPlayerを使用したAPIの作成
  • フラッシュブリーフィングスキルでRSSを読んで音声ファイルの再生

podcastはすでにRSSで配信されているので、フラッシュブリーフィングスキルで設定してしまえばいいのですが、10分間の音声ファイルの制約があるのと、毎日更新されるものが推奨されているので今回の要件には合わず。

対話モデルでAudioPlayerを使用するAPIを作成します。

簡単に言うとjsonを返却するAPIの作成。

今回作ったpodcast再生スキルで言うと、公式ではlambdaを使うのが推奨されてるのでlambdaで。nodeプラグインのalexa-sdkが公開されているのでそれを使う。

作成したものがこれ

awsでlambdaの設定と、Amazon開発者コンソールで設定、READMEに書いた設定方法と対話時の文言とpodcastのfeed urlを変更してデプロイする事で実際に機能するスキルが公開できる。

公開時の流れはこことか見るとわかりやすい

公式でも開発トレーニングページが公開されているので見ておくと雰囲気が掴みやすい。

営業職向けのような作り込みなので力入ってるのが分かる。

余談

podcast全般の再生アプリケーション、どんなpodcastでも音声の対話で再生出来るものを作るのもよかったんですが、複雑度が増すのと、公式のalexaスキルサンプルで単体のpodcastを再生するスキルがあったので作って見た次第。

公式でのpodcast再生サンプルがこれで

試して見たけどなんか動かない。

DynamoDBを使用しての再生状態の管理もして「こんな使い方できるよ」がわかるのだが見づらいし動かないし対話文が英語固定で変更しづらいので書き直し。DynamoDBは使わないで再生だけでいいし、との判断。

完璧ではなく、限られた時間内での完成優先なのでTODO多めになっております。

苦労したところ

  • lambdaでのデプロイが面倒

zipで固めてブラウザからアップロードの手間が必。lambdaをコマンドラインからいい感じに使うapexコマンドを使用して解消。

  • ログの閲覧が面倒

ブラウザでcloud watchでのログを見るしかデバッグできない。lambdaをコマンドラインからいい感じに使うapexコマンドを使用して解消。

  • デバッグが面倒

声で起動してデバッグする必要がある。返却されるjsonをデバッグすればいいのだが、jsonの解釈のされ方を端末で確認する必要もあるので、結局は毎回声で起動してデバッグした。

  • stateの変更できない

起動時や再生中の状態をalexaが送信してくれる。その状態変更がalexa-sdkで変更できるはずなのだが何故かできない。stateは使わないで対応

  • Playback〇〇

AudioPlayerを使ったalexaスキルは対話以外にバックグラウンドで終了間際などの状態の通知が飛んでくる。使わないようにした

  • System.ExceptionEncountered が飛んでくる

例外が飛んでくる。Playback〇〇 を適切に使えば飛ばないはず、今は握りつぶしてる

これしたかった

  • stateの変更
  • 再生状態の保存。DBに保存しておいて途中から再生の対応
  • 各podcast専用のalexaスキル開発の受託する。報酬はpodcastでの宣伝とか?

そこまで時間割けなそうだし需要も少なそうなのが現状。

なんで作ったのか

そもそもなんで作ろうとしたのか、という行動原理の部分。

スマートスピーカーに興味があったわけではなくて、音を使ったエンターテイメントや音とインターネットの組み合わせに興味があった。その興味関心と流行りのスマートスピーカーを使って見たのが行動原理。

スマートスピーカーが絶対に流行るとは思ってないけど、音はもうちょっと有効活用できるブルーオーシャンじゃないかなとは思ってる。みんなゲームとかSNSやってて目と画面が埋まっていても、耳は空いてる。

もっと面白いことできそう。

alexaスキル開発の参考資料

ここら辺読み込めばできる。そんなに難しく無い。

宣伝

alexaスキルを公開した話をpodcastでしています。よければこちらも聞いて見てください。

技術書典に出る事になったので、今回の件をもう少し詳しく書く予定です。

--

--