3

我正在尝试为我的 Alexa Skill 实现 AMAZON.HelpIntent。

这是预期的行为:

用户: Alexa,告诉体积计算器计算一个盒子的体积。

Alexa:盒子的长度是多少?

用户:帮助

Alexa:盒子的长度就是盒子的长度。试着说长度是 2 或长度是 2 米。

提示用户响应

用户:长度是两米。

Alexa:盒子的宽度是多少?

对话继续进行,直到意图的槽被填满。

为了实现这种行为,我需要知道我的用户的意图是什么。这行代码允许我这样做。

session.attributes['last_intent'] = 'BoxVolumeIntent'

如果'last_intent' == 'BoxVolumeIntent',我可以检查我的AMAZON.HelpIntent

if session.attributes.get('last_intent') == 'BoxVolumeIntent':
    # Determine which part of the multi-turn dialog I am in and return
    # relevant help to the user here. Then pass the value back to the 
    # correct intent to be processed. This is what I don't know how to 
    # do.

session.attributes 由 John Wheeler 在 flask-ask 中定义。

可以在 Python 中使用以下行访问它:

from flask_ask import session

我今天早些时候在一封电子邮件中问约翰他是否知道如何解决我的问题,他的回答是他有一段时间没有使用烧瓶问了,他不知道多轮对话是什么。

如何为我的技能正确实施 AMAZON.HelpIntent?

BoxVolumeIntent

@ask.intent("BoxVolumeIntent", convert={'length': int, 'width': int, 'height': int, 'unit': str},
            default={'unit': 'meters'})
def calculate_box_volume(length, width, height, unit):
    """
    Description:
        A function to calculate the volume of a box.
    Args:
        :param1 (int) length: The length of the box.
        :param2 (int) width:  The width of the box.
        :param3 (int) height: The height of the box.
        :param4 (str) unit: The unit of measurement. If unit is undefined its value defaults to 'meters'.
    :return: A statement to be spoken by the Alexa device and a card sent to the Amazon Alexa phone app.
    """
    # Determine which intent was the last one called.
    session.attributes['last_intent'] = 'BoxVolumeIntent'
    
    # Taken from Issue 72. Solves the problem of returning a Dialog.Directive
    dialog_state = get_dialog_state()
    if dialog_state != "COMPLETED":
        return delegate(speech=None)

    box_volume = length * width * height
    msg = "The volume of the box is {} cubic {}".format(box_volume, unit)
    return statement(msg).simple_card("Volume Calculator", msg)

我已经从我的 Python 3 后端包含了 BoxVolumeIntent。请注意,我没有让 Alexa 询问用户长度、宽度和高度是多少的字符串。所有这些都在技能构建器测试版中处理,可以在亚马逊开发者控制台上找到。我无法判断我的用户在哪一步的意图。

因为正如我在下面的评论中提到的,用户可以从任何步骤开始。例如:盒子的宽度是五。这通常是多步骤意图的第 2 步而不是第 1 步。

4

1 回答 1

0

我发现这个问题与这个问题有点相似。

您可以session.attributes出于任何不同的原因,并保持自己的价值观。

在您的情况下,您可以引入session.attributes['current_step'] = <number>并使用它来定义该多步骤意图的当前步骤。

if session.attributes.get('last_intent') == 'BoxVolumeIntent':
  if session.attributes.get('current_step') == 1:
    # Do stuff for the first step
    # Optional: increase the current step value
于 2018-01-11T08:32:17.630 回答