我正在尝试使用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
参数不是必需的,有效值为synonyms
或patterns
。然而,如果你不提供这个参数,默认值就会生效。根据文档,默认值是synonyms
。这将解释传入模式时的错误。