１時間で出来る！？Alexaスキル開発入門

## はじめに
- 素人がAlexaスキルを作ってみて、割とさっくりスキルができたので、その感動を共有したい！と思い立ち、ここに記します
- Alexaスキル開発については、公式のガイド(ブログ)が充実しており、それをなぞるだけで、実際にスキルが動くところまで確認ができます
    - https://developer.amazon.com/ja-JP/alexa/alexa-skills-kit/get-deeper/tutorials-code-samples/build-a-skill
- 本記事では、ガイドをなぞりつつ、補足情報を残していきます

##  Amazon開発者アカウントの登録
- https://developer.amazon.com/ja/blogs/alexa/post/31c9fd71-f34f-49fc-901f-d74f4f20e28d/alexatraining-firstskill
    - 「準備. Amazon 開発者アカウントの作成」まで
        - AWSアカウントとは別のアカウントとなるため、注意！

## 新規スキルの作成
- https://developer.amazon.com/ja/blogs/alexa/post/31c9fd71-f34f-49fc-901f-d74f4f20e28d/alexatraining-firstskill
    - 「ステップ 1. 新規スキルの作成」～「ステップ 4. 応答メッセージを日本語にする」まで
        - 「新しいスキルを作成」「2.スキルのバックエンドリソースをホスティングする方法を選択」
            - Alexa-hosted (Node.js)
                - ★今回はこちらを選択する！
                    - リージョンは「米国西部（オレゴン）us-west-2」がお勧めらしいです
                        - https://developer.amazon.com/ja-JP/docs/alexa/hosted-skills/build-a-skill-end-to-end-using-an-alexa-hosted-skill.html#regions
            - Alexa-hosted (Python)
                - Amazon開発者アカウントに紐づくAWSアカウントにLambdaを作成
            - ユーザー定義のプロビジョニング
                - 指定したAWSアカウントにLambdaを作成し、紐付け
                    - 既存のAWSアカウントに紐づける場合は、こちらを選択する必要あり

### ビルド

#### スキルの呼び出し名
- Alexaスキル呼び出し時の名称をここに定義します

#### インテント
- スキル呼び出し後に、要請者の音声入力時に動作する機能
    - 「サンプル発話」に定義した文言を発話した際に、呼び出される
        - インテント名とLambda内の"～IntentHandler"メソッドが紐づいている
    - 「インテントスロット」に会話内で取得したい変数を定義する
            - 「スロットタイプ」に定義される値の型を定義する
                - https://developer.amazon.com/ja-JP/docs/alexa/custom-skills/create-intents-utterances-and-slots.html
    - 「JSONエディター」を選択すれば、JSON形式でインテントの定義を編集可能
- 変更後に「モデルを保存」「モデルをビルド」を忘れずに！

#### スロットタイプ
- ユーザーが定義する値のパターン
- インテントスロット用の定義

### コードエディタ

#### index.js
- 基本処理はここに記載される
- LaunchRequestHandler
    - スキル呼び出し時の処理はこちら
- returnにrepromptがある場合、対話継続
- returnにrepromptがない場合、対話終了
    - https://developer.amazon.com/ja/blogs/alexa/post/319a5083-7858-4cb2-987e-5bcd7f833533/alexatraining-dialog
- ↑の「CloudWatchLogs」から、当該Lambda実行時のログを確認可能
- 変更後に「保存」「デプロイ」を忘れずに！

### テスト

#### Alexaシミュレータ
- 左側上部の入力フィールドに入力してEnter、または入力フィールド横のマイクボタン長押しで発声することで会話が可能
- 右側上部で会話時の入力/出力項目を確認可能
- 右側下部で画面ありの場合の表示が確認可能

#### 実機確認
- 紐づくAmazonアカウントでAlexaアプリにログインすれば、開発中のスキルを実機で動作確認することも可能！
    - Alexaアプリに表示されない場合は紐付いているアドレスが違う可能性あり
        - https://qiita.com/sparkgene/items/c15e81cd6a5a40f7189d

## 所感
### 良いと思った点
- 気軽にAlexaスキルの開発が出来る
    - 利用料金は基本的に無料
    - Alexa-hostedスキルであれば、AWSアカウントの用意も不要
        - 既存のAWSアカウントとの紐付けも容易
    - Alexaスキルシミュレータが提供されていて、手軽に動作確認が出来る
    - 実機の確認も割とすぐ出来る

### 苦労した点
- 凝った会話をさせようとすると難易度が上がる
    - 分岐が増えるにしたがって複雑度が増す
        - 開発をする前に、事前にユーザーとの会話のストーリーを考えておくのがベター
    - 回答が同一（はい、いいえ）のものが複数あった場合などの取り扱いが面倒だった
        - 狙ったインテントが呼ばれず、困ることが多々あった
            - というか結局どうするのが良かったかが未だ分からず

### イマイチだと思った点
- スキル内課金の手数料が高い
    - Alexaスキル内で商品を購入するスキームは以下の２つ
        - スキル内課金（ISP）
        - Alexaスキル向けAmazon Pay
    - 手数料について
        - スキル内課金（ISP）
            - *標準価格の30%*
        - Alexaスキル向けAmazon Pay
            - *(1) Amazon出品の手数料＋(2) AmazonPayの手数料*
                - (1) Amazon出品の手数料：月額登録料4,900円＋注文成約時の販売手数料（8～45%）※10%前後
                    - Amazon MWSの利用（Alexaスキルとの連携に使用）には、大口出品である必要がある
                        - https://docs.developer.amazonservices.com/ja_JP/dev_guide/DG_Registering.html
                - (2) AmazonPayの手数料：3.9%～4.5%
                    - https://pay.amazon.co.jp/help/201212280
        - 他の決済方法(クレカ、電子マネー、QR決済など)の手数料が2～10%程度だというのを踏まえると、いずれも高い水準
            - 2022年度第2四半期から、20%に引き下げになるとの情報あるので、今後に期待！（ただし、収益が100万ドル未満のAlexa Skill開発者の収益が対象）
                - https://developer.amazon.com/en-US/blogs/alexa/alexa-skills-kit/2021/12/announcing-updated-benefits-to-help-developers-make-more-money-with-alexa