【问题标题】:Wit.ai - When are the actions triggered?Wit.ai - 什么时候触发动作?
【发布时间】:2016-10-24 10:33:54
【问题描述】:

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

我才意识到事实并非如此。

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

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

【问题讨论】:

    标签: wit.ai


    【解决方案1】:

    这是我为 FB Bot 设置的内容,因此您需要更改收件人 ID 机制以满足您的需求。

    // 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);
            });
        }
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢。是的,我也使用了相同的方法。但是,我说的是 node.js SDK 中的操作,而不是故事。
      • 您在 node.js 代码中定义操作,然后在故事中您可以使用它们。如果你在你的故事中创建了一个动作myAction并复制粘贴了这些动作github.com/wit-ai/node-wit#response,它将执行名为myAction的动作。执行动作总是机智的回复,如果它执行了意外的动作,那是因为它认为它是正确的。
      • 是的,你是对的。问题不是我最初想到的 SDK,而是 Wit.ai 本身,因为它并不总是能预测正确的操作。感谢您的帮助。
      • 很高兴我能帮上忙,您能接受答案吗?
      猜你喜欢
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 2017-11-20
      • 2014-02-04
      • 2011-04-27
      相关资源
      最近更新 更多