botpress-dialog
Version:
Track messages with Dialog Analytics.
271 lines (219 loc) • 7.1 kB
JavaScript
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(1);
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _util = __webpack_require__(2);
var _util2 = _interopRequireDefault(_util);
var _path = __webpack_require__(3);
var _path2 = _interopRequireDefault(_path);
var _fs = __webpack_require__(4);
var _fs2 = _interopRequireDefault(_fs);
var _messenger = __webpack_require__(5);
var _messenger2 = _interopRequireDefault(_messenger);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var dialog = null;
var configFile = null;
var saveConfig = function saveConfig(config) {
_fs2.default.writeFileSync(configFile, JSON.stringify(config));
};
var loadConfig = function loadConfig() {
if (!_fs2.default.existsSync(configFile)) {
var config = { accessToken: '', botId: '' };
saveConfig(config, configFile);
}
var overrides = {};
if (process.env.DIALOG_TOKEN) overrides.accessToken = process.env.DIALOG_TOKEN;
return Object.assign(JSON.parse(_fs2.default.readFileSync(configFile, 'utf-8')), overrides);
};
var callback = function callback(logger) {
return function (error, response, body) {
if (error) {
logger.debug('[botpress-dialog] Error: ' + error.message);
} else if (body && body.error) {
logger.debug('[botpress-dialog] ' + body.code + ': ' + _util2.default.inspect(body.error, false, null));
}
};
};
var incomingMiddleware = function incomingMiddleware(event, next) {
if (event.platform == 'facebook') {
var payload = {
entry: [{
messaging: [event.raw]
}]
};
dialog.incoming(payload, callback(event.bp.logger));
event.bp.logger.verbose('[botpress-dialog] Incoming message');
}
next();
};
var outgoingMiddleware = function outgoingMiddleware(event, next) {
if (event.platform == 'facebook') {
// Rebuild response object expected by dialog-api
var response = {
message_id: event.__id, // Not the real Facebook message ID, but whatever
recipient_id: event.raw.to
};
// Rebuild payload object expected by dialog-api
var payload = void 0;
if (event.type == 'text') {
payload = {
message: {
text: event.raw.message,
quick_replies: event.raw.quick_replies
}
};
} else if (event.type == 'template') {
payload = {
message: {
attachment: {
type: 'template',
payload: event.raw.payload
}
}
};
} else if (event.type == 'attachment') {
payload = {
message: {
attachment: {
type: event.raw.type,
payload: event.raw
}
}
};
} else {
// noop
}
if (payload) {
dialog.outgoing(payload, response, callback(event.bp.logger));
event.bp.logger.verbose('[botpress-dialog] Outgoing message');
}
}
next();
};
var outgoingAttachMiddleware = function outgoingAttachMiddleware(event, next) {
event.dialog.context = dialog.context || {};
next();
};
module.exports = {
config: {
accessToken: { type: 'string', env: 'DIALOG_TOKEN' },
botId: { type: 'string' }
},
init: function init(bp, configurator) {
configFile = _path2.default.join(bp.projectLocation, bp.botfile.modulesConfigDir, 'botpress-dialog.json');
bp.middlewares.register({
name: 'dialog.outgoing.attach',
module: 'botpress-dialog',
type: 'outgoing',
handler: outgoingAttachMiddleware,
order: 0,
description: 'Modifies the outgoing payload of Dialog Analytics'
});
bp.middlewares.register({
name: 'dialog.outgoing',
module: 'botpress-dialog',
type: 'outgoing',
handler: outgoingMiddleware,
order: 99, // Must be the last middleware to be called in order for dialog.attach() to work async
description: 'Tracks outgoing messages with Dialog Analytics'
});
bp.middlewares.register({
name: 'dialog.incoming',
module: 'botpress-dialog',
type: 'incoming',
handler: incomingMiddleware,
order: 0,
description: 'Tracks incoming messages with Dialog Analytics'
});
var config = loadConfig();
dialog = new _messenger2.default(config.accessToken, config.botId);
// Expose dialog methods
bp.dialog = {
attach: dialog.attach,
track: dialog.track,
event: dialog.event,
link: dialog.link
};
},
ready: function ready(bp) {
var router = bp.getRouter('botpress-dialog');
router.get('/config', function (req, res) {
res.send(loadConfig());
});
router.post('/config', function (req, res) {
var _req$body = req.body,
accessToken = _req$body.accessToken,
botId = _req$body.botId;
saveConfig({ accessToken: accessToken, botId: botId });
dialog.apiToken = accessToken;
dialog.botId = botId;
res.sendStatus(200);
});
}
};
/***/ },
/* 2 */
/***/ function(module, exports) {
module.exports = require("util");
/***/ },
/* 3 */
/***/ function(module, exports) {
module.exports = require("path");
/***/ },
/* 4 */
/***/ function(module, exports) {
module.exports = require("fs");
/***/ },
/* 5 */
/***/ function(module, exports) {
module.exports = require("dialog-api/lib/messenger");
/***/ }
/******/ ]);
//# sourceMappingURL=node.bundle.js.map