Merged master into senica-rvo-fix-line-control
This commit is contained in:
commit
e3c68f3d86
1 changed files with 124 additions and 0 deletions
124
flow/slack_connector.js
Normal file
124
flow/slack_connector.js
Normal file
|
|
@ -0,0 +1,124 @@
|
||||||
|
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 = `<div class="padding">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div data-jc="textbox" data-jc-path="slack_channel" data-jc-config="placeholder:name or id;required:true" class="m">Slack Channel</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div data-jc="textbox" data-jc-path="api_key" data-jc-config="placeholder:api key;required:true" class="m">API Key:</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div data-jc="textbox" data-jc-path="bot_name" data-jc-config="placeholder:Flow DEMO;required:false" class="m">Bot Name</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div data-jc="textbox" data-jc-path="bot_icon" data-jc-config="placeholder:\:totaljs\:;required:true" class="m">Bot Icon</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
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) {
|
||||||
|
var can = false;
|
||||||
|
|
||||||
|
process.on('uncaughtException', function (err) {
|
||||||
|
errLogger.error('uncaughtException:', err.message);
|
||||||
|
errLogger.error(err.stack);
|
||||||
|
instance.error(err);
|
||||||
|
});
|
||||||
|
|
||||||
|
instance.on('data', function(data) {
|
||||||
|
if (!can) return;
|
||||||
|
|
||||||
|
let str = String(data.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,
|
||||||
|
'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) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
instance.reconfigure = function() {
|
||||||
|
var options = instance.options;
|
||||||
|
can = options.slack_channel && options.bot_name && options.bot_icon && options.api_key ? true : false;
|
||||||
|
instance.status(can ? '' : 'Not configured', can ? undefined : 'red');
|
||||||
|
};
|
||||||
|
|
||||||
|
instance.on('options', instance.reconfigure);
|
||||||
|
instance.reconfigure();
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue