В 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 ответ
Насколько мне известно в ответ, вам нужно включить все слоты. Так как здесь имя цели и слоты совпадают, то только вы получите правильный ответ