&引用;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
这里的问题是,一旦您将替换为,如果您在计时器开始鸣响时对Alexa说“停止”,Alexa实际上会停止,而不是读取&引用;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的默认/全局值。同时,您甚至不能调试计时器技能,因为您在开发人员
文本以确认
,或者在为真时打开会话。当您使用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”