如何为插槽的URL参考创建Alexa目录

时间:2019-12-27 10:39:55

标签: alexa alexa-skill alexa-slot

我发现this example使用Catalog URL Reference来填充Alexa Skill中的自定义插槽。

问题是我不知道如何填充此目录。

我能够使用Ask cli这样创建模型目录:

ask api create-model-catalog -n catalog_name -d "description"

这会以catalogId的形式生成"catalogId""amzn1.ask.interactionModel.catalog.blabla"就像第一个链接中的GitHub示例中的一样。

问题是我不知道如何将值(例如上例中的ingredients.json)放入该目录。

我尝试使用

ask api create-model-catalog-version -c catalogId -f ingredients.json

但是我得到的是

Call create-model-catalog-version error.
Error code: 400
{
  "message": "Request is not valid.",
  "violations": [
    {
      "message": "'source' field of the request is invalid."
    }
  ]
}

在文档中,没有如何处理此问题的示例,因此我被困在这一点。

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

要使用Alexa技能创建和使用目录,您必须:

  1. 将目录文件上传到存储桶或另一个公共存储端点。

  2. 然后,您必须指定一个具有以下内容的JSON文件(例如catalog.json):

{
  "type": "URL",
  "url": "[your catalog url]"
}
  1. 使用询问api 创建目录,如上所述,获取目录ID:
ask api create-model-catalog --catalog-name "IngredientsCatalog"
--catalog-description "Ingredients"
  1. 使用包含目录URL的文件创建模型目录版本:
ask api create-model-catalog-version --file .\catalog.json --catalog-id [your catalog-id]
  1. 此调用将提供跟踪创建版本状态的命令。像这样:
ask api get-model-catalog-update-status -c [your catalog-id] -u [request id]
  1. 如果已成功创建版本,则可以在技能交互模型上进行设置:
            "types": [
                {
                    "name": "Ingredient",
                    "valueSupplier": {
                        "type": "CatalogValueSupplier",
                        "valueCatalog": {
                            "catalogId": "[your catalog-id]",
                            "version": "[the desired version number]"
                        }
                    }
                }
            ]

答案 1 :(得分:1)

我可以在这里添加一些可能会有所帮助的

在上述答案的第1步中,根据我的测试,S3存储桶必须是公开的。另外,以下是您要使用的JSON格式,包括使用同义词(官方Amazon example中未描述)。请注意,您不必包含该示例中所示的ID。

{                
  "values": [
      {
          "name": {
              "value": "hair salon",
              "synonyms": [
                  "hairdresser",
                  "beauty parlor"
              ]
          }
      },
      {
          "name": {
              "value": "hospital",
              "synonyms": [
                  "emergency room",
                  "clinic"
              ]
          }
      },

  ]
}