我正在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
设置为PlainText
,所以当我type-in
问题时它可以正常工作,但当我speak-in
问题时,它会期待{ {1}} audio
中的{1}}不存在,因此会中断。
所以我的问题是如何访问传入请求的contentType
?表示如果用户正在键入,则上述响应格式中的contentType
设置为contentType
,当用户在说话时,PlainText
设置为contentType
?
答案 0 :(得分:0)
通过让机器人直接从Lex与Lambda通信,你不能改变'outputDialogMode'的值,它必须通过调用带有文本或音频接受头的Lex来完成。实际上,这意味着您无法使用PostContent响应。
我也遇到过这种情况,我发现的解决方法是动态创建一个带有Polly的音频文件,然后将其存储在S3中,然后在响应卡的attachmentLinkUrl字段中引用保存的文件。
请参阅sing_a_song
方法in this example.