技術ブログ

GASとLINE Messaging APIで、あなただけのLINEボットを開発しよう!

/ 初心者向け

GASとLINE Messaging APIで、あなただけのLINEボットを開発しよう!

はじめに

「LINEで自動応答してくれるボットがあったら便利だな」「自分でオリジナルのLINEボットを作ってみたい!」と思ったことはありませんか?

実は、Googleが提供する無料のプログラミングサービス「Google Apps Script(GAS)」と、LINEの公式APIである「LINE Messaging API」を組み合わせることで、比較的簡単にあなただけのLINEボットを開発することができます。

このブログ記事では、GASの基本的な知識がなくても、ステップバイステップでLINEボットの作成方法を解説していきます。プログラミング初心者の方でも安心して取り組める内容を目指しました。

GASとLINE Messaging API連携のメリット

GASとLINE Messaging APIを連携させることには、いくつかの大きなメリットがあります。

  • 手軽に始められる: GASはブラウザ上で動作し、特別な環境構築は不要です。GmailやGoogleスプレッドシートなど、普段お使いのGoogleアカウントがあればすぐに利用できます。
  • 無料で利用可能: GASは基本無料で利用でき、LINE Messaging APIも一定の利用量までは無料枠があります。
  • Googleサービスとの連携: GASはGoogleスプレッドシート、Googleカレンダー、Googleフォームなど、他のGoogleサービスと簡単に連携できます。これにより、例えば「スプレッドシートに登録した情報をLINEで通知する」といった高度な機能も実装可能です。
  • 学習コスト: PythonやNode.jsなどの他の言語でLINEボットを開発する場合と比較して、GASはJavaScriptをベースにしているため、Web開発の経験がある方やJavaScriptに馴染みがある方にとっては学習コストが低いと言えます。

準備するもの

LINEボット開発を始めるにあたり、以下のものが必要になります。

1. Googleアカウント: GmailなどのGoogleサービスにログインできるアカウント。

2. LINEアカウント: 個人のLINEアカウント。

3. LINE Developersアカウント: LINE Messaging APIを利用するためのアカウント。無料で作成できます。

4. テキストエディタ(推奨): コードを記述・編集するためのエディタ。VS Codeなどの高機能なエディタがあると便利ですが、最初はGASのエディタでも十分です。

ステップ1:LINE Developersでの設定

まずはLINE Messaging APIを利用するための準備をします。

1. LINE Developersコンソールの利用開始

LINE Developers にアクセスし、右上の「ログイン」ボタンからLINEアカウントでログインします。

ログイン後、「プロバイダー作成」ボタンから新しいプロバイダーを作成します。プロバイダー名は何でも構いません(例:「MyGASBot」)。

2. チャネルの作成

プロバイダーを作成したら、そのプロバイダーの下に「LINEログイン」と「Messaging API」のどちらかを選択する画面が表示されます。「Messaging API」を選択してください。

  • アプリ名: ボットの名前を設定します(例:「GAS連携ボット」)。
  • チャネルアイコン: ボットのアイコン画像を設定します(任意)。
  • 説明: ボットの説明文を入力します(任意)。
  • メールアドレス: 連絡先となるメールアドレスを入力します。
  • プライバシーポリシーURL: プライバシーポリシーのURL(現時点では不要であれば適当なURLでも可。後で設定しましょう)。
  • 利用規約URL: 利用規約のURL(同上)。

これらの情報を入力し、「チャネルを作成」ボタンをクリックします。

3. Webhook URLの設定

チャネルが作成されると、チャネル設定画面が表示されます。ここで最も重要なのが「Webhook URL」の設定です。

Webhook URLは、LINEアプリからメッセージが送信された際に、GASのプログラムにその情報を受け渡すための「受け取り口」となるURLです。このURLは、後ほどGAS側でスクリプトを作成した際に取得します。

一旦、ここで保留しておきましょう。

4. アクセストークンの取得

同じくチャネル設定画面の「LINE Messaging API」タブにある「シークレット」と「アクセストークン」は、GASからLINE Messaging APIへリクエストを送信する際に必要になります。

  • シークレット: 「シークレット」の欄にある「発行」ボタンをクリックすると表示される文字列を控えておきます。
  • アクセストークン: 「チャネルアクセストークン」の欄にある「発行」ボタンをクリックすると表示される文字列を控えておきます。このトークンは、LINEサーバーへメッセージを送信する際に利用します。

これらの情報は、他人に見られないように厳重に管理してください。

ステップ2:GASでのスクリプト作成

次に、LINEからのメッセージを受け取り、応答を返すGASのスクリプトを作成します。

1. 新しいスクリプトの作成

Google Apps Script にアクセスし、「新しいプロジェクト」をクリックします。

プロジェクト名は何でも構いません(例:「LINE Bot Script」)。

2. Webhookを受け取るコードの記述

コード.gs というファイルが開かれるので、そこに以下のコードを記述します。

function doPost(e) {
  // LINEから送られてきたイベントデータを取得
  var json = e.postData.contents;
  var data = JSON.parse(json);

  // イベントタイプを判定
  if (data.events && data.events.length > 0) {
    var event = data.events[0];

    // メッセージイベントの場合
    if (event.type == "message") {
      var userId = event.source.userId;
      var messageText = event.message.text;

      // 受け取ったメッセージに応じて返信内容を決定
      var replyMessage = "";
      if (messageText === "こんにちは") {
        replyMessage = "こんにちは!GASボットがお返事します。";
      } else {
        replyMessage = "「こんにちは」と送ってみてください。";
      }

      // LINE Messaging APIに返信メッセージを送信
      replyMessageToLine(userId, replyMessage);
    }
  }

  // 正常に受信したことを示すために、空のレスポンスを返す
  return ContentService.createTextOutput("");
}

function replyMessageToLine(to, message) {
  // LINE Messaging APIのアクセストークンとシークレットを設定
  // ここには、ステップ1で取得した実際の値を入力してください。
  var CHANNEL_SECRET = "YOUR_CHANNEL_SECRET";
  var CHANNEL_ACCESS_TOKEN = "YOUR_CHANNEL_ACCESS_TOKEN";

  // シグネチャ検証(セキュリティのため重要ですが、今回は簡易化のため省略)
  // var signature = e.headers["x-line-signature"];
  // if (!validateSignature(CHANNEL_SECRET, signature, e.postData.contents)) {
  //   Logger.log("Invalid signature.");
  //   return;
  // }

  var url = "https://api.line.me/v2/bot/message/reply";
  var headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN
  };

  var payload = {
    "replyToken": event.replyToken, // replyTokenは、doPostのeventオブジェクトから取得する必要があります。
    "messages": [
      {
        "type": "text",
        "text": message
      }
    ]
  };

  // HTTPSリクエストを送信
  var options = {
    "method": "post",
    "headers": headers,
    "payload": JSON.stringify(payload)
  };

  try {
    UrlFetchApp.fetch(url, options);
    Logger.log("Message sent successfully.");
  } catch (error) {
    Logger.log("Error sending message: " + error);
  }
}

// ----- Webhook URL取得のために必要 -----
function getWebhookUrl() {
  Logger.log('Deployment URL: ' + ScriptApp.getService().getUrl());
}

3. アクセストークンとシークレットの設定

先ほどのコードの CHANNEL_SECRETCHANNEL_ACCESS_TOKEN の部分を、ステップ1で取得した実際の値に置き換えてください。

重要: これらの値は機密情報です。コードの中に直接書き込むと、誤って公開してしまうリスクがあります。より安全な方法としては、GASの「スクリプトのプロパティ」機能を利用することをおすすめしますが、まずは学習のため直接記述する方法で進めましょう。

4. Webhook URLの取得と設定

GASスクリプトをデプロイ(公開)することで、Webhook URLが生成されます。

1. GASエディタの左側メニューにある「デプロイ」アイコン(□の中に→のようなマーク)をクリックし、「新しいデプロイ」を選択します。

2. 「タイプ」で「ウェブアプリ」を選択します。

3. 「実行権限」を「自分」に設定します。

4. 「アクセス権限」を「誰でも」に設定します。(※本番運用ではセキュリティを考慮し、制限を設けることを推奨します)

5. 「デプロイ」ボタンをクリックします。

6. 承認を求められたら、Googleアカウントでログインし、権限を許可します。

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

コピーしたURLを、ステップ1の「LINE Developersコンソール」の「Webhook URL」欄に貼り付け、「更新」ボタンをクリックします。

また、LINE Developersコンソールで「Messaging API」タブに戻り、「応答設定」の「Botからの応答」で「利用する」にチェックが入っていることを確認してください。

ステップ3:LINEボットのテスト

これでLINEボットの準備が整いました!

LINEアプリで、先ほど作成したチャネルに紐づくLINE公式アカウント(LINE Developersコンソールで確認できます)を友達登録し、メッセージを送ってみましょう。

「こんにちは」と送ると、ボットが「こんにちは!GASボットがお返事します。」と返信してくれるはずです。

それ以外のメッセージを送ると、「「こんにちは」と送ってみてください。」と返信されるはずです。

まとめと今後のステップ

今回は、Google Apps Script(GAS)とLINE Messaging APIを連携させて、簡単なLINEボットを作成する方法をご紹介しました。

GASとLINE Messaging APIを使えば、今回のようにテキストメッセージの送受信だけでなく、画像やスタンプの送信、リッチメニューの表示、ユーザー情報の取得など、さらに多様な機能を持つLINEボットを開発することが可能です。

  • 画像やスタンプの送受信: payloadmessagestypeimagesticker に変更することで実現できます。
  • リッチメニュー: ユーザーがLINEアプリでボットとのトーク画面を開いたときに表示されるメニューです。これもMessaging APIで設定できます。
  • GASのスクリプトプロパティの利用: 機密情報を安全に管理するために、GASのスクリプトプロパティ機能の利用を検討しましょう。
  • エラーハンドリング: try-catch 文などを活用し、エラー発生時の処理を記述することで、より堅牢なボットになります。

ぜひ、今回学んだことを元に、あなただけのユニークなLINEボット開発に挑戦してみてください!

参考資料:

GAS自動化の導入相談

請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。

請求書自動生成ツールを見る / SNS自動投稿ツールを見る