Alexa Skillsを公開する流れ


[デベロッパーコンソールでテスト](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/testing-an-alexa-skill)が出来たり、[https://echosim.io/](https://echosim.io/)でブラウザ上でSkillを実行できたりと、Skillの開発環境が色々と揃ってきました。

そこで、実際に作ったSkillが公開されるまでの流れをまとめてみました。

## Skillの登録
以前に書いた[Amazon Alexa Skills Kitを調べてみる](http://qiita.com/sparkgene/items/c77ff3f674dea36c3dc5)のように、Amazon.comのアカウントが必要です。そのアカウントを利用して、[developer portal](https://developer.amazon.com/home.html)にログインして登録します。

メニューの`Alexa`を選ぶと`Alexa Skills Kit`と`Alexa Voice Service`が選べるので、`Alexa Skills Kit`を選びます。
![スクリーンショット 2016-06-01 22.16.24.png](https://qiita-image-store.s3.amazonaws.com/0/36184/9cc73600-1fa4-3537-1a03-6d6081606ebd.png "スクリーンショット 2016-06-01 22.16.24.png")

すると自分が作成したSkillの一覧画面に移動します。
![スクリーンショット 2016-06-01 22.19.26.png](https://qiita-image-store.s3.amazonaws.com/0/36184/5a834e71-3f0f-8fe4-eaaf-1cdc5108ce4e.png "スクリーンショット 2016-06-01 22.19.26.png")
右上の`Add a New Skill`をクリックします。
### 基本情報の登録
![スクリーンショット 2016-06-01 22.21.32.png](https://qiita-image-store.s3.amazonaws.com/0/36184/f4b2f412-0793-d15e-b50c-c4b62504a328.png "スクリーンショット 2016-06-01 22.21.32.png")
今回は、通常のSkillを作成するので`Custom Interaction Model`を選びます。`Name`にはSkill名を入力します。ここに入力したSkill名がAlexa AppやEchoのskill一覧に表示されます。`Invocation Name`には、Skillを実行するときのワードを入力します。今回は月の月齢を尋ねるSkillを作ってみたので、`Moon Age`としました。Alexaに実行させる場合は`Alexa, ask Moon Age`のように話しかけることで、Skillが呼び出され、今日の日付の月齢を答えてくれます。
`Invocation Name`に登録できる単語には使える文字や数などの制約があり、当然ながら`Echo`、`Alexa`、`Amazon`と言った単語も使えません。
注意）以降の画像でアイコンが表示されていますが、全部登録した後に撮ったスクショなのでそうなっています。実際はアイコン画像を登録するまでは何も表示されていません。

### Intent Schema
![スクリーンショット 2016-05-29 21.45.24.png](https://qiita-image-store.s3.amazonaws.com/0/36184/16dcecd6-4fde-dd9c-9cb6-ee1cf8b558d6.png "スクリーンショット 2016-05-29 21.45.24.png")
ここでは、`Alexa, ask Moon Age`と問いかけた時に呼び出されるIntentの定義を行います。Moon Ageでは追加のキーワードを指定しないので、slotと呼ばれるキーワードの定義はしません。
もしMoon Ageが今日のではなく特定の日の月齢を返すSkillとして作る場合は、Intent Schemaは以下の様な形になります。

```
{
  "intents": [
    {
      "intent": "AskMoonAge",
      "slots": [
        {
          "name": "Date",
          "type": "AMAZON.DATE"
        }
      ]
    }
  ]
}
```

### Sample Utterances
![スクリーンショット 2016-05-29 21.45.31.png](https://qiita-image-store.s3.amazonaws.com/0/36184/1d1e4f21-6caa-45dc-5bb7-2c3681648161.png "スクリーンショット 2016-05-29 21.45.31.png")
ここでは、Intentと実際に発話をひも付けます。Moon Ageは`Alexa, ask Moon Age`と1種類だけですので、`ask moon age`を先ほど登録したIntentの`AskMoonAge`とひも付けます。
特定の日の月齢を調べられるように作った場合は、以下のようにそのパターンも書いてあげます。

```
AskMoonAge ask moon age
AskMoonAge ask moon age for {Date}
```

### Endpoint
![スクリーンショット 2016-05-29 21.45.38.png](https://qiita-image-store.s3.amazonaws.com/0/36184/cf561e4f-446e-a69f-3626-026b083f8f8d.png "スクリーンショット 2016-05-29 21.45.38.png")
LambdaでSkillを作ったので、ここではLambdaのエンドポイントを入力します。
アカウントの連携もしないので[Account Linking](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/linking-an-alexa-user-with-a-user-in-your-system)は`No`を指定。

### Test
![スクリーンショット 2016-05-29 21.45.45.png](https://qiita-image-store.s3.amazonaws.com/0/36184/a1b19658-07c0-c661-bb2f-613cabe4669d.png "スクリーンショット 2016-05-29 21.45.45.png")
ここまで情報を埋めると、実際にSkillのテストが行えます。
![スクリーンショット 2016-05-29 21.46.04.png](https://qiita-image-store.s3.amazonaws.com/0/36184/6d3ddc6c-9700-daa6-f6aa-adb3d1bfed5b.png "スクリーンショット 2016-05-29 21.46.04.png")
`Enter Utterance`の所に、Alexaに問いかける文章を入力して`Ask Moon Age`ボタンをクリックすると、Lambdaに送信されるリクエストと、Lambdaが返してきたレスポンスの内容を確認することが出来ます。

### Publishing Information
![スクリーンショット 2016-05-29 21.46.12.png](https://qiita-image-store.s3.amazonaws.com/0/36184/f028b960-2b94-230f-88da-7bab3c3994d3.png "スクリーンショット 2016-05-29 21.46.12.png")
公開するための情報を入力します。
`Example Phrases`には、Alexaにどのように話しかけることで実行できるかのサンプルを書きます。

![スクリーンショット 2016-05-29 21.46.21.png](https://qiita-image-store.s3.amazonaws.com/0/36184/c1bd94e9-2398-d5f6-bb7f-a4b43683615b.png "スクリーンショット 2016-05-29 21.46.21.png")
カテゴリー、Skillの検索キーワード、アイコンを登録します。
`Testing Instructions`には作成したSkillをレビューチームがどうテストすればいいかを書きます。

### Privacy & Compliance
![スクリーンショット 2016-05-29 21.46.30.png](https://qiita-image-store.s3.amazonaws.com/0/36184/b3f40b7e-7464-726c-94f4-6cf38b7180f1.png "スクリーンショット 2016-05-29 21.46.30.png")
Skillを利用するのにお金が必要か？個人情報を収集するか？と言った質問に答えます。
例えば、Alexa経由でピザを注文できるようなSkillを作ったならば、届け先住所などの情報も収集することになるので、プライバシーポリシーや利用規約のURLも指定する必要があります。
Moon Ageは非常に単純なSkillなので、URLは未入力でも大丈夫でした。（今後もそうとは限りません）
Export Complianceは、EAR (米国輸出規則) に準拠しているかを聞かれていますが、SkillはSSLに対応したエンドポイントじゃないと作成できないので、必ずチェックをつけることになります。
チェックつけた後に`Save`をクリックして保存すると、`Submit for Certification`がクリックできるようになります。

### 確認ダイアログ
![スクリーンショット 2016-05-29 21.46.38.png](https://qiita-image-store.s3.amazonaws.com/0/36184/8e65a49b-8957-4ec5-1b6a-3ae02a539d36.png "スクリーンショット 2016-05-29 21.46.38.png")
`Submit for Certification`をクリックするとダイアログが表示されるので、問題なければYesをクリックします。
![スクリーンショット 2016-05-29 21.46.51.png](https://qiita-image-store.s3.amazonaws.com/0/36184/5b8bcd33-9efd-09e4-e1a8-ff46bbc74e59.png "スクリーンショット 2016-05-29 21.46.51.png")
これで、審査が行われます。
審査中は設定を変更することが出来ないので、変更したい場合は`withdraw from Certification`をクリックして申請を取り下げます。
![スクリーンショット 2016-05-29 21.47.07.png](https://qiita-image-store.s3.amazonaws.com/0/36184/af971ad4-58b2-32b8-2342-8643aa3d0883.png "スクリーンショット 2016-05-29 21.47.07.png")
一覧に戻ると、審査中ステータスになってます。

### 審査終了
審査が終わるとその旨を伝えるメールが届きます。
そして、Skillの一覧には公開されているSkillが増えています。
![スクリーンショット 2016-05-31 22.30.16.png](https://qiita-image-store.s3.amazonaws.com/0/36184/0fcd26a6-d9ea-5ce1-a673-63fa04e1309b.png "スクリーンショット 2016-05-31 22.30.16.png")

実際に試していないけど、Skillの設定を変えたら再度審査になるのかな？

### メトリックス
開発版も公開されている物も呼びだされた回数をグラフで見ることが出来ます。
![スクリーンショット 2016-06-01 23.41.28.png](https://qiita-image-store.s3.amazonaws.com/0/36184/205a0c26-57b1-3638-b469-00b6e604dd41.png "スクリーンショット 2016-06-01 23.41.28.png")

## あとがき
すごく簡単なSkillを作って実際に公開するまでの手順を書きましたが、結構簡単ですね。初期の頃と比べるとテストも簡単にできるし。
Lambda使えばサーバを用意する必要もないですし、負荷もほとんど気にする必要が無いので、何かいいアイディアがあれば作ってみるのもいいと思います。