Github의 isuue가 댓글을 달 때 Lambda를 사용하여 채팅 작업에 알리려고했습니다.
11888 단어 WebhookGitHub람다APIGatewayChatwork
개요
Github Webhook -> AWS API Gateway -> Lambda -> Chatwork
라는 구성으로 채팅 작업에 github에서 주석이 있음을 알릴 수 있습니다.
Chatwork API가 사용 가능하다고 가정합니다.
Lambda로 함수 만들기
함수 만들기
AWS Lambda > 함수 > 함수 생성 에서 함수를 생성합니다.
함수 이름에 적절한 이름을 입력합니다. 이번에는 chatworkNotification
로 둡니다.
함수에 사용하는 언어는, 사용하고 있는 사람이 많을 것 같았기 때문에 Node.js로 했습니다.
함수 코드
이번에는 코드 항목 유형을 코드를 인라인으로 편집하여 aws에서 코드를 추가합니다.
index.jsconst https = require('https');
const host = 'api.chatwork.com';
const TOKEN = process.env['CHATWORK_TOKEN'];
const ROOM_ID = process.env['ROOM_ID'];
const path = '/v2/rooms/' + ROOM_ID +'/messages';
exports.handler = function(event) {
const content = JSON.parse(event.body);
const messageBody = content.comment.body;
if (messageBody.match('@account') && content.action === 'created') {
const issueTitle = content.issue.title;
const issueUrl = content.issue.html_url;
const postData = 'body=[To:{account_id}] ○○さん\n' + issueTitle + 'にコメントが追加されました。\n' + issueUrl;
var options = {
host: host,
path: path,
port: 443,
method: 'POST',
headers: {
'X-ChatWorkToken': TOKEN,
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
let req = https.request(options, (res) => {
console.log('status code : ' + res.statusCode);
res.setEncoding('utf8');
res.on('data', (d) => {
console.log(d)
});
});
req.on('error', (e) => {
console.error(e);
});
req.write(postData);
req.end();
}
};
HTTPS 모듈
이번에는 node.js의 표준 모듈 https
을 호출하여 사용하고 있습니다. (다른 모듈을 준비하는 것이 귀찮았기 때문에)
환경 변수
함수 만들기
AWS Lambda > 함수 > 함수 생성 에서 함수를 생성합니다.
함수 이름에 적절한 이름을 입력합니다. 이번에는
chatworkNotification
로 둡니다.함수에 사용하는 언어는, 사용하고 있는 사람이 많을 것 같았기 때문에 Node.js로 했습니다.
함수 코드
이번에는 코드 항목 유형을 코드를 인라인으로 편집하여 aws에서 코드를 추가합니다.
index.js
const https = require('https');
const host = 'api.chatwork.com';
const TOKEN = process.env['CHATWORK_TOKEN'];
const ROOM_ID = process.env['ROOM_ID'];
const path = '/v2/rooms/' + ROOM_ID +'/messages';
exports.handler = function(event) {
const content = JSON.parse(event.body);
const messageBody = content.comment.body;
if (messageBody.match('@account') && content.action === 'created') {
const issueTitle = content.issue.title;
const issueUrl = content.issue.html_url;
const postData = 'body=[To:{account_id}] ○○さん\n' + issueTitle + 'にコメントが追加されました。\n' + issueUrl;
var options = {
host: host,
path: path,
port: 443,
method: 'POST',
headers: {
'X-ChatWorkToken': TOKEN,
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
let req = https.request(options, (res) => {
console.log('status code : ' + res.statusCode);
res.setEncoding('utf8');
res.on('data', (d) => {
console.log(d)
});
});
req.on('error', (e) => {
console.error(e);
});
req.write(postData);
req.end();
}
};
HTTPS 모듈
이번에는 node.js의 표준 모듈
https
을 호출하여 사용하고 있습니다. (다른 모듈을 준비하는 것이 귀찮았기 때문에)환경 변수
이번에는 채팅 작업에 대한 메시지 추가가 되므로 경로는
/v2/rooms/' + ROOM_ID +'/messages'
되지만, 그 밖에도 작업 추가 등도 가능하므로 채팅 작업 문서 을 확인하면서 하고 싶은 것에 맞춰 보세요.통지되는 조건 설정
if의 조건으로서
messageBody.match('@account')
를 넣고 있는 것은, 특정의 유저를 멘션했을 때만 통지하고 싶었기 때문입니다.content.action === 'created'
는 댓글을 편집할 때 알림을 원하지 않으므로 새 댓글로만 제한되었습니다.github webhook의 json 구조는 문서에 나와 있으므로 알림 메시지에 설명하려는 내용에 맞게 데이터를 검색해야합니다.
채팅 작업의 멘션 설정
채팅 작업을 통해 알림을 받을 때 TO를 추가하고 싶었기 때문에 알림 메시지에
[To:{account_id}] ○○さん
를 그대로 표시했습니다.API 게이트웨이
Amazon API Gateway > API > API 생성
통합 유형을 Lambda로 설정하고 방금 만든 함수chatworkNotification
를 지정합니다.
API명은 적당한 이름을 붙여 주세요. 나머지 작성 단계는 기본값으로 작성됩니다.
API를 만들면 엔드포인트 URL이 만들어지므로 나중에 Webhook을 설정할 때 이 URL에 액세스하도록 설정합니다.
Github Webhook 설정
대상Repository > Settings > Webhooks > Add webhook
Payload URL은 방금 만든 URL에 Lambda 함수가 연결한 경로를 지정합니다.
ex.) htps : // x x. 네, 아빠. 아 p의 r ぇ아 st-1. 아마조나 ws. 코 m / 짱과 rk의 치후 카치 온
이번에는 issue에 대한 댓글만 주고 싶기 때문에 트리거는 Issue comments를 선택합니다.
확인
한 가지 설정은 종료입니다.
그리고는 issue에 코멘트를 추가해 보고 채팅 워크에 통지가 날아 가면 완료입니다.
정리해 보면 상당히 간단하게 할 수 있네요. (나는 상당히 시간이 걸렸지만,,)
slack에게 통지를 날리는 기사는 가득 있었습니다만, 채팅 워크에 통지하는 기사가 적게 느꼈으므로 정리해 보았습니다.
참조
대상Repository > Settings > Webhooks > Add webhook
Payload URL은 방금 만든 URL에 Lambda 함수가 연결한 경로를 지정합니다.
ex.) htps : // x x. 네, 아빠. 아 p의 r ぇ아 st-1. 아마조나 ws. 코 m / 짱과 rk의 치후 카치 온
이번에는 issue에 대한 댓글만 주고 싶기 때문에 트리거는 Issue comments를 선택합니다.
확인
한 가지 설정은 종료입니다.
그리고는 issue에 코멘트를 추가해 보고 채팅 워크에 통지가 날아 가면 완료입니다.
정리해 보면 상당히 간단하게 할 수 있네요. (나는 상당히 시간이 걸렸지만,,)
slack에게 통지를 날리는 기사는 가득 있었습니다만, 채팅 워크에 통지하는 기사가 적게 느꼈으므로 정리해 보았습니다.
참조
Reference
이 문제에 관하여(Github의 isuue가 댓글을 달 때 Lambda를 사용하여 채팅 작업에 알리려고했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nanaco/items/79d91b47b7298548fc73텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)