如何使用Python在对话框管理或链接意图之间切换上下文中间对话

时间:2019-09-12 14:21:39

标签: python alexa alexa-skills-kit alexa-skill

我在不丢失我的信息的情况下转换意图而感到挣扎。我将它们保存在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并没有帮助我。

真的很高兴得到任何帮助!

0 个答案:

没有答案