alexa

since 2020-08-13

すごい広島 with Python [41] で紹介。

スキルの開発をしたい。amazon.co.jp のアカウントはある。そのアカウントに紐づいた alexa デバイスの実機もある。

  • 私は amazon.com と amazon.co.jp で別々の Kindle を使うために、違うメールアドレスで運用している

アカウントの準備

https://developer.amazon.com/ja/blogs/alexa/post/9f852a38-3a44-48bd-b78f-22050269d7c7/hamaridokoro

  • 別途作った amazon.com の開発者アカウントなどを使ってはいけない(なぜか TFA が AWS ルートアカウントと紐づいていたりする)
  • 「解法2: Amazon.co.jp で新しいアカウントを作成する。」の通りに作業する

Alexa-Hosted Python

https://developer.amazon.com/ja/blogs/alexa/post/31c9fd71-f34f-49fc-901f-d74f4f20e28d/alexatraining-firstskill

  • この記事には node.js しか選択肢がない
  • Alexa-Hosted (Python) を利用して、問題なく実行できた。メッセージを日本語に書き換えることも成功した。
  • この状態で CloudWatch や s3 の管理画面に行けてしまうが「フェデレーションログイン: VoiceHubSSORole/VoiceHubSSORole」で認証されている状態。 Alexa-Hosted というのは機能限定版 AWS 環境のようなものだろうか。。

https://developer.amazon.com/ja-JP/docs/alexa/hosted-skills/build-a-skill-end-to-end-using-an-alexa-hosted-skill.html

  • Alexa-hostedスキルを使用してスキルをエンドツーエンドで作成する
  • ホスティングするリージョン、日本語(日本)の場合の推奨は「米国西部(オレゴン)us-west-2」とのこと

実機でスキルが有効かどうか確認

音声認識

「はじめてのAlexaスキル開発」(技術評論社)Part 2 / Chapter 3 の例を参考にしている。

これを Python でやってみる。

  • カスタムスロットタイプ: JuiceType
  • スロット値: りんご、バナナ、メロン
  • インテント: OrderJuice のサンプル発話
    • {JuiceType}をのみたい
    • ジュースをのみたい

https://developer.amazon.com/ja-JP/docs/alexa/custom-skills/handle-requests-sent-by-alexa.html

下記を HelloWorld に書き足す。

# 最初のほうに下記を追加
from ask_sdk_core.utils import get_slot_value
 
# 途中に追加
class OrderJuiceHandler(AbstractRequestHandler):
    """Handler for OrderJuice."""
    def can_handle(self, handler_input):
        # type: (HandlerInput) -> bool
        return ask_utils.is_intent_name("OrderJuice")(handler_input)
 
    def handle(self, handler_input):
        # type: (HandlerInput) -> Response
        juice_type_value = get_slot_value(handler_input=handler_input, slot_name="JuiceType")
        speak_output = "ジュースの注文を受け付けました。"
        if juice_type_value:
            speak_output = juice_type_value + speak_output
 
        return (
            handler_input.response_builder
                .speak(speak_output)
                # .ask("add a reprompt if you want to keep the session open for the user to respond")
                .response
        )
 
# sb.add_request_handler(HelloWorldIntentHandler()) の次の行に下記を追加
sb.add_request_handler(OrderJuiceHandler())

これで以下の会話ができる

例1

  • (呼び出し名)を開いて
  • バナナジュースをのみたい
  • 応答「バナナジュースの注文を受け付けました」

例2

  • (呼び出し名)を開いて
  • ジュースをのみたい
  • 応答「ジュースの注文を受け付けました」
alexa.txt · 最終更新: 2020/08/30 07:29 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0