在 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 将调用 DialogCodeHookFullfillment 将调用 FulfillmentCodeHook。并且配置测试事件用于模拟向 Lambda 发出的请求,您可以使用 Lex 直接测试它,我认为这会更简单。 我从当前 Intent (A) 收到 ConfirmIntent 消息。但同时按照逻辑,我的第二个意图需要触发。但是我怎么知道,第二个Intent(B)触发成功了?

以上是关于在 AWS LEX 中从一个意图调用到另一个意图的主要内容,如果未能解决你的问题,请参考以下文章

为AWS LEX编写条件AWS Lambda函数

在 Aws Lex 中 - 我们可以使用 lambda 更改槽值吗?

通过Amazon lex上载文件/文档

如何通过意图将数据从静态方法发送到另一个类?

使用意图从另一个片段调用一个片段

无法将值从一个意图传递到另一个意图