【问题标题】:How to prompt for a single slot value in an intent containing multiple slots in Alexa using Python如何使用 Python 在 Alexa 中提示包含多个插槽的意图中的单个插槽值
【发布时间】:2020-05-15 21:41:36
【问题描述】:

我在用 Python 编写的 AWS Lambda 中使用 ask_sdk_core 来处理 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. 类似“NumberOnly”的 Intent 只接受 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'

    【讨论】:

      猜你喜欢
      • 2019-02-04
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 2021-10-25
      相关资源
      最近更新 更多