GASでWebhookを複数のエンドポイントに中継する方法

以前、こんな記事を書きました。

https://note.com/embed/notes/n7a855bbcc73c

なかなか便利に使っていたのですが、新たに「L Message」というLINE公式アカウントの拡張機能を導入したところ、LINE公式アカウントのWebhook URLが一つしか設定できないことが判明し、しばらくの間、Discord通知を諦めていました。

しかし、GASを使ったWebhook分岐用アプリを経由することで、両方の通知を同時に実現できたので、その方法をシェアします。
今回の記事も、おなじみのChatGPT先生に執筆してもらいました。


LINE公式アカウントを運用する際に、Webhookを利用して自動通知を行うのは便利ですが、WebhookのURLは一つしか設定できないため、複数のシステムに同時通知するのは一工夫必要です。

この記事では、Google Apps Script(GAS)を使って、LINEからのWebhookデータをDiscord通知用のGASアプリL Messageのウェブアプリに転送する方法を解説します。


準備するもの

  • Googleアカウント
  • LINE公式アカウント(LINE DevelopersでWebhookを設定)
  • GASアプリ(Discord通知用)
  • L Messageアプリ

手順概要

  1. 中継用Google Apps Script(GAS)プロジェクトの作成
  2. GASスクリプトの記述とデプロイ
  3. LINE DevelopersでWebhook URLの設定
  4. テストと確認

1. 中継用Google Apps Scriptプロジェクトの作成

  1. Googleドライブにアクセスし、「新規」→「その他」→「Google Apps Script」を選択します。
  2. 以下のコードをコピーし、エディタに貼り付けます。

GASスクリプトのコード

var discordAppUrl = 'DISCORD_APP_URL';  // Discord通知用のGASアプリURL
var lMessageAppUrl = 'L_MESSAGE_APP_URL';  // L Message用のGASアプリURL

// LINEからのPOSTリクエストを処理する関数
function doPost(e) {
  try {
    var lineData = JSON.parse(e.postData.contents);  // LINEからのデータを取得

    // Discord通知用GASアプリとL Message用GASアプリに同じデータを送信
    sendToApp(discordAppUrl, lineData);
    sendToApp(lMessageAppUrl, lineData);

    return ContentService.createTextOutput(JSON.stringify({ "status": "success" }))
      .setMimeType(ContentService.MimeType.JSON);
  } catch (error) {
    return ContentService.createTextOutput(JSON.stringify({ 
      "status": "error", 
      "message": error.message 
    })).setMimeType(ContentService.MimeType.JSON);
  }
}

// GASアプリにデータを送信する関数
function sendToApp(url, data) {
  var options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(data)
  };

  try {
    var response = UrlFetchApp.fetch(url, options);
    Logger.log("Response from " + url + ": " + response.getContentText());
  } catch (error) {
    Logger.log("Error sending to " + url + ": " + error.message);
  }
}

2. スクリプトのデプロイ

  1. GASエディタで、右上の「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。
  2. ウェブアプリ」を選択し、「次のユーザーとして実行」を「自分」に設定します。
  3. 「アクセスできるユーザー」を「全員(匿名ユーザーを含む)」に設定し、「デプロイ」をクリックします。
  4. 表示されたウェブアプリのURLをコピーします。

3. LINE DevelopersでWebhook URLを設定

  1. LINE Developersコンソールにアクセスし、該当するLINE公式アカウントのチャネルを選択します。
  2. Messaging API」タブを開きます。
  3. Webhook URL」に、上記でコピーした中継用GASアプリのURLを設定し、「Webhook利用」を有効にします。

4. テストと確認

  1. Discord通知用GASアプリL MessageアプリのURLが正しく設定されていることを確認してください。
  2. LINE公式アカウントにメッセージを送信し、両方のGASアプリが正常に動作することを確認します。
  3. Google Apps Scriptの「ログ」を使い、エラーやレスポンスを確認して、問題がないかチェックします。

まとめ

この仕組みを使えば、LINEのWebhookを一度のリクエストで複数のGASアプリに転送することが可能になります。これにより、例えばDiscord通知アプリL Messageのシステムに同時にデータを送信できるため、情報共有や管理が効率化されます。


注意点と改善案

  • データ加工の必要がある場合:各アプリに適したデータフォーマットで送信するため、sendToApp関数内で条件分岐を追加できます。
  • エラーハンドリング:各転送先への送信に失敗した場合は、GASのログを活用して原因を追究してください。

これで、LINEのWebhookを使った複数のGASアプリへのデータ転送ができるようになります。GASを活用すれば、コストをかけずに効率的な自動化が可能です。ぜひ試してみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です