Как предопределенный слот возвращает разрешение?

Я создаю простую игру «Угадай, кто» для Alexa. У меня сейчас два намерения: GenderIntent и HairColorIntent.

GenderIntent имеет настраиваемый слот для обработки пола и связанных синонимов, таких как сопоставление «мальчик» и «мужчина» с «мужчина». Это отлично работает. Он возвращает разрешение в слоте. Именно то, что мне нужно.

HairColorIntent имеет предопределенный слот Amazon, AMAZON.Color. Это не очень хорошо работает, так как никогда не возвращает разрешение независимо от предоставленного цвета.

Вот моя модель для GenderIntent и HairColorIntent:

{
    "name": "GenderIntent",
    "samples": [
        "are you a {Gender}"
    ],
    "slots": [
        {
            "name": "Gender",
            "type": "GENDER_TYPES",
            "samples": []
        }
    ]
},
{
    "name": "HairColorIntent",
    "samples": [
        "is your hair {HairColor}",
        "do you have {HairColor} hair"
    ],
    "slots": [
        {
            "name": "HairColor",
            "type": "AMAZON.Color"
        }
    ]
}

GenderIntent возвращает следующий слот С разрешениями:

{
    "Gender": {
        "name": "Gender",
        "value": "male",
        "resolutions": {
            "resolutionsPerAuthority": [
                {
                    "authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.2ed972f4-1c5a-4cc1-8fd7-3f440f5b8968.GENDER_TYPES",
                    "status": {
                        "code": "ER_SUCCESS_MATCH"
                    },
                    "values": [
                        {
                            "value": {
                                "name": "Male",
                                "id": "63889cfb9d3cbe05d1bd2be5cc9953fd"
                            }
                        }
                    ]
                }
            ]
        },
        "confirmationStatus": "NONE",
        "source": "USER"
    }
}

HairColorIntent возвращает следующее БЕЗ разрешений:

{
    "HairColor": {
        "name": "HairColor",
        "value": "brown",
        "confirmationStatus": "NONE",
        "source": "USER"
    }
}

Я бы хотел, чтобы слот HairColorIntent's HairColor возвращал разрешение. Что я делаю не так?


person Mike    schedule 18.10.2019    source источник


Ответы (1)


Разрешение возвращается только в том случае, если вы используете синонимы в типе слота.

Не совсем уверен, как вы обрабатываете это в своем коде, например, Node.js будет: handlerInput.requestEnvelope.request.intent.slots.Gender.resolutions.resolutionPerAuthority[0].values[0].value.name

Если вы не используете синонимы (например, для слота HairColor), вы можете получить значение просто по handlerInput.requestEnvelope.request.intent.slots.HairColor.value

Работа с предопределенными типами слотов должна хорошо работать с вашим кодом. Если вы хотите, чтобы пользовательские типы слотов также возвращали разрешение независимо от того, используете ли вы синонимы или нет, вы всегда можете просто указать значение в качестве синонима, и оно должно возвращать полное дерево разрешения.

Надеюсь, что ответил на ваш вопрос.

person ZsoltF    schedule 21.10.2019
comment
Спасибо. Я думаю, я смущен тем, что на самом деле делают предопределенные слоты. Мое предположение заключалось в том, что они, по сути, обрабатывали синонимы и сопоставляли их соответственно. Но они просто возвращают входное значение от пользователя без проверки? Прямо сейчас с предопределенным слотом, если я скажу, что ваши волосы МОРЖ, то значение моего слота handlerInput.requestEnvelope.request.intent.slots.HairColor.value будет МОРЖ. Я надеялся, что будет какая-то обработка того, что МОРЖ на самом деле не является допустимым цветом. - person Mike; 21.10.2019
comment
Глядя на этот конкретный тип слота, кажется, что это один из самых ... интересно закодированных слотов. Он распознает множество цветов, но за счет приема большого количества нецветных. Обычно эти типы слотов лучше, чем это, я думаю, желание принять любое название, которое люди дают цветам, заставило их кодировать это свободно. Единственное реальное решение, которое я вижу на данный момент, — это либо подтвердить в коде, либо написать свой собственный цветной слот, надеясь, что Amazon создаст более разумный, олдскульный цветной слот. - person ZsoltF; 21.10.2019
comment
в основном предопределенные слоты имеют список допустимых входных значений (или синтаксис для них (например: amazon.date)), и они сопоставляют пользовательские входы с ними, в основном сами выполняя проверку и позволяя только этим входам проходить через слот . Вот где amazon.color, кажется, сошел с рельсов. У вас есть базовые цвета, но затем вы начинаете немного отходить от них: ореховый, графитовый, темно-синий — все они имеют цветовое значение, но на самом деле не являются цветами. И это отсутствие четкой границы позволяет использовать множество нежелательных слов в качестве цветов. - person ZsoltF; 21.10.2019
comment
Спасибо за ответы и разъяснения! В итоге мы выбрали собственный тип слота и в основном принимали только те цвета (и их синонимы), которые нам нужны, чтобы соответствовать нашей игре в угадайку. Кажется, это работает хорошо. - person Mike; 21.10.2019
comment
Не беспокойтесь, я рад, что что-то получилось, извините, это не самое идеальное решение, к сожалению, ограничения раздражают, и их трудно избежать. - person ZsoltF; 23.10.2019