在 AWS LEX 中从一个意图调用到另一个意图
Posted
技术标签:
【中文标题】在 AWS LEX 中从一个意图调用到另一个意图【英文标题】:Calling from one intent to another intent in AWS LEX 【发布时间】:2018-08-02 01:20:55 【问题描述】:我是 AWS 领域的新手。现在我正在研究 AWS LEX。我想从一个意图调用另一个意图。我找到了以下问题,但由于无法发表评论,我创建了另一个问题。
How to call Intent B from intent A in AWS lex?
我的问题是我将把上述链接中第一种方法的代码放在哪里?
如何从 Intent 中调用 lambda 函数以及 javascript 中的代码格式是什么?
【问题讨论】:
你好@sid8491你能帮帮我吗 【参考方案1】:我的问题是我将把第一种方法的代码放在哪里 上面的链接?
当调用意图 A 并且您正在响应用户时,那时您将使用该代码。基本上,我们使用的是ConfirmIntent
,而不是dialogAction
类型Close
。
你可以阅读更多关于回复格式here。
完整代码:
def build_response(message):
return
"dialogAction":
"type":"Close",
"fulfillmentState":"Fulfilled",
"message":
"contentType":"PlainText",
"content":message
def delegate(session_attributes, slots):
return
'sessionAttributes': session_attributes,
'dialogAction':
'type': 'Delegate',
'slots': slots
def confirm_intent(session_attributes, intent_name, slots, message):
return
'sessionAttributes': session_attributes,
'dialogAction':
'type': 'ConfirmIntent',
'intentName': intent_name,
'slots': slots,
'message':
'contentType': 'PlainText',
'content': message
def perform_action_A(intent_request):
source = intent_request['invocationSource']
output_session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else
slots = intent_request['currentIntent']['slots']
# whatever you want to do
if source == 'DialogCodeHook':
# Perform basic validation on the supplied input slots.
return delegate(output_session_attributes, slots)
if source == 'FulfillmentCodeHook':
# action fulfillment code
msg = "Hi, I am a xxx-BOT. i can help you with following: A B C"
return confirm_intent(output_session_attributes, 'intent-B', slots, msg)
def perform_action_B(intent_request):
# some code
if source == 'DialogCodeHook':
# Perform basic validation on the supplied input slots.
return delegate(output_session_attributes, slots)
if source == 'FulfillmentCodeHook':
# action fulfillment code
build_response('Final close message')
def dispatch(intent_request):
intent_name = intent_request['currentIntent']['name']
# Dispatch to your bot's intent handlers
if intent_name == 'intent-A':
return perform_action_A(intent_request)
if intent_name == 'intent-B':
return perform_action_B(intent_request)
raise Exception('Intent with name ' + intent_name + ' not supported')
def lambda_handler(event, context):
logger.debug(event)
return dispatch(event)
如何从意图调用 lambda 函数以及代码是什么 javascript格式?
我没有在 javascript 中编写任何 lex bot,也许 this link 可能会对你有所帮助。
测试事件代码:
"currentIntent":
"name": "intent-A",
"slots":
,
"invocationSource": "DialogCodeHook",
"sessionAttributes": ,
"bot":
"name": "Your_Bot_Name"
,
"userId": "Some_User_Id"
对于 Fulfillment,将 invocationSource
的值更改为 FulfillmentCodeHook
。另外,如果有空位,请提供。
澄清一下,configure test events
用于通过模拟请求来测试 Lambda 代码。您可以直接将 Lambda 函数与 Lex 集成,并使用 Lex 控制台进行测试。
希望对你有帮助。
编辑 1: 用代码更新了答案。编辑 2: 更新了测试事件代码。
【讨论】:
在配置测试事件中我应该放置哪个 Intent 详细信息....当前 Intent-A 或新 Intent-B @TAMIMHAIDER 在configure test event
中,您应该编写将调用intent-A
的一般句子/话语。我也用代码更新了答案。做检查。
据我所知,我可以在“Lambda 初始化和验证”和“Fullfillment”中使用这个 lambda 函数。我只需要选择这个 lambda 函数的名称。是否可以给出“配置测试事件”的示例。作为一个新手,我有很多困惑。 TIA
@TAMIMHAIDER 检查更新的答案,Lambda initialization and validation
将调用 DialogCodeHook
,Fullfillment
将调用 FulfillmentCodeHook
。并且配置测试事件用于模拟向 Lambda 发出的请求,您可以使用 Lex 直接测试它,我认为这会更简单。
我从当前 Intent (A) 收到 ConfirmIntent 消息。但同时按照逻辑,我的第二个意图需要触发。但是我怎么知道,第二个Intent(B)触发成功了?以上是关于在 AWS LEX 中从一个意图调用到另一个意图的主要内容,如果未能解决你的问题,请参考以下文章