wit.ai + 包含 2 个或更多对话以获取实体的故事
wit.ai + story with 2 or more conversations to get entities
我正在尝试 wit.ai 中的不同故事。这是我想挂失信用卡的一种情况。当用户说他丢失了信用卡时,bot 必须在 2 个步骤中询问他的 SSN 后跟 mother/maiden 姓名,然后它必须阻止该卡。这是应用程序 link:
https://wit.ai/Nayana-Manchi/CreditCardApp/stories/f7d77d9e-e993-428f-a75e-2e86f0e73cb3
问题:
在实体列表中我发现,当它调用操作时,它只需要实体列表中的第二个输入(即本例中的母亲姓名,SSN 为空)。我在 JavaScript 代码中放置了一些日志来查找实体列表。
对于这些场景,我是否也需要遵循基于插槽的方法?
基于槽的方法不适合这里,因为用户不知道安全问题是什么。
- 仅当(has/doesn没有)选项存在时才在操作选项卡中。请解释一下它的用法。如果我在那里设置所需的实体(在这种情况下:SSN 和母亲姓名),bot 会像循环一样不断地询问 SSN。
代码类似于快速入门示例,只是对读取实体进行了一些更改。
您应该在 发送操作.
中保存属于同一会话的 enetities
send(request, response) {
const {sessionId, context, entities} = request;
const {text, quickreplies} = response;
const motherName = userSession[sessionId].fbid;
const motherName = firstEntityValue(entities, 'mother_name');
const SSN = firstEntityValue(entities, 'SSN');
// set context in user sessions to used in actions
// act as merge operation of old wit.ai api
if (motherName && SSN) {
sessions[sessionId].context.motherName = firstEntityValue(entities, 'mother_name');
sessions[sessionId].context.SSN = firstEntityValue(entities, 'SSN');
}
return new Promise(function (resolve, reject) {
console.log("Sending.. " ,text);
resolve();
});
},
在自定义操作中使用它
//to use saved entities from customAction
findCreditCard({sessionId, context, text, entities}) {
const SSN = sessions[sessionId].context.SSN;
const motherName = sessions[sessionId].context.motherName;
return new Promise(function (resolve, reject) {
// custom action code
//if everything gets completed then set context.done=true
if(completed) context.done=true
resolve(context);
});
});
要阻止它重新 运行 您的操作,请删除 conext
wit.runActions(
sessionId,
text, // the user's message
sessions[sessionId].context // the user's current session state
).then((context) => {
console.log('Wit Bot haS completed its action', context);
// this will clear the session data
if (context['done']) {
console.log("clearing session data");
delete sessions[sessionId];
}
else {
console.log("updating session data");
// Updating the user's current session state
sessions[sessionId].context = context;
}
}).catch((err) => {
console.log('Oops! Got an error from Wit: ', err.stack || err);
});
我正在尝试 wit.ai 中的不同故事。这是我想挂失信用卡的一种情况。当用户说他丢失了信用卡时,bot 必须在 2 个步骤中询问他的 SSN 后跟 mother/maiden 姓名,然后它必须阻止该卡。这是应用程序 link: https://wit.ai/Nayana-Manchi/CreditCardApp/stories/f7d77d9e-e993-428f-a75e-2e86f0e73cb3
问题:
在实体列表中我发现,当它调用操作时,它只需要实体列表中的第二个输入(即本例中的母亲姓名,SSN 为空)。我在 JavaScript 代码中放置了一些日志来查找实体列表。 对于这些场景,我是否也需要遵循基于插槽的方法?
基于槽的方法不适合这里,因为用户不知道安全问题是什么。
- 仅当(has/doesn没有)选项存在时才在操作选项卡中。请解释一下它的用法。如果我在那里设置所需的实体(在这种情况下:SSN 和母亲姓名),bot 会像循环一样不断地询问 SSN。
代码类似于快速入门示例,只是对读取实体进行了一些更改。
您应该在 发送操作.
中保存属于同一会话的 enetitiessend(request, response) {
const {sessionId, context, entities} = request;
const {text, quickreplies} = response;
const motherName = userSession[sessionId].fbid;
const motherName = firstEntityValue(entities, 'mother_name');
const SSN = firstEntityValue(entities, 'SSN');
// set context in user sessions to used in actions
// act as merge operation of old wit.ai api
if (motherName && SSN) {
sessions[sessionId].context.motherName = firstEntityValue(entities, 'mother_name');
sessions[sessionId].context.SSN = firstEntityValue(entities, 'SSN');
}
return new Promise(function (resolve, reject) {
console.log("Sending.. " ,text);
resolve();
});
},
//to use saved entities from customAction
findCreditCard({sessionId, context, text, entities}) {
const SSN = sessions[sessionId].context.SSN;
const motherName = sessions[sessionId].context.motherName;
return new Promise(function (resolve, reject) {
// custom action code
//if everything gets completed then set context.done=true
if(completed) context.done=true
resolve(context);
});
});
要阻止它重新 运行 您的操作,请删除 conext
wit.runActions(
sessionId,
text, // the user's message
sessions[sessionId].context // the user's current session state
).then((context) => {
console.log('Wit Bot haS completed its action', context);
// this will clear the session data
if (context['done']) {
console.log("clearing session data");
delete sessions[sessionId];
}
else {
console.log("updating session data");
// Updating the user's current session state
sessions[sessionId].context = context;
}
}).catch((err) => {
console.log('Oops! Got an error from Wit: ', err.stack || err);
});