GoogleAppsScriptでJAWS-UGのイベント通知をSlackに流してみた
頑張って、どんどん、書きます!!!
都会に憧れるエンジニア
ハンズラボの吉田です。
アイキャッチ画像は家の近くの山です。これの麓辺りから出勤しています。
杉山なので春先は地獄です。春が、近い・・・(恐怖
前回に引き続きSlackネタで書いていこうと思います。
前回はLambda(Python2.7)からSlackへの通知を行いました。
今回は、GoogleAppsScript(以下GAS)からSlackをぶっ叩きます!
感想
JavaScriptむずかしぃぃぃぃ!
慣れですね。頑張ります。
今回作ったBOTはJAWS-UGのイベントが登録されたらSlackにつぶやくBOTです
こんな感じ
それでは作り方を見ていきましょう。
事前準備(StudyMail)
勉強会情報ですが、Study Mail IT勉強会自動チェックサービスを使用してGmailで勉強会情報をチェックしています。
このサービス速報性が高いのでオススメです!
勉強会って行こうと思っても定員オーバーってよくありますよね?
このサービスでチェックしていると結構定員に勝てたりします(´ω`)
このサービスについては特に説明するほどの設定も無いため省略します。
事前準備(GMail)
受信専用のアカウント作っても良いかとは思いますが、自分はいつも使ってるアカウントなのでStudyMailのJAWS-UGイベントをフィルター処理しておきます。
- StudyMail且つJAWS-UGに関係あるメールだけをフィルターする
- Slackに通知するのはその中でも未読メールのみ
- 通知したら既読になるようにする
やりたいことはこんな感じです。
やってみた
早速ですが完成品がこちら
WEB_HOOK_URL = "https://hooks.slack.com/services/**********";
SLACK_USER_NAME = "ghost-bot";
SLACK_ICON = ":ghost:";
function postslack(MESSAGE){
var payload = {
"username" : SLACK_USER_NAME,
"icon_emoji" : SLACK_ICON,
"attachments": [
{
"text": MESSAGE,
}
]
}
var options = {
"method" : "POST",
"payload" : JSON.stringify(payload)
}
UrlFetchApp.fetch(WEB_HOCK_URL, options)
}
function myFunction() {
var threads = GmailApp.search('label:jaws−ug-studymail label:unread')
for(i = 0; i < threads.length; i++){
var mailObject = threads[i].getMessages()[0]
var content = mailObject.getRawContent()
var mainTexts = content.split("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
var spritPoint = mainTexts[1].indexOf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
var Massage = mainTexts[1].slice(0, spritPoint)
var url = Massage.split("■詳細はこちらから↓")[1]
var subject = mailObject.getSubject().split("]")
var Tittle = subject[1];
var postMassage = "JAWS-UGの新しいイベントが登録されました!\n" + Tittle + "\n" + url
postslack(postMassage)
mailObject.markRead()
}
}
ハマりポイントとしては、StudyMailからのメールがHTML形式で飛んでくるため、どうやって情報をパースするか
でした。
ものすっごい無理やりやっていますが、自動送信で送られてきているメッセージなので決め打ちで抜き取ってもいいかなーという判断です。
慣れてきたらカッコいい(美しい)コードが書けるようになりたいものです・・・
弊社にはJAWS-UG界隈の有名人が居ますので、こういったものが役に立てば、見ている皆さんの役に立てばいいなーと思い、作ってみました。
参考
https://api.slack.com/custom-integrations
https://api.slack.com/incoming-webhooks
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String,Object)