我在不丢失我的信息的情况下转换意图而感到挣扎。我将它们保存在session_attributes中,但是在切换意图并尝试返回时,我无法用我正在收集并保存在session_attributes中的信息来填充插槽。我该如何使用收集到的数据从临时IntentHandler调用先前的意图?
我有一个FlightIntent,用于收集出发城市,目的地城市和日期。如果用户说了三天之类的话,我会切换DurationIntent以将其转换为日期,然后我想回到FlightIntent询问仍然需要的广告位。
class FlightHandlerStarted(AbstractRequestHandler):
def can_handle(self, handler_input):
return (is_intent_name("FlightIntent")(handler_input) and handler_input.request_envelope.request.dialog_state != DialogState.COMPLETED)
def handle(self, handler_input):
request = handler_input.request_envelope.request
intent = handler_input.request_envelope.request.intent
sess_attr = handler_input.attributes_manager.session_attributes
if get_slot_value(handler_input, 'FROM'):
handler_input.attributes_manager.session_attributes['from'] = get_slot_value(handler_input, 'FROM')
if get_resolved_value(request, 'FROM'):
handler_input.attributes_manager.session_attributes['from'] = get_resolved_value(request, 'FROM')
if get_slot_value(handler_input, 'TO'):
handler_input.attributes_manager.session_attributes['to'] = get_slot_value(handler_input, 'TO')
if get_resolved_value(request, 'TO'):
handler_input.attributes_manager.session_attributes['to'] = get_resolved_value(request, 'TO')
if get_slot_value(handler_input, 'DEPDATE'):
handler_input.attributes_manager.session_attributes['dep'] = get_slot_value(handler_input, "DEPDATE")
return handler_input.response_builder.add_directive(DelegateDirective()).response
class DurationHandler(AbstractRequestHandler):
def can_handle(self, handler_input):
return is_intent_name("DurationIntent")
def handle(self, handler_input):
intent = handler_input.request_envelope.request.intent
depDuration = get_slot_value(handler_input, 'DURATION')
sess_attr = handler_input.attributes_manager.session_attributes
if depDuration:
duration = isodate.parse_duration(depDuration)
current_time = datetime.datetime.today()
result = current_time + duration
result_time = result.date()
result_depDate_iso = result_time.isoformat()
handler_input.attributes_manager.session_attributes['duration'] = "{}".format(result_depDate_iso)
intent.name = "FlightIntent"
intent.slots['DEPDATE'].value = result_depDate_iso
return FlightHandlerStarted().handle(handler_input)
我收到的错误消息: 错误:alexa技能:提供的插槽FROM在输入请求中不存在 ValueError:输入的请求中不存在提供的插槽FROM。
有关于nodejs的信息,但关于python的信息并不多,到目前为止,PetMatch并没有帮助我。
真的很高兴得到任何帮助!