Githubのisuueのコメント時に、Lambdaを使ってチャットワークに通知されるようにしてみた
概要
Github Webhook -> AWS API Gateway -> Lambda -> Chatwork
という構成で、チャットワークにgithubからコメントがあったことを通知できるようにします。
Chatwork APIが使用可能な前提になっています。
Lambdaで関数を作成
関数の作成
AWS Lambda > 関数 > 関数の作成 から関数を作成します。
関数名には適当な名前を入力します。今回はchatworkNotification
にしておきます。
関数に使う言語は、使ってる人が多そうだったためNode.jsにしました。
関数コード
今回はコードエントリタイプをコードをインラインで編集にして、aws上でコードを追加します。
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
を呼び出して使っています。(他のモジュールを準備するのが面倒だったため)
環境変数
- CHATWORK_TOKEN:チャットワークのAPI設定>API Tokenから確認できます
- ROOM_ID: チャットワークで通知したい先のルームID
今回はチャットワークへのメッセージ追加になるのでパスは/v2/rooms/' + ROOM_ID +'/messages'
になりますが、他にもタスク追加なども可能なので、チャットワークのドキュメントを確認しながら、やりたいことに合わせてみてください。
通知される条件を設定
ifの条件としてmessageBody.match('@account')
を入れてるのは、特定のユーザーをメンションした時だけ通知するようにしたかったためです。
content.action === 'created'
は、コメントの編集時は通知したくなかったため、新規コメントのみに限定しました。
github webhookのjsonの構造はドキュメントに載っているので、通知メッセージに記載したい内容に合わせてデータを取得するようにしてください。
チャットワークのメンション設定
チャットワークで通知される際に、TOをつけたかったため通知メッセージに[To:{account_id}] ○○さん
をそのまま記載しました。
API Gateway
Amazon API Gateway > API > APIを作成
統合タイプをLambdaにして、先ほど作成した関数chatworkNotification
を指定します。
API名は適当な名前をつけてください。残りの作成ステップはデフォルトのままで作成します。
APIを作成するとエンドポイントURLが作成されるので、のちにWebhookの設定の際には、このURLにアクセスするように設定します。
GithubのWebhookを設定
対象Repository > Settings > Webhooks > Add webhook
Payload URLは、先ほど作成されたURLにLambda関数が紐づいたパスを指定します。
ex.) https://xxx.execute-api.ap-northeast-1.amazonaws.com/chatworkNotification
今回はissueに対するコメントだけを拾いたいのでトリガーはIssue commentsを選択します。
確認
一通りの設定は終了です。
あとはissueにコメントを追加してみてチャットワークに通知が飛んでくれば完了です。
まとめてみると結構簡単にできますね。(私は結構時間かかりましたが、、)
slackに通知を飛ばす記事はいっぱいありましたが、チャットワークに通知する記事が少なく感じたのでまとめてみました。
参照
Author And Source
この問題について(Githubのisuueのコメント時に、Lambdaを使ってチャットワークに通知されるようにしてみた), 我々は、より多くの情報をここで見つけました https://qiita.com/nanaco/items/79d91b47b7298548fc73著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .