💬

Google App Script (GAS) を利用して、LINE のメッセージを Discord へ送信する

2024/06/19に公開

はじめに

Google App Script (GAS) を利用して、LINE チャネルに入力したメッセージを Discord へ送信します。

事前準備

  • Google App Script (GAS) が作成できること
  • LINE チャネルが作成できること
  • Discord の Webhook URL が作成済であること

GAS プロジェクトの作成

Apps Script へアクセスします。
左上にある 新しいプロジェクト をクリックします。

新規プロジェクトが作成されます。 無題のプロジェクト をクリックし、プロジェクト名を line-message-to-discord へ変更します。


GAS スクリプトプロパティ設定

GAS スクリプトプロパティ(環境変数的なやつ)へ Discord の Webhook URL を登録します。
Discord の Webhook URL を変更した際にコードを直接修正しなくてもいいように、スクリプトプロパティの設定値から値を取得します。

  • スクリプトプロパティ設定値
    • DISCORD_WEBHOOK_URL: {Discord の Webhook URL}

サイドメニューから プロジェクトの設定 を選択します。

スクリプトプロパティを追加 から設定します。

プロパティへ DISCORD_WEBHOOK_URL を、値へ {自分のDiscord Webhook URL} を入力し、スクリプトプロパティを保存します。

GAS スクリプト作成

コードを修正するために、エディタ へ戻ります。

コードの既存の内容を削除し、新しいコードを貼り付けます。

コード

以下のコードを貼り付けます。

// POSTリクエストを受診すると実行される関数
function doPost(e) {

  const postData = JSON.parse(e.postData.contents).events[0];
  const lineMessageText = postData.message.text; // メッセージテキスト

  // Discordへメッセージを送信
  sendDiscordMessage(JSON.stringify(lineMessageText));

  // レスポンスを返す(LINE側では、後続処理に利用されない。HTTPステータス200だったら何でもOK?)
  return ContentService.createTextOutput(JSON.stringify({
    'message': 'Message received'
  })).setMimeType(ContentService.MimeType.JSON);
}

// DiscordのWebhook URLへメッセージを送信する関数
function sendDiscordMessage(message) {

  const payload = { 
    'content': message
  };
  const options = {
    'method': 'post',
    'headers': {
      'Content-Type': 'application/json'
    },
    'payload': JSON.stringify(payload),
  };

  // 環境変数からURLを取得
  const url = PropertiesService.getScriptProperties().getProperty('DISCORD_WEBHOOK_URL');
  const response = UrlFetchApp.fetch(url, options);
  const statusCode = response.getResponseCode();
  // Discordは返却するコンテンツがないときは正常系で204を返してくる
  if (statusCode !== 204) {
    console.error('Failed to send message to Discord. Status code: ' + statusCode + ', Response body: ' + response.getContentText());
  }
}

コードの概要説明

LINE から GAS へメッセージが送信されると、 doPost(e) が実行されます。e から LINE のメッセージを取り出し、 sendDiscordMessage(message) で Discord へ転送します。
スクリプトプロパティに設定した Discord の Webhook URL の値を取得するには、 PropertiesService.getScriptProperties().getProperty({'DISCORD_WEBHOOK_URL'}) を利用します。Discord へのメッセージ送信は、 UrlFetchApp.fetch(url, options) で行っています。

GAS デプロイ

作成したコードをデプロイします。右上の デプロイ -> 新しいデプロイ をクリックすます。

種類に ウェブアプリ を選択します。

説明、ウェブアプリの実行ユーザーとアクセスできるユーザーをそれぞれ設定し、デプロイをクリックします。

  • 新しい説明文
    • v0.1
  • 次のユーザーとして実行
    • 自分(xxxx@gmail.com)
  • アクセスできるユーザー
    • 全員

GAS のアクセス許可

以下の手順で、アクセス許可を行いました




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

これで GAS 側の設定は完了です。

LINE チャネル作成

LINE Developers コンソール を開きます。

新規プロバイダーを作成します。プロバイダー名は、 開発テスト にします。

プロバイダーの画面からチャネルを作成します。 Messaging API をクリックします。

必要な情報を入力します。

  • チャネルの種類: Messaging API
  • プロバイダー: 開発テスト
  • 会社・事業者の所在国・地: 日本
  • チャネル名: Discord転送チャンネル
  • チャネル説明: メッセージをDiscordへ転送します
  • 大業種: ウェブサービス
  • 小業種: ウェブサービス(ユーティリティ)
  • メールアドレス: {自分のメールアドレス}
  • LINE公式アカウント利用規約ビの内容に同意します: 同意(チェック)
  • LINE公式アカウントAPI利用規約での内容に同意します: 同意(チェック)





2 つの利用規約に同意します。

LINE チャネルが作成できました。

LINE チャネルの Messaging API 設定

チャネル作成後に、追加で Messaging API 設定 を行います。
応答メッセージ、あいさつメッセージの変更は、別の管理画面 (LINE Official Account Manager) で行います。

  • Messaging API設定
    • Webhook URL: {GAS ウェブアプリの URL}
      • Webhookの利用: 有効
    • 応答メッセージ: 無効
    • あいさつメッセージ: 無効

チャネルの Messaging API設定 をクリックします。

Webhook URL の編集 から、GAS ウェブアプリの URL を設定します。併せて、 Webhookの利用を 有効 にします。

応答メッセージ右の 編集 をクリックすると別ウインドウで LINE Official Account Manager が開かれます。チャネルの画像変更も LINE Official Account Manager から行えます。

LINE Official Account Manager の応答設定で あいさつメッセージ、応答メッセージを 無効 に変更します。

LINE Developers コンソールのチャネル画面に戻ってリロードすると、応答メッセージ、あいさつメッセージが 無効 になっていることが確認できます。

これで LINE 側の設定は完了です。
作成した LINE チャネルを友だち追加して、メッセージを送信します。

LINE チャネルを友だち追加

チャネルの Messaging API 設定 QRコードから友だち追加します。

友だち追加します。

LINEアプリ(mac版) 友だち追加画面

動作確認

以下の手順で動作確認します。

  • LINE チャネルでメッセージを入力
  • Discord への通知を確認
  • GAS のプロジェクト画面の 実行数 を確認
    • サイドメニューから 実行数 を選択します。
    • 開始時間が正しいことやステータスが完了となっていることを確認

まとめ

Google App Script (GAS) を活用して、LINE チャネルに入力されたメッセージを Discord へ送信する方法について記載しました。
LINE チャネルの Webhook を初めて利用しましたが、比較的少ない設定で連携することができました。LINE は慣れている人が多く、ユーザーフレンドリーなインターフェースであるため、今後も利用する機会がありそうです。
この記事が、GAS を活用した LINE 連携の参考になれば幸いです。

参考 URL

GitHubで編集を提案

Discussion