Google Apps Script で LINE Bot を作成する

Bot」をご存じでしょうか。

Bot (ボット) は robot (ロボット) のIT分野における略称で、操作や作業を自動で行うプログラムのことを指します。

たとえば、コミュニケーションツールの1つであるLINEですが、Messaging APIというものが用意されており、誰でもLINE Botを作成できます。

Messaging APIを使用することで、任意のURLでWebhookイベントを受け、応答メッセージを送ることができます。

今回はGoogle Apps Scriptで、Webhookを受けるWebAPIを用意し、メッセージをそのまま返すLINE Botを作成してみます。

 

1. LINE Botアカウントの作成

まずは、Botアカウントを用意します。

LINE Messaging API のサイト ( https://developers.line.biz/ja/services/messaging-api/ )
でログインし、チャネル(Line Bot)を作成します。

 

Botに関する項目を入力し、作成したらMessaging API 設定でチャネルアクセストークンを発行します。

Botのグループへの参加可否やあいさつメッセージ有無等の設定も可能です。

 

2. WebAPIの作成

次に、Google Apps Script ( https://script.google.com/ )
でログインし、プロジェクトを作成します。

下記のコードを入力します。
ACCESSTOKENには、先ほど発行したチャネルアクセストークンを設定します。

 

const ACCESSTOKEN = "発行したチャネルアクセストークン";
const URL = "https://api.line.me/v2/bot/message/reply";

function doPost(e) {
  var events = JSON.parse(e.postData.contents).events;
  events.forEach(function(event) {
    if((event.type == "message") && (event.message.type == "text")) {
      reply(event);
    }
  });
}
                 
function reply(event) {
  UrlFetchApp.fetch(URL, {
    "headers": {
      "Content-Type": "application/json; charset=UTF-8",
      "Authorization": "Bearer " + ACCESSTOKEN,
    },
    "method": "post",
    "payload": JSON.stringify({
      "replyToken": event.replyToken,
      "messages": [{
        "type": "text",
        "text": event.message.text,
      }],
    }),
  });
}

 

doPost関数がLINEからのWebhookイベントを受ける関数です。

イベントにはフォロー、メッセージなど色々種類がありますが、今回はメッセージ、さらにテキストの場合のみ返信するものとしています。

reply関数では、LINEの返信用APIを呼び出しています。
返信にはWebhookイベントに含まれる返信用トークン(replyToken)が必要となります。
返信するメッセージは、受信したテキストメッセージをそのまま設定しています。

では、これをWebAPIとして公開します。
メニューの 公開 から ウェブアプリケーションとして導入 を選択します。

そして、実行者は自身、アクセスは全員として、デプロイします。

公開したWebAPIのURLをメモしておきます。

3. Webhookの設定

再びMessaging APIの設定に戻ります。

URLに先ほどのWebAPIのURLを入力し、Webhookの利用をONにします。

これで完了です。
QRコードで友達に追加して実際にメッセージを送ってみます。

このように送信したメッセージを自動で返してきます。

以上です。

 

今回はメッセージをそのまま返信する単純なBotでしたが、
GoogleAppsScriptはスプレッドシートやドライブにもアクセスできるので、
あとはアイデア次第で色々できるかと思います。

ぜひ何か作ってみてください。