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