在Alexa中,如何在我的Intent代码中定义插槽默认值?

时间:2018-02-28 05:33:40

标签: go alexa alexa-skills-kit alexa-slot

我的lambda函数有一个意图。我想填补4个插槽,其中3个是必需的。在我的测试中,似乎我必须将Assignee字段设置为默认值,或者在我的实际处理程序中失败,这发生在下面的else语句之后。以下是我目前定义默认值的方式:

如果strings.ToUpper(request.DialogState)==" STARTED" {

        log.Println("DialogState == STARTED")
        // Pre-fill slots: update the intent object with slot values for which
        // you have defaults, then return Dialog.Delegate with this updated intent
        // in the updatedIntent property.
        slots := make(map[string]alexa.IntentSlot)
        slots["Summary"] = alexa.IntentSlot{
            Name:               "Summary",
            Value:              "",
            ConfirmationStatus: "NONE",
        }
        slots["TicketType"] = alexa.IntentSlot{
            Name:               "TicketType",
            Value:              "",
            ConfirmationStatus: "NONE",
        }
        slots["Project"] = alexa.IntentSlot{
            Name:               "Project",
            Value:              "",
            ConfirmationStatus: "NONE",
        }
        slots["Assignee"] = alexa.IntentSlot{
            Name:               "Assignee",
            Value:              "tcheek",
            ConfirmationStatus: "NONE",
        }
        i := &alexa.Intent{
            Name:               "OpenTicketIntent",
            ConfirmationStatus: "NONE",
            Slots:              slots,
        }
        response.AddDialogDirective("Dialog.Delegate", "", "", i)
        response.ShouldSessionEnd = false
        log.Println("DialogState has exited STARTED")

    } else if strings.ToUpper(request.DialogState) != "COMPLETED" {

        log.Println("DialogState == IN PROGRESS")
        // return a Dialog.Delegate directive with no updatedIntent property.
        response.ShouldSessionEnd = false
        response.AddDialogDirective("Dialog.Delegate", "", "", nil)
        log.Println("DialogState has exited IN PROGRESS")

    } else {

我还尝试将Assignee字段设置为默认值,如下所示:

    slots := make(map[string]alexa.IntentSlot)

        slots["Assignee"] = alexa.IntentSlot{
            Name:               "Assignee",
            Value:              "tcheek",
            ConfirmationStatus: "NONE",
        }
        i := &alexa.Intent{
            Name:               "OpenTicketIntent",
            ConfirmationStatus: "NONE",
            Slots:              slots,
        }
        response.AddDialogDirective("Dialog.Delegate", "", "", i)

在这种情况下,我在模拟器中得到以下lambda函数响应:

{
    "body": {
        "version": "1.0",
        "response": {
            "directives": [
                {
                    "type": "Dialog.Delegate",
                    "updatedIntent": {
                        "name": "OpenTicketIntent",
                        "confirmationStatus": "NONE",
                        "slots": {
                            "Assignee": {
                                "name": "Assignee",
                                "value": "tcheek",
                                "confirmationStatus": "NONE"
                            }
                        }
                    }
                }
            ],
            "shouldEndSession": false
        }
    }
}

问题在于,一旦我要求它打开一张错误票(用#34打开一个意图;打开一个{ticketType}票"话语),它会给出响应"那里被要求的技能的反应是一个问题"。

我认为设置默认值是否必要?我的默认设置不正确吗?

1 个答案:

答案 0 :(得分:0)

据我所知,您需要包括所有插槽。由于此处的意图名称和广告位相匹配,那么只有您才能获得正确的响应