我想为某个槽创建一个dialogHook,更好地说是一个验证类型的东西。如果这个槽返回true,那么只有我会启动我的elicit槽,否则它会变成通常。请帮我的忙。我对莱克斯比较陌生。在
我曾试图在childExists上创建一个dialoghook,但它不起作用。在
def lambda_handler(event,context):
os.environ['TZ']='America/New_York'
time.tzset();
logger.debug('event.bot.name={}'.format(event['bot']['name']))
return dispatch(event);
def dispatch(intent_request):
intent_name=intent_request['currentIntent']['name']
if intent_name=='HotelReservation':
return book_hotel(intent_request)
def book_hotel(intent_request):
slots=intent_request['currentIntent']['slots']
welcome=intent_request['currentIntent']['slots']['welcome']
location=intent_request['currentIntent']['slots']['Location']
fromDate=intent_request['currentIntent']['slots']['FromDate']
adultCount=intent_request['currentIntent']['slots']['adultCount']
nights=intent_request['currentIntent']['slots']['nights']
childExists=intent_request['currentIntent']['slots']['childExists']
source=intent_request['invocationSource']
session_attributes={}
if source=='DialogCodeHook'and childExists.lower()=='yes':
session_attributes={}
return elicit_slot (
session_attributes,
'HotelReservation',
'childCount',
'AMAZON.NUMBER',
{
'contentType':'PlainText',
'content':'Please enter number of Children'
}
)
elif source=='DialogCodeHook':
output_session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else {}
return delegate(output_session_attributes, intent_request['currentIntent']['slots'])
else:
return close (
session_attributes,
'Fulfilled',{
'contentType':'PlainText',
'content':'Here is the temparature in'
}
)
#for fullfillment function
def close(session_attributes,fulfillment_state,message):
response={
'sessionAttributes':session_attributes,
'dialogAction':{
'type':'Close',
'fulfillmentState':fulfillment_state,
'message':message
}
}
return response
#for elicit slot return
def elicit_slot(session_attributes, intent_name,slots,slot_to_elicit,message):
response= {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'ElicitSlot',
'intentName': intent_name,
'slots': slots,
'slotToElicit': slot_to_elicit,
'message': message
}
}
return response;
def delegate(session_attributes, slots):
return {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'Delegate',
'slots': slots
}
}
实际上,我的slot应该像往常一样运行,但是在childExists slot之后,我想发送一个elicit的响应 This is the image of the slots available
根据我的理解,您正在询问用户
Do you have any children
,并将响应存储在childExists
槽中,如果答案是是,那么您需要询问孩子的数量。在所以根据我的说法,你需要有一个额外的插槽
childCount
来存储子进程的数量。由于并不总是需要这个插槽,不要在amazon lex控制台中将此标记为required。在现在,您将在
DialogCodeHook
中检查此项,并仅当childExists == 'yes'
中没有值时才相应地询问用户。我们使用这些条件的组合是为了确保它不会无限期地运行。在希望有帮助。在
相关问题 更多 >
编程相关推荐