GAS(Google Action Script)を使ってLINE Botを作る方法

GAS

LINEから送信されたメッセージからGASを使ってレスポンスを返すBotを作ってみたいと思います。GASを使う理由はサーバーを用意する必要がなく手軽なため使うことにします。

スポンサーリンク

LINE側の設定

LINEデベロッパーに登録をします。下記の画面より、コンソールへ遷移し、LINEアカウントでログインをします。

LINE Developers
LINE Developersサイトは開発者向けのポータルサイトです。LINEプラットフォームのさまざまな開発者向けプロダクトを利用するための、管理ツールやドキュメントを利用できます。LINEログインやMessaging APIを活用して、アプリやサービスをもっと便利に。

チャンネルの新規作成

左側のAdminの部分にある自分の名前のを押すことで、チャンネル設定画面へ遷移することができます。

新規チャンネル作成を選択し、MessagingAPIを選択します。

必要事項に入力し、一番下の作成を押します。
これでアカウントの新規作成が完了です。

チャンネルの設定

新規作成ができたら、チャンネルの設定をしていきます。

チャンネルの設定画面の「Messaging API設定」を開きます。

LINE公式アカウント機能の設定を変更していきます

下記のように設定をしてください。

グループ・複数人チャットへの参加を許可する → 用途に合わせて設定してください
応答メッセージ → 無効
あいさつメッセージ → 無効

応答メッセージは設定画面に遷移をすると、文言が「応答モード」に変わっています。応答モードをBotに設定してください。

これでMessagingAPIの設定は一旦終了です。次にGASでのプログラムを書いていきます。

GASのBotプログラム

こちらから新しいプロジェクトを作成します。今回はスプレッドシート とは連携させずにGASで完結させるプログラムにしていくので、GASのページから新規プロジェクトの作成を行います。

こちらから作成しても、後からスプレッドシートとの連携もできます。

Apps Script  |  Google for Developers
Develop high-quality, cloud-based solutions with ease.

POSTされた時に走る処理を記述する

まずは、GASでpostされた時に走る処理を記述していきます。LINEからpostされてくる値から必要なデータを取り出していきます。

ここのデータについては下記のドキュメントに詳細が載っています。

Messaging APIリファレンス
LINE Developersサイトは開発者向けのポータルサイトです。LINEプラットフォームのさまざまな開発者向けプロダクトを利用するための、管理ツールやドキュメントを利用できます。LINEログインやMessaging APIを活用して、アプリやサービスをもっと便利に。

GASでpostされた時に呼び出される関数はdoPostになります。ここに記述していくことで、postされた際に関数が呼び出されるようになります。

function doPost(e) {
  const postData = JSON.parse(e.postData.contents).events[0]
  const userMessage = postData.message.text;
  const replyToken = postData.replyToken
}

この例では、userMessageにユーザーが送信したメッセージのテキストが、replyTokenに返信を送る際に必要なtokenを取得しています。

LINEにメッセージを送信する

次にLINEにメッセージを送信する方法の紹介です。

Messaging APIリファレンス
LINE Developersサイトは開発者向けのポータルサイトです。LINEプラットフォームのさまざまな開発者向けプロダクトを利用するための、管理ツールやドキュメントを利用できます。LINEログインやMessaging APIを活用して、アプリやサービスをもっと便利に。

送信するデータをpayloadというオブジェクトに送信したいテキストとreplyTokenを設定していきます。
ここの形式は上記のドキュメントにある通りの形で設定します。

次にヘッダを設定します。Authorizationに設定するチャンネルアクセストークンをLINEデベロッパーの画面から取得します。MessagingAPI設定のチャネルアクセストークンにある発行ボタンを押します。

すると英数字からなる文字列が出てきますので、それを下記の{channel access token}の部分に置き換えます。

上記で設定したpayloadとheadersを用いてpost用のoptionを生成し、fetchを使ってpostします。

function replyMessage(text, replyToken) {
   const payload =
   {
      "messages": [
        {
          "type": "text",
          "text": text
        }
      ],
      "replyToken": replyToken,
   };
   const headers = {
     "Content-Type": "application/json",
     "Authorization": "Bearer {channel access token}"
   }
   const options = {
      "method" : "post",
      "headers": headers,
      "payload" : JSON.stringify(payload),
   };
  return UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options);
}

送信用の関数を呼び出す

ここまでできたら、doPostから送信用の関数を呼び出していきます。

ここでユーザーが送信したメッセージを元に返すメッセージを決めていきます。今回は、名前は?と言われた場合に、自己紹介をするBotにしていきます。それ以外の場合はこんにちはと返すようにします。

ここはそれぞれのBotの処理に合わせて変えてください。

function doPost(e) {
  const postData = JSON.parse(e.postData.contents).events[0]
  const userMessage = postData.message.text;
  const replyToken = postData.replyToken
  let replyText = "こんにちは"
  if (userMessage === "名前は?") {
    replyText = "私の名前はBotくんです"
  }
  
  replyMessage(replyText, replyToken)
}

Webhookの設定をする

GASの処理を書き終わったら、このプロジェクトを公開していきます。

GASのプロジェクトの画面から右上のデプロイを選択します。

左側の種類の選択からウェブアプリを選択します。そして、アクセスできるユーザーを全員にしてデプロイをします。

ここで発行されるURLをコピーして、LINEデベロッパーの画面に設定していきます。

LINEデベロッパーの画面を開き、 MessagingAPIの画面から、Webhook設定にコピーしたURLを設定します。

これで設定は全て完了です。

Messaging API設定にあるQRコードから友達追加をし、メッセージを送信するとBotから返信が送られてくると思います。

注意点として、無料アカウントではLINE側からの送信は月1,000件までので使いすぎないように注意してください。