SKY BLOGBLOG

GASを使用して返信Botを作成してみる

こんにちは。アプリケーション部の相馬です。 アプリケーション部内では、主にテスト業務を担当させていただいております。

最近、休みの日に何をしようかなあとボーっと考えて気がついたら夕方になり、結局何もしなかったなあ…といったことが多々あります。

そこで今回は、GAS(Google Apps Script)を使用して、休日何をするか決めてくれるLINE Botを作成していきたいと思います。

作業前に準備するもの

LINE Bot作成にあたり、必要となるのが以下の2つです。

普段個人で利用しているものがあれば、新しく準備する必要はありません。

・LINEアカウント

・Googleアカウント

 

作業の流れ

ざっくりと、以下の4つの手順で作成していきます。

1.Bot用のアカウント作成(LINE Developersでのアカウント作成)

2.スプレッドシートを使用してBotに返信させたいワードを登録する

3.Botを動かすためのGASコード記載

4.手順1と3をMessagingAPIで連携させる

では、順番に紹介していきます。

1.Bot用のアカウント作成(LINE Developersでのアカウント作成)

まずはBot用のアカウントを作成していきます。

LINE Developersというサイトにアクセスし、普段利用しているLINEアカウントでログインします。

ログイン後、Providers > create からアカウントを作成できるため、必須項目を入力してアカウントを作成します。

アカウントの作成が完了したら、設定 > 応答設定 > 基本設定で応答モードをBotに設定します。

また、詳細設定でWebhookを有効にしておきます。

次にMessagingAPIを利用できるように設定します。

Providersから先ほど作成したアカウントを選択してMessagingAPI設定タブを開き、「Use webhook」を有効にします。

また、MessagingAPI設定を最下部までスクロールするとチャネルアクセストークンの項目がありますので、こちらでアクセストークンを発行しておきます。

※こちらのアクセストークンは後ほど使いますのでどこかにメモしておきます。

 

2.スプレッドシートを使用してBotに返信させたいワードを登録する

次は、スプレッドシートを使用してBotに返信させるワードを登録します。

Googleアプリからスプレッドシートを作成し、「やることリスト」シートと「log」シートという名前で2つシートを用意します。

シートの用意ができたら、「やることリスト」シートに休日やりたいことを入力していきます。

「社会人 休日 なにしてる」で検索し、ヒットした中から無難な候補を10個入力しました。

 

3.Botを動かすためのGASコード記載

候補を入力したら、スプレッドシート上の「拡張機能」から「Apps Script」を開き、コードを記載します。

今回は、以下のような動作となってます。

「なにする」というワードに反応して、スプレッドシートからランダムに1つの候補を抽出してLINEにメッセージを返す

 

===

// LINE Developerのアクセストークンを登録

var access_token = "アクセストークンを入力"

// スプレッドシートIDを登録

var spreadsheet_id = "スプレッドシートIDを入力"

// LINEで「なにする」と投稿されたらランダムに返信する

function reply(data) {

  var url = "https://api.line.me/v2/bot/message/reply";

  var headers = {

    "Content-Type" : "application/json; charset=UTF-8",

    'Authorization': 'Bearer ' + access_token,

  };

  var text = "";

  if (data.events[0].message.text === "なにする") {

    // やることリストのスプレッドシートを取得

    var yarukoto = SpreadsheetApp.openById(spreadsheet_id).getSheetByName("やることリスト");

    // 入力があるセルを取得

    var yarukotoData = yarukoto.getRange(1, 1,  yarukoto.getLastRow());

    // ランダムで候補を選ぶ

    var intRandomNum = Math.round(Math.random()*yarukoto.getLastRow());

    text = yarukotoData.getValues()[intRandomNum][0];

  }

  var postData = {

      "replyToken" : data.events[0].replyToken,

      "messages" : [

        {

          'type':'text',

          'text':text,

        }

      ]

    };

  var options = {

    "method" : "post",

    "headers" : headers,

    "payload" : JSON.stringify(postData)

  };

  return UrlFetchApp.fetch(url, options);

}

// LINEからのPOST受け取り

function doPost(e) {

  var json = JSON.parse(e.postData.contents);

  var data = SpreadsheetApp.openById(spreadsheet_id).getSheetByName('log').getRange(1, 1).setValue(json.events);

  reply(json);

}

===

※上記のアクセストークン、スプレッドシートIDには先ほど発行したアクセストークンとスプレッドシートIDを入力します

 

4.MessagingAPIで連携させる

GASの記載が完了したらデプロイします。画面右上から デプロイ > 新しいデプロイを選択して

・種類:ウェブアプリ

・次のユーザとして実行:自分

・アクセスできるユーザ:全員

と選択してデプロイします。

デプロイするとウェブアプリURLが表示されますので、コピーしてLINE DevelopersのMessagingAPI > Webhook URLに入力します。

「verify」ボタンを押下して、問題がなければ「success」と表示されます。

以上でBotの作成は完了です。作成したBotをQRコードから友達登録して「なにする」と投稿してみます。

 

↓こんな感じでスプレッドシートに登録した候補がランダムに返信されます

 

最後に

長く雑な説明となってしまいましたが、以上がGASを使用したBot作成の紹介となります。

特別な事前準備も不要で、反応するワードとスプレッドシートの内容を変えればご飯献立Botなどいろいろと活用できますので、興味のある方は試してみてはいかがでしょうか。

アカウント作成等の詳細な手順については以下の参考リンクを参照ください。

 

参考

・LINE Developers MessagingAPIを始めよう

https://developers.line.biz/ja/docs/messaging-api/getting-started/

・LINE Developers MessagingAPIリファレンス

https://developers.line.biz/ja/reference/messaging-api/