alexa skills kitを使って自作のskillを作る

56
Alexa Skills Kit ををををををを Skill ををを JAWS-UG IoT をををを IoT ををを 2016-09

Upload: jun-ichikawa

Post on 13-Apr-2017

1.455 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Alexa Skills Kitを使って自作のSkillを作る

Alexa Skills Kitを使って自作のSkill を作る

JAWS-UG IoT 専門支部 IoT サロン 2016-09

Page 2: Alexa Skills Kitを使って自作のSkillを作る

@sparkgene市川 純

好きなサービス:Route 53 、 Lambda 、 AWS IoT

Page 3: Alexa Skills Kitを使って自作のSkillを作る

Alexa Skills Kit は API 、ツール、ドキュメント、サンプルコードを含む Skill の開発を簡単に、速くできるコレクションのことです。

Page 4: Alexa Skills Kitを使って自作のSkillを作る

Skill の種類

▸ Custom Skills

▸ Smart Home Skills

Page 5: Alexa Skills Kitを使って自作のSkillを作る

今回は Smart Home Skillsの話ではありません。

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/overviews/understanding-the-smart-home-skill-api

Understanding the Smart Home Skill API

Page 6: Alexa Skills Kitを使って自作のSkillを作る

Demo 動画https://youtu.be/p5X-GjcJdiU

Page 7: Alexa Skills Kitを使って自作のSkillを作る

全体の構成ココ

https://www.hackster.io/sparkgene/alexa-makes-home-smarter-7e1981

Page 8: Alexa Skills Kitを使って自作のSkillを作る

照明を操作する Custom Skills を作る

この Skill は以下の機能を持っています

・照明の On / Off

・ファンを On / Off

・ファンの速度を調整

Page 9: Alexa Skills Kitを使って自作のSkillを作る

開発の事前準備

Page 10: Alexa Skills Kitを使って自作のSkillを作る

Skill の開発には以下のアカウントが必要

▸ Amazon.com のアカウント

https://www.amazon.com/

▸ Amazon のデベロッパーアカウント

https://developer.amazon.com/

Page 11: Alexa Skills Kitを使って自作のSkillを作る

Skill の開発に必要なステップ

Page 12: Alexa Skills Kitを使って自作のSkillを作る

Skill の開発に必要なステップ

音声 UI の設計

Skill の開発

テスト

公開

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit#Ready%20to%20start%3F

Step by step checklist

Page 13: Alexa Skills Kitを使って自作のSkillを作る

音声 UI の設計

Page 14: Alexa Skills Kitを使って自作のSkillを作る

音声 UI を設計する上での注意点

▸ ユーザーが応答しなければならないことを明示する▸ ユーザーは何をすべきか知っている前提にはしない▸ 選べるオプションを明確にする ▸ 会話は常に簡潔にする▸ 一度に問い合わせるのは1つに留める

などなど

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-voice-design-best-practices

Alexa Skills Kit voice design best practices

Page 15: Alexa Skills Kitを使って自作のSkillを作る

音声では選択肢が多いと人は忘れる

“ 北海道、青森、岩手、宮城、秋田、山形・・・の中から選んでください”

“ お住まいの都道府県を教えて下さい”

Page 16: Alexa Skills Kitを使って自作のSkillを作る

答えてもらうことを明確に伝える必要がある

“ サイドメニューは、ポテトとサラダがあります”

“ サイドメニューは、ポテトかサラダのどちらかをお選びください”

Page 17: Alexa Skills Kitを使って自作のSkillを作る

処理中なのかわかりづらい

Web では読込中みたいなアニメーションをすることで、処理中であることが認識でいるが、音声だと処理中なのか、聞き取れなかったのかはわかりづらい。

なるべく早くレスポンスが返せるように心がける

Page 18: Alexa Skills Kitを使って自作のSkillを作る

“Web やアプリの UI と音声 UI は違うので、 best practice を参考に音声に合った設計を

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-voice-design-best-practices

Alexa Skills Kit voice design best practices

Page 19: Alexa Skills Kitを使って自作のSkillを作る

音声 UI の設計

▸ 音声 I/F の定義

▸ 発話 (Utterances) のサンプル定義

Page 20: Alexa Skills Kitを使って自作のSkillを作る

Alexa は発話からどのように Skill を呼び出すのか

例えば

Ask Daily Horoscopes to give me the horoscope for Taurus

<launch phrases> <invocation name> <connecting word> <some action>

Page 21: Alexa Skills Kitを使って自作のSkillを作る

launch phrases

Skillを起動するためのキーワード・ launch 、 ask 、 tell 、 load 、 begin などがある

・使わなくても OK

Page 22: Alexa Skills Kitを使って自作のSkillを作る

invocation name

Skillを特定するためのキーワード先ほどのデモでは “ Pi Home”

以下のものは禁止されている・ Alexa, Amazon, Echo と言った予約されているキーワード・人権を侵害するようなもの・人名、地名単体のものなどなど

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/choosing-the-invocation-name-for-an-alexa-skill

Choosing the Invocation Name for a Custom Skill

Page 23: Alexa Skills Kitを使って自作のSkillを作る

connection word

invocation nameと action の区切りに使われるワードlaunch phrases によって、使えるワードが変わってくる

Ask <invocation name> <connecting word> <some action>→ to, about, for, if, whether

Tell <invocation name> <connecting word> <some action>→ to, that

などなどhttps://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/supported-phrases-to-begin-a-conversation

Understanding How Users Invoke Custom Skills

Page 24: Alexa Skills Kitを使って自作のSkillを作る

some action

Skill に指示する何らかのワード

詳しくはこの後

Page 25: Alexa Skills Kitを使って自作のSkillを作る

Intent schema の設計

Intent とは?

発話によって Alexa は Skill を実行するが、 Intent は文脈によって実行される Skill 内の機能のこと。

Page 26: Alexa Skills Kitを使って自作のSkillを作る

Intent schema の設計

デモでは以下の操作を行いました

・照明の On / Off

実際は以下の機能も持っています

・ファンを On / Off・照明の半分を点灯・ファンの速度を変える・ファンの回転方向を変える

Page 27: Alexa Skills Kitを使って自作のSkillを作る

Intent schema{ "intents": [ { "intent": "TurnOnLight" }, { "intent": "TurnOffLight" }, { "intent": "ChangeLightMode" }, { "intent": "TurnOnFan" }, { "intent": "TurnOffFan" }, { "intent": "SpeedUpFan" },

{ "intent": "SlowDownFan" }, { "intent": "ReverseFan" }, { "intent": "ChangeFanSpeed", "slots": [ { "name": "action", "type": "LIST_OF_FAN_ACTION" } ] }, { "intent": "AMAZON.HelpIntent" } ]}

照明

ファン

ファン

ヘルプ

Page 28: Alexa Skills Kitを使って自作のSkillを作る

Slot の設計

Intentに対して変数を定義することができる{ "intent": "ChangeFanSpeed", "slots": [ { "name": "action", "type": "LIST_OF_FAN_ACTION" } ]}

ファンの操作を行うので、以下の様なワードを想定されるので、 Slot として定義するslow 、 fast 、 low 、 medium 、 high 、 back 、 reverse

← 変数名

Page 29: Alexa Skills Kitを使って自作のSkillを作る

デフォルトの Slot

デフォルトの Slot がいくつか用意されてます

・ AMAZON.DATE → “ today” 、“ tomorrow” 、“ july” などのワードを実際の日付形式(“ 2015-07-00T9” )に  変換

・ AMAZON.DURATION → “ five minutes” を“ PT5M” と数値として扱いやすく変換

・ AMAZON.US_CITY → アメリカの有名な 10 万都市分のワードが登録されている

・ AMAZON.US_FIRST_NAME → 一般的な名前を数千種類登録されている

などなど

Page 30: Alexa Skills Kitを使って自作のSkillを作る

音声 UI の設計

▸ 音声 I/F の定義

▸ 発話 (Utterances) のサンプル定義

Page 31: Alexa Skills Kitを使って自作のSkillを作る

発話 (Utterances) のサンプル定義

Intent と Utterances のひも付けを定義します

TurnOnLight lights onTurnOffLight lights offChangeLightMode change lights modeTurnOnFan fans startTurnOffFan fans stopChangeFanSpeed change fans speed {action}SpeedUpFan speed up fansSpeedUpFan fans speed upSpeedUpFan fans fasterSlowDownFan slow down fansSlowDownFan fans slow downSlowDownFan fans slowerReverseFan fans reverseAMAZON.HelpIntent help me operationAMAZON.HelpIntent how do i use

Page 32: Alexa Skills Kitを使って自作のSkillを作る

Utterancesは想定されるパターンをできるだけ書くことで様々なユーザーのしゃべり方に対応することが出来ます。

Capital One が作っている銀行の Skill では数字だけで700 パターン以上定義登録しているそうです。

https://www.youtube.com/watch?v=1bE3WeVlhGM

Page 33: Alexa Skills Kitを使って自作のSkillを作る

実際の発話<wake word> <launch phrases> <invocation name> <connecting word> <some word>

  Alexa, tell pi home to lights on → TurnOnLight

  Alexa, tell pi home to lights off → TurnOffLight

  Alexa, tell pi home to change fans speed fast → ChangeFanSpeed action=fast<connection word> は省略できる

  Alexa, tell pi home lights on

Page 34: Alexa Skills Kitを使って自作のSkillを作る

Intent schema と Utterances の登録画面

Page 35: Alexa Skills Kitを使って自作のSkillを作る

Skill の開発

Page 36: Alexa Skills Kitを使って自作のSkillを作る

Skill の開発

ASK では 2 種類の方法で作ることが可能です

▸ AWS Lambda Function を使う

▸ 自分でホストする

Page 37: Alexa Skills Kitを使って自作のSkillを作る

AWS Lambda Function を使うメリット▸ サーバを立てる必要がない

▸ SSL証明書を用意する必要が無い

▸ Alexa からのリクエストであることを検証する必要が無い

▸ 呼び出しされた時だけ課金される

▸ Alexa から実行されるとき TLS が利用されるのでセキュア

▸ 多くのデベロッパーは無料枠の範囲で済むはず

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/developing-an-alexa-skill-as-a-lambda-function#about-lambda-functions-and-custom-skills

Creating an AWS Lambda Function for a Custom Skill

Page 38: Alexa Skills Kitを使って自作のSkillを作る

自分でホストするデメリット

▸ ネット接続されている必要がある

▸ Alexa Skills Kit の I/F に準拠している必要がある

▸ SSL/TSL に対応している必要がある

▸ Alexa からのリクエストであることを検証する必要がある

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/developing-an-alexa-skill-as-a-web-service

Hosting a Custom Skill as a Web Service

Page 39: Alexa Skills Kitを使って自作のSkillを作る

“完全に Lambda推し

Page 40: Alexa Skills Kitを使って自作のSkillを作る

自分でホストする場合に使える便利モジュール

alexa-apphttps://www.npmjs.com/package/alexa-app

nodejs を使って Skill をホストできる

Page 41: Alexa Skills Kitを使って自作のSkillを作る

Lambda の blueprint が用意されている

us-east-1 を選んでないと出てこない

Page 42: Alexa Skills Kitを使って自作のSkillを作る

Skill に送られてくるリクエスト

▸ LaunchRequest ・ some command が指定されずに Skill が呼び出された時

▸ IntentRequest ・ Utterances のマッピングに紐付いた Intent が呼ばれた時

▸ SessionEndedRequest ・ユーザーが“ exit” と言ったり、一定時間応答がない場合、  エラーが有った時など

Page 43: Alexa Skills Kitを使って自作のSkillを作る

AlexaService Skill

LaunchRequestOpen Pizza

text resultWhat kind pizza

Salami Pizza IntentRequest

text resultOther pizza?

Request の流れ

cancel SessionEndedRequest

Page 44: Alexa Skills Kitを使って自作のSkillを作る

“Skill はリクエストの種類と呼びだされた Intent に対して処理を行うように実装する

Page 45: Alexa Skills Kitを使って自作のSkillを作る

Alexa Service に返す情報( JSON)▸ sessionAttributes

 ・セッションに格納する情報▸ outputSpeech

 ・喋らせる内容( PlainText と SSML )▸ card

 ・ Alexa App に表示する情報▸ reprompt ・セッションを利用するとき、ユーザーが反応しない時に  喋らせる内容▸ shouldEndSession ・セッションを維持するか

Page 46: Alexa Skills Kitを使って自作のSkillを作る

SSML(Speech Synthesis Markup Language )▸ Alexa の発話をいい感じにしたい時に使う

 → 間を開けたい、数値、電話番号の発音とか

▸ MP3 形式のオーディオを再生するとき → 48kbps 、 90秒まで

Page 47: Alexa Skills Kitを使って自作のSkillを作る

テスト

Page 48: Alexa Skills Kitを使って自作のSkillを作る

テスト

Skill のテストには以下の方法がある

▸ Lambda を単体でテスト

▸ Skill の管理画面からテスト

▸ 実機でテスト

Page 49: Alexa Skills Kitを使って自作のSkillを作る

Lambda のテスト

Page 50: Alexa Skills Kitを使って自作のSkillを作る

Skill のテスト画面

Page 51: Alexa Skills Kitを使って自作のSkillを作る

Skill の公開

Page 52: Alexa Skills Kitを使って自作のSkillを作る

Skill の公開で必要なこと

▸ Policy の確認

▸ セキュリティーの確認

▸ 動作確認

▸ 音声 UI の使い勝手を確認

Page 53: Alexa Skills Kitを使って自作のSkillを作る

公開設定の画面

Page 54: Alexa Skills Kitを使って自作のSkillを作る

アナリティクスの画面

Page 55: Alexa Skills Kitを使って自作のSkillを作る

実機がなくても開発できる!今は appstore の初期の頃と同じ状況。アイディア次第では人気の Skill を海外の人に使ってもらえる。

Page 56: Alexa Skills Kitを使って自作のSkillを作る

THANKS!Any questions?You can find me at @sparkgene