#背景
お客様に導入したシステムの運用保守しています。システム監視のツール
からアラートメールがよく飛んできます。アラートレベルが、軽度障害、重度障害、またお客様のシステムによっても対応方法が異なったりします。それぞれのアラートレベルなどによって、メールを振り分け、メールの本文をGoogleチャットに転送することをしたいので、その方法について記事を書いていきます。ポイントは、同じメールアドレスからアラートがくるのですが、軽度のアラートか重度かは、メール本文にしか違いが記載されていないので、それをどう情報を取得してチャットに転送するかです。
#必要情報
①取得したいメールに独自のラベルがついている。黄色で囲まれてるやつなど。(コード内のラベル名のやつ)
②転送したい先のグループチャットのWebhook管理からリンクを取得する。(コード内の任意のWebhook)
#コードの流れ
1 :合致するラベル名のスレッドを取得
(スレッドはメールとは別。スレッド内に複数のメールがあることも。)
2: 1で取得したスレッドで、未読のメールがあるスレッドのメールを取得し、配列に格納
3: for文繰り返し処理で、一つ一つのメールを message 変数に格納してからメール本文を取得し(Body変数)、本文に記載されているアラートレベルを取得(level変数)
4: level変数が、average など任意のストリングであれば転送したいチャットにメール本文を転送。転送したらメールを既読にする。
#全体のコード
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('シート1');
function myFunction() {
var threads = GmailApp.getUserLabelByName('G-Star_Zabbix').getThreads();
var url = "https://chat.googleapis.com/v1/spaces/AAAAUW3Kp_U/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=uySHzlczWP7MIEGi2nyVEzh8RQtwWaQWqI0HnxeRImM%3D";
console.log(threads);
var messages = [];
for(i=0; i < threads.length; i++){
messages = threads[i].getMessages();
for(j=0; j < messages.length; j++){
var message = messages[j];
var messageId = messages[j].getId();
if( message.isUnread()){
console.log(message);
var Body = message.getPlainBody();
var Body2 = {'text': Body};
console.log(Body);
var level = Body.match(/深刻度: (.*)/)
console.log(level);
var options ={
'method': 'POST',
'headers': {
'Content-Type': 'application/json; charset=UTF-8'
},
'payload':JSON.stringify(Body2)
};
if(level != null && level[1] == 'average'){
UrlFetchApp.fetch(url,options);
message.markRead();
}
}
}
}
}
#まとめ
テストチャットでいけたんで大丈夫だと思いますが、、、何かございましたらお伝えくださいm(__)m