Я хочу создать dialogHook для определенного слота, а лучше сказать, что это проверочный тип. Если слот вернет истину, тогда только я открою свой извлеченный слот, иначе он пойдет как обычно. Пожалуйста, помогите, каков будет мой подход.Я относительно новичок в lex.
Я пытался создать диалоговое окно для childExists, но оно не работает.
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
}
}
На самом деле мои слоты должны работать как обычно, но после слота childExistsЯ хочу отправить ответ elicit Это изображение доступных слотов