botanalytics-ghome
Version:
Conversational analytics & engagement tool for chatbots
197 lines (137 loc) • 3.68 kB
JavaScript
const util = require('util');
module.exports = function(token, userConfig) {
// Check token
if (!token) {
throw new Error('You must provide a Botanalytics token!');
}
// Create default config
var config = {
baseUrl: 'https://api.botanalytics.co/v1/',
debug: false
}
// Merge user configuration into the default config
Object.assign(config, userConfig);
const log = new require('../util').Logger(config);
log.debug('Logging enabled.');
log.debug('Configuration: ' + util.inspect(config))
// Configure request defaults
const request = require('request').defaults({
baseUrl: config.baseUrl,
headers: {
'Authorization': 'Token ' + encodeURIComponent(token),
'Content-Type': 'application/json'
}
});
return {
logIncomingMessage: (data, callback) => {
log.debug('Logging incoming message: ' + util.inspect(data));
if (!data) {
log.error('Message data is required.');
var err = new Error('Message data is required.');
if (callback)
return callback(err);
else
return err;
}
request({
url: '/messages/facebook-messenger',
method: 'POST',
json: true,
body: {
recipient: null,
timestamp: new Date().getTime(),
message: data
}
}, (err, resp, payload) => {
if (err) {
log.error('Failed to log incoming message.', err);
err = new Error('Failed to log incoming message');
if (callback)
callback(err);
else
return err;
}
err = log.checkResponse(resp, 'Successfully logged incoming message.', 'Failed to log incoming message.');
if (callback)
callback(err);
else
return err;
});
},
logOutgoingMessage: (data, recipient, token, callback) => {
log.debug('Logging outgoing message: ' + util.inspect(data));
if (!data) {
log.error('Message data is required.');
var err = new Error('Message data is required.');
if (callback)
return callback(err);
else
return err;
}
if (!recipient) {
log.error('Message recipient is required.');
var err = new Error('Message recipient is required.');
if (callback)
return callback(err);
else
return err;
}
request({
url: '/messages/facebook-messenger',
method: 'POST',
json: true,
body: {
recipient: recipient,
message: data,
timestamp: new Date().getTime(),
fb_token: token
}
}, (err, resp, payload) => {
if (err) {
log.error('Failed to log outgoing message.', err);
err = new Error('Failed to log outgoing message.');
if (callback)
callback(err);
else
return err;
}
err = log.checkResponse(resp, 'Successfully logged incoming message.', 'Failed to log incoming message.');
if (callback)
callback(err);
else
return err;
});
},
logUserProfile: (data, callback) => {
log.debug('Logging user profile: ' + util.inspect(data));
if (!data) {
log.error('User profile data is required.');
var err = new Error('User profile data is required.');
if (callback)
return callback(err);
else
return err;
}
request({
url: '/facebook-messenger/users',
method: 'POST',
json: true,
body: data
}, (err, resp, payload) => {
if (err) {
log.error('Failed to log user profile.', err);
err = new Error('Failed to log user profile.');
if (callback)
callback(err);
else
return err;
}
err = log.checkResponse(resp, 'Successfully logged incoming message.', 'Failed to log incoming message.');
if (callback)
callback(err);
else
return err;
});
}
}
};