LoginSignup
10
4

More than 5 years have passed since last update.

Alexaに今日飲んでいいお酒の量を確認させてみる

Last updated at Posted at 2018-12-19

この記事はLivesense AdvendCalendar 19日目の記事です。
昨日は @otakumesi さんの「『migemo』という便利なツールをオススメしたい」でした。

はじめまして、Livesenseでインフラエンジニアをしている @p1na9uattr0 です。
Qiitaデビューがいきなりアドベントカレンダーになってしまいましたが、書いてみます。

はじめに

さてみなさん、:beer::sake:お酒:wine_glass::cocktail:好きですか?
私は大好きです:beers:

ついつい飲みすぎ、且つ締めに豚骨ラーメン:pig::ramen:食べてしまって体重が気になってしまう事もしばしばですね。
年中そんなことを言っていますが、平日の夜や土日で自転車:bicyclist:に乗ったりジョギングしたりして体を動かして帳尻を合わせています。

毎日、MyFitnessPalにカロリーを記録して「ああ、今日は焼酎1杯しか飲めないなー:ghost:」なんて日も多いわけですが、運動した日にどのぐらいお酒を飲んでいいかAlexaに喋らせてみようと思います。

用意するもの

  • Echo Dots
  • AWSアカウント(Lambda/Amazon Developer用)

やったこと

Alexa Skills KitでAlexaスキルを作る

以下の流れでAlexa Skills KitでAlexaスキルを作ります。

  1. Amazon DeveloperにAWSアカウントでログインしてAlexa Skills Kitl (ASK)からスキルを作成する
  2. 呼び出し名に適宜名前をつけてモデルを保存する
  3. インテント呼び出し名を言った後のワードを追加し、モデルを保存する(多分要らない)

こちらを見ながらサクサク進めます。
本当に使いこなすには用語の意味とかもっとちゃんと理解したほうが良いかもしれません。

Lambda関数を作る

以下の流れでLambda関数を用意していきます。

  1. LambdaPython3.7ランタイムの関数を作る
  2. AlexaスキルエンドポイントページからスキルIDをコピペする
  3. Alexaスキルエンドポイントページのデフォルトの地域にLambdaのARNをコピペする
  4. Alexa Skills Kitをイベントとして設定する

この時点でスキルを開発できるようになりました。

Lambda関数の中身

こちらのコードをベースに、以下の様に実行するインテントを複数指定します。

<snip>
# 焼酎を何杯飲んでいいか回答する
def shochu():
    return OneSpeech('今日は焼酎を' + shochu_count + '杯飲んでいいですよ').build()

# 缶ビール(350ml)を何本飲んでいいか回答する
def beer():
    return OneSpeech('今日は缶ビールを' + beer_count + '本飲んでいいですよ').build()

# 日本酒を何合飲んでいいか回答する
def sake():
    return OneSpeech('今日は日本酒を' + sake_count + '合飲んでいいですよ').build()

def welcome():
    return QuestionSpeech('こんばんは、今日も1日お疲れ様でした。何を飲みたいですか?').reprompt('よく聞こえませんでした').build()

def bye():
    return OneSpeech('おやすみなさい。飲み過ぎに気をつけて下さいね。').simple_card('遊んでくれてありがとう!').build()

def lambda_handler(event, context):
    request = event['request']
    request_type = request['type']

    if request_type == 'LaunchRequest':
        return welcome()
    elif request_type == 'IntentRequest':
        intent_name = request['intent']['name']
        # 焼酎が何杯飲めるか確認するためのインテントを指定する
        if intent_name == 'ShochuIntent':
            return shochu()
        # 缶ビール(350ml)が何杯飲めるか確認するためのインテントを指定する
        elif intent_name == 'BeerIntent':
            return beer()
        # 日本酒が何合飲めるか確認するためのインテントを指定する
        elif intent_name == 'SakeIntent':
            return sake()
<snip>

shochu_count,beer_count,sake_countには、StravaからAPIで消費カロリーの情報を引っ張って来て、下表の参考値から杯・合数を計算しています。

お酒の種類 カロリー
焼酎 100ml 139kcal
ビール 350ml 140kcal
日本酒 1合 196kcal

・・・と書きたかったんですが、 Strava API周りの処理を書いているところでタイムアップとなってしまいました。
また、正確な1日の消費カロリーを元に計算するために、MyFitnessPal APIを使用したかったのですが、API使用に関するリクエストの承諾が間に合いませんでした(トホホ:sob:

alexa developer consoleからの動作テストと、Echo DotsでAlexaが応答するところまでは確認したので、軽く紹介しておきます。

文字ベースでの動作テスト

以下の様に、alexa developer consoleテストタブからチャット形式で動作テストが行なえます。
スキルI/Oも入力するたびに更新されるので、データのやり取りがどの様になっているのかが追えて良いですね。

スクリーンショット 2018-12-20 0.19.02.png

実機で動かすための準備

alexa developer console公開タブからベータテストの設定を行います。

日本語(日本)

developer.amazon.com_alexa_console_ask_publish_alexapublishing_amzn1.ask.skill.f2dea38e-d3bc-4a15-9b4b-d1353eccd33f_development_ja_JP_privacy.png

プライバシーとコンプライアンス

developer.amazon.com_alexa_console_ask_publish_alexapublishing_amzn1.ask.skill.f2dea38e-d3bc-4a15-9b4b-d1353eccd33f_development_ja_JP_privacy (1).png

公開範囲

設定情報が問題なく、alexa developer console検証タブで以下の通り「エラーは見つかりませんでした」と表示されていればベータテストが行えるようになるため、ベータテストを登録します。

スクリーンショット 2018-12-20 0.35.56.png

公開範囲メニューから、Echo Dotsに登録されているアカウントのメールアドレスを登録し、招待します。
Echo Dotsのメニューから、ベータテスト中のスキルを選択すればEcho DotsAlexaスキルが使えるようになります。

developer.amazon.com_alexa_console_ask_publish_alexapublishing_amzn1.ask.skill.f2dea38e-d3bc-4a15-9b4b-d1353eccd33f_development_ja_JP_availability.png

Echo Dotsでの動作

Alexaに話しかけてみましょう。
今日1日の頑張りをAlexaが労いつつ、飲んで良いお酒の量を教えてくれます。
飲みすぎないように、程よく飲みましょう:beer::sake::wine_glass::cocktail:

おわりに

データ取得周りの実装が間に合いませんでしたが、Alexaとは仲良くなれたと思います。
今回試してみて、Strava APIでも色々やれそうなことがわかったので、後日また色々いじってみるかもしれません。
トホホ記事になってしまいましたが、最後まで読んでいただきありがとうございました:sweat_smile:

明日のアドベントカレンダー21日目は @shusuke_otani さんです。

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4