google-cloud-platform - 使用 DialogFlow“恢复代理”API 时出错
问题描述
在使用 DialogFlow“恢复代理”API时,我们突然开始遇到错误。调用失败并出现以下错误:
400 com.google.apps.framework.request.BadRequestException:代理 zip 无效。缺少必需的 json 文件 agent.json
奇怪的是,它似乎只发生在新创建的 DialogFlow 代理上,而不是旧的/现有的。我们正在使用这个 API,以便我们可以使用我们自己的意图/实体以编程方式创建自定义代理。这段代码在过去两年里一直有效,我们这边没有任何变化。我们正在使用 Python 的官方 DialogFlow 客户端库。我们一直在 0.2.0 版本上,我尝试更新到最新版本(0.8.0),但没有任何变化。
我尝试更改我们的代码以包含 agent.json 文件(通过使用“导出代理”API 并从那里获取 agent.json 文件)。在这种情况下,我不再收到上述错误,并且还原似乎成功。但是,代理似乎在某种程度上是腐败的。当试图点击任何意图时——或在 DialogFlow 控制台中的各种其他操作——我收到错误:
无法获取训练短语 Errorid=xxx
(其中 xxx 似乎是每次都会更改的 UUID)
尝试以该状态导出代理也会显示错误:
下载代理时出错
有时,即使包括上面的 agent.json,恢复仍然会失败,但会返回错误:
500 遇到内部错误。
我很感激任何关于我们如何让它再次工作的想法。谢谢!
解决方案
经过大量的试验和错误,我找到了解决方案。这是以防其他人遇到这种情况。最近 DialogFlow 在“恢复代理”操作期间处理 zip 上传的方式肯定发生了一些变化——
1) agent.json 文件现在在 zip 文件中是必需的,而之前它是可选的
2) 我们发现 _usersays 文件中用于各种意图的一些“id”元素不是有效的 UUID。以前这不会导致任何错误,但现在代理最终处于无效状态(“无法获得训练短语”错误,等等,如上所述)。
推荐阅读
- vue.js - 自定义 Vue JS 插件无法使用 Nuxt JS 正确导入
- hl7-fhir - 是否有搜索参数修饰符用于针对资源中类似数组的元素的固定位置(“第一个”或“最后一个”)查询值?
- reactjs - 将设置按钮反应为禁用状态
- java - 如何以编程方式更改分频器偏差
- android - Flutter Plugin manifestPlaceholders 错误
- angular - 如何将授权令牌添加到 HTTP 请求
- python - 在 ElasticSearch 上索引 SQLAlchemy 模型
- rest - 对 Jenkins /reload 或 /restart 的纯 Java REST API POST 调用总是返回状态 403 禁止,但可以工作
- bash - 使用 awk 操作来自两个来源的数据
- java - 用于 JSON 整数数组的 PACT