首页 > 解决方案 > 在 alexa timer api 关闭后,有什么方法可以让会话保持打开状态?

问题描述

我想知道是否有任何可能的方法或技巧,我们可以在计时器关闭后让会话保持打开状态以供用户输入,因为计时器 API文档没有涵盖它。

timer_request_1 = {
    "duration": "PT15S",
    "timerLabel": "Change name",
    "creationBehavior": {
        "displayExperience": {
            "visibility": "VISIBLE"
        }
    },
    "triggeringBehavior": {
        "operation": {
            "type": "ANNOUNCE", 
            "textToAnnounce": [
                {
                    "locale": "en-US",
                    "text": "Would you like to proceed with the x task?"
                }
            ]
        },
        "notificationConfig": {
            "playAudible": False 
        }
    }
}

REQUIRED_PERMISSIONS = ["alexa::alerts:timers:skill:readwrite"]

class TimerIntentHandler(AbstractRequestHandler):
    def can_handle(self, handler_input):
        return ask_utils.is_intent_name("TimerIntent")(handler_input)
    
    def handle(self, handler_input):

        permissions = handler_input.request_envelope.context.system.user.permissions
        if not (permissions and permissions.consent_token):
            return (
                handler_input.response_builder
                .speak("Please give permissions to set timers using the alexa app.")
                .set_card(
                    AskForPermissionsConsentCard(permissions=REQUIRED_PERMISSIONS)
                )
                .response
            )
        
        timer_service = handler_input.service_client_factory.get_timer_management_service()                        
        timer_response = timer_service.create_timer(timer_request)
        
        if str(timer_response.status) == "Status.ON":
            session_attr = handler_input.attributes_manager.session_attributes
            if not session_attr:
                session_attr['lastTimerId'] = timer_response.id
                speech_text = 'Your 40 minutes timer has started!.'
                return (
                    handler_input.response_builder
                    .speak(speech_text)
                    .response
                    .ask("Would you like to proceed x task?")
                    )
        else:
            speech_text = 'Timer did not start'

        return (
            handler_input.response_builder
            .speak(speech_text)
            .response
        )

我尝试添加 areturn .ask()但出现'Response' object has no attribute 'ask'错误。

期待听到你的想法:)

标签: apitimeralexaalexa-skills-kitalexa-skill

解决方案


保持会话活动的一种方法是不发送“shouldEndSession”。这不会让会话关闭。但是如果你去认证,这将不会被批准。


推荐阅读