ヤマムギ

growing hard days.

*

AlexaにAWSの最新Feedを読み上げてもらう(Lambda Python)

   


年末にAmazon Echo Dotを購入しましたので、練習がてらAlexaスキルを作ってみました。

Alexaスキルを自分のEchoで使うためにやるべきことは2つです。

  1. AWS Lambdaで関数を作成する。
  2. Amazon Developer Consoleでスキルを設定する。

今回はやっていませんが、審査に通って公開すれば日本のすべてのEchoで使用することも出来ると思います。

Alexaスキルの概要

AlexaにFeedlyでタグ付けしているFeedのタイトルを読み上げてもらいます。
タグはAWSか、全てかのいずれかです。

AWS Lambdaで関数を作成する

  • ランタイムはPython3.6です。

alexa-skill-kit-color-expert-pythonを元に必要な箇所だけ書き換えて作成しました。

ソースコードはこちらGitHubにあります。

トリガーはAlexa Skills kitを選択します。

環境変数

FeedlyのAPIを使っているのでFeedlyのユーザーIDとトークンが必要です。

FeedlyのAPIについてはこちら「feedlyでタグ付けした記事を自動でメール配信する」や
Feedlyのフィードを自動でSlackへ投稿する(AWS Lambda , Amazon DynamoDB)」をご参照ください。

  • FEEDLY_ID : FeedlyのユーザーID
  • FEEDLY_TOKEN : Feedlyのトークン
  • FEED_COUNT : 記事の件数
  • INTERVAL_DAYS : 過去何日前までを対象とするか
  • LOG_LEVEL : ログ出力レベル
  • ERROR_SLACK_URL : エラーを出力するSlackのURL
  • ERROR_SLACK_CHANNEL : エラーを出力するSlackのチャンネル

コード

ほとんどサンプルのままですが、理解したことを書きます。

  • リクエストのeventの[‘request’][‘type’]に発言に基づくタイプが文字列で入ってくるのでそれに応じて、レスポンスを返すようにコードを書きます。
  • スキルが最初に呼び出されたときはLaunchRequestで、Amazon Developer Consoleで設定されたインテントからのリクエストはIntentRequestになるようです。

  • インテントからのリクエストは発言に応じて設定さいたインテント文字列がevent[‘request’][‘intent’][‘name’]にあるのでそれで判定します。

build_speechlet_responseは、ほぼほぼサンプルのままですが、outputとreprompt_textを7001文字で切るようにだけしてます。
これは、8000文字制限があるようなので余裕を持たせてそうしてます。
厳密な検証はしてません。

スキルを呼び出してから、Alexaと会話形式でつなげていきたい場合は、sessionAttributesを使えば、前の応答から次の応答へ値を引き渡すことが出来そうです。

Amazon Developer Consoleでスキルを設定する

日本のアカウントに紐付けているAmazon Echo Dotで使うため、Amazon Developer Consoleにamazon.co.jp(日本のamazon)のアカウントでログインします。

[Alexa Skills Kit]を選択します。

[新しいスキルを追加する]をクリックしました。

言語は[Japanese]、スキル名を任意で、呼び出し名はスキルを呼び出すときの文字を入力しました。

次にインテント(対話モデル)を設定します。
Intentsの[add]ボタンから作成します。

まず、AWSのfeedを読み上げるようのインテントを作成しました。

このインテントが発動するときに発言されるであろうメッセージパターンを文字列で入力していきます。

AWSのようなアルファベットの略語は「a w s」と半角スペースで区切ればいいようです。

もう一つAWSに縛らないfeedを読み上げるようのインテントも作成しました。

インテントが作成出来たら、[Save Model][Build Model]でビルドしました。

Amazon Developer Consoleには[Configration]ボタンから戻れました。

先ほど作成したAWS Lambdaのarnをエンドポイントのデフォルトに入力しました。

これで設定が完了しました。

テキスト入力でコンソール上からテストをしてみます。

うまくメッセージが返っているようです。

実機でテストしてみる

Alexaアプリで確認してみると作成したスキルが一覧に表示されています。

話しかけてみました。

予定どおりの動作をしました。

Alexaアプリにも動作記録が残りました。

AWS Lambdaを使って簡単にスキルを作成することが出来ました。
いろんな企業が提供しているAPIやインターネット上の情報を使って、情報提供をしたり、Lambdaから実行出来るアクションを声で操作したり、というようなユースケースであれば、サービスとして色々展開出来そうです。

【嵌ったこと】Amazon Developer Consoleでamazon.comのアカウントでログインしてしまって嵌りました

自分の場合はamazon.comとamazon.co.jpで同じメールアドレス、パスワードを使っていたので、Amazon Developer Consoleにログインしたのがamazon.com扱いになっていました。
なので、amazon.co.jpに紐付けているAmazon Echo Dotでアプリ一覧に出なくて、使えなくて理由がわからなくて少し嵌りました。
amazon.co.jpのパスワードを変更して、Amazon Developer Consoleに改めてログインして設定をやり直して無事使えました。

@yamamanx
開発ベンダー5年、ユーザ企業システム部門通算9年、ITトレーナー1年目のSoftware Engineerです。 質問はコメントかSNSなどからお気軽にどうぞ。 出来る限りなるべく答えます。 このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。 また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。

 - AWS ,

ad

ad

Message

メールアドレスが公開されることはありません。

  関連記事

Amazon RDS MySQLでCSVをload data するときに「Access denied」発生

超小ネタです。 AWSのデータベースサービスの Amazon RDSのMySQL …

Amazon LinuxのNginx+RDS MySQLにレンタルWebサーバーからWordPressを移設する(失敗、手戻りそのまま記載版)

勉強のためブログサイトを長らくお世話になったロリポップさんから、AWSに移設する …

AWS Summit Tokyo 2017 聴講したセッションのメモ

2017年6月に参加しましたAWS Summitで聴講したセッションのメモを記し …

[JapanTaxi] Athena 指向アナリティクス 〜真面目に手を抜き価値を得よ〜(AWS Summit Tokyo 2017)を聞いてきました

Athenaのユースケースとして聞きにいきましたが、最近触ってるRe:dashも …

2017年、このブログ(WordPress(Amazon EC2 + RDS))で対応してきたこと

Amazon Web Services Advent Calendar 2017 …

サイトのHTTPステータスを5分おきにチェックして200以外ならSlackに通知する

すいません。ここ最近出費が重なりまして、某監視サービスのプランを有料プランからF …

Amazon Elasticsearch ServiceにMySQLのデータを投入してkibanaで可視化してみる

MySQLのデータの可視化にAmazon Elasticsearch Servi …

kintoneで設定したスケジュールにあわせてlambda(python)からSQSへメッセージを送る

EC2の起動停止をそろそろ手動でやるのも疲れてきそうなのと、やはり停止するのを忘 …

EC2 Auto Recovery機能を設定しておいた

以前EC2インスタンスのリタイア対象になったこともあり、というより、やっておいて …

「X-Tech JAWS 【第2回】~9割のX-Techと1割の優しさで切り拓く未来~」に行ってきました

「X-Tech JAWS 【第2回】~9割のX-Techと1割の優しさで切り拓く …