В Alexa, как я могу определить значения слотов по умолчанию в моем коде Intent?

У меня есть одно намерение в моей лямбда-функции. Я пытаюсь заполнить 4 слота, 3 из которых обязательны. В моих тестах кажется, что я должен установить поле Assignee в значение по умолчанию, или что-то не получается в моем фактическом обработчике, что происходит после оператора else ниже. Вот как я сейчас определяю значения по умолчанию:

if 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)

В этом сценарии я получаю следующий ответ лямбда-функции в симуляторе:

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

Проблема заключается в том, что, как только я прошу его открыть тикет об ошибке (который сопоставляется с намерением с помощью высказывания "Open a {ticketType} тикет"), он дает ответ: "Возникла проблема с ответом запрошенного навыка".

Я ошибаюсь, считая, что установка значений по умолчанию необходима? Я неправильно устанавливаю настройки по умолчанию?

1 ответ

Насколько мне известно в ответ, вам нужно включить все слоты. Так как здесь имя цели и слоты совпадают, то только вы получите правильный ответ

Другие вопросы по тегам