見出し画像

「LINE Messaging API」×「Google Apps Script」で、Gmailの通知をLINEに連携!


はじめに


こんにちは。SHIFTの野上です。

これまで、Gmailの通知をLINEに連携する方法として、LINEが提供するAPIサービスのLINE Notify APIGoogle Apps Scriptを活用した連携を使っていましたが、2025年3月31日でLINE Notify APIの利用できなくなる ことがアナウンスされました。

今回の記事では、LINE Notify APIの代替として、2025年3月31日以降にも利用できるLINE Messaging APIGoogle 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等の記事を書いているので、よければ、ご一読いただければ幸いです。

その他のnote記事


執筆者プロフィール: 野上
SIerで数年のキャリアを経て、SHIFT入社。 技術・サービスをキャッチアップして、発信していきたいと思います!

SHIFTへのお問合せはお気軽に

SHIFTについて(コーポレートサイト)

SHIFTのサービスについて(サービスサイト)

SHIFTの導入事例

お役立ち資料はこちら

SHIFTの採用情報はこちら