UNPKG

botanalytics-ghome

Version:

Conversational analytics & engagement tool for chatbots

122 lines (93 loc) 4.07 kB
const util = require('util'); const objectPath = require('object-path'); function getResponseContent(response) { if(objectPath.get(response, "dialogAction.message", null)) return objectPath.get(response, "dialogAction.message.content",""); if(objectPath.get(response, "dialogAction.responseCard", null)) return objectPath .get("dialogAction.responseCard.genericAttachments",[]) .map(function (card) { return card.title+"/"+card.subTitle; }).join(","); return ""; } function getResponseType(response) { if(objectPath.get(response,"dialogAction.responseCard.contentType") === "application/vnd.amazonaws.card.generic") return "card"; return objectPath.get(response, "dialogAction.message.contentType","PlainText") === "PlainText" ? "text" : "SSML"; } module.exports = function(token, userConfig) { // Check token if (!token) { throw new Error('You must provide a Botanalytics token!'); } // Create default config const config = { baseUrl: 'https://api.botanalytics.co/v1/', debug: false }; // Merge user configuration into the default config Object.assign(config, userConfig); const logger = new require('../util').Logger(config); logger.debug('Logging enabled.'); logger.debug('Configuration: ' + util.inspect(config)); require('request').debug = true; // Configure request defaults const request = require('request').defaults({ baseUrl: config.baseUrl, headers: { 'Authorization': 'Token ' + encodeURIComponent(token), 'Content-Type': 'application/json' } }); return { log: function(event, context, response) { // Check event object if (!event || event.constructor !== Object) { logger.error("Event Error:", new Error('You must provide an event object!')); return; } //Check response object if(!response || response.constructor !== Object){ logger.error("Response Error:", new Error('You must provide a response object!')); return; } //Check unique requestId to bind payloads if(!context || !context.awsRequestId){ logger.error("Context Error:", new Error('You must provide context')); return; } logger.debug('Preparing payload...'); const payload = { "user_id" : objectPath.get(event, "userId", null), "user_content" : objectPath.get(event, "inputTranscript", ""), "bot_content" : getResponseContent(response), "user_request_type" : objectPath.get(event, "outputDialogMode") === "Text" ? "text" : "voice", "bot_response_type" : getResponseType(response), "request" : { "id" : context.awsRequestId, "attributes" : objectPath.get(event, "requestAttributes", {}), "state" : objectPath.get(response, "dialogAction.fulfillmentState", ""), "bot_name" : objectPath.get(event, "bot.name",""), "intent_resolved_name" : objectPath.get(event, "currentIntent.name", ""), "intent_applied_name" : objectPath.get(response, "dialogAction.intentName", ""), "intent_confirmation_status" : objectPath.get(event, "currentIntent.confirmationStatus","") } }; logger.debug("Logging..."); request({ url: '/messages/amazon-lex/', method: 'POST', json: true, body: { message: payload } }, (err) => { if (err) logger.error('Failed to log message.', err); else logger.debug('Success...'); }); } }; };