Wit.ai - 什么时候触发动作?

Wit.ai - When are the actions triggered?

我无法理解 Node.js SDK 何时触发操作。 起初,我认为只有当我们使用故事网页明确调用它时才会触发一个动作。

我才发现不是这样的

例如,当用户的上下文未被正确清除时,某些操作可能是 运行 而不是另一个(或者有时两个操作可能是 运行 用于一条消息)。即使某些动作不是当前故事的一部分。

在 Node.js SDK 中触发操作的具体条件是什么?

机器人将尝试所有故事,直到找到一个匹配的故事,如果没有,它会回复它找到的最后一个故事。

所以我做了一个我称之为 no_match 的故事,它要求对我的客户采取行动。 您还必须确保 Understanding 选项卡中的 Search StrategyValues 设置正确。

这是我为 FB 机器人设置的内容,因此您需要更改 recipientId 机制以满足您的需要。

// CALL THIS TO SEND MESSAGES TO WIT 
function sendToWit(sessionId, messageText) {
    // This will run all actions until nothing left to do
    wit.runActions(sessionId, // Current session
        messageText, sessions[sessionId].context // Current session state
    ).then(function (context) {
        // Waiting for further messages to proceed.
        if (context['done']) {
            delete sessions[sessionId];
        }
        // Updating current session state
        sessions[sessionId].context = context;
    }).catch(function (err) {
        console.error('WIT ERROR MSG: ', err.stack || err);
    });
}
//Wit Actions
var actions = {
    // Basic text message response 
    send: function send(request, response) {
        var sessionId = request.sessionId,
              context = request.context,
              entities = request.entities,
              recipientId = sessions[sessionId].fbid,
              text = response.text;
              return new Promise(function (resolve, reject) {
                callMySendAPI(recipientId, text);
                return resolve();
            });
    }
    , // All of your custom actions will go here ie;
    myCustomAction: function (request) {
        console.log('myCustomAction Called');
        var sessionId = request.sessionId;
        var recipientId = sessions[sessionId].fbid;
        return new Promise(function (resolve, reject) {
            //Call some API and do lookup by recipientId, you could lookup by anything ie; context.city for weather lookup etc..
            callSomeAPI(recipientId).then(function (result) {
                context.something = result.something; //Parsed JSON
                return Promise.resolve(context);
            }).catch(error => {
                // something went wrong
            });
            return resolve(context);
        });
    }
}