如何从 AWS lex 中的意图 A 调用意图 B? [复制]

Posted

技术标签:

【中文标题】如何从 AWS lex 中的意图 A 调用意图 B? [复制]【英文标题】:How to call Intent B from intent A in AWS lex? [duplicate] 【发布时间】:2018-06-17 06:37:28 【问题描述】:

我正在研究 aws lex 我有一个意图-A。我将其命名为welcomeMsg。我想从intent-A 给另一个intent(B) 打电话。欢迎msg(intent-A),它会说:

> `"Hi, I am a xxx-BOT. i can help you with following:`
       A
       B
       C

如果我说 B,它应该转到 intent-B 。这是我想做的,但我无法做到这一点。任何有关 python 代码的帮助将不胜感激。

【问题讨论】:

没有。我那个问题,他要求“没有”响应,代码也不在python中。 没有prompt not response,您可以轻松地将代码从节点转换为python。无论如何,我正在添加详细的答案,请检查。 :) 【参考方案1】:

我找到了这 3 种从意图 A 调用意图 B 的方法。

第一种方法(使用 ConfirmIntent):

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
            
        
    
msg = "Hi, I am a xxx-BOT. i can help you with following: A B C"

return confirm_intent(output_session_attributes, 'intent-B', new_slot, msg)

第二种方法(伪装成 Lex 调用 Lambda 方法):

client = boto3.client('lambda')
data = 'messageVersion': '1.0', 'invocationSource': 'FulfillmentCodeHook', 'userId': '###', 
        'sessionAttributes': , 'requestAttributes': None, 
        'bot': 'name': '###', 'alias': '$LATEST', 'version': '$LATEST', 
        'outputDialogMode': 'Text', 
        'currentIntent': 'name': '###', 'slots': '###': '###', 
        'slotDetails': '###': 'resolutions': [], 'originalValue': '###', 
        'confirmationStatus': 'None', 
        'inputTranscript': '###'
response = client.invoke(
    FunctionName='intent-B_lambda_function',
    InvocationType='RequestResponse',
    Payload=json.dumps(data)
)
output = json.loads(response['Payload'].read())['dialogAction']['message']['content']

第三种方法(使用 ElicitSlot):

def elicitSlot(sessionAttributes, intentName, slots, slotToElicit, message):   
    return 
        sessionAttributes,
        dialogAction: 
            type: 'ElicitSlot',
            intentName,
            slots,
            slotToElicit,
            message,
        
    

intentRequest['currentIntent']['name'] = 'intent-B'
param1 = 
    slot-B:null
    
intentRequest['currentIntent']['slots'] = param1
return elicitSlot(outputSessionAttributes, 'intent-B', intentRequest['currentIntent']['slots'], 'slot-B', 'some_message')

请检查这些方法,使用它们并根据需要进行调整。我认为方法 1 最适合您的需要,而且最简单。

在遇到问题时发表评论。

希望对你有帮助。

【讨论】:

这就是我正在寻找的解决方案。非常感谢

以上是关于如何从 AWS lex 中的意图 A 调用意图 B? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为AWS LEX编写条件AWS Lambda函数

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

通过Amazon lex上载文件/文档

如何从片段 KOTLIN 中调用意图 [重复]

如何处理通知中的待处理意图

从意图活动访问片段方法