ASK-CLI 部署失败 "The object to be validated must not be null"

ASK-CLI deploy fails with "The object to be validated must not be null"

我通过一个 Alexa Skills Kit 快速入门来创建我的第一个 Alexa 技能,现在我正在尝试向后工作以设置我的项目,以便从我的文本编辑器进行开发并通过 ASK CLI 进行部署。但似乎 ask-cli 找不到我的交互模型,因为我在尝试部署时得到以下输出:

$ ask deploy

-------------------- Update Skill Project --------------------

Skill Id: amzn1.ask.skill.6eebd8dd-2062-4666-9040-34d103d114c7

Skill deployment finished.

Call update-model error.

Error code: 400 {
"message": "The interaction model is not valid.", "violations": [ { "message": "null: HV000116: The object to be validated must not be null." } ] }

当我 运行 使用 --debug 标志时,在我看来交互模型正在作为空对象发送。我在下面粘贴了完整的输出,但据我所知,我认为这是重要的部分:

[2017-12-30T22:21:56.535Z] - DEBUG - UPDATE-MODEL request-id: d9357bc2-edaf-11e7-85ba-550bb02f81a7 POST https://api.amazonalexa.com/v0/skills/amzn1.ask.skill.6eebd8dd-2062-4666-9040-34d103d114c7/interactionModel/locales/en-US status code: 400 Bad Request

Request headers: {"User-Agent":"ask-cli/1.0.0-beta.8 Node/v9.3.0","Authorization":"Atza|IwEBIGhOiYYsONdFRcrE8Aapsyzk_O798yl_9FmRyO8BiXdsgo8tjYgq6eIB9323UavV2_U5PA2TkRYTq3Tt9Ui69n-XWyorWgRFpkm0ahl9uBWq5diTyQQIyGTXc_sgJQcjx3_mKiJ-ku5y_CR7cFOg6apqOTMyu4BO6pcC8ejydsne5GfqkbEqDHlwa44cQyxOw9Ir97CB0-WdleRI-IJpsyCoQvZ11Ah2pt_K-PZRtdqE5nUG9tQx49_v1N5apGrNyNxKAICAnJZ0aH3gE1ruAlZc4BUNn7SBM6-sSC1pppSTNVX_8MfwoRfVsdZ-cPbjJIxM3wftjUAah0wPdC-yeEVf-P2JOpTAscLpT-zEzzkEGiZrD1W61YyE0SH04KXqoOS3sgdWYrOEomIQg1TbcOlYvskbCqnOnkrHMGikgaUbWCF7YOTQrE1s0zOrIOujHJez7iIMc0WhUI4LkGdhHttSxxzRHnL3t5JEhOHC0DkLDaRp6ESPs6U4n7hfYtE2ktJDTs_nql39xfDqadfziEPOurEpA3MffHN20mGx3w-8jpIx_pW4mdo41Vi33hHHSa-1l9fbsKRKef2MrI91oNUY9eI7HXNF6Exi3OFR2oFP29TsgA25ZNBUcrEAM1OxAVI","accept":"application/json","content-type":"application/json","content-length":2}

Request body: {}

这是我的项目结构:

├── .ask
│   └── config
├── .gitignore
├── lambda
│   ├── custom
│   │   ├── node_modules
│   │   ├── package-lock.json
│   │   ├── package.json
│   │   ├── src
│   │   └── test
├── models
│   └── en-US.json
└── skill.json

ask-deploy --debug 的完整输出如下。有人对为什么无法验证交互模型有任何想法吗?

-------------------- Debug Mode -------------------- [2017-12-30T22:21:55.649Z] - DEBUG - UPDATE-SKILL request-id: d89914a8-edaf-11e7-85ba-550bb02f81a7 PUT https://api.amazonalexa.com/v0/skills/amzn1.ask.skill.6eebd8dd-2062-4666-9040-34d103d114c7 status code: 202 Accepted

Request headers: {"User-Agent":"ask-cli/1.0.0-beta.8 Node/v9.3.0","Authorization":"Atza|IwEBIGhOiYYsONdFRcrE8Aapsyzk_O798yl_9FmRyO8BiXdsgo8tjYgq6eIB9323UavV2_U5PA2TkRYTq3Tt9Ui69n-XWyorWgRFpkm0ahl9uBWq5diTyQQIyGTXc_sgJQcjx3_mKiJ-ku5y_CR7cFOg6apqOTMyu4BO6pcC8ejydsne5GfqkbEqDHlwa44cQyxOw9Ir97CB0-WdleRI-IJpsyCoQvZ11Ah2pt_K-PZRtdqE5nUG9tQx49_v1N5apGrNyNxKAICAnJZ0aH3gE1ruAlZc4BUNn7SBM6-sSC1pppSTNVX_8MfwoRfVsdZ-cPbjJIxM3wftjUAah0wPdC-yeEVf-P2JOpTAscLpT-zEzzkEGiZrD1W61YyE0SH04KXqoOS3sgdWYrOEomIQg1TbcOlYvskbCqnOnkrHMGikgaUbWCF7YOTQrE1s0zOrIOujHJez7iIMc0WhUI4LkGdhHttSxxzRHnL3t5JEhOHC0DkLDaRp6ESPs6U4n7hfYtE2ktJDTs_nql39xfDqadfziEPOurEpA3MffHN20mGx3w-8jpIx_pW4mdo41Vi33hHHSa-1l9fbsKRKef2MrI91oNUY9eI7HXNF6Exi3OFR2oFP29TsgA25ZNBUcrEAM1OxAVI","accept":"application/json","content-type":"application/json","content-length":1768}

Request body: {"skillManifest":{"publishingInformation":{"locales":{"en-US":{"summary":"My summary","examplePhrases":["There", "are", "real", "phrases", "here"],"keywords":["choice","random"],"name":"Choose Between","smallIconUri":"https://api.amazonalexa.com/v0/skills/amzn1.ask.skill.6eebd8dd-2062-4666-9040-34d103d114c7/images/eyJkIjoiQjRvNFltSDdCQU54Y25DanlKR1ArVFhGZW1ZL1I3NjdpRldXQXltZ2FUVmNZblV6WUE1eU4veVduMHF2WEY2bXdiUmlIZkJ1SFVNbEh0Q3A3K1g4SDc1WnczdDNqR3duT0JubnBhZVhBTkF0UFMzeVl4Q3k4eFQxTlRxeXc0dGYiLCJpdiI6IlZHN1gyb0FqQ2VjMnBEWGtMZ2J0SEE9PSIsInYiOjF9","description":"My description","largeIconUri":"https://api.amazonalexa.com/v0/skills/amzn1.ask.skill.6eebd8dd-2062-4666-9040-34d103d114c7/images/eyJkIjoiTkQ5OWd2RkN3UDhoWlJ1eFF5TDNtZytHbStkbFNYcHhqUGNDSG04RjREVUhIVTRVQkpxbjVyTFVWaHFVRDFPbDRtYnlWQUZCMFJRQnpEczRFQnlOckF0N05yZVZDSnhRUHIzZmFoWWRTRjRqZHNIUjUxV3dMekpNZzl0OFhzVFdoQXV0RERPQTBsV3d3b05xVnYxODZRPT0iLCJpdiI6IiszVG9QQ1o2ajA2ZThPVzIxTUh4MXc9PSIsInYiOjF9"}},"isAvailableWorldwide":true,"testingInstructions":"Nothing special","category":"NOVELTY","distributionCountries":[]},"apis":{"custom":{"endpoint":{"uri":"arn:aws:lambda:us-west-2:760655967349:function:randomChoiceAlexaSkill"}}},"manifestVersion":"1.0","permissions":[],"privacyAndCompliance":{"allowsPurchases":false,"isExportCompliant":true,"containsAds":false,"isChildDirected":false,"usesPersonalInfo":false}}}

Response headers: {"server":"Server","date":"Sat, 30 Dec 2017 22:21:56 GMT","content-type":"application/json","content-length":"2","connection":"close","x-amzn-requestid":"d89914a8-edaf-11e7-85ba-550bb02f81a7","x-amz-date":"Sat, 30 Dec 2017 22:21:56 GMT","location":"/v0/skills/amzn1.ask.skill.6eebd8dd-2062-4666-9040-34d103d114c7/status","vary":"Accept-Encoding,User-Agent"}

Response body: {} ---------------------------------------- [2017-12-30T22:21:55.941Z] - DEBUG - GET-SKILL-STATUS request-id: d8d4977b-edaf-11e7-a1e2-2df47a70d226 GET https://api.amazonalexa.com/v0/skills/amzn1.ask.skill.6eebd8dd-2062-4666-9040-34d103d114c7/status status code: 200 OK

Request headers: {"User-Agent":"ask-cli/1.0.0-beta.8 Node/v9.3.0","Authorization":"Atza|IwEBIGhOiYYsONdFRcrE8Aapsyzk_O798yl_9FmRyO8BiXdsgo8tjYgq6eIB9323UavV2_U5PA2TkRYTq3Tt9Ui69n-XWyorWgRFpkm0ahl9uBWq5diTyQQIyGTXc_sgJQcjx3_mKiJ-ku5y_CR7cFOg6apqOTMyu4BO6pcC8ejydsne5GfqkbEqDHlwa44cQyxOw9Ir97CB0-WdleRI-IJpsyCoQvZ11Ah2pt_K-PZRtdqE5nUG9tQx49_v1N5apGrNyNxKAICAnJZ0aH3gE1ruAlZc4BUNn7SBM6-sSC1pppSTNVX_8MfwoRfVsdZ-cPbjJIxM3wftjUAah0wPdC-yeEVf-P2JOpTAscLpT-zEzzkEGiZrD1W61YyE0SH04KXqoOS3sgdWYrOEomIQg1TbcOlYvskbCqnOnkrHMGikgaUbWCF7YOTQrE1s0zOrIOujHJez7iIMc0WhUI4LkGdhHttSxxzRHnL3t5JEhOHC0DkLDaRp6ESPs6U4n7hfYtE2ktJDTs_nql39xfDqadfziEPOurEpA3MffHN20mGx3w-8jpIx_pW4mdo41Vi33hHHSa-1l9fbsKRKef2MrI91oNUY9eI7HXNF6Exi3OFR2oFP29TsgA25ZNBUcrEAM1OxAVI"}

Response headers: {"server":"Server","date":"Sat, 30 Dec 2017 22:21:57 GMT","content-type":"application/json","content-length":"87","connection":"close","x-amzn-requestid":"d8d4977b-edaf-11e7-a1e2-2df47a70d226","x-amz-date":"Sat, 30 Dec 2017 22:21:57 GMT","vary":"Accept-Encoding,User-Agent"}

Response body: "{\"manifest\":{\"lastModified\":{\"time\":\"2017-12-30T22:21:56.889Z\",\"status\":\"SUCCESSFUL\"}}}" ---------------------------------------- [2017-12-30T22:21:56.292Z] - DEBUG - GET-MODEL-STATUS request-id: d9020ff6-edaf-11e7-b4f4-39c6476092ba GET https://api.amazonalexa.com/v0/skills/amzn1.ask.skill.6eebd8dd-2062-4666-9040-34d103d114c7/interactionModel/locales/en-US/status status code: 200 OK

Request headers: {"User-Agent":"ask-cli/1.0.0-beta.8 Node/v9.3.0","Authorization":"Atza|IwEBIGhOiYYsONdFRcrE8Aapsyzk_O798yl_9FmRyO8BiXdsgo8tjYgq6eIB9323UavV2_U5PA2TkRYTq3Tt9Ui69n-XWyorWgRFpkm0ahl9uBWq5diTyQQIyGTXc_sgJQcjx3_mKiJ-ku5y_CR7cFOg6apqOTMyu4BO6pcC8ejydsne5GfqkbEqDHlwa44cQyxOw9Ir97CB0-WdleRI-IJpsyCoQvZ11Ah2pt_K-PZRtdqE5nUG9tQx49_v1N5apGrNyNxKAICAnJZ0aH3gE1ruAlZc4BUNn7SBM6-sSC1pppSTNVX_8MfwoRfVsdZ-cPbjJIxM3wftjUAah0wPdC-yeEVf-P2JOpTAscLpT-zEzzkEGiZrD1W61YyE0SH04KXqoOS3sgdWYrOEomIQg1TbcOlYvskbCqnOnkrHMGikgaUbWCF7YOTQrE1s0zOrIOujHJez7iIMc0WhUI4LkGdhHttSxxzRHnL3t5JEhOHC0DkLDaRp6ESPs6U4n7hfYtE2ktJDTs_nql39xfDqadfziEPOurEpA3MffHN20mGx3w-8jpIx_pW4mdo41Vi33hHHSa-1l9fbsKRKef2MrI91oNUY9eI7HXNF6Exi3OFR2oFP29TsgA25ZNBUcrEAM1OxAVI"}

Response headers: {"server":"Server","date":"Sat, 30 Dec 2017 22:21:57 GMT","content-type":"application/json","content-length":"20","connection":"close","x-amzn-requestid":"d9020ff6-edaf-11e7-b4f4-39c6476092ba","x-amz-date":"Sat, 30 Dec 2017 22:21:57 GMT","vary":"Accept-Encoding,User-Agent"}

Response body: "{\"status\":\"SUCCESS\"}" ---------------------------------------- [2017-12-30T22:21:56.535Z] - DEBUG - UPDATE-MODEL request-id: d9357bc2-edaf-11e7-85ba-550bb02f81a7 POST https://api.amazonalexa.com/v0/skills/amzn1.ask.skill.6eebd8dd-2062-4666-9040-34d103d114c7/interactionModel/locales/en-US status code: 400 Bad Request

Request headers: {"User-Agent":"ask-cli/1.0.0-beta.8 Node/v9.3.0","Authorization":"Atza|IwEBIGhOiYYsONdFRcrE8Aapsyzk_O798yl_9FmRyO8BiXdsgo8tjYgq6eIB9323UavV2_U5PA2TkRYTq3Tt9Ui69n-XWyorWgRFpkm0ahl9uBWq5diTyQQIyGTXc_sgJQcjx3_mKiJ-ku5y_CR7cFOg6apqOTMyu4BO6pcC8ejydsne5GfqkbEqDHlwa44cQyxOw9Ir97CB0-WdleRI-IJpsyCoQvZ11Ah2pt_K-PZRtdqE5nUG9tQx49_v1N5apGrNyNxKAICAnJZ0aH3gE1ruAlZc4BUNn7SBM6-sSC1pppSTNVX_8MfwoRfVsdZ-cPbjJIxM3wftjUAah0wPdC-yeEVf-P2JOpTAscLpT-zEzzkEGiZrD1W61YyE0SH04KXqoOS3sgdWYrOEomIQg1TbcOlYvskbCqnOnkrHMGikgaUbWCF7YOTQrE1s0zOrIOujHJez7iIMc0WhUI4LkGdhHttSxxzRHnL3t5JEhOHC0DkLDaRp6ESPs6U4n7hfYtE2ktJDTs_nql39xfDqadfziEPOurEpA3MffHN20mGx3w-8jpIx_pW4mdo41Vi33hHHSa-1l9fbsKRKef2MrI91oNUY9eI7HXNF6Exi3OFR2oFP29TsgA25ZNBUcrEAM1OxAVI","accept":"application/json","content-type":"application/json","content-length":2}

Request body: {}

Response headers: {"server":"Server","date":"Sat, 30 Dec 2017 22:21:57 GMT","content-type":"application/json","content-length":"139","connection":"close","x-amzn-requestid":"d9357bc2-edaf-11e7-85ba-550bb02f81a7","x-amz-date":"Sat, 30 Dec 2017 22:21:57 GMT","x-amzn-errortype":"BadRequestException:http://internal.amazon.com/coral/com.amazon.alexa.skillmanagement/","vary":"Accept-Encoding,User-Agent"}

Response body: {"message":"The interaction model is not valid.","violations":[{"message":"null: HV000116: The object to be validated must not be null."}]}

我的猜测是 en-US.JSON 有问题,但我不确定。

如果你想把一个工作技能转换为使用CLI,那么我建议你从工作技能开始,然后使用"ask clone"将它下载成CLI需要的格式。

然后您应该能够完全按照下载的方式部署技能。将所有内容签入 Git,然后继续使用下载的副本。如果您的更改破坏了某些内容,您可以恢复到工作级别等。

我 运行 在更新 Alexa 开发人员控制台中的交互模型并直接从 JSON 编辑器复制 JSON 后遇到了这个问题。 应该 工作,并且 JSON 看起来很完整,并且正确地检查了代码,但出于某种原因要求部署它。

我解决了它:

ask api get-model -s <skillId> -l en-US > models/en-US.json

这使用API拉取当前部署的模型,并写入指定文件。

我在编辑交互模型文件后收到此错误 (en-US.json)

我在 Web 界面中使用已部署的 Alexa 技能,发现我在 那里 的编辑可以导出到 json 文件,该文件似乎位于与我的 Skills Kit 项目结构相同。所以我用生成的模型替换了 en-US.json 文件的内容。但是我在部署时收到这个错误:

{"message":"The interaction model is not valid.","violations":[{"message":"null: HV000116: The object to be validated must not be null."}]}

事实证明,生成的模型需要稍作调整才能使其与 ASK CLI 正在寻找的交互模型文件兼容。生成的模型结构如下:

{
    "languageModel": {
        "invocationName": "yo mamma",
        "intents": [
            {
                "name": "AMAZON.CancelIntent",
                "slots": [],
                "samples": []
            },
            {
                "name": "AMAZON.HelpIntent",
                "slots": [],
                "samples": []
            },
            {
                "name": "AMAZON.StopIntent",
                "slots": [],
                "samples": []
            }
        ]
    }
}

但是 en-US.json 模型结构如下所示:

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "yo mama",
            "intents": [
                {
                    "name": "AMAZON.CancelIntent",
                    "slots": [],
                    "samples": []
                },
                {
                    "name": "AMAZON.HelpIntent",
                    "slots": [],
                    "samples": []
                },
                {
                    "name": "AMAZON.StopIntent",
                    "slots": [],
                    "samples": []
                }
            ]
        }
    }
}

我只是用 "interactionModel" 属性 将我的语言模型包装在另一个对象中,并且模型已成功验证和部署。