如何在Alexa中使用Python在包含多个槽的意图中提示一个槽值?

问题描述 投票:0回答:1

我用的是 ask_sdk_core 在一个用Python编写的AWS Lambda中处理Alexa应用的逻辑。有关的意图是研究人员捕获与样本数相关联的权重的一种方式。该意图的结构如下 Record [weight] grams for sample [sample_number]. 样本号必须是6位整数,权重是小数。最初我开发了一个Lex技能,在那里你可以提示特定的槽值,所以如果意图到达时有一个错误的样本号(例如五位数),我可以只提示样本号,但不采集重量。

lambda函数使用类来处理意图,所以我的结构如下。add_weight 从槽中提取值,通过验证器,返回值给 speechreprompt 通知用户是否提供了错误的样本数或错误的权重。但现在,用户必须重做整个提示。

有没有一种方法可以保留格式良好的值,并只提示用户缺少的值? 现在看来,我必须为每个槽创建一个意图来处理这种用户输入,但这感觉很糟糕。

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
        )
python alexa alexa-skills-kit
1个回答
1
投票

你需要一个状态机。如果我对你的设置理解正确的话... ...

  1. 像 "NumberOnly "这样的意图,只接受一个 "NumberOnly"。AMAZON.NUMBER 插槽
  2. 为您要接受的每个不同的数字设置一个处理程序(例如 AddSampleNumberHandler)
  3. 该处理人的 can_handle 需要说 is_intent_name("NumberOnly") and session_attributes['state'] == 'sample_number'
  4. 请求 "NumberOnly "响应的意图需要设置状态(AddWeightHandler 需要设置 session_attributes['state'] = 'sample_number')
© www.soinside.com 2019 - 2024. All rights reserved.