exports.id = 'slack_connector'; exports.title = 'Slack_Connector'; exports.version = '1.0.0'; exports.group = 'Worksys'; exports.color = '#888600'; exports.input = 1; exports.output = 1; exports.click = false; exports.author = 'Jakub Klena'; exports.icon = 'sign-out'; exports.options = { slack_channel: "C071KN2Q8SK", api_key: "", bot_name: "Flow DEMO", bot_icon: ":totaljs:" }; // Slack channel - where to post the messages, can be name like "backend-alerts" // Bot Name - Name of the "user" that will post these messages, it should be based on which server it is running on. // Bot Icon - We can use any slack icon (even custom ones uploaded by us) as the "user" profile picture exports.html = `
Slack Channel
API Key:
Bot Name
Bot Icon
`; exports.readme = `Sends any string received on input to Slack Channel.`; var log4js = require("log4js"); var path = require('path'); log4js.configure({ appenders: { errLogs: { type: 'file', compress:true, daysToKeep: 2, maxLogSize: 1048576, backups: 1, keepFileExt: true, filename: path.join(__dirname + "/../", 'err.txt') }, monitorLogs: { type: 'file', compress:true, daysToKeep: 2, maxLogSize: 1048576, backups: 1, keepFileExt: true, filename: path.join(__dirname + "/../", 'monitor.txt') }, console: { type: 'console' } }, categories: { errLogs: { appenders: ['console', 'errLogs'], level: 'error' }, monitorLogs: { appenders: ['console', 'monitorLogs'], level: 'trace' }, //another: { appenders: ['console'], level: 'trace' }, default: { appenders: ['console'], level: 'trace' } } }); const errLogger = log4js.getLogger("errLogs"); const logger = log4js.getLogger(); const monitor = log4js.getLogger("monitorLogs"); exports.install = function(instance) { process.on('uncaughtException', function (err) { errLogger.error('uncaughtException:', err.message); errLogger.error(err.stack); instance.error(err); }); instance.on('data', function(data) { let str = String(data); // Ensuring data get converted to string let message = `{ channel: ${instance.options.slack_channel}, username: ${instance.options.bot_name}, icon_emoji: ${instance.options.bot_icon}, text: ${str} }`; let headers = { 'Content-type': `application/json`, 'Authorization': `Bearer ${instance.options.api_key}` }; if (F.is4) { let opt = { 'method': 'post', 'url': 'https://slack.com/api/chat.postMessage', 'headers': headers, 'cookies': null, 'body': JSON.stringify(message), 'type': 'json', 'callback': function(err, response) { if (response && !err) { var msg = { data: response.body, status: response.status, headers: response.headers, host: response.host, cookies: response.cookies }; instance.send2(msg); } else if (err) errLogger.error('Slack post failed - err:', err, '\n - response was:', response); instance.error(err, response); } }; REQUEST(opt); } else { U.request('https://slack.com/api/chat.postMessage', ['json', 'post'], JSON.stringify(message), function(err, data, status, headers, host) { console.log("err: ", err); console.log("resp: ", response); if (response && !err) { response.data = { data: data, status: status, headers: headers, host: host }; instance.send2(response); } else if (err) { errLogger.error('Slack post failed - err:', err, '\n - response was:', response); instance.error(err, response); } }, null, headers); } }); }