Amazon web services 如何在AWS lex中从意图A调用意图B?

Amazon web services 如何在AWS lex中从意图A调用意图B?,amazon-web-services,bots,chatbot,amazon-lex,Amazon Web Services,Bots,Chatbot,Amazon Lex,我正在做aws lex 我有一个intent-A。我把它命名为welcomesg。我想从intent-A调用另一个intent(B)。在welcomemsg(intent-A)中,它会说: > `"Hi, I am a xxx-BOT. i can help you with following:` A B C 如果我说B,它应该指向意图B。这是我想做的,但我无法做到。任何python代码方面的帮助都将不胜感激。我找到了从intent-A调用in

我正在做aws lex 我有一个intent-A。我把它命名为
welcomesg
。我想从
intent-A
调用另一个
intent(B)
。在welcome
msg(intent-A)
中,它会说:

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

如果我说B,它应该指向意图B。这是我想做的,但我无法做到。任何python代码方面的帮助都将不胜感激。

我找到了从intent-A调用intent-B的3种方法

第一种方法(使用确认):

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']
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')
第三种方法(使用插槽):

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']
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最适合您的需要,而且最简单

如果遇到问题,请发表评论


希望有帮助。

没有。我问了这个问题,他要求的是“无”响应,代码也不是python语言。它没有
提示
响应
,您可以轻松地将该代码从节点转换为python。无论如何,我正在添加详细答案,请检查。:)这就是我一直在寻找的解决方案。谢谢