時間があくとやり方を忘れるのでメモ
ゴール
たようなら
というと起動し、どんばんは
というとよなかんばって
、やっぱり
というと猫が好き
と返すスキルを作る
Alexaスキルを作成
- Amazon Alexa Voice AI | Alexa Developer Official Siteにアクセス
Alexaスキル開発
をクリック。ページ遷移後コンソール
をクリックalexa developer console
が表示されるので、スキルの作成
をクリック新しいスキルを作成
画面になるので、以下のように入力- スキル名
- たようなら
- ここがスキル起動のワードとなります
- たようなら
- プライマリロケール
- 日本語(日本)
- 1.スキルに追加するモデルを選択
- カスタム
- 2.スキルのバックエンドリソースをホスティングする方法を選択
- Alexa-hosted (Python)
- スキル名
スキルを作成
ボタンを押すスキルに追加するテンプレートを選択
でスクラッチで作成
を選んでテンプレートで続ける
ボタンを押す- 少し待つと作成が完了します
Alexaスキルの設定
- 画面左の対話モデルから
インテント
を選択しインテントを追加
ボタンを押す インテントを追加
画面で以下のように入力カスタムインテントを作成
でDonbanwa
と入力してカスタムインテントを作成
ボタンを押しサンプル発話
でどんばんわ
,どんばんは
を追加(プラス記号をクリック)カスタムインテントを作成
でYappari
と入力してカスタムインテントを作成
ボタンを押しサンプル発話
でやっぱり
を追加
- 画面左から
エンドポイント
を選択しAWS LambdaのARN
のスキルID
をコピーしておきます - 画面左の対話モデルから
インテント
を選択しモデルを保存
ボタンを押して、モデルをビルド
ボタンを押します
Serverless FrameworkでLambdaの作成
-
任意のディレクトリで
tayounara
ディレクトリを作成してディレクトリに移動 -
serverless create --template aws-python3
-
serverless.yml
を以下のようにするservice: tayounara provider: name: aws runtime: python3.9 region: ap-northeast-1 functions: tayounara: handler: handler.handler role: TayounaraRole events: - alexaSkill: 【メモしておいたAlexaスキルのID】 resources: Resources: TayounaraRole: Type: AWS::IAM::Role Properties: RoleName: TayounaraRole AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: sts:AssumeRole Policies: - PolicyName: LambdaBasicPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: - 'Fn::Join': - ':' - - 'arn:aws:logs' - Ref: 'AWS::Region' - Ref: 'AWS::AccountId' - 'log-group:/aws/lambda/*:*:*' plugins: - serverless-python-requirements
-
handler.py
を以下のようにする# -*- coding: utf-8 -*- import logging import boto3 from ask_sdk_core.skill_builder import SkillBuilder from ask_sdk_core.utils import is_request_type, is_intent_name from ask_sdk_core.handler_input import HandlerInput from ask_sdk_model.ui import SimpleCard from ask_sdk_model import Response sb = SkillBuilder() logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) # 起動直後 @sb.request_handler(can_handle_func=is_request_type("LaunchRequest")) def launch_request_handler(handler_input): speech_text = "どんばんわ、か、やっぱり、といってください" return handler_input.response_builder.speak(speech_text).set_card( SimpleCard("たようなら", speech_text)).set_should_end_session( False).response @sb.request_handler(can_handle_func=is_intent_name("Donbanwa")) def donbanwa_intent_handler(handler_input): speech_text = f'よなかんばって' return handler_input.response_builder.speak(speech_text).set_card( SimpleCard("たようなら", speech_text)).set_should_end_session( True).response @sb.request_handler(can_handle_func=is_intent_name("Yappari")) def donbanwa_intent_handler(handler_input): speech_text = f'猫が好き' return handler_input.response_builder.speak(speech_text).set_card( SimpleCard("たようなら", speech_text)).set_should_end_session( True).response @sb.request_handler(can_handle_func=is_intent_name("AMAZON.HelpIntent")) def help_intent_handler(handler_input): speech_text = "どんばんわ、か、やっぱり、というと返答します" return handler_input.response_builder.speak(speech_text).ask( speech_text).set_card(SimpleCard( "たようなら", speech_text)).response @sb.request_handler( can_handle_func=lambda handler_input: is_intent_name("AMAZON.CancelIntent")(handler_input) or is_intent_name("AMAZON.StopIntent")(handler_input)) def cancel_and_stop_intent_handler(handler_input): speech_text = "さようなら" return handler_input.response_builder.speak(speech_text).set_card( SimpleCard("たようなら", speech_text)).response @sb.request_handler(can_handle_func=is_intent_name("AMAZON.FallbackIntent")) def fallback_handler(handler_input): speech = ( "The たようなら skill can't help you with that. " "You can say hello!!") reprompt = "You can say hello!!" handler_input.response_builder.speak(speech).ask(reprompt) return handler_input.response_builder.response @sb.request_handler(can_handle_func=is_request_type("SessionEndedRequest")) def session_ended_request_handler(handler_input): speech_text = "終了" return handler_input.response_builder.response @sb.exception_handler(can_handle_func=lambda i, e: True) def all_exception_handler(handler_input, exception): logger.error(exception, exc_info=True) speech = "問題が発生しました。時間をおいて、再度実行してみてください" handler_input.response_builder.speak(speech).ask(speech) return handler_input.response_builder.response handler = sb.lambda_handler()
-
requirements.txt
を作成し内容を以下のようにするask-sdk-core==1.17.1 ask-sdk-model==1.34.2 ask-sdk-runtime==1.17.1 boto3==1.24.26 botocore==1.27.26 certifi==2022.6.15 cffi==1.15.0 chardet==4.0.0 charset-normalizer==2.1.0 cryptography==36.0.1 idna==3.3 jmespath==1.0.1 pdfminer.six==20211012 pycparser==2.21 python-dateutil==2.8.2 requests==2.28.1 s3transfer==0.6.0 six==1.16.0 urllib3==1.26.10
-
serverless plugin install -n serverless-python-requirements
-
sls deploy
-
Mangagement Consoleにログインし、Lambdaの画面に移動
-
関数のARN
をひかえる -
alexa developer console
でエンドポイント
を選択 -
AWS LambdaのARN
のデフォルトの地域
に、ひかえたLambda関数のARNを入力する -
エンドポイントの保存
ボタンを押す
Alexaスキルのテスト
alexa developer console
で画面上部のテスト
を選択- 画面上部のプルダウンを
開発中
に変更 - Alexaシミュレータで
たようなら
、どんばんは
とやっぱり
を入力して応答を確認
Alexaスキルを実機で動作させる
- 一般リリースはできないので、βテストという機能を使用して自分のEchoデバイスに紐づくAmazonアカウントに対してAlexaスキル使用を許可します
- Alexa Icon Builderにアクセス
- 適当なアイコンを選んで
ダウンロード
ボタンを押す - ダウンロードされたzipファイルを展開
alexa developer console
の上部の公開
をクリック- 以下のように入力する(必須な最低限の入力しかしません)
- 公開名
- たようなら
- 説明
- たようならスキルです
- 詳細な説明
- たようならスキルです
- 最新情報
- 入力不要
- サンプルフレーズ
- どんばんわ
- 小さなスキルアイコン
- 先程ダウンロードしたファイルをドラッグアンドドロップ
- 大さなスキルアイコン
- 先程ダウンロードしたファイルをドラッグアンドドロップ
- カテゴリー
- Social - Communication
- 適当です
- Social - Communication
- 公開名
保存して続行
をクリックプライバシーとコンプライアンス
が表示されるので以下のように入力- このスキルを使って何かを購入をしたり、実際にお金を支払うことができますか?
- いいえ
- このスキルはAlexaショッピングアクションを使用しますか?
- いいえ
- このAlexaスキルはユーザーの個人情報を収集しますか?
- いいえ
- このスキルは13歳未満のお子様を対象としていますか?
- いいえ
- このスキルで広告は表示されますか?
- いいえ
- 輸出コンプライアンス
- ☑
- このスキルを使って何かを購入をしたり、実際にお金を支払うことができますか?
保存して続行
をクリック公開範囲
が表示されるので以下のように入力- このスキルにアクセスできるユーザー
- 公開
- ベータテスト
- ベータテスト管理者用Eメールアドレス
- 自分のEchoデバイスに紐づくAmazonアカウントのメールアドレス
- スキルのベータテスト(計0人 、アクティブ0人)のアクセスを管理
- 自分のEchoデバイスに紐づくAmazonアカウントのメールアドレス
- ベータテスト管理者用Eメールアドレス
- このスキルにアクセスできるユーザー
ベータテストの有効化
をクリック- メールが飛んでおり、Enableリンクがあるが、パソコンからは有効化できないので、スマホからEnableのリンクをクリック
- Alexaアプリが開くので、スキル一覧から対象アプリを選んで
有効にする
をクリック - echoデバイスから
たようなら
でスキルが使えることを確認