LINE Notifyが3/31に終了するらしい
https://notify-bot.line.me/closing-announce
今まで、Google Apps Scriptを使って、特定のGmailの内容をLINE Notifyに転送していた
転送設定が便利だったため、なくなると非常に困る
ただ、それらの代案としてLINE Messaging API を使用することができるらしい
https://developers.line.biz/ja/services/messaging-api/
【追記】LINE公式アカウントの無料版のメッセージ通数は200通/月のため、上限には注意が必要。
詳細はコメント参照。
( ありがたいことにコメントでご指摘いただきました )
今回、Messaging APIとGoogle Apps Scriptを使用して、「特定のGMailの通知を、LINEに転送する」機能の実装を行なったため、備忘録として残しておくとする
初学者な上に、ChatGPTに頼ったところもあるのでやや不安もある…
間違っていることがあればぜひコメントとしていただきたい
▼公式LINEの設定
1.公式LINE(チャネル)を作成する
https://entry.line.biz/start/jp/
2.設定にあるMessaging APIから[Messaging APIを利用する]を選択する
3.[LINE Developer]へアクセスして、コンソールを選択する
https://developers.line.biz/ja/
4.プロバイダーを作成する
※名前は後からでも変更できる
5.作成したプロバイダーでチャネル設定を行なう
6.作成したチャネルを選んで、Messaging API 設定を選択する
7.チャンネルアクセストークンを発行して、トークンをコピーする
▼Gmail特定のメールにラベルを設定
フィルタを作成して、ラベルを付与する自動振り分け設定を行なう
https://support.google.com/mail/answer/6579?hl=ja
▼GASの設定:プロジェクトの作成
https://script.google.com/home?hl=ja
1.新しいプロジェクトを作成する
2.プロジェクト名を設定する
3.下記のコードを記述する
3行目の(Messaging APIのトークン)を上記で取得したトークンの値へ書き換える
/* ------------------------------------------------------- */
// LINE BOT のチャネルアクセストークン
// これを使用して LINE の API にアクセスします
var LINEBOT_CHANNEL_TOKEN = '(Messaging APIのトークン)';
// 検索条件: 未読 & ラベル「LINE」が付いたメールを取得
var GMAIL_QUERY = "is:unread label:LINE";
/* ------------------------------------------------------- */
/**
* メッセージを LINE BOT に送信する関数
* @param {string} message 送信するテキストメッセージ
*/
function pushMessageLineBot(message) {
var options = {
method: "post",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + LINEBOT_CHANNEL_TOKEN,
},
payload: JSON.stringify({
messages: [{ type: "text", text: message }]
})
};
// LINEのAPIにリクエストを送信
UrlFetchApp.fetch("https://api.line.me/v2/bot/message/broadcast", options);
}
/**
* Gmail から未読のメッセージを取得し、フォーマットしてリストにまとめる関数
* 取得したメッセージは既読にする
* @return {string[]} 取得したメールのリスト(フォーマット済み)
*/
function getMessageGmail() {
var threads = GmailApp.search(GMAIL_QUERY); // 指定の条件に一致するスレッドを取得
var messages = GmailApp.getMessagesForThreads(threads); // 各スレッド内のメッセージを取得
var items = [];
messages.forEach(thread => {
var latestMessage = thread.pop(); // 各スレッドの最新メッセージを取得
var date = latestMessage.getDate();
var formattedDate = `[日時]\n${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()} ${date.getHours()}:${date.getMinutes()}`;
// メッセージを読みやすい形式にフォーマット
items.push(
`${formattedDate}\n\n[件名]\n${latestMessage.getSubject()}\n\n[本文]\n${latestMessage.getPlainBody()}`
);
latestMessage.markRead(); // メールを既読にする
});
return items;
}
/**
* メイン関数
* Gmail から未読メールを取得し、それを LINE BOT で送信する
*/
function main() {
var items = getMessageGmail();
items.forEach(item => pushMessageLineBot(item));
}
4.実行する関数を選択:main にする
5.保存
6.実行テスト
ラベルが付与されたメールを受信すると、作成した公式LINEから通知が送付される
完了
ここ数日動かしてはいるが、問題なく動いているため、おそらくこれで問題ない作りになっているはず…