微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Alexa 的 HTTP 端点在 APL 中可视化列表

如何解决使用 Alexa 的 HTTP 端点在 APL 中可视化列表

我目前正在使用我自己的 .NET-Backend 构建 Alexa Skill,它应该返回一个包含来自我的服务的动态内容的 AlexaTextList。 Alexa 的请求如下所示:

{
"version": "1.0","session": {
    "new": false,"sessionId": "amzn1.echo-api.session.d5f8d9ee-bdd0-4c70-96g9-b468b6b76cd4","application": {
        "applicationId": "amzn1.ask.skill.a07cbc1c-b942-47d6-8fa2-84ebb61f1b15"
    },"user": {
        "userId": "amzn1.ask.account.AE5FYATFIAFQF4UKWWBLICFMLP4ZV6KSNQFZJSECBBMKQFEL2UNUD46CDHO67QQPUQ4JZAG53CMBYUWVOWNVXMHRBBUT7ATRZDX6KRV4U2QU5FSHGL6JGOAHWRPS77PSB2N2MLFP2WKCCSC6SPZXVQKY45DLAXOD2OOFQLVGIZ6PCBRWZAEAKZKSMPWI4D36EUGPJDMVURI6BWY"
    }
},"context": {
    "Viewports": [
        {
            "type": "APL","id": "main","shape": "RECTANGLE","dpi": 160,"presentationType": "STANDARD","canRotate": false,"configuration": {
                "current": {
                    "mode": "HUB","video": {
                        "codecs": [
                            "H_264_42","H_264_41"
                        ]
                    },"size": {
                        "type": "disCRETE","pixelWidth": 1024,"pixelHeight": 600
                    }
                }
            }
        }
    ],"Viewport": {
        "experiences": [
            {
                "arcMinuteWidth": 246,"arcMinuteHeight": 144,"canResize": false
            }
        ],"mode": "HUB","pixelHeight": 600,"currentPixelWidth": 1024,"currentPixelHeight": 600,"touch": [
            "SINGLE"
        ],"video": {
            "codecs": [
                "H_264_42","H_264_41"
            ]
        }
    },"Extensions": {
        "available": {
            "aplext:backstack:10": {}
        }
    },"System": {
        "application": {
            "applicationId": "amzn1.ask.skill.a07cbd1c-b982-47d6-8aa1-84eeb61f1b15"
        },"user": {
            "userId": "amzn1.ask.account.AE5FYATFIAFQF4UKWWBLICFMLP4ZV6KSNQFZJSECBBMKQFEL2UNUD46CDHO67QQPUQ4JZAG53CMBYUWVOWNVXMHRBBUT7ATRZDX6KRD4U2QU5FSHHL6JGOAHWRPS77QSB4N2MFFP2WKCCSC6SPZXVQKY45DLAXOD2OOFQLVGIZ6PCBRWZAEAKZKSMPWI4D36EUGPJDMVURI6BWY"
        },"device": {
            "deviceid": "amzn1.ask.device.AF7IR4TWRMUA5FWIUWMXJ7726QZIXXJJ4CF62N7S3N6Q5O3RTRGORGUCJ2IFWMKO2SYDWWCO4NH2AOGR35QTQSUVVJWJSU54YACLQJW2URDL6NIQMGTN7DGI7LX76B6Y4L45FMWMGBOCVC7JCFJOWQ4WTVYDYENBZUVMJQDZ4VU23MCWAC25Y","supportedInterfaces": {}
        },"apiEndpoint": "https://api.eu.amazonalexa.com","apiAccesstoken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJhdWQiOiJodHRwczovL2FwaS5hbWF6b25hbGV4YS5jb20iLCJpc3MiOiJBbGV4YVNraWxsS2l0Iiwic3ViIjoiYW16bjEuYXNrLnNraWxsLmEwN2NiYzFjLWI5ODItNDdkNi04ZmExLTg0ZWViNjFmMWIxNSIsImV4cCI5MTYxMjM1MTY5MywiaWF0IjoxNjEyMzUxMzkzLCJuYmYiOjE2MTIzNTEzOTMsInByaXZhdGVDbGFpbXMiOnsiY29udGV4dCI6IkFBQUGBQUFBQVFESjl5V3BUNVYwd05XZnNmQk43Yzdis2dFQUFBQUFBQUM4WXQ3ZWNBNU4vUllSdmE1UENyM1dEUlJRQUljOWhodasd3E2Y29qckk3L01zVmFCTjl1aDRhOWd4Zmw4bFF5WEc3QU9MZTlGdjhoWjNBMUhyclpYeDBkM3A1Q2w4U3pyQ0dXQU1rSWI3eVlHL1B0dDYvT05qYW1XTnBTbERMa3FZbG5WdFdzVkdQRC9LTWVqTko5TFZ4dGJ0WTZWLzVlOEhmSkp4UE9YeXB5Q3BaRWluYdRQZ2dlclN0NjlRczZoN1Y3cmtTOTE0MDE4S05HTGlaZGtXTHVPZzdSczluNUFNcTlTV1paK3lBVjhpTE1Va2puallxWi9BdEY2c25uTDBCcU5Xbnd4RUdnRytRL0x6YThJT1d5cWcxYVliRHMwMGtRRHdTd2thTXFpNlNRU0c2aTM4OGVpZG9IOXBTZDFpZ4RabTNRbndpRGpjb1ZHTDNYeVZDYUNTazlUUnZIRVZ6c2V3cHJqWHd3bUVVTWwxV0lxRGgwMGNsN3pPYTdDd3FTOWN0RytEeGxvVCtVIiwiY29uc2VudFRva2VuIjpudWxsLCJkZXZpY2VJZCI6ImFtem4xLmFzay5kZXZpY2UuQUY3SVI0VFdSTVVBNUZXSVVXTVhKNzcyNlFaSVhYSko0Q0Y2Mk43UzNONlE1TzNSVFJHT1JHVUNKMklGV01LTzJTWURXV0NPNE5IMkFPR1IzNVFUUVNVVlZKV0pTVTU0WUFDTFFKVzJVUkRMNk5JUU5OVE43REdJN0xYNzZCNlk0TDQ1Rk1XTUdCT0NWQzdKQ0ZKT1dRNFdUVllEWUVOQlpVVk1KUURaNFZVMjNNQ1dBQzI1WSIsInVzZXJJZCI6ImFtem4xLmFzay5hY2NvdW50LkFFNUZZQVRGSUFGUUY0VUtXV0JMSUNGTUxQNFpWNktTTlFGWkpTruncQk1LUUZFTDJVTlvendZDREhPNjdRUVBVUTRKWkFHNTNDTUJZVVdWT1dOVlhNSFJCQlVUN0FUUlpEWDZLUlY0VTJRVTVGU0hHTDZKR09BSFdSUFM3N1FTQjROMk1GRlAyV0tDQ1NDNlNQWlhWUUtZNDVETEFYT0QyT09GUUxWR0laNlBDQlJXWkFFQUtaS1NNUFdJNEQzNkVVR1BKRE1WVVJJNkJXWSJ9fQ.Yvl9fFy22oe429RMpfUp7fJskz0sJDa_YKSKqprIKGsHK9lUrHe4vhNKEANKa-gVpyXdAR-uHZbfutuTW6qDy_1eVdIUdr-4ye-b2MTUbp8sJ9ag2zfR_sgQEkGEbqF5L9dGtpaWS06zivuV8gxWUkwOMihNrmv6WP8YC_Qkj_FfQ-OTcJ-2q0BpiDtURX8Ai8JW0c1qhSglJHXlqVqCLpyuDWR0QhJHzS0n5H0opoyNUAF3w4nibxPxV9jmo4jdM8Fqgz3I1rvKPa2nTsrGPJfLDFxPsxtNuUGwxbWglJu4nkzg--f2cTgZE5vmKsaJoUzt5IB3c9H07IPhwC82Iw"
    }
},"request": {
    "type": "IntentRequest","requestId": "amzn1.echo-api.request.ff4e8edd-f343-4842-82bb-79eb1c1f5c22","locale": "en-GB","timestamp": "2021-02-03T11:23:13Z","intent": {
        "name": "RESOLVE_CONFLICT","confirmationStatus": "NONE","slots": {
            
        }
    },"dialogState": "COMPLETED"
}

}

我的服务随即响应:

{
"version": "1.0","response": {
    "outputSpeech": {
        "type": "PlainText","text": "Please select a cat."
    },"directives": [
        {
            "type": "Alexa.Presentation.APL.RenderDocument","token": "resolve_action","document": {
                "type": "APL","version": "1.4","theme": "dark","import": [
                    {
                        "name": "alexa-layouts","version": "1.2.0"
                    }
                ],"resources": [],"onMount": [],"mainTemplate": {
                    "parameters": [
                        "payload"
                    ],"items": [
                        {
                            "type": "AlexaTextList","id": "peopleList","headerTitle": "${payload.textListData.title}","headerBackButton": false,"headerAttributionImage": "${payload.textListData.logoUrl}","backgroundBlur": false,"backgroundColorOverlay": true,"listItems": "${payload.textListData.listItems}"
                        }
                    ]
                }
            },"datasources": {
                "textListData": {
                    "type": "object","objectId": "textList","title": "Meeting Assistant | Resolve Conflict","listItems": [
                        {
                            "primaryText": "Mr. Cat","imageAlignment": "center","imageBlurredBackground": true,"imageScale": "best-fit","imageThumbnailSource": "https://ichef.bbci.co.uk/news/976/cpsprodpb/12A9B/production/_111434467_gettyimages-1143489763.jpg","primaryAction": [
                                {
                                    "type": "SetValue","componentId": "peopleList","property": "headerTitle","value": "Click"
                                }
                            ]
                        }
                    ],"logoUrl": "https://w3-mediapool.hm.edu/mediapool/media/fk10/fk10_lokal/02_aktuelles/02_news/wintersemester_2020/langmann_3/FirstSpirit_1606121272258Akoa-logo-gradient-AKOA_Sunrise_35cm.png"
                }
            }
        }
    ],"shouldEndSession": false
}

}

我在 Alexa 控制台的测试环境中没有看到漂亮的可视化,而是检索以下内容

"error": {
    "type": "INVALID_RESPONSE","message": "An exception occurred while dispatching the request to the skill."
}

由于这种情况很难调试(如果您对此问题也有任何建议,请告诉我),我花了很长时间才走到这一步,但我无法解决这个问题。错误消息非常通用,只是无法正确解析它。但根据文档,它应该没问题(https://developer.amazon.com/en-US/docs/alexa/alexa-presentation-language/apl-interface.html#renderdocument-directive)。

有趣的是,只有在我使用响应模型中的指令字段时才会发生这种情况。基本的卡片响应工作正常,所以我认为问题必须在指令中的某个地方......你有什么想法如何继续吗?还是我错过了什么?

在此先非常感谢您!

解决方法

我想出了问题所在。我使用了不同的 HTTP 2xx 状态代码,而 Alexa 只接受 200 (https://developer.amazon.com/en-US/docs/alexa/custom-skills/request-and-response-json-reference.html#http-header-1)。

因此,我的问题与我的请求数据或开发者控制台中的任何设置无关,而是与我的 HTTP 标头有关。这对我来说有点混乱,因为我实际上返回了可以被接受的成功状态代码,但显然 Alexa 对此有严格的要求。我不知道这一点。 感谢所有在这里帮助我并验证我的 JSON 响应的人。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?