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

问题:

  1. 在实体列表中我发现,当它调用操作时,它只需要实体列表中的第二个输入(即本例中的母亲姓名,SSN 为空)。我在 JavaScript 代码中放置了一些日志来查找实体列表。 对于这些场景,我是否也需要遵循基于插槽的方法?

  2. 基于槽的方法不适合这里,因为用户不知道安全问题是什么。

  3. 仅当(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);
});