以前、こんな記事を書きました。
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アプリ
手順概要
- 中継用Google Apps Script(GAS)プロジェクトの作成
- GASスクリプトの記述とデプロイ
- LINE DevelopersでWebhook URLの設定
- テストと確認
1. 中継用Google Apps Scriptプロジェクトの作成
- Googleドライブにアクセスし、「新規」→「その他」→「Google Apps Script」を選択します。
- 以下のコードをコピーし、エディタに貼り付けます。
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. スクリプトのデプロイ
- GASエディタで、右上の「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。
- 「ウェブアプリ」を選択し、「次のユーザーとして実行」を「自分」に設定します。
- 「アクセスできるユーザー」を「全員(匿名ユーザーを含む)」に設定し、「デプロイ」をクリックします。
- 表示されたウェブアプリのURLをコピーします。
3. LINE DevelopersでWebhook URLを設定
- LINE Developersコンソールにアクセスし、該当するLINE公式アカウントのチャネルを選択します。
- 「Messaging API」タブを開きます。
- 「Webhook URL」に、上記でコピーした中継用GASアプリのURLを設定し、「Webhook利用」を有効にします。
4. テストと確認
- Discord通知用GASアプリとL MessageアプリのURLが正しく設定されていることを確認してください。
- LINE公式アカウントにメッセージを送信し、両方のGASアプリが正常に動作することを確認します。
- Google Apps Scriptの「ログ」を使い、エラーやレスポンスを確認して、問題がないかチェックします。
まとめ
この仕組みを使えば、LINEのWebhookを一度のリクエストで複数のGASアプリに転送することが可能になります。これにより、例えばDiscord通知アプリとL Messageのシステムに同時にデータを送信できるため、情報共有や管理が効率化されます。
注意点と改善案
- データ加工の必要がある場合:各アプリに適したデータフォーマットで送信するため、sendToApp関数内で条件分岐を追加できます。
- エラーハンドリング:各転送先への送信に失敗した場合は、GASのログを活用して原因を追究してください。
これで、LINEのWebhookを使った複数のGASアプリへのデータ転送ができるようになります。GASを活用すれば、コストをかけずに効率的な自動化が可能です。ぜひ試してみてください。