Мне сложно понять, когда действия запускаются SDK Node.js. Сначала я подумал, что действие запускается только тогда, когда мы явно вызываем его с помощью веб-страницы истории.
Я просто понял, что это не так.
Например, когда контекст пользователя не очищен должным образом, некоторые действия могут выполняться вместо других (или иногда для одного сообщения могут выполняться два действия). Даже если некоторые действия не являются частью текущей истории.
Каковы именно условия для запуска действия в SDK Node.js?
2 ответа
Бот будет пробовать все истории, пока не найдет подходящую, в противном случае ответит на последнюю найденную.
Итак, я написал историю, которую назвал no_match
, которая вызывает действие в отношении моего клиента. Вы также должны убедиться, что на вкладке Общие сведения правильно установлены Стратегия поиска и Значения .
Вот кое-что, что я установил для бота 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);
});
}
}
Похожие вопросы
Новые вопросы
wit.ai
Wit.ai - это NLP-движок, принадлежащий Facebook, который позволяет разработчикам легко создавать ботов, приложения и устройства, с которыми вы можете общаться или общаться.