Actions on google 如何呈现从webhook返回的列表

Actions on google 如何呈现从webhook返回的列表,actions-on-google,actions-builder,Actions On Google,Actions Builder,我正在使用谷歌的行动。我从webhook返回JSON,在模拟器中测试操作时收到以下错误: 无法呈现列表或集合提示,因为缺少插槽的类型重写。注意,列表和集合只能用于插槽填充。应该有相应的类型重写,描述如何呈现此类型的列表或集合 JSON是从位于的文档中提取的稍加修改的示例 typeOverrides名称“items”与场景的插槽名称匹配 下面是webhook请求和响应JSON ***请求*** { "handler": { "name": &q

我正在使用谷歌的行动。我从webhook返回JSON,在模拟器中测试操作时收到以下错误:

无法呈现列表或集合提示,因为缺少插槽的类型重写。注意,列表和集合只能用于插槽填充。应该有相应的类型重写,描述如何呈现此类型的列表或集合

JSON是从位于的文档中提取的稍加修改的示例

typeOverrides名称“items”与场景的插槽名称匹配

下面是webhook请求和响应JSON

***请求***

 {
  "handler": {
    "name": "aa"
  },
  "intent": {
    "name": "searchIntent",
    "params": {
      "searchParm": {
        "original": "milk",
        "resolved": "milk"
      }
    },
    "query": "milk"
  },
  "scene": {
    "name": "Start",
    "slotFillingStatus": "UNSPECIFIED",
    "slots": {},
    "next": {
      "name": "SearchScene"
    }
  },
  "session": {
    "id": "ABwppHGln0UTzfUPqJ1SMr1Cuw2TyPjJQoGUkULazcObus3vUwJCJCpba--5PSRwjqMQelRqMAUnwPvl",
    "params": {},
    "typeOverrides": [],
    "languageCode": ""
  },
  "user": {
    "locale": "en-AU",
    "params": {},
    "accountLinkingStatus": "ACCOUNT_LINKING_STATUS_UNSPECIFIED",
    "verificationStatus": "VERIFIED",
    "packageEntitlements": [],
    "lastSeenTime": "2020-11-05T21:24:16Z"
  },
  "home": {
    "params": {}
  },
  "device": {
    "capabilities": [
      "SPEECH",
      "RICH_RESPONSE",
      "LONG_FORM_AUDIO"
    ]
  }
}
***回应***

{
  "session": {
    "id": "ABwppHGln0UTzfUPqJ1SMr1Cuw2TyPjJQoGUkULazcObus3vUwJCJCpba--5PSRwjqMQelRqMAUnwPvl",
    "params": {},
    "typeOverrides": [
      {
        "name": "items",
        "synonym": {
          "entries": [
            {
              "name": "ITEM_1",
              "synonyms": [
                "Item 1",
                "First item"
              ],
              "display": {
                "title": "Item #1",
                "description": "Description of Item #1",
                "image": {
                  "alt": "Google Assistant logo",
                  "height": 0,
                  "url": "https://developers.google.com/assistant/assistant_96.png",
                  "width": 0
                }
              }
            },
            {
              "name": "ITEM_2",
              "synonyms": [
                "Item 2",
                "Second item"
              ],
              "display": {
                "title": "Item #2",
                "description": "Description of Item #2",
                "image": {
                  "alt": "Google Assistant logo",
                  "height": 0,
                  "url": "https://developers.google.com/assistant/assistant_96.png",
                  "width": 0
                }
              }
            },
            {
              "name": "ITEM_3",
              "synonyms": [
                "Item 3",
                "Third item"
              ],
              "display": {
                "title": "Item #3",
                "description": "Description of Item #3",
                "image": {
                  "alt": "Google Assistant logo",
                  "height": 0,
                  "url": "https://developers.google.com/assistant/assistant_96.png",
                  "width": 0
                }
              }
            },
            {
              "name": "ITEM_4",
              "synonyms": [
                "Item 4",
                "Fourth item"
              ],
              "display": {
                "title": "Item #4",
                "description": "Description of Item #4",
                "image": {
                  "alt": "Google Assistant logo",
                  "height": 0,
                  "url": "https://developers.google.com/assistant/assistant_96.png",
                  "width": 0
                }
              }
            }
          ]
        },
        "typeOverrideMode": "TYPE_REPLACE"
      }
    ]
  },
  "prompt": {
    "override": false,
    "content": {
      "list": {
        "items": [
          {
            "key": "ITEM_1"
          },
          {
            "key": "ITEM_2"
          },
          {
            "key": "ITEM_3"
          },
          {
            "key": "ITEM_4"
          }
        ],
        "subtitle": "List subtitle",
        "title": "List title"
      }
    },
    "firstSimple": {
      "speech": "This is a list.",
      "text": "This is a list."
    }
  }
}

类型覆盖名称应与插槽的类型相匹配,而不是插槽的名称。

我与大家分享解决方案

诚然,文档中省略了某些部分来完成这项工作,但如果我们注意阅读并严格遵循它,它确实会起作用

一旦我们有了Actions Builder项目,我们要做的第一件事就是在types部分创建一个实体。只是,我们不需要添加输入或值,只需要创建类型

下一步是准备展示我们收藏的场景。在本例中,我创建了一个名为INTRO的

这就是你的错误所在。您正试图在webhook中显示进入场景时激发的集合。没有什么东西必须放在那里,它必须是空的

下一步是添加插槽类型和名称。我们还必须配置另外两个东西,一个是使所述插槽成为必需的,另一个是激活复选框,以便它调用负责绘制集合的处理程序

如果您注意到,我将slot命名为:type\u option,它的类型是prompt\u type,也就是我在第一步中声明的类型。然后我将该插槽标记为所需,最后激活它以调用webhook中名为LaunchRequest的处理程序

现在让我们看看代码

const LaunchRequestHandler=app=>{
app.handle('LaunchRequest',conv=>{
conv.session.typeOverrides=[
{
name:'prompt_option',//我们引用的是插槽的类型,而不是名称
模式:“TYPE_REPLACE”,
同义词:{
参赛作品:[
{
名称:“第1项”,
同义词:['Item 1','First Item'],
显示:{
标题:“元素1”,
description:'这是元素1',
图片:新图片({
url:“”,
alt:'示例'
})
}
},
{
名称:“项目2”,
同义词:['Item 2','Second Item'],
显示:{
标题:“要素2”,
描述:'这是元素2',
图片:新图片({
url:“”,
alt:“示例2”
})
}
}
]
}
}
];
const items=[{key:'ITEM_1'},{key:'ITEM_2'}]
conv.add(新集合({title:'',subtitle:'',items}))
})
}
这是一段代码,我们将其配置为在呈现集合时调用。如果我们仔细观察,我们指的是类型,而不是插槽的名称

有了这个,如果我们在模拟器上进行测试,一切都应该正常工作。一切都很完美


我希望我的帮助对你有帮助。

尝试过,同样的结果。它应该是一个类型名还是一个插槽名,这有点令人困惑。相同的错误?你能用一个屏幕截图来更新你的问题吗?屏幕截图显示了触发该事件的场景以及所涉及的插槽和类型的详细信息。我很久以前遇到过这个问题,但还没有找到解决方法。你明白了吗?如果我在你之前就知道了,我可以回来告诉你是什么帮助了我。我已经放弃了。我以单个文本字符串的形式发回我的选项,“第1项:…,第2项:…”。谢谢卡洛斯,很高兴你能发帖。不幸的是,我可能需要一段时间才能回到这个项目并尝试一下。