我正在使用Amazon lex创建自定义机器人。.在机器人内部,我创建了许多意图。我们可以找到在特定的bot内创建的所有intent吗,例如currentIntent会显示特定的intent,我想在bot中打印所有现有的intent
答案 0 :(得分:1)
您将找不到Lex请求中列出的所有意图,Lex仅将currentIntent
传递给您的后端Lambda函数。
因此,您必须使用Amazon Lex API,尤其是LexModelBuildingService,您可以在其中添加,更改或设置机器人模型。
要开始在Node.js中使用Lex Model Building Service,请遵循以下说明:AWS SDK for JavaScript >> Getting Started in Node.js
安装适用于JavaScript的AWS开发工具包后,可以像下面这样使用LexModelBuildingService:
var lexmodelbuildingservice = new AWS.LexModelBuildingService();
然后,您将要使用GetIntents操作。
GetIntents
返回意图信息,如下所示:
-如果您指定nameContains字段,则返回包含指定字符串的所有Intent的$ LATEST版本。
-如果未指定nameContains字段,则返回有关所有意图的$ LATEST版本的信息。
像这样使用getIntents
动作:
var params = {
maxResults: 50, //set to how many intents you think your bot has
nextToken: ""
};
首先设置参数,但不包括nameContains
字段,因此您可以取回所有的Intent,而不仅仅是一个。然后像这样调用getIntents:
lexmodelbuildingservice.getIntents(params, function(err, data) {
if (err) { console.log(err, err.stack); }
else {
// handle data here
}
});
function(err, data)
是将在getIntents
完成检索将作为data
提供的Intents信息时运行的回调函数。
这是data
对象的格式:
{
"intents": [
{
"createdDate": number,
"description": "string",
"lastUpdatedDate": number,
"name": "string",
"version": "string"
}
],
"nextToken": "string"
}
如果意图大于设置的nextToken
,请使用maxResults
,以获取意图信息的下一页。
因此,要获取所有意图的所有名称,以下是处理上面代码中表示“此处处理数据”的数据的方法。您将要遍历intents
数组并创建所有名称的自己的数组。
var intents = data.intents;
var intentNames = [];
for (i=0; i<intents.length; i++) {
intentNames[i] = intents[i].name;
}
因此,最后,您的Lambda node.js代码应类似于:
var lexmodelbuildingservice = new AWS.LexModelBuildingService();
var params = {
maxResults: 50,
nextToken: ""
};
lexmodelbuildingservice.getIntents(params, function(err, data) {
if (err) { console.log(err, err.stack); }
else {
var intents = data.intents;
var intentNames = [];
for (i=0; i<intents.length; i++) {
intentNames[i] = intents[i].name;
}
// intentNames is now an array of intent names, do with it as you like here.
}
});