Last active
June 30, 2020 00:01
-
-
Save ueki-kazuki/995e90214d24a5473fc6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
//requires | |
var request = require('request'); | |
require('request').debug = true | |
var aws = require('aws-sdk'); | |
var async = require('async'); | |
//consts | |
var bucket_name = 'S3_BUCKET_NAME'; | |
var rid = 'CHATWORK_ROOM_ID'; | |
var token = 'CHATWORK_API_TOKEN'; | |
var BL_TYPE_DELETE_ISSUE_COMMENT = 4; | |
aws.config.region = 'ap-northeast-1'; | |
// | |
// Format & Send email to OTRS | |
// | |
function post2OTRS(body, callback) { | |
var state = ''; | |
var pendingUntil = ''; | |
switch (body.type) { | |
// modify issue | |
case 2: | |
var changes = body.content.changes; | |
for (var i = 0; i < changes.length; i++) { | |
if (changes[i].field === 'status') { | |
switch (parseInt(changes[i].new_value)) { | |
case 1: | |
state = 'new'; break; | |
case 2: | |
state = 'open'; break; | |
case 3: | |
state = 'open'; break; | |
case 4: | |
state = 'closed successful'; break; | |
default: | |
state = 'open'; break; | |
} | |
} | |
} | |
break; | |
default: | |
return; | |
} | |
if (!state) return; | |
var subject = new Buffer("["+body.project.projectKey+"-"+body.content.key_id+"] "+body.content.summary); | |
console.log('Subject: ' + subject); | |
console.log('New OTRS state: ' + state); | |
var message = "Subject: " + "=?UTF-8?B?" + subject.toString('base64') + "?=" + "\n" | |
+ "From: xxxxxx@classmethod.jp" + "\n" | |
+ "To: xxxxxx@classmethod.jp" + "\n" | |
+ "Content-Type: text/plain; charset=UTF-8" + "\n" | |
+ "X-OTRS-FollowUp-State: " + state + "\n" | |
+ "\n" | |
+ "Status changed by Backlog2Chatwork job [" + state + "]"; | |
var ses = new aws.SES({ region : 'us-east-1' }); | |
var params = { | |
RawMessage : { | |
Data : message | |
}, | |
Destinations : [ | |
'xxxxxx@classmethod.jp' | |
], | |
} | |
ses.sendRawEmail(params, function (err, data) { | |
if (err) console.log(err, err.stack); // an error occurred | |
else console.log(data); // successful response | |
callback(err); | |
}); | |
} | |
// | |
// Format chat message | |
// | |
function makeChatMessage(body) { | |
var label; | |
switch (body.type) { | |
case 1: | |
label = "課題の追加"; break; | |
case 2: | |
label = "課題の更新"; | |
var changes = body.content.changes; | |
console.log(changes); | |
for (var i = 0; i < changes.length; i++) { | |
if (changes[i].field === 'status') { | |
switch (parseInt(changes[i].new_value)) { | |
case 1: | |
label += " (新規)"; break; | |
case 2: | |
label += " (対応中)"; break; | |
case 3: | |
label += " (対応済み)"; break; | |
case 4: | |
label += " (完了)"; break; | |
default: | |
label += " (未対応)"; break; | |
} | |
} | |
} | |
break; | |
case 3: | |
label = "コメントの追加"; break; | |
case 4: | |
label = "コメントの削除"; break; | |
default: | |
return; | |
} | |
console.log(label); | |
return "[info]" | |
+ "[title]" + body.project.name + " " + label + "[/title]" | |
+ "["+body.project.projectKey+"-"+body.content.key_id+"] " + body.content.summary | |
+ " " + body.createdUser.name | |
+ "[/info]"; | |
} | |
// | |
// POST Message to Chatwork | |
// | |
function post2Chatwork(body, callback) { | |
var message = makeChatMessage(body); | |
if (!message) { return; } | |
var options = { | |
url: 'https://api.chatwork.com/v1/rooms/' + rid + '/messages', | |
headers: { | |
'X-ChatWorkToken': token | |
}, | |
form: { body: message } | |
}; | |
request.post(options, function (err, res, body) { | |
console.log('response' + res.statusCode); | |
if (!err && res.statusCode === 200) { | |
console.log('post2Chatwork SUCCESS!!'); | |
} else { | |
console.log('post2Chatwork error: ' + res.statusCode); | |
console.log(body); | |
} | |
callback(err); | |
}); | |
} | |
// | |
// putObject to S3 bucket | |
// | |
function put2Bucket(body, callback) { | |
var s3bucket = new aws.S3({params: {Bucket: bucket_name}}); | |
// ex. TEST-10-100.json | |
var key = body.project.projectKey + "-" + body.content.key_id + "-" + body.id + ".json"; | |
s3bucket.createBucket(function() { | |
var params = {Key: key, Body: JSON.stringify(body)}; | |
s3bucket.upload(params, function(err, data) { | |
if (err) { | |
console.log("Error uploading data: ", err); | |
} else { | |
console.log("Successfully uploaded data to myBucket/myKey"); | |
} | |
callback(err); | |
}); | |
}); | |
} | |
// | |
// Main Handler | |
// | |
exports.handler = function (event, context) { | |
var body; | |
console.log('event: ' + JSON.stringify(event, null, 4)); | |
body = event; | |
console.log('json parsed'); | |
async.parallel([ | |
function(callback) { post2Chatwork(body, callback) }, | |
function(callback) { post2OTRS(body, callback) }, | |
function(callback) { put2Bucket(body, callback) }, | |
], function(err, results) { | |
console.log('Done.'); | |
context.done(err); | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment