我用的是 ask_sdk_core
在一个用Python编写的AWS Lambda中处理Alexa应用的逻辑。有关的意图是研究人员捕获与样本数相关联的权重的一种方式。该意图的结构如下 Record [weight] grams for sample [sample_number]
. 样本号必须是6位整数,权重是小数。最初我开发了一个Lex技能,在那里你可以提示特定的槽值,所以如果意图到达时有一个错误的样本号(例如五位数),我可以只提示样本号,但不采集重量。
lambda函数使用类来处理意图,所以我的结构如下。add_weight
从槽中提取值,通过验证器,返回值给 speech
和 reprompt
通知用户是否提供了错误的样本数或错误的权重。但现在,用户必须重做整个提示。
有没有一种方法可以保留格式良好的值,并只提示用户缺少的值? 现在看来,我必须为每个槽创建一个意图来处理这种用户输入,但这感觉很糟糕。
class AddWeightHandler(AbstractRequestHandler):
"""Handler for AddWeight Intent."""
def can_handle(self, handler_input):
# type: (HandlerInput) -> bool
return ask_utils.is_intent_name("AddWeight")(handler_input)
def handle(self, handler_input):
# type: (HandlerInput) -> Response
speech, reprompt = add_weight(handler_input)
return (
handler_input.response_builder
.speak(speech)
.ask(reprompt)
.response
)
你需要一个状态机。如果我对你的设置理解正确的话... ...
AMAZON.NUMBER
插槽AddSampleNumberHandler
)can_handle
需要说 is_intent_name("NumberOnly") and session_attributes['state'] == 'sample_number'
AddWeightHandler
需要设置 session_attributes['state'] = 'sample_number'
)