UNPKG

asksuite-core

Version:
423 lines (388 loc) 11.4 kB
const Util = require('./util'); const request = require('request'); const mapCacheBookingEngine = new Map(); module.exports = function (config) { const bookingEngineCacheWrapper = Util.fallbackCacheFactory(mapCacheBookingEngine); const requester = {}; requester.fetchAndCacheBookingEngines = function () { console.log('listing booking engines'); return requester.listBookingEngines().then((bookingengines) => { bookingengines.forEach((bookingEngine) => { mapCacheBookingEngine.set(bookingEngine.type, bookingEngine); }); console.log('cached booking engines'); }); }; function checkStatus(res, body, resolve, reject) { if (res.statusCode >= 200 && res.statusCode < 300) { resolve(body); } else { reject(body); } } requester.list = function () { const promise = new Promise(function (resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/chattrees', json: true, headers: { Authorization: config.USER_TOKEN, }, }, function (err, httpResponse, body) { if (!err) { console.log('######################'); // console.log(body); checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); return promise; }; requester.listCompanies = function () { const promise = new Promise(function (resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/companies', json: true, headers: { Authorization: config.USER_TOKEN, }, }, function (err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); return promise; }; requester.findConversationsByConversationId = function (conversationId) { return new Promise(function (resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/conversations/' + conversationId + '/findByConversationId', json: true, headers: { Authorization: config.USER_TOKEN, }, }, function (err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao buscar conversations'); reject(err); } }, ); }); }; requester.listBookingEngines = function () { const promise = new Promise(function (resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/bookingengines', json: true, headers: { Authorization: config.USER_TOKEN, }, }, function (err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar motores'); reject(err); } }, ); }); return promise; }; requester.listLanguages = function () { return new Promise(function (resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/languages', json: true, headers: { Authorization: config.USER_TOKEN, }, }, function (err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar languages'); reject(err); } }, ); }); }; requester.findCompany = function (id) { const promise = new Promise(function (resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/companies/' + id, json: true, headers: { Authorization: config.USER_TOKEN, }, }, function (err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); return promise; }; requester.findTree = function (id) { const promise = new Promise(function (resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/chattrees/' + id, json: true, headers: { Authorization: config.USER_TOKEN, }, }, function (err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); return promise; }; requester.findTreeByCompanyId = function (treeId) { const promise = new Promise(function (resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/chattrees/' + treeId + '/findByCompanyId', json: true, headers: { Authorization: config.USER_TOKEN, }, }, function (err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); return promise; }; requester.listKeywordsExpressions = function () { return new Promise(function (resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/keywordintents', json: true, }, function (err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); }; requester.findBookingEngineByType = bookingEngineCacheWrapper(function (type) { return new Promise(function (resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/bookingengines/findByType/' + type, json: true, headers: { Authorization: config.USER_TOKEN, }, }, function (err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); }); requester.finishConversation = function (conversationId) { return Util.executeRequestAndSaveOnError( { request: { url: config.INFOCHAT_DATA_SERVER + '/conversation/finishGroupConversation/' + conversationId, headers: { Authorization: config.USER_TOKEN, }, }, type: 'conversations', }, config, ) .then(function (body) { console.log('finishedconversation'); return body; }) .catch((err) => { console.log('erro ao realizar o finish'); throw err; }); }; requester.setConversationUnavailable = function (conversationId) { return Util.executeRequestAndSaveOnError( { request: { url: config.INFOCHAT_DATA_SERVER + '/conversation/setUnavailable', method: 'POST', headers: { Authorization: config.USER_TOKEN, }, json: { conversationId, }, }, type: 'conversations', }, config, ) .then(function (body) { console.log(`Set unavailable ${conversationId}`); return body; }) .catch((err) => { console.log(`Error setting conversation ${conversationId} unavailable`); throw err; }); }; requester.markRequestPrice = function (conversationId, isTest = false, companyId = null) { if (isTest) { return Promise.resolve(); } return Util.executeRequestAndSaveOnError( { request: { url: `${config.INFOCHAT_DATA_SERVER}/conversation/setRequestedPrice/${conversationId}/${companyId}`, method: 'POST', headers: { Authorization: config.USER_TOKEN, }, }, type: 'conversations', }, config, ) .then(function (body) { console.log('mark conversation request price', conversationId); return body; }) .catch((err) => { console.log('erro ao realizar o mark conversation request price'); throw err; }); }; requester.registerQuote = function (searchData, isTest = false) { return new Promise((resolve, reject) => { const splittedCompanyId = searchData.companyId.split('.'); searchData.companyId = splittedCompanyId.length > 1 ? splittedCompanyId[1] : splittedCompanyId[0]; if (isTest) { resolve('test chat'); } else { const [arrivalDate, arrivalTime] = Util.getDateAndTimeFromDateISO(searchData.arrivalDate); const [departureDate, departureTime] = Util.getDateAndTimeFromDateISO( searchData.departureDate, ); searchData.arrivalTime = arrivalTime; searchData.arrivalDate = Util.appendTimeISOStringToDate(arrivalDate, '06'); searchData.departureTime = departureTime; searchData.departureDate = Util.appendTimeISOStringToDate(departureDate, '06'); if (searchData.searchResult) { searchData = Object.assign(searchData, Util.getPriceExtremes(searchData.searchResult)); } Util.executeRequestAndSaveOnError( { request: { url: config.INFOCHAT_DATA_SERVER + '/conversation/registerQuote', method: 'POST', json: searchData, headers: { Authorization: config.USER_TOKEN, }, }, type: 'quotes', }, config, ) .then((body) => resolve(body)) .catch(reject); } }); }; requester.registerSatisfactionSurveyResponse = function ({ companyId, conversationId, satisfactionResponse, isTest = false, }) { return new Promise((resolve, reject) => { if (isTest) { resolve('test chat'); } else { request.post( { url: config.INFOCHAT_DATA_SERVER + `/conversation/satisfactionSurvey/${conversationId}/${companyId}`, json: { satisfactionResponse }, headers: { Authorization: config.USER_TOKEN, }, }, function (err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); } }); }; return requester; };