Amazon Lex Bot - 回复你好
Amazon Lex Bot - Replying to Hello
我已经开始学习 Amazon lex,浏览了他们的文档和示例机器人。
我面临的问题是所有的机器人都是问答类型,如果我必须让机器人回复你好,正确的方法应该是什么或如何去做?
据我了解:
I am thinking of creating an intent for Hello and when it gets
fulfilled i can make the bot reply How can i help you? with Lambda Function, this is the
way it is supposed to be done?
用户可以提出许多其他直接问题,我是否必须为具有 lambda 函数的意图回复所有问题?我正在使用 java 脚本。
我卡住了,请问有什么方法吗?
编辑 1:
这就是我一直在寻找的,任何建议都会有所帮助。
要在 Lambda 函数中实现从 JavaScript (Node.js) 返回格式化的响应:
首先创建一些方便的函数来构建正确的 Lex 响应格式。
function close(sessionAttributes, fulfillmentState, message) {
return {
sessionAttributes,
dialogAction: {
type: 'Close',
fulfillmentState,
message,
},
};
}
您可以在 AWS-Lex-Convo-Bot-Example index.js
中找到更多类似 Node response-building 的函数
然后只需调用该函数并将其传递给它所需的内容,如下所示:
var message = {
'contentType': 'PlainText',
'content': 'Hi! How can I help you?'
}
var responseMsg = close( sessionAttributes, 'Fulfilled', message );
(在 'content' 中写下您的消息,如果使用 SSML 标签,请将 'contentType' 更改为 'SSML')
然后将responseMsg
传递给exports.handler
的callback
。
把它们放在一起,你会得到:
function close(sessionAttributes, fulfillmentState, message) {
return {
sessionAttributes,
dialogAction: {
type: 'Close',
fulfillmentState,
message,
},
};
}
exports.handler = (event, context, callback) => {
console.log( "EVENT= "+JSON.stringify(event) );
const intentName = event.currentIntent.name;
var sessionAttributes = event.sessionAttributes;
var responseMsg = "";
if (intentName == "HelloIntent") { // change 'HelloIntent' to your intent's name
var message = {
'contentType': 'PlainText',
'content': 'Hi! How can I help you?'
}
responseMsg = close( sessionAttributes, 'Fulfilled', message );
}
// else if (intentName == "Intent2") {
// build another response for this intent
// }
else {
console.log( "ERROR unhandled intent named= "+intentName );
responseMsg = close( sessionAttributes, 'Fulfilled', {"contentType":"PlainText", "content":"Sorry, I can't help with that yet."});
}
console.log( "RESPONSE= "+JSON.stringify(responseMsg) );
callback(null, responseMsg);
}
我已经开始学习 Amazon lex,浏览了他们的文档和示例机器人。
我面临的问题是所有的机器人都是问答类型,如果我必须让机器人回复你好,正确的方法应该是什么或如何去做?
据我了解:
I am thinking of creating an intent for Hello and when it gets fulfilled i can make the bot reply How can i help you? with Lambda Function, this is the way it is supposed to be done?
用户可以提出许多其他直接问题,我是否必须为具有 lambda 函数的意图回复所有问题?我正在使用 java 脚本。
我卡住了,请问有什么方法吗?
编辑 1:
这就是我一直在寻找的,任何建议都会有所帮助。
要在 Lambda 函数中实现从 JavaScript (Node.js) 返回格式化的响应:
首先创建一些方便的函数来构建正确的 Lex 响应格式。
function close(sessionAttributes, fulfillmentState, message) {
return {
sessionAttributes,
dialogAction: {
type: 'Close',
fulfillmentState,
message,
},
};
}
您可以在 AWS-Lex-Convo-Bot-Example index.js
中找到更多类似 Node response-building 的函数然后只需调用该函数并将其传递给它所需的内容,如下所示:
var message = {
'contentType': 'PlainText',
'content': 'Hi! How can I help you?'
}
var responseMsg = close( sessionAttributes, 'Fulfilled', message );
(在 'content' 中写下您的消息,如果使用 SSML 标签,请将 'contentType' 更改为 'SSML')
然后将responseMsg
传递给exports.handler
的callback
。
把它们放在一起,你会得到:
function close(sessionAttributes, fulfillmentState, message) {
return {
sessionAttributes,
dialogAction: {
type: 'Close',
fulfillmentState,
message,
},
};
}
exports.handler = (event, context, callback) => {
console.log( "EVENT= "+JSON.stringify(event) );
const intentName = event.currentIntent.name;
var sessionAttributes = event.sessionAttributes;
var responseMsg = "";
if (intentName == "HelloIntent") { // change 'HelloIntent' to your intent's name
var message = {
'contentType': 'PlainText',
'content': 'Hi! How can I help you?'
}
responseMsg = close( sessionAttributes, 'Fulfilled', message );
}
// else if (intentName == "Intent2") {
// build another response for this intent
// }
else {
console.log( "ERROR unhandled intent named= "+intentName );
responseMsg = close( sessionAttributes, 'Fulfilled', {"contentType":"PlainText", "content":"Sorry, I can't help with that yet."});
}
console.log( "RESPONSE= "+JSON.stringify(responseMsg) );
callback(null, responseMsg);
}