
「LINE Messaging API」×「Google Apps Script」で、Gmailの通知をLINEに連携!
はじめに
こんにちは。SHIFTの野上です。
これまで、Gmailの通知をLINEに連携する方法として、LINEが提供するAPIサービスのLINE Notify APIとGoogle Apps Scriptを活用した連携を使っていましたが、2025年3月31日でLINE Notify APIの利用できなくなる ことがアナウンスされました。
今回の記事では、LINE Notify APIの代替として、2025年3月31日以降にも利用できるLINE Messaging APIとGoogle Apps Scriptを使用して、Gmailの通知をLINEに連携する方法をまとめたので、コード付きでご紹介します。
1.LINE公式アカウントの作成
まず、今回使用するLINE Messaging APIを使用するために、LINEの公式アカウント を作成します。

LINE公式アカウントは、LINEアカウントもしくは、任意のメールアドレスで作成することができます。

2.LINE Messaging APIの利用登録
LINE公式アカウントの作成ができたら、LINE公式アカウントの管理画面の設定からLINE Messaging APIを選択し、LINE Messaging APIを利用するを選択します。

必要事項を入力して、OKを選択します。

登録が完了すると下記の画面が表示され、LINE Messaging APIが利用できるようになります。

3.Google Apps ScriptとLINE Messaging APIの設定
今回は、下記のコードを使用して、Gmailの通知をLINEに連携します。
処理としては、Gmailから、指定した送信元のメールを抽出して、LINEの指定のユーザー宛に連携することができるようになっています。

// ①LINEメッセージングAPIのチャンネルアクセストークン
const channelAccessToken = 'AAAAA';
// ②メッセージを送信するユーザーID
const userId = 'BBBBB';
// ③取得したい送信元のメールアドレス
const mailAddress = 'from:CCCCC@DDDDD';
function getMail() {
// 指定した件名のスレッドを検索して取得
const myThreads = GmailApp.search(mailAddress, 0, 10);
// スレッドが見つからなかった場合の処理
if (myThreads.length === 0) {
Logger.log('指定された件名のスレッドが見つかりませんでした。');
return; // 処理を終了する
}
// スレッドからメールを取得し二次元配列に格納
const myMessages = GmailApp.getMessagesForThreads(myThreads);
// スレッド内にメールがない場合の処理
if (myMessages.length === 0) {
Logger.log('スレッド内にメッセージが見つかりませんでした。');
return; // 処理を終了する
}
myMessages.forEach(threadMessages => {
threadMessages.forEach(message => {
// スターがないメッセージのみ処理
if (!message.isStarred()) {
const strDate = message.getDate();
const strSubject = message.getSubject();
let strMessage = message.getPlainBody().slice(0, 500);
// 空白行を削除
strMessage = removeEmptyLines(strMessage);
// LINEにメッセージを送信
sendLineMessage(strDate, strSubject, strMessage);
// 処理済みのメッセージをスターをつける
message.star();
}
});
});
}
function sendLineMessage(strDate, strSubject, strMessage) {
// メッセージが空の場合は処理をスキップ
if (strMessage.trim() === '') {
Logger.log('メッセージが空です。LINEへの送信をスキップします。');
return;
}
const message = strDate + "\n" + strSubject + "\n\n" + strMessage;
const url = 'https://api.line.me/v2/bot/message/push';
const headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + channelAccessToken
};
const payload = {
'to': userId,
'messages': [
{
'type': 'text',
'text': message
}
]
};
const options = {
'method': 'post',
'headers': headers,
'payload': JSON.stringify(payload)
};
try {
const response = UrlFetchApp.fetch(url, options);
Logger.log('メッセージの送信に成功しました。レスポンス: ' + response.getContentText());
} catch (error) {
Logger.log('メッセージ送信中にエラーが発生しました: ' + error);
}
}
function removeEmptyLines(str) {
return str.split('\n').filter(line => line.trim() !== '').join('\n');
}
上記のコードを動かすために、①~③の情報を取得・設定します。
3-1.①channelAccessToken
Messaging APIを実行するために必要なAPIキー。
■確認方法
LINE Developers の「コンソール」からLINE公式アカウントでログインします。

ログインができたら、プロバイダーを押下します。

チャネル設定タブから、作成した公式アカウントのチャネルを押下します。

選択したチャネルの設定画面が表示されるので、Messaging APIのタブを押下します。

Messaging APIのタブに移動したら、画面下部のチャネルアクセストークンの発行ボタンを押下するとチャンネルアクセストークンが発行されます。

3-2.②userId
メッセージを送信するユーザーのID(UID)。
※UIDは、LINE公式アカウントにおいて、フォローしているLINE公式アカウントごとにユーザーに付与され、「1ユーザー=1ID」でデータが管理できる識別子。LINEのプロフィールから確認できるIDとは異なります。
■確認方法
<LINE公式アカウントをLINEアカウントで作成した場合>
LINE Developersのチャンネル基本設定の「あなたのユーザーID」からUIDを確認できます。
※こちらの方法で確認できた場合は、”3-3.③mailAddress”まで進んでください。

<LINE公式アカウントを任意のメールアドレスで作成した場合>
LINE Developersのチャンネル基本設定から確認することができないので、Messaging APIとGoogle Apps Scriptを使用して、取得します。
まずは、Google Driveにログインし、新規ボタンを押下します。

「Google スプレッドシート」を選択して、UIDの取得結果を記載するためのスプレッドシートを作成しておきます。

シートを作成したら、拡張機能タブからApps Scriptを押下します。

Google Apps Scriptの編集画面に遷移するので、UID取得のために、下記のコードを設定します。
ACCESS_TOKENには、"①channelAccessToken"で確認した、チャンネルアクセストークンを設定します。
"スプレッドシートID"には、UIDの取得結果を記載するためのスプレッドシートのURLから、「https://docs.google.com/spreadsheets/d/{スプレッドシートID}/edit」の{スプレッドシートID}の部分を設定します。
"シート名"には、UIDの取得結果を記載するためのスプレッドシートのシート名を設定します。

const ACCESS_TOKEN = "******";
function doPost(e) {
// リクエストボディを解析
const json = JSON.parse(e.postData.contents);
const events = json.events;
// スプレッドシートを開く
const sheet = SpreadsheetApp.openById("スプレッドシートID").getSheetByName("シート名");
events.forEach(event => {
const userId = event.source.userId; // ユーザーID取得
const eventType = event.type; // イベントタイプ(例: follow, message)
const timestamp = new Date(event.timestamp); // タイムスタンプ
// ユーザー名取得(オプション)
const userName = getUserName(userId);
// スプレッドシートに記録
const lastRow = sheet.getLastRow();
sheet.getRange(lastRow + 1, 1).setValue(userName || "不明");
sheet.getRange(lastRow + 1, 2).setValue(userId);
sheet.getRange(lastRow + 1, 3).setValue(eventType);
sheet.getRange(lastRow + 1, 4).setValue(timestamp);
});
}
// ユーザー名を取得する関数
function getUserName(userId) {
const url = `https://api.line.me/v2/bot/profile/${userId}`;
const options = {
headers: {
"Authorization": `Bearer ${ACCESS_TOKEN}`
},
method: "GET"
};
try {
const response = UrlFetchApp.fetch(url, options);
return JSON.parse(response.getContentText()).displayName;
} catch (e) {
Logger.log(`Error fetching user name: ${e}`);
return null;
}
}
コードの設定が完了したら、新しいデプロイを押下します。

デプロイの種類に「ウェブアプリ」を選択して、次のユーザーとして実行の欄に「自分」、アクセスできるユーザーに「全員」を選択したら、デプロイを押下します。
※LINEサーバーからのリクエストを受け取るために、アクセスできるユーザーは「全員」に設定します。

アクセスの承認が求められるので、承認を行います。

デプロイが完了すると、ウェブアプリのURLが表示されるので、コピーしておきます。

公式LINEに対してチャットメッセージの送信等のアクションが送られた時の通知をGoogle Apps Scriptで受け取れるように、LINE DevelopersのMessaging API設定のWebhook URLに先ほどコピーしたウェブアプリのURLを設定します。
あわせて、Webhookの利用は、有効化します。
公式LINEにメッセージを送るために、QRコードから友達登録をしておきます。

公式LINEに対してメッセージを送ると、Webhook経由でGoogle Apps Scriptに通知が連携され、UIDの取得結果を記載するためのスプレッドシートに、UIDを含めた情報が更新されます。

3-3.③mailAddress
取得したい送信元のメールアドレス。
下記の「from:」以降の部分に、取得したい送信元のメールアドレスを設定。
mailAddress = 'from:CCCCC@DDDDD';
4.実行確認
上記の①~③の情報が取得できたら、Google DriveからGoogle Apps Scriptを押下し、編集画面に遷移します。

編集画面に遷移した後、Google Apps ScriptとLINE Messaging APIの設定の章で紹介したコードに、①~③の値が設定できたら、下記の設定でデプロイを行います。

デプロイが完了したら、「実行」ボタンを押下します。

LINEに下記の形式で通知が届けば、実行は成功です。

上記の設定だけだと、手動で毎回実行が必要になるため、定期的に自動実行されるように追加の設定を行います。
画面左側のメニューのトリガータブを押下します。

トリガーを追加のボタンを押下します。

トリガーの設定画面が表示されるので、実行間隔を指定して保存すれば、設定は完了です。

おわりに
最後まで記事を読んでいただきありがとうございます!
記事が役に立ったと感じていただけたら、スキをいただけると励みになります。他にも、noteで生成AI等の記事を書いているので、よければ、ご一読いただければ幸いです。
執筆者プロフィール: 野上
SIerで数年のキャリアを経て、SHIFT入社。 技術・サービスをキャッチアップして、発信していきたいと思います!
✅SHIFTへのお問合せはお気軽に
SHIFTについて(コーポレートサイト)
SHIFTのサービスについて(サービスサイト)
SHIFTの導入事例
お役立ち資料はこちら
SHIFTの採用情報はこちら