如何访问在Amazon lex中的机器人内部创建的所有意图?

时间:2018-08-13 07:41:31

标签: amazon-web-services aws-lambda amazon-lex

我正在使用Amazon lex创建自定义机器人。.在机器人内部,我创建了许多意图。我们可以找到在特定的bot内创建的所有intent吗,例如currentIntent会显示特定的intent,我想在bot中打印所有现有的intent

1 个答案:

答案 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.
    }
});