StartBotConversation
StartBotConversation
操作可在最终用户和您的 Amazon Lex v2 机器人之间建立语音对话。用户向机器人提供所需的信息。然后,机器人将信息返回到公共交换电话网 (PSTN) Audio Lambda 函数,然后该函数执行请求的任务。
例如,机器人可以在对话开始时播放欢迎消息(可选),以简要描述 PSTN Audio Lambda 函数可以执行的任务。对话在用户和机器人之间来回进行,直到机器人收集到所需的信息。对话结束后,Amazon Chime SDK 会通过操作成功事件调用您的 PSTN Audio Lambda 函数,该事件包含机器人收集的信息。您的 PSTN Audio Lambda 函数会处理信息并执行请求的任务。
音频服务为您的用户提供逼真的对话互动。例如,用户可以在音频提示结束之前打断机器人并回答问题。此外,用户还可以使用语音和 DTMF 数字的任意组合来提供信息。机器人会等待用户提供输入后再做出响应。您可以配置机器人等待用户完成讲话后多久开始解释任何语音输入。用户还可以指示机器人在通话期间需要时间来检索其他信息(例如信用卡号)时等待。
在机器人对话期间,StartBotConversation
操作使用 Amazon Lex 和 Amazon Polly。适用 Amazon Lex 和 Amazon Polly 的标准费用。有关更多定价信息,请参阅 Amazon Lex 流传输对话定价
注意
您无法对桥接呼叫或已加入 Amazon Chime SDK 会议的呼叫执行此操作。
重要
使用 Amazon Lex 和 Amazon Polly 需遵守 AWS 服务条款
主题
StartBotConversation 语法
以下示例显示典型 StartBotConversation
语法。
{ "SchemaVersion": "1.0", "Actions":[ { "Type": "StartBotConversation", "Parameters": { "CallId": "
string
", "ParticipantTag": "string
", "BotAliasArn": "string
", "LocaleId": "string
", "Configuration": { "SessionState": { "SessionAttributes": { "string": "string
" }, "DialogAction" : { "Type": "string
" } }, "WelcomeMessages": [ { "Content": "string
", "ContentType": "string
" } ] } } } ] }
- CallId
-
描述 — AWS Lambda 函数调用的
CallDetails
中参与者的CallID
StartBotConversation
操作使用此 ID 作为机器人的SessionId
。呼叫中发生的所有机器人对话共享相同的对话会话。您可以使用 Amazon Lex PutSession API 修改用户和机器人之间的会话状态。有关更多信息,请参阅 Amazon Lex 开发人员指南中的使用 Amazon Lex v2 API 管理会话。允许的值 — 有效的调用 ID。
必填 — 否,如
ParticipantTag
已存在。默认值 — 无。
- ParticipantTag
-
描述 —
CallDetails
中一个已连接参与者的ParticipantTag
。允许的值 —
LEG-A
必填 — 否,如
CallId
已存在。默认值 — 被调用的
callLeg
的ParticipantTag
。如果您指定CallDetails
,则忽略该值。 - BotAliasArn
-
描述 — 您的 Lex 机器人的机器人别名 ARN。您必须在与您的 PSTN Audio 应用程序相同的 AWS 区域创建机器人。有效的 Amazon Lex 机器人别名采用以下格式:
arn:aws:lex:
,其中,region
:awsAccountId
:bot-alias/botId
/botAliasId
是您的机器人所在的 AWS 区域。region
是创建您的 Amazon Lex 机器人时使用的 AWS 账户 ID。awsAccountId
botId
值是您在创建机器人时为该机器人指定的标识符。您可以在 Amazon Lex 控制台的机器人详情页面上查看该机器人 ID。botAliasId
是您在创建机器人时为该机器人别名指定的标识符。您可以在 Amazon Lex 控制台的别名页面上查看该机器人别名 ID。允许的值 — 有效的机器人 ARN。
必填 — 是。
默认值 — 无
- LocaleId
-
描述 — 用于机器人的区域设置的标识符。有关区域设置和语言代码的列表,请参阅 Amazon Lex 支持的语言和区域设置。
允许的值 — Amazon Lex 支持的语言和区域设置
必填 — 否。
默认值 —
en_US
- Configuration
-
描述 — 对话配置,包括会话状态和欢迎消息。
Configuration
对象的 JSON 字符串表示形式总大小限制为 10KB。允许的值 —
Configuration
对象。必填 — 否。
默认值 — 无。
- Configuration.SessionState
-
描述 — 用户与 Amazon Lex V2 的会话状态。
允许的值 —
SessionState
对象。必填 — 否。
默认值 — 无。
- Configuration.SessionState.SessionAttributes
-
描述 — 表示会话特定上下文信息的键/值对的映射。该映射包含在 Amazon Lex v2 与客户端应用程序之间传递的应用程序信息。
允许的值 — 字符串到字符串的映射。
必填 — 否。
默认值 — 无。
- Configuration.SessionState.DialogAction.Type
-
描述 — 机器人与用户交互时采取的下一步操作。可能的值:
委托 Amazon Lex v2 决定下一步操作。
ElicitIntent 下一步操作引出用户意图。
允许的值 —
Delegate
|ElicitIntent
。必填 — 否。
默认值 — 无。
- Configuration.WelcomeMessages
-
描述 — 对话开始时要发送给用户的消息列表。如果设置了
welcomeMessage
字段,则必须将DialogAction.Type
值设置为ElicitIntent
。允许的值 — 消息对象
必填 — 否。
默认值 — 无。
- Configuration.WelcomeMessages.Content
-
描述 — 欢迎消息文本。
允许的值 — 字符串
必填 — 否。
默认值 — 无。
- Configuration.WelcomeMessages.ContentType
-
描述 — 表示欢迎消息类型。
允许的值 —
PlainText
|SSML
PlainText — 消息包含纯 UTF-8 文本。
SSML — 消息包含语音输出设置格式的文本。
必填 — 是。
默认值 — 无。
使用 StartBotConversation 操作
以下示例显示典型的 StartBotConversation
操作。
{ "SchemaVersion": "1.0", "Actions":[ { "Type": "StartBotConversation", "Parameters": { "CallId": "
call-id-1
", "BotAliasArn": "arn
:aws:lex
:us-east-1
:123456789012
:bot-alias
/ABCDEFGHIH
/MNOPQRSTUV
", "LocaleId": "en_US
", "Configuration": { "SessionState": { "SessionAttributes": { "mykey1": "myvalue1
" }, "DialogAction" : { "Type": "ElicitIntent
" } }, "WelcomeMessages": [ { "Content": "Welcome. How can I help you?
", "ContentType": "PlainText
" } ] } } } ] }
处理 ACTION_SUCCESSFUL 事件
以下示例显示 StartBotConversation
操作的典型 ACTION_SUCCESSFUL
事件。
{ "SchemaVersion": "1.0", "Sequence": number, "InvocationEventType": "ACTION_SUCCESSFUL", "ActionData": { "CallId": "
string
", "Type": "StartBotConversation", "Parameters": { // parameters provided in the StartBotConversation action. }, "CallDetails": { // Information about the call associated with the AWS Lambda invocation. }, "IntentResult": { "SessionId": "string
", "SessionState": { "SessionAttributes": { "string": "string
" }, "Intent": { "Name": "string
", "Slots": { "string
": { "Value": { "OriginalValue": "string
", "InterpretedValue": "string
", "ResolvedValues": ["string
"] }, "Values": [] } }, "State": "string
", "ConfirmationState": "string
" } }, "Interpretations": [ { "NluConfidence": { "Score":number
}, "Intent": { "Name": "string
", "Slots": { "string
": { "Value": { "OriginalValue": "string
", "InterpretedValue": "string
", "ResolvedValues": ["string
"] }, "Values": [] } }, "State": "string
", "ConfirmationState": "string
" } } ] } } }
- IntentResult
-
用户与机器人之间对话的结果。
- SessionId
-
机器人对话会话的标识符。用户启动与您的机器人的对话时,Amazon Lex 会创建一个会话。会话封装了您的用户和机器人之间交换的信息。
StartBotConversation
操作使用此调用 ID 作为机器人的SessionId
。您可以使用 Lex PutSession API 修改用户和机器人之间的会话状态。有关更多信息,请参阅 Amazon Lex 开发人员指南中的使用 Amazon Lex v2 API 管理会话。 - SessionState
-
用户的 Amazon Lex V2 会话的状态。
- SessionState.SessionAttributes
-
表示会话特定上下文信息的键/值对的映射。该映射包含在您的机器人所附的 Lambda 函数和 PSTN Audio Lambda 函数之间传递的机器人对话信息。
- 解释
-
由 Amazon Lex 得出的可能满足客户言论的意图清单。
NluConfidence
得分最高的意图变为意图SessionState
。 - Interpretations.NluConfidence.Score
-
表示 Amazon Lex v2 对意图满足用户意图的置信度的分数。范围介于 0.00 和 1.00 之间。分数越高,置信度越高。
- Intent
-
用户要执行的操作。
- Intent.Name
-
意图的名称。
- Intent.Slots
-
意图中所有插槽的映射。插槽的名称映射于该插槽的值。如果某个插槽尚未填满,则该值为 null。
- Intent.Slots.Value
-
插槽的值。
- Intent.Slots.Values
-
用户为插槽提供的一或多个值的列表。
- Intent.Slots.Value.OriginalValue
-
为该插槽输入的用户回复文本。
- Intent.Slots.Value.InterpretedValue
-
描述 — Amazon Lex v2 为该插槽确定的值。实际值取决于机器人的值选择策略设置。您可以选择使用用户输入的值,也可以让 Amazon Lex v2 选择
resolvedValues
列表中的第一个值。 - Intent.Slots.Value.ResolvedValues
-
Amazon Lex v2 识别的该插槽的其他值列表。
- Intent.State
-
描述 — 意图的实现信息。可能的值:
Failed
— Lambda 函数未能实现意图。Fulfilled
— Lambda 函数已实现意图。ReadyForFulfillment
— 存在意图信息,且您的 Lambda 函数已可以实现意图。
- Intent.ConfirmationState
-
描述 — 表示意图的确认。可能的值:
已确认 — 意图已实现。
已拒绝 — 用户对确认提示响应“否”。
否 — 不提示用户进行确认;或者系统已提示用户,但用户未确认也未拒绝提示。
处理 ACTION_FAILED 事件
以下示例显示 StartBotConversation
操作的典型 ACTION_FAILED
事件。
{ "SchemaVersion": "1.0", "Sequence": number, "InvocationEventType": "ACTION_FAILED", "ActionData":{ "CallId": "
string
", "Type": "StartBotConversation", "Parameters": { // parameters provided in the StartBotConversation action }, "ErrorType": "string
", "ErrorMessage": "string
" }, "CallDetails":{ } }
- ErrorType
唯一标识错误条件的字符串。
- ErrorMessage
错误条件的一般描述。
错误代码
下表列出了 Lambda 函数在 ACTION_FAILED
事件中可能返回的错误消息。
错误 | 描述 |
---|---|
|
一个或多个操作参数无效。错误消息描述无效参数。 |
|
运行操作时出现系统错误。 |
|
未找到指定机器人。 |
|
对存储桶的访问被拒绝。 |
|
已超出机器人对话服务限制。错误消息描述特定服务限制已超出。 |
授予使用机器人的权限
以下示例授予 Amazon Chime SDK 调用 Amazon Lex StartConversation API 的权限。您必须明确授予音频服务使用您的机器人的权限。服务主体必须使用条件数据块。条件数据块必须使用全局上下文键 AWS:SourceAccount
和 AWS:SourceArn
。AWS:SourceAccount
是您的 AWS 账户 ID。AWS:SourceArn
是调用 Lex 机器人的 PSTN 音频应用程序的资源 ARN。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowChimePstnAudioUseBot", "Effect": "Allow", "Principal": { "Service": "voiceconnector.chime.amazonaws.com" }, "Action": "
lex:StartConversation
", "Resource": "arn:aws:lex:region
:awsAccountId
:bot-alias/botId
/aliasId
", "Condition": { "StringEquals": { "AWS:SourceAccount": "awsAccountId
" }, "ArnEquals": { "AWS:SourceArn": "arn:aws:voiceconnector:region
:awsAccountId
:sma/smaId
" } } } ] }
配置语音和 DTMF 超时
在捕获用户输入时,您可以配置语音和 DTMF 超时。您还可以在开始与机器人对话时通过会话属性配置超时,并在必要时在 Lambda 函数中将其覆盖。Amazon Lex 可以为意图或机器人设置多个插槽。由于您可以指定会话属性应用于意图和时隙级别,因此可以指定仅在收集特定类型的输入时设置该属性。例如,您可以在收集账号时指定比收集日期时更长的超时。您可以在会话属性键中使用通配符。
例如,要将所有意图的所有插槽的语音超时设置为 4000 毫秒,您可以使用 x-amz-lex:start-timeout-ms:*:*
作为会话属性名称和 4000
作为会话属性值来提供会话属性。有关更多信息,请参阅 Amazon Lex 开发人员指南中的配置捕获用户输入的超时时间。
在对话期间使用 DTMF 输入
Amazon Lex 机器人支持对话期间的语音和键盘输入。机器人将键盘输入解释为 DTMF 数字。您可以使用井号键 (#) 提示联系人结束输入,并使用星号键 (*) 取消会话。如果您未提示客户使用井号键结束输入,Lex 将在其他按键操作 5 秒钟后停止等待。
账单和服务限额
AWS 会向您收取以下费用:
Amazon Chime SDK 用于呼叫的使用量。有关更多信息,请参阅 Amazon Chime SDK 定价
。 Amazon Lex 用于解释用户语音的使用量。有关更多信息,请参阅 Amazon Lex 流传输对话定价
。 Amazon Polly 用于合成机器人文本回复的使用量。有关更多信息,请参阅 Amazon Polly 定价
。
此外,您还需要了解以下服务限额:
对于您可以通过 PSTN 音频 StartBotConversation 操作来使用的 Amazon Lex 机器人的最大数量,Amazon Chime SDK 设有服务限额。有关更多信息,请参阅《AWS 一般参考》中的 SIP 中继和语音限额。
Amazon Lex 对每个 Lex 机器人的最大并发语音对话数都有服务限额。如需增加限额,您可以联系 Amazon Lex 服务团队。有关更多信息,请参阅 Amazon Lex 开发人员指南中的 Amazon Lex 指南和限额。
Amazon Polly 具有用于合成文本响应的服务限额。如需增加限额,您可以联系 Amazon Polly 服务团队。有关 Amazon Polly 服务限额的更多信息,请参阅 Amazon Polly 开发人员指南中的 Amazon Polly 中的限额。