当与 Twitter API 结合使用时,如何将 response.context 传回 Watson Conversation API?
How do I pass response.context back in Watson Conversation API when used in conjunction with Twitter API?
我的想法是,我将使用 Twitter 的流 api 获取我帐户的最新提及,将该数据提供给 watson convo api,然后让 watson 吐出一个响应;然后我会再次在推特上回复提到我的人。为了让 watson convo api 正常工作,我必须将 response.context 传回给 watson。
除了回传 response.context 部分,我什么都记下来了。有人知道怎么做吗?
var twitter = require('../statics/twitterAPI_KEY_Dev');
var watson = require('../statics/watsonAPI_KEY_Dev');
function botReplyInit() {
var stream = twitter.stream('statuses/filter', { track: '@Felicia_Bot' });
stream.on('tweet', function(tweet) {
var dataProcessed = false;
var data;
if (!dataProcessed) {
var data = tweet.text.replace(/@(\w+)/g, '').replace(/#(\w+)/g, '');
//cleans up the tweet so the @ and # are deleted
}
var username = tweet.user.screen_name;
var statusID = tweet.id_str;
var endConversation = false;
var error = {};
var res = { output: {}, intents: [] };
processWatson(error, res);
//how do we move this intialization outside of the stream.on function so it only
//get called once in the entire lifetime of the app??
function processWatson(err, response) {
if (err) {
console.log(err);
}
if (response.output.action === 'end_conversation') {
endConversation = true;
}
if (response.intents.length > 0) {
var result = '@' + username + ' ' + response.output.text[0];
twitter.post('statuses/update', {
status: result,
in_reply_to_status_id: tweet.id_str
},
function(err, response) {
if (err) {
console.log(err);
return;
}
else {
console.log('I posted ' + result);
}
});
}
if(!endConversation && !dataProcessed) {
watson.message({
input: { text: data },
context: response.context
},
processWatson);
dataProcessed = true;
}
}
})
}
botReplyInit();
参考 API 文档了解 Watson Conversation 服务的消息方法 - https://www.ibm.com/watson/developercloud/conversation/api/v1/#send_message
来自消息的响应包含上下文对象,这是您需要在后续调用消息 API 时 return 返回给服务的内容。在对话初始化时,不需要上下文对象。
您的应用程序需要跟踪上下文对象,如果您要允许多个同时对话,您需要能够将上下文对象映射到对话。
我的想法是,我将使用 Twitter 的流 api 获取我帐户的最新提及,将该数据提供给 watson convo api,然后让 watson 吐出一个响应;然后我会再次在推特上回复提到我的人。为了让 watson convo api 正常工作,我必须将 response.context 传回给 watson。
除了回传 response.context 部分,我什么都记下来了。有人知道怎么做吗?
var twitter = require('../statics/twitterAPI_KEY_Dev');
var watson = require('../statics/watsonAPI_KEY_Dev');
function botReplyInit() {
var stream = twitter.stream('statuses/filter', { track: '@Felicia_Bot' });
stream.on('tweet', function(tweet) {
var dataProcessed = false;
var data;
if (!dataProcessed) {
var data = tweet.text.replace(/@(\w+)/g, '').replace(/#(\w+)/g, '');
//cleans up the tweet so the @ and # are deleted
}
var username = tweet.user.screen_name;
var statusID = tweet.id_str;
var endConversation = false;
var error = {};
var res = { output: {}, intents: [] };
processWatson(error, res);
//how do we move this intialization outside of the stream.on function so it only
//get called once in the entire lifetime of the app??
function processWatson(err, response) {
if (err) {
console.log(err);
}
if (response.output.action === 'end_conversation') {
endConversation = true;
}
if (response.intents.length > 0) {
var result = '@' + username + ' ' + response.output.text[0];
twitter.post('statuses/update', {
status: result,
in_reply_to_status_id: tweet.id_str
},
function(err, response) {
if (err) {
console.log(err);
return;
}
else {
console.log('I posted ' + result);
}
});
}
if(!endConversation && !dataProcessed) {
watson.message({
input: { text: data },
context: response.context
},
processWatson);
dataProcessed = true;
}
}
})
}
botReplyInit();
参考 API 文档了解 Watson Conversation 服务的消息方法 - https://www.ibm.com/watson/developercloud/conversation/api/v1/#send_message
来自消息的响应包含上下文对象,这是您需要在后续调用消息 API 时 return 返回给服务的内容。在对话初始化时,不需要上下文对象。
您的应用程序需要跟踪上下文对象,如果您要允许多个同时对话,您需要能够将上下文对象映射到对话。