Gmailの特定のメール(スレッド)をチャットに飛ばす
GoogleAppsScriptを使って
・Gmailから特定の条件に合致するメールを取得
・ChatWorkライブラリを使ってメッセージ送信
というスクリプトをつくります。
準備:ChatWorkのトークン情報など
「API Token」よりトークンが発行できるので、発行したらそれをコピーしておきます。
また、メッセージを飛ばしたいチャットルーム(マイチャットなど)のIDも必要なので、それもメモしておきます。
※URLの数字部分
To をつける場合にはアカウントIDも必要なので、それも調べておきます。
適当なチャットで引用や返信したときに、メッセージの頭につくタグで
aid=XXXXXXXX
という箇所がありますが、これがアカウントIDになります。
スクリプトにライブラリを追加
ドライブから新規スクリプトを作成します。
プロジェクト名やスクリプト名などは適当に。
ライブラリの追加は、「リソース」->「ライブラリ」から行います。
チャットワークライブラリは中の人が非公式につくってくれています。
チャットワークAPI を Google Apps Script で使ってみた
GitHub
プロジェクトキーは以下です。
M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT
スクリプトを書く
こんな感じです。
function main() {
//チャットワークトークン・ID
const CW_TOKEN = "最初に取得したトークン";
const CW_ROOM = チャットルームID;
const CW_TO = アカウントID;
//Gmailから特定条件のスレッドを検索しメールを取り出す
var strTerms = 'is:unread "メール取得条件"';
var myThreads = GmailApp.search(strTerms, 0, 50); //条件にマッチしたスレッドを取得
var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する→二次元配列で格納
//チャットワークAPI
var client = ChatWorkClient.factory({
token: CW_TOKEN
});
//各スレッド×メール
for (var i = myMsgs.length - 1; i >= 0; i--) {
var msgsInThread = myMsgs[i];
for (var j = 0; j < msgsInThread.length; j++) {
var msg = msgsInThread[j];
//未読のみ
if (msg.isUnread()) {
//メールを既読にする
msg.markRead();
//メッセージ作成
var msgBody = "[To:" + CW_TO + "]" +
"[info]" +
"[title]" + msg.getSubject() + "[/title]" +
msg.getFrom() + "[hr]" +
msg.getPlainBody().slice(0,400) + "[hr]" +
msg.getDate() +
"[/info]";
//チャットワークに送る
client.sendMessage({
room_id: CW_ROOM,
body: msgBody
});
}
}
}
}
未読のメールを拾って、メッセージを送ったら既読にするという仕組みです。
メールの検索条件はGmailで使えるものがそのまま使えます。
Gmail で使用できる検索演算子
また、取得したメッセージはメールボックスの上から(最新から)なので、
ループは後ろから回して受信順にメッセージを送るようにしています。
チャットワークメッセージはタグで装飾できます。
メッセージ記法