0

我正在处理Amazon Lex bot并且在我的python Lambda函数中我有以下作为输出返回:

    def close(session_attributes, fulfillment_state, message):
    response = {
        'sessionAttributes': session_attributes,
        'dialogAction': {
            'type': 'Close',
            'fulfillmentState': fulfillment_state,
            'message': message
        }
    }

    return response

def Test_Bot(intent_request):
    # bunch of other code processing

    # call to close() in final output return
    return close(
        session_attributes,
        'Fulfilled',
        {
            'contentType': 'PlainText',
            'content': 'Thanks for asking!'
        }
    )

以下是我对该Lambda函数的输入:

def dispatch(intent_request):

    intent_name = intent_request['currentIntent']['name']

    # Dispatch to your bot's intent handlers
    if intent_name == 'TestBot':
        return Test_Bot(intent_request)


    raise Exception('Intent with name ' + intent_name + ' not supported')


# --- Main handler ---


def lambda_handler(event, context):

    return dispatch(event)

请注意,这不是完整代码,而是输入和输出代码的一部分。

type-in现在我面临的问题是,如果我通过Lex测试机器人控制台提出问题,我的代码从头到尾都可以正常工作。但是,如果speak-in我提出问题,那么代码会在终点中断。现在,如果我是正确的,因为当我提出问题时它的contentType设置是正确的,但是当我提出问题时,它期望哪个不存在,所以它会中断。PlainTexttype-inspeak-inaudiocontentType

所以我的问题是如何访问contentType传入请求的?意味着如果用户正在打字,那么contentType上面的响应格式设置为PlainText,当用户说话时,contentType设置为audio

4

1 回答 1

0

通过使机器人直接从 Lex 与 Lambda 通信,您无法更改“outputDialogMode”的值,它必须通过使用文本或音频的接受标头调用 Lex 在外部完成。实际上,这意味着您不能使用 PostContent 响应。

我也遇到过这种情况,我发现的解决方法是使用 Polly 即时创建音频文件,然后将其存储在 S3 中,然后在响应卡的 attachmentLinkUrl 字段中引用保存的文件。

请参阅本例中的sing_a_song方法

于 2017-07-18T09:20:50.877 回答