Created
April 3, 2023 09:41
-
-
Save Atsumi3/6145a50345840cf14a4b81b74774cd68 to your computer and use it in GitHub Desktop.
タイトルに特定アプリ名を含むメールを受信したらSlackに通知するgs
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
/** | |
* ここから始まる | |
* @param {string} appName - アプリ名 | |
* @param {string} fromAddress - 送信元アドレス | |
* @param {string} slackChannelName - 投稿先チャンネル名 | |
* @param {string} slackMessageIcon - 投稿メッセージアイコン | |
* @param {string} slackMessageUserName - 投稿者名 | |
* @param {string} webhookUrl - 投稿スペースのWebhookUrl | |
*/ | |
function run_(appName, fromAddress, slackChannelName, slackMessageIcon, slackMessageUserName, webhookUrl) { | |
// 送信元アドレスからのメールを最新から10件取得する | |
let mailSearchResult = GmailApp.search(`from:${fromAddress}`, 0, 10); | |
// 指定したアプリ名がタイトルに含まれるメールをスレッドごと抽出 | |
// messages[][] | |
let messages = GmailApp.getMessagesForThreads(mailSearchResult).filter((e) => e[0] && e[0].match(appName)); | |
// 指定したアプリ名がタイトルに含まれるメールがなかったら終わり | |
if(messages.length == 0) { | |
Logger.log(`${appName} がタイトルに含まれているメールはありませんでした`); | |
return; | |
} | |
// 最新のメールから未読のスレッドメッセージを取得 | |
let unreadThreadMessages = messages[0].filter(e => e.isUnread()); | |
// 未読がなかったら終わり | |
if(unreadThreadMessages.length == 0) { | |
Logger.log("未読のメッセージはありませんでした"); | |
return; | |
} | |
// 最新の未読メッセージを取得 | |
let latestAppleMessage = unreadThreadMessages.slice(-1)[0]; | |
// Slack投稿用のペイロード作成 | |
let payload = { | |
"username": `[${appName}] ${slackMessageUserName}`, | |
"icon_emoji": `${slackMessageIcon}`, | |
"channel": `${slackChannelName}`, | |
"text": `${latestAppleMessage.getSubject()}` | |
}; | |
// Slackへ通知 | |
let options = { | |
'method': 'post', | |
'contentType': 'Content-type: application/json; charset=utf-8', | |
'payload': JSON.stringify(payload).replace(/":"/g, "\"\:\"") | |
} | |
let postResult = UrlFetchApp.fetch(webhookUrl, options) || false; | |
if (!postResult || postResult.getResponseCode() != 200) { | |
Logger.log("Slackへのポストに失敗しました"); | |
return; | |
} | |
// スレッドの未読を既読に変更 | |
unreadThreadMessages.forEach(e => e.markRead()); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment