Watson Conversation API 说: 'Patterns are defined but type is not specified.'



我正在尝试使用Watson SDK for Node.js调用Watson Conversation API的updateValue方法。该请求更新patterns类型实体值的模式。

我的请求失败,返回400 Bad Request和消息:

[ { message: 'Patterns are defined but type is not specified.',
path: '.patterns' } ],

以下是我用来调用API的代码-相当标准

let params = {
workspace_id: '<redacted>',
entity: 'myEntityType',
type: 'patterns', // tried with and without this line
value: 'myCanonicalValue',
new_patterns: ['test'],
};
watsonApi.updateValue(params, (error, response) => {
if (error) {
console.log('Error returned by Watson when updating an entity value.');
reject(error);
} else {
resolve(response);
}
});

实际上,请求所做的是试图从模式列表中删除一个模式。由于没有用于删除模式的端点,所以我获取模式列表,从模式列表中删除需要删除的模式,并通过updateValue方法发送现在减少的模式列表。在上面的例子中,假设模式列表是['test', 'test2']。通过仅使用['test']调用updateValue,我们正在删除test2模式。

我使用的是以前的API版本,但我也在Assistant API Explorer中对其进行了测试,版本2018-07-10在发送如下所示的原始请求体时也会导致相同的问题:

{
"patterns": ["test"]
}

我是做错了什么还是忘记了一个参数?

这不是一个bug,但它是一个不直观的参数名称。该服务接受一个type参数,Node SDK有一个名为new_type的包装器参数。如果您使用它来更新模式而不是同义词(默认值(,则需要将new_type指定为"patterns",即使该参数列为可选参数。

这似乎是Watson Conversation Node.js SDK中的一个错误。

为了避免这种情况,请始终将new_type: 'patterns'添加到params:

let params = {
workspace_id: '<redacted>',
entity: 'myEntityType',
new_type: 'patterns',
value: 'myCanonicalValue',
new_patterns: ['test'],
};

我通过以下方式阅读Watson Assistant API的updateValue:

new_type参数不是必需的,有效值为synonymspatterns。然而,如果你不提供这个参数,默认值就会生效。根据文档,默认值是synonyms。这将解释传入模式时的错误。

相关内容

最新更新