Множественные полномочия в разрешениях

Я работал над навыком Alexa, и до сих пор он работал нормально, но сегодня я столкнулся со странной проблемой. Подобную проблему можно увидеть и в других навыках. Проблема в том, что я получаю несколько прав доступа в разрешенииPerAuthority запроса JSON моего навыка. Эти полномочия имеют разные коды состояния для соответствия значений слотов. Следовательно, мой код сталкивается с трудностями, потому что resolvedPerAuthority должен иметь только один объект.

Я использую код, предоставленный в официальных документах Amazon, чтобы получить значения слотов, и он не работает именно из-за этого сценария. Кто-нибудь еще сталкивается с подобной проблемой? Какие-нибудь решения?

Вот мой запрос JSON:

{
    "version": "1.0",
    "session": {
        "new": false,
        "sessionId": "amzn1.echo-api.session.f4bf3a11-f882-4732-9275-6e494e0bca4d",
        "application": {
            "applicationId": "app id"
        },
        "attributes": {
            "launchCount": 0,
            "jokeCount": 0,
            "indexes": [
                34
            ],
            "lastSpeechOutput": {
                "outputSpeech": "response",
                "reprompt": "reprompt"
            },
            "history": [
                {
                    "IntentRequest": "LaunchRequest"
                }
            ],
            "currentJokeIndex": 34,
            "lastUseTimestamp": 0
        },
        "user": {
            "userId": "amzn1.ask.account.ncsdkncsdlcnskY"
        }
    },
    "context": {
        "Display": {
            "token": "string"
        },
        "System": {
            "application": {
                "applicationId": "id"
            },
            "user": {
                "userId": ""
            },
            "device": {
                "deviceId": "",
                "supportedInterfaces": {
                    "Display": {
                        "templateVersion": "1.0",
                        "markupVersion": "1.0"
                    }
                }
            },
            "apiEndpoint": "https://api.eu.amazonalexa.com",
            "apiAccessToken": ""
        }
    },
    "request": {
        "type": "IntentRequest",
        "requestId": "amzn1.echo-api.request.824ef2fe-5a6b-45c8-96d2-a5aa0063e9b5",
        "timestamp": "2018-07-26T13:47:56Z",
        "locale": "en-IN",
        "intent": {
            "name": "TellJokeIntent",
            "confirmationStatus": "NONE",
            "slots": {
                "joke": {
                    "name": "joke",
                    "value": "joke",
                    "resolutions": {
                        "resolutionsPerAuthority": [
                            {
                                "authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.a4bb9873-04fa-486f-8e1e-e30cb3c3d669.joke",
                                "status": {
                                    "code": "ER_SUCCESS_MATCH"
                                },
                                "values": [
                                    {
                                        "value": {
                                            "name": "joke",
                                            "id": "e2ff3cfd4b43876adaa5767ce93bf7d3"
                                        }
                                    }
                                ]
                            },
                            {
                                "authority": "amzn1.er-authority.dynamic.amzn1.ask.skill.a4bb9873-04fa-486f-8e1e-e30cb3c3d669.joke",
                                "status": {
                                    "code": "ER_SUCCESS_NO_MATCH"
                                }
                            }
                        ]
                    },
                    "confirmationStatus": "NONE"
                }
            }
        }
    }
}

person Akhilesh Awasthi    schedule 26.07.2018    source источник
comment
Совершенно не имеет отношения: я видел, как вас отсортировали для редактирования на stackoverflow.com/review/triage/20797871. Просто: неправильно. edit предназначен только для сообщений, которые другие люди, кроме OP, могут редактировать и улучшать. Здесь необходимо превратить снимки экрана в текст. И только это должен делать владелец. Так что будьте осторожны с такими отзывами. Неправильный обзор сортировки влияет на других людей. Поэтому, пожалуйста, будьте очень осторожны и хорошо осведомлены о решениях, которые вы там принимаете!   -  person GhostCat    schedule 10.09.2018


Ответы (3)


У меня такая же проблема сегодня. Никогда раньше не было такой проблемы. Я предполагаю, что Amazon что-то изменила.

Я думаю, что лучше всего отсортировать разрешения для каждого органа и выбрать тот, у которого есть er_success_match, вместо того, чтобы просто брать первый элемент в списке ResolutionPerAuthority. Однако я не уверен, можно ли будет иметь несколько er_success_match в одном списке ResolutionPerAuthority.

https://forums.developer.amazon.com/questions/171318/when-would-you-have-multiple-resolution-authoritie.html

person Alex    schedule 26.07.2018

Проблема: мы не можем получить идентификатор и различные данные, связанные с разрешением.

Причина: раньше у нас был только один элемент массива разрешения, на который мы ссылались как на resolutionsPerAuthority[0]. Однако сейчас их больше одного.

Ошибка: один из элементов разрешения показывает Match, а другой показывает No Match. Мы не можем получить информацию, просто извлекая ее из resolutionsPerAuthority[0]

Решение Анубхава: поймите, что не обязательно, чтобы только 1-й элемент массива разрешений мог отображать Match код. Попробуйте if else или выполните итерацию по этому массиву, чтобы определить, какой элемент может захватить ваш запрос.

//Check Status Code (Match/NoMatch) in 1st Element
console.log("Zero Code===>" +request.intent.slots.SlotName.resolutions.resolutionsPerAuthority[0].status.code); 

//Check Status Code (Match/NoMatch) in 2nd Element
console.log("One Code===>" +request.intent.slots.SlotName.resolutions.resolutionsPerAuthority[1].status.code); 

//Iterate and if Match condition is satisfied update the ID variable

if((request.intent.slots.SlotName.resolutions.resolutionsPerAuthority[0].status.code) === “ER_SUCCESS_MATCH")
 { 
      console.log("in If"); 
        try 
          { 
            var SlotID = request.intent.slots.SlotName.resolutions.resolutionsPerAuthority[0].values[0].value.id;                      console.log("SlotTwoID Collected"); 
           } 
        catch(Error) 
          {  
            console.log("In Catch”);
           }
 } 

else  
   { 
        console.log("in else"); 
          try 
              { 
               var SlotID = request.intent.slots.SlotName.resolutions.resolutionsPerAuthority[1].values[0].value.id;      console.log("SlotID Collected"); 
               } 
          catch(Error) 
             { 
             console.log("In Catch"); 
              }
     }

Из-за аналогичной проблемы мне не удалось получить идентификатор слота.

person Anubhav Ghosh    schedule 28.07.2018

Это нормально, поскольку Динамические объекты были добавлены. У вас может быть соответствие динамического объекта, но не статическое соответствие. Вам необходимо приспособить код для поддержки нескольких органов власти и решить, что вы будете делать, если у вас есть несколько совпадений, одно совпадение или ни одного.

person German    schedule 14.09.2020