How to call another intent without prompting to user in Lex?

后端 未结 2 1851
生来不讨喜
生来不讨喜 2021-01-18 18:08

Is it possible to trigger intent-B from the lambda function of intent-A without prompting to user?
Suppose user typed something and an intent-A is fired, after some proc

相关标签:
2条回答
  • 2021-01-18 18:38

    Yes it is possible .From the lambda of Intent-A , you can write the below code :

            intentRequest.currentIntent.name='Intent-B';
            var param1={
                    slot-B:null
                };
                intentRequest.currentIntent.slots=param1;
              callback(elicitSlot(outputSessionAttributes, 'Intent-B', intentRequest.currentIntent.slots, 'slot-B'));
    

    Below is the function for elicitSlot

    function elicitSlot(sessionAttributes, intentName, slots, slotToElicit, message) {    
    return {
        sessionAttributes,
        dialogAction: {
            type: 'ElicitSlot',
            intentName,
            slots,
            slotToElicit,
            message,
        },
    };
    

    }

    0 讨论(0)
  • 2021-01-18 18:45

    I ended up doing below to call intent-B from intent-A without prompting anything to user:

    • give access to invoke lambda functions to your calling lambda function i.e lambda function of intent-A
    • get the name of backend lambda function of intent-B
    • call that lambda function with all the inputs using boto3
    • response will be in 'Payload' key of response object
    • get the response using read() method
    • get actual output in ['dialogAction']['message']['content']
    • return using default close() method

    import boto3

    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']
    
    0 讨论(0)
提交回复
热议问题