AmazonLexの基礎

The following topics provide additional information. We recommend that you review them in order and then explore the Getting Started with Amazon Lex exercises.

とのことで、ざっと見てみる

前提知識

AmazonLexの概要(コアコンセプト·用語)を把握してみる - keiwt’s diary

Programming Model

Model Building API Operations

CloudFormation対応されるまでは叩くAPIコマンドをリビジョン管理

Runtime API Operations

PostContent

テキストと音声
  • fomats
Input: LPCM, Opus
Output: MPEG, OGG, PCM

※8kHz(コールセンター) and 16kHz

PostText

テキストのみ

Lambda Functions as Code Hooks

Customize user interaction

例: ユーザーの履歴に応じてピザのトッピングを表示

※ギガ・ミートしか頼まない人にはギガ・ミートを一番上に表示
※過去に注文した数の降順でトッピングを表示
※最近注文したものから表示

Validate the user's input

例: ピザ1000枚注文した場合
例: シーフード食べれない人がシーフードピザを注文した場合

※異常値等の排除

Fulfill the user's intent

例: ピザを注文する

Lambda functions as code hooks

※Intentのフック

Dialog code hook for initialization and validation

AmazonLexがユーザーのインプットを理解して、botから返答  
例: 承知致しました。ピザは3枚ですね。  
PutIntent時にdialogCodeHookを指定

Fulfillment code hook

例: ピザの注文フック  
PutIntent時にfulfillmentActivityを指定

Lambda関数の分け方

1つの関数でdialogとfulfillmentを実行させることは可能  
One Lambda function can do initialization, validation, and fulfillment.  

The event data that the Lambda function receives has a field
  that identifies the caller as either a dialog or fulfillment code hook.  

Elicit

https://ejje.weblio.jp/content/elicit

  • ElicitSlot
例: 必須ではないslot valueを聞くことができる
例: XXXクーポンをご利用なられる場合にはIDを教えてください。
  • ElicitIntent
例: 前のIntentが完了した後に新しいIntentを呼び出せる
例: お飲み物はいかがいたしましょうか?

Service Permissions

Amazon Lex uses AWS Identity and Access Management (IAM) service-linked roles.

service-linked roles

ユーザーに手動で作成させるとハマる人がいるので、AWSが事前に定義してくれているものです

AWSServiceRoleForLexBots




※LexがPollyを呼び出すため
bot作成時に自動作成

AWSServiceRoleForLexChannels




botの連携先にテキストをPOSTするため
botをSlack等に連携させると自動的に作成

Creating Resource-Based Policies for AWS Lambda

Amazon Lexはリソースべーすのポリシーを使ってLambda関数を呼び出します

Resource-Based Polices forAWS Lambda

※Lambdaではなく、Lambda関数毎にアクセス権限を管理できます

Lambda 関数は、AWS Lambda のリソースの 1 つです。

Lambda 関数に添付されたアクセス権限ポリシーは、リソースベースのポリシー (または Lambda の Lambda 関数ポリシー) と呼ばれます。Lambda 関数ポリシーを使用して、Lambda 関数の呼び出し権限を管理できます

Principal: lex.amazonaws.com
SourceArn: ${IntentのArn}

Deleting Service-Linked Roles

依存リソース削除後に削除する

Managing Messages (Prompts and Statements)

Types of Messages

Prompt

ユーザーに返答を求めるもの

Statement

返答を求めないもの

動的な返答

  • SlotName
例: {PizzaTopping}

※ギガ・ミート

  • AttributeName
例: [DeliveryTime]

※14時

  • いつ定義するか
bot作成時

Contexts for Configuring Messages

Bot-level messages

  • clarification prompts
ユーザーのIntentが理解できないときのメッセージ
例: I did'n understand you.

※Intentに紐付いたLambdaがメッセージを返さない時にも使われる

  • hang-up messages
複数回ユーザーからのメッセージが理解できないときのメッセージ
例: Sorry, I'm not able to assist at this time.

※intent, slot, follow-up prompts, intent confirmations含む

Intent-level messages

  • Confirmation prompts and cancel statements
すべてのslot valueが出揃った後 && fulfill intent前  
確認でNoならキャンセルのメッセージ
  • Goodbye message or follow-up prompts
注文完了しました。ピザは{Hour}時にお届けいたします。
他に何かご質問や確認事項等ございますでしょうか。
↓
No
↓
この度はLexピザをご利用いただきましてありがとうございました。

※Fulfillment code hookが成功して、Lambda関数がメッセージを返さなかったときにも使われる

  • Prompts to elicit value slot values
ピザは何枚でしょうか
お届け日時の入力をお願い致します
トッピングを以下から選択してください
サイズを以下から選択してください

bot作成時に指定しても、IntentのLambdaで上書かれる

コンテキスト毎にメッセージを分ける場合

session attributeとslot valueを使って分岐させる

※参照なしのメッセージを1つは用意する
※参照が解決できないとBadRequestException

Supported Message Formats

テキスト
Speech Synthesis Markup Language (SSML)

※Accept HTTP headerをtext/plain; charset=utf-8にするとテキストのみ返す
※音声のみのbotにテキストを投げるとBadRequestExceptionになるので、テキストも用意する
※outputDialogModeがテキストの場合にはLambdaからPlainTextを返す

Response Cards

選択肢を返す

※PostTextのみ(音声は現時点では非対応)
※Intent作成時に設定
※動的にしたい場合にはLambda使う

対象

Conclusion statement
Confirmation prompt
Follow-up prompt
Rejection statement
Slot type utterances

※それぞれ1つのResponse Cardだけ

Defining Static Response Cards

API: PutBot
Console: Intent作成時

Generating Response Cards Dynamically

initialization and validation Lambda関数を使う
dialogActionセクションに指定

Managing Conversation Context


Bot Deployment Options


Built-in Intents and Slot Types


Custom Slot Types


参考

http://docs.aws.amazon.com/ja_jp/lex/latest/dg/how-it-works.html ※一番下のTopics

https://docs.aws.amazon.com/console/iam/service-linked-role

http://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html

http://docs.aws.amazon.com/ja_jp/polly/latest/dg/ssml.html

http://docs.aws.amazon.com/ja_jp/lex/latest/dg/lambda-input-response-format.html

http://docs.aws.amazon.com/ja_jp/lex/latest/dg/howitworks-manage-prompts.html#msg-prompts-resp-card-dynamic

http://docs.aws.amazon.com/ja_jp/lex/latest/dg/howitworks-manage-prompts.html#msg-prompts-resp-card-dynamic