Мне сложно понять, когда действия запускаются SDK Node.js. Сначала я подумал, что действие запускается только тогда, когда мы явно вызываем его с помощью веб-страницы истории.

Я просто понял, что это не так.

Например, когда контекст пользователя не очищен должным образом, некоторые действия могут выполняться вместо других (или иногда для одного сообщения могут выполняться два действия). Даже если некоторые действия не являются частью текущей истории.

Каковы именно условия для запуска действия в SDK Node.js?

0
Nitsuja 24 Окт 2016 в 13:33

2 ответа

Лучший ответ

Бот будет пробовать все истории, пока не найдет подходящую, в противном случае ответит на последнюю найденную.

Итак, я написал историю, которую назвал no_match, которая вызывает действие в отношении моего клиента. wit story Вы также должны убедиться, что на вкладке Общие сведения правильно установлены Стратегия поиска и Значения .

0
eXa 4 Ноя 2016 в 05:40

Вот кое-что, что я установил для бота 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);
        });
    }
}
1
Ed Barahona 18 Ноя 2016 в 20:04