&引用;textToConfirm";Alexa未读取启动_任务的 timer\u请求={ “持续时间”:“PT10S”, “timerLabel”:“我的任务计时器”, “创造性行为”:{ “展示体验”:{ “可见性”:“可见” } }, “触发行为”:{ “操作”:{ “类型”:“启动任务”, “textToConfirm”:[{ “区域设置”:“en US”, “语言环境”:“en-CA”, “text”:“计时器已过。是否要启动{continueWithSkillName}?” }], “任务”:{ “名称”:“倒计时”, “版本”:“1”, } }, “notificationConfig”:{ “播放声音”:正确 } } } 所需的_权限=[“alexa::alerts:timers:skill:readwrite”] 类LaunchRequestHandler(AbstractRequestHandler): def can_句柄(自身、句柄_输入): 返回ask\u utils.is\u request\u type(“LaunchRequest”)(处理程序输入),ask\u utils.is\u request\u type(“AMAZON.yesinent”)(处理程序输入),ask\u utils.is\u request\u type(“AMAZON.nocontent”)(处理程序输入) def句柄(自身,句柄输入): 权限=handler\u input.request\u envelope.context.system.user.permissions 如果没有(权限和权限.同意\u令牌): 返回( handler\u input.response\u生成器 .speak(“请授予使用alexa应用程序设置计时器的权限。”) .set_卡( AskForPermissionsConsentCard(权限=所需权限) ) .答复 ) timer\u service=handler\u input.service\u client\u factory.get\u timer\u management\u service() 定时器响应=定时器服务。创建定时器(定时器请求) 如果str(定时器响应状态)=“状态打开”: 会话\u attr=handler\u input.attributes\u manager.session\u attributes 如果不是会话属性: 会话\u attr['lastTimerId']=timer\u response.id speech_text='您的40分钟计时器已启动!' 其他: 语音\文本='计时器未启动' 返回( handler\u input.response\u生成器 .演讲(演讲稿) .答复 ) 类CountDownTaskHandler(AbstractRequestHandler): def can_句柄(自身、句柄_输入): 返回值为“请求类型”(“启动请求”)(处理程序输入)和处理程序输入。请求。信封。请求。任务。名称==“amzn1.ask.skill.78f63c60-18ac-4944-a2da-5642ad214373.倒计时” def句柄(自身,句柄输入): #执行倒计时并完成任务 response\u builder=handler\u input.response\u builder task=handler\u input.request\u envelope.request.task 下限=任务输入['lowerLimit'] 上限=任务。输入['upperLimit'] 倒计时语音=[i+''表示范围内的i(下限、上限)] 响应\u builder.speak(“+”).join(倒计时\u speech)+) 响应\u生成器.add\u指令(CompleteTaskDirective(…) 返回响应\u builder.response

&引用;textToConfirm";Alexa未读取启动_任务的 timer\u请求={ “持续时间”:“PT10S”, “timerLabel”:“我的任务计时器”, “创造性行为”:{ “展示体验”:{ “可见性”:“可见” } }, “触发行为”:{ “操作”:{ “类型”:“启动任务”, “textToConfirm”:[{ “区域设置”:“en US”, “语言环境”:“en-CA”, “text”:“计时器已过。是否要启动{continueWithSkillName}?” }], “任务”:{ “名称”:“倒计时”, “版本”:“1”, } }, “notificationConfig”:{ “播放声音”:正确 } } } 所需的_权限=[“alexa::alerts:timers:skill:readwrite”] 类LaunchRequestHandler(AbstractRequestHandler): def can_句柄(自身、句柄_输入): 返回ask\u utils.is\u request\u type(“LaunchRequest”)(处理程序输入),ask\u utils.is\u request\u type(“AMAZON.yesinent”)(处理程序输入),ask\u utils.is\u request\u type(“AMAZON.nocontent”)(处理程序输入) def句柄(自身,句柄输入): 权限=handler\u input.request\u envelope.context.system.user.permissions 如果没有(权限和权限.同意\u令牌): 返回( handler\u input.response\u生成器 .speak(“请授予使用alexa应用程序设置计时器的权限。”) .set_卡( AskForPermissionsConsentCard(权限=所需权限) ) .答复 ) timer\u service=handler\u input.service\u client\u factory.get\u timer\u management\u service() 定时器响应=定时器服务。创建定时器(定时器请求) 如果str(定时器响应状态)=“状态打开”: 会话\u attr=handler\u input.attributes\u manager.session\u attributes 如果不是会话属性: 会话\u attr['lastTimerId']=timer\u response.id speech_text='您的40分钟计时器已启动!' 其他: 语音\文本='计时器未启动' 返回( handler\u input.response\u生成器 .演讲(演讲稿) .答复 ) 类CountDownTaskHandler(AbstractRequestHandler): def can_句柄(自身、句柄_输入): 返回值为“请求类型”(“启动请求”)(处理程序输入)和处理程序输入。请求。信封。请求。任务。名称==“amzn1.ask.skill.78f63c60-18ac-4944-a2da-5642ad214373.倒计时” def句柄(自身,句柄输入): #执行倒计时并完成任务 response\u builder=handler\u input.response\u builder task=handler\u input.request\u envelope.request.task 下限=任务输入['lowerLimit'] 上限=任务。输入['upperLimit'] 倒计时语音=[i+''表示范围内的i(下限、上限)] 响应\u builder.speak(“+”).join(倒计时\u speech)+) 响应\u生成器.add\u指令(CompleteTaskDirective(…) 返回响应\u builder.response,timer,alexa,alexa-skills-kit,alexa-skill,alexa-voice-service,Timer,Alexa,Alexa Skills Kit,Alexa Skill,Alexa Voice Service,这里的问题是,一旦您将替换为,如果您在计时器开始鸣响时对Alexa说“停止”,Alexa实际上会停止,而不是读取文本以确认,或者在为真时打开会话。当您使用annound时,不会发生这种情况。但是,我正在尝试打开会话或在计时器关闭后转发到另一个任务,这就是我无法使用annound的原因 注:我遵循了早期的建议,实际上为“AMAZON.StopIntent”提供了不同的功能。然而,这也不起作用,相反,Alexa采用了StopIntent的默认/全局值。同时,您甚至不能调试计时器技能,因为您在开发人员

这里的问题是,一旦您将替换为,如果您在计时器开始鸣响时对Alexa说“停止”,Alexa实际上会停止,而不是读取
文本以确认
,或者在
为真时打开会话。当您使用
annound
时,不会发生这种情况。但是,我正在尝试打开会话或在计时器关闭后转发到另一个任务,这就是我无法使用annound的原因

注:我遵循了早期的建议,实际上为“AMAZON.StopIntent”提供了不同的功能。然而,这也不起作用,相反,Alexa采用了StopIntent的默认/全局值。同时,您甚至不能调试计时器技能,因为您在开发人员控制台上没有得到响应(当计时器关闭时),所以您唯一的选择是在echo上进行调试


您可以在
textToConfirm
中访问完整的,您必须按照每个区域设置将区域设置划分为不同的子项:

    timer_request = {
        "duration": "PT10S",
        "timerLabel": "My Task Timer",
        "creationBehavior": {
            "displayExperience": {
                "visibility": "VISIBLE"
            }
        },
        "triggeringBehavior": {
            "operation": {
                "type": "LAUNCH_TASK",
                "textToConfirm": [{
                    "locale": "en-US",
                    "locale":"en-CA",
                    "text": "Timer elapsed. Would you like to launch {continueWithSkillName}?"
                }],
                "task": {
                    "name": "CountDown",
                    "version": "1",
                }
            },
            "notificationConfig": {
                "playAudible": True
            }
        }
    }
    
    REQUIRED_PERMISSIONS = ["alexa::alerts:timers:skill:readwrite"]
    
    class LaunchRequestHandler(AbstractRequestHandler):
        def can_handle(self, handler_input):
            return ask_utils.is_request_type("LaunchRequest")(handler_input),ask_utils.is_request_type("AMAZON.YesIntent")(handler_input), ask_utils.is_request_type("AMAZON.NoIntent")(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!.'
    
            else:
                speech_text = 'Timer did not start'
    
            return (
                handler_input.response_builder
                .speak(speech_text)
                .response
            )
class CountDownTaskHandler(AbstractRequestHandler):
    def can_handle(self, handler_input):
        return is_request_type("LaunchRequest")(handler_input) and handler_input.request_envelope.request.task.name == "amzn1.ask.skill.78f63c60-18ac-4944-a2da-5642ad214373.CountDown"
      
    def handle(self, handler_input):
    # Perform countdown and complete the task
        response_builder = handler_input.response_builder
        
        task = handler_input.request_envelope.request.task

        lower_limit = task.input['lowerLimit']
        upper_limit = task.input['upperLimit']

        count_down_speech = [i + '<break time="1ms" />' for i in range(lower_limit, upper_limit)]
        response_builder.speak("<ssml>" + "".join(count_down_speech) + "</ssml>")
        response_builder.add_directive(CompleteTaskDirective(...)) 

        return response_builder.response
任务
部分,您需要为任务使用完全限定的名称,包括技能id。例如:

"textToConfirm": [
            {
                "locale": "en-US",
                "text": "Timer elapsed. Would you like to launch {continueWithSkillName}?"
            },
            {
                "locale":"en-CA",
                "text": "Timer elapsed. Would you like to launch {continueWithSkillName}?"
            }]

您调用的任务必须是实时技能的一部分,并且具有公共可见性。

textToConfirm
中,您必须根据每个区域设置将区域设置划分为不同的子项:

    timer_request = {
        "duration": "PT10S",
        "timerLabel": "My Task Timer",
        "creationBehavior": {
            "displayExperience": {
                "visibility": "VISIBLE"
            }
        },
        "triggeringBehavior": {
            "operation": {
                "type": "LAUNCH_TASK",
                "textToConfirm": [{
                    "locale": "en-US",
                    "locale":"en-CA",
                    "text": "Timer elapsed. Would you like to launch {continueWithSkillName}?"
                }],
                "task": {
                    "name": "CountDown",
                    "version": "1",
                }
            },
            "notificationConfig": {
                "playAudible": True
            }
        }
    }
    
    REQUIRED_PERMISSIONS = ["alexa::alerts:timers:skill:readwrite"]
    
    class LaunchRequestHandler(AbstractRequestHandler):
        def can_handle(self, handler_input):
            return ask_utils.is_request_type("LaunchRequest")(handler_input),ask_utils.is_request_type("AMAZON.YesIntent")(handler_input), ask_utils.is_request_type("AMAZON.NoIntent")(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!.'
    
            else:
                speech_text = 'Timer did not start'
    
            return (
                handler_input.response_builder
                .speak(speech_text)
                .response
            )
class CountDownTaskHandler(AbstractRequestHandler):
    def can_handle(self, handler_input):
        return is_request_type("LaunchRequest")(handler_input) and handler_input.request_envelope.request.task.name == "amzn1.ask.skill.78f63c60-18ac-4944-a2da-5642ad214373.CountDown"
      
    def handle(self, handler_input):
    # Perform countdown and complete the task
        response_builder = handler_input.response_builder
        
        task = handler_input.request_envelope.request.task

        lower_limit = task.input['lowerLimit']
        upper_limit = task.input['upperLimit']

        count_down_speech = [i + '<break time="1ms" />' for i in range(lower_limit, upper_limit)]
        response_builder.speak("<ssml>" + "".join(count_down_speech) + "</ssml>")
        response_builder.add_directive(CompleteTaskDirective(...)) 

        return response_builder.response
任务
部分,您需要为任务使用完全限定的名称,包括技能id。例如:

"textToConfirm": [
            {
                "locale": "en-US",
                "text": "Timer elapsed. Would you like to launch {continueWithSkillName}?"
            },
            {
                "locale":"en-CA",
                "text": "Timer elapsed. Would you like to launch {continueWithSkillName}?"
            }]

而且你调用的任务必须是一项现场技能的一部分,并且具有公共可见性。

一个潜在的问题,来自Karthik,“两个地区可能是一个问题”。我不认为这可以解释这种行为。除了确认行为的文字之外,你的倒计时任务是否已经启动?@joemouio谢谢你的回复!你介意详细解释一下吗?。此外,您能否告知您的团队,他们是否也可以将薪酬集成文档翻译成python@德语更新。尽管复制粘贴了文档,但无法识别意图本身。我的假设是它需要询问utils.is\u intent\u name。然而,文档中并没有包括它。一个潜在的问题,来自Karthik,“2个地区可能是一个问题”。我不认为这可以解释这种行为。除了确认行为的文字之外,你的倒计时任务是否已经启动?@joemouio谢谢你的回复!你介意详细解释一下吗?。此外,您能否告知您的团队,他们是否也可以将薪酬集成文档翻译成python@德语更新。尽管复制粘贴了文档,但无法识别意图本身。我的假设是,它需要询问“utils.is\u intent\u name”