AlexaのスキルでWeb上から取得したテキストを喋らせよう

Amazonの音声アシスタント「Alexa」では、ブラウザ上で手軽に「スキル」を作成して機能を追加できるが、あらかじめ用意した内容を喋るだけだと出来ることは限られてしまう。ネット上のデータを元に毎回違う内容を喋ったり、聞かせた内容を送信するなど、ネットサービスを活用したスキルも作ってみたいところだ。
Amazonのサーバ上で実行される「Alexa-hostedスキル」でもHTTPやHTTPSによる通信は可能だが、処理完了を待たずに次の処理に進む非同期方式のため、取得した内容から応答内容を生成してAlexaに返すには少々ややこしい記述が必要だ。また、HTTP/HTTPSモジュールのバージョンが古く、新しいバージョンで追加された簡潔な書式でのパラメータ指定ができないことにも混乱させられる。
ここに現時点のAlexa-hostedスキルで動作するHTTP通信処理の例を用意したので、Web上のデータを利用したAlexaスキルを作りたい人は参考にして欲しい。
Alexaがホストするカスタムスキルを作成したら、「コードエディタ」画面の内容に下記ファイルからコピーした内容を上書きしよう。「ビルド」画面での設定は特に不要だ。
冒頭の「httpget」関数は、HTTPやHTTPSによるデータ取得を使いやすくするためのものだ。
今回の例では、単にURLで示されたWebページを取得する形でしか使っていないが、第2引数に文字列を指定して「POST」メソッドで送信できる他、第3引数にリクエストヘッダの名前:値ペアを列挙したオブジェクトを指定することもできる。
httpget関数内で使われている「HTTP」「HTTPS」モジュールの詳しい仕様は以下のページに掲載されている。Alexa-hostedスキルで利用できるバージョンが古めなので、新しいバージョンで追加された機能は使えないことに注意が必要だ。
・HTTP | Node.js v6.17.1 Documentation
「LaunchRequestHandler」以下が、httpget関数を利用した処理を記述した部分だ。
今回の例では、あんスマのトップページを取得した後、最初のピックアップ記事のURLを抜き出し、取得した記事ページからタイトルと本文を抜き出し、HTMLタグを除去して読み上げテキストを生成し、応答オブジェクトにセットして返すという処理になっているぞ。
好きなサイトの最新記事を読み上げるようにカスタマイズしたければ、最初の「httpget(‘~’)」内のURLと、2つの「match(~)」内の正規表現パターンを書き換えよう。正規表現の使い方は、下記ページなどで解説されているぞ。
httpget関数の返り値は、処理の完了後に結果を受け取れるようにする「Promise」というオブジェクトになっている。
Promiseオブジェクトの「then」メソッドに結果の値を受け取って加工して返す関数を与えれば、加工された値を結果とする新たなPromiseオブジェクトが返される。代わりにhttpget関数などの返り値のPromiseオブジェクトを返せば、さらにその処理の結果を待ってから最終的な結果とするPromiseオブジェクトになる。
Alexaのリクエストハンドラ関数では、「responseBuilder…getResponse()」で取得できる応答オブジェクトの代わりに、thenメソッドに与えた関数内で応答オブジェクトを返すPromiseオブジェクトを返せば、完了を待ってから結果に応じてAlexaを動作させてくれる。
Promiseの仕組みについては非常にややこしいので、詳しく知りたい人は下記のページなどを参照して欲しい。
・Promiseを使う – JavaScript | MDN
プログラム例を改造して好きなサイトの読み上げスキルを作成したら「テスト」ページで「非公開」をクリックして「開発中」に変更してテスト可能状態にしよう。
この画面の入力欄に「○○のスキルを開いて」のように入力すれば、手軽に動作確認できるぞ。
上手く抜き出したテキストを読み上げられたら、実際にAlexa搭載機器やアプリに呼びかけて利用しよう。
関連記事
Alexaの自作スキルでお気に入りのサイトをフラッシュニュースに対応させよう
Alexaのスキルを自作して手持ちの音楽ファイルを再生させよう
実質有料化のIFTTT代替!自作Alexaスキルでスマートホーム機器を自在に活用しよう
Alexaの「スキル」で「フラッシュニュース」の内容を自分好みにカスタマイズ
「Alexaスキル」でFireタブレットの音声アシスタントに機能を追加
Amazon開発者アカウントを作成してAlexaスキルを自作しよう
Wikipediaを読み上げるAlexaスキル「ウィキサーチ」
Alexaやスマートホーム機器をパソコンなどと連携させるためのスマートホームスキルを作成しよう
画面付きのAlexaでお気に入りの動画を再生するスキルを自作しよう
2019年06月04日17時04分 公開 | カテゴリー: 便利化・快適化 | キーワード:おすすめ, チップス | Short URL
ツイート
最新記事
- 暮らしをもっと便利に、心地よく。なんでも収納できて移動も楽ちんなスチールラック!
- 冷却ファン付きのノートパソコンスタンド!滑り止め付きでずれ落ちにくい!
- 肩、腰、脚などの頑固なコリを強力マッサージ!気軽に出来るセルフケア!
- いつでも、どこでも、誰にでも!使いやすくて効果の高いハンドマッサージャー!
- 時間が来るまで絶対にあかない!どうしてもスマホを使っちゃうという方に非常にオススメ!
- iPhoneもAndroidもOKなBluetoothコントローラー!遅延も少なく快適にゲームが出来る!
- 画面に吸着してスマホを連打!最大72時間の使用が可能なバッテリー搭載!
- 冷却ファン付きのノートパソコンスタンド!ファンは取り外しも可能!
- iPhone用のワイヤレスマイク!データ伝送が安定した低遅延のマイク!
- ランプ付きでスイッチの場所が一目瞭然!足元で電源を入り切りできるフットスイッチ!
- 緊急時に頼れる電力!エクストラバッテリーで最大5644Whまで拡張可能!
- 30分で最大60%充電!すべてのデバイスに最速で電力を供給できる!
- 世界で愛される大容量バッグ!大容量だから仕事もプライベートもすべて詰め込める!
- 腰掛けでも使える携帯扇風機!首掛けで使えば両手が解放される!
- 腰からさげて使えるベルトファン!首からさげたり卓上で使ったりも出来る!
- 29インチのウルトラワイドモニター!縦長に使えばWordやWEB閲覧に使いやすい!
- PD充電の新規格PPSで端末への負荷も軽減!流す電流/電圧を自動調整!
- Magsafe充電対応!Apple Watchまでケーブルレスで充電できちゃうモバイルバッテリー!
- キングジムの電子メモ帳!アラーム機能付きでTODOとしても!
- 3Dメガネも付属!3D映像にも対応した高性能プロジェクター!
- 熱くて飲めない飲み物に!自動でかき混ぜて温度を下げてくれるマグカップ!
- 両手を解放して顔に涼しい風を!羽根無しなので子どもでも安心して使える!
- デノン製の高品質な完全ワイヤレスイヤホン!ペアリングを済ませれば取り出すだけで自動でつながる!
- ケーブル内蔵の大容量モバイルバッテリー!小型で持ち運びやすい!
- こんなに小さくても非常にパワフル!圧倒的なオンリーワンのコンパクトモバイルバッテリー!
- クレジットカード6枚分の厚みしか無い!極薄のモバイルバッテリー!
- ワークスタイルはもっとよくできる!紙をまとめて一つの書類のようにできる!
- まるでサングラス!201インチで映像表示可能なVRグラス!
- キャンプや車中泊に楽しみを!防災にも大活躍の大容量ポータブル電源!
- 耳を塞がず快適なオンライン会議を!メガネ型のウェアラブルスピーカー!