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

Post on 13-Apr-2017

1.448 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

@sparkgene市川 純

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

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

Skill の種類

▸ Custom Skills

▸ Smart Home Skills

今回は 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

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

全体の構成ココ

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

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

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

・照明の On / Off

・ファンを On / Off

・ファンの速度を調整

開発の事前準備

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

▸ Amazon.com のアカウント

https://www.amazon.com/

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

https://developer.amazon.com/

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

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

音声 UI の設計

Skill の開発

テスト

公開

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

Step by step checklist

音声 UI の設計

音声 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

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

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

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

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

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

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

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

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

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

“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

音声 UI の設計

▸ 音声 I/F の定義

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

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

例えば

Ask Daily Horoscopes to give me the horoscope for Taurus

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

launch phrases

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

・使わなくても OK

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

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

some action

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

詳しくはこの後

Intent schema の設計

Intent とは?

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

Intent schema の設計

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

・照明の On / Off

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

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

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" } ]}

照明

ファン

ファン

ヘルプ

Slot の設計

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

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

← 変数名

デフォルトの Slot

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

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

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

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

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

などなど

音声 UI の設計

▸ 音声 I/F の定義

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

発話 (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

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

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

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

実際の発話<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

Intent schema と Utterances の登録画面

Skill の開発

Skill の開発

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

▸ AWS Lambda Function を使う

▸ 自分でホストする

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

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

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

▸ 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

“完全に Lambda推し

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

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

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

Lambda の blueprint が用意されている

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

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

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

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

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

AlexaService Skill

LaunchRequestOpen Pizza

text resultWhat kind pizza

Salami Pizza IntentRequest

text resultOther pizza?

Request の流れ

cancel SessionEndedRequest

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

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

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

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

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

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

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

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

テスト

テスト

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

▸ Lambda を単体でテスト

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

▸ 実機でテスト

Lambda のテスト

Skill のテスト画面

Skill の公開

Skill の公開で必要なこと

▸ Policy の確認

▸ セキュリティーの確認

▸ 動作確認

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

公開設定の画面

アナリティクスの画面

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

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

top related