LINE BOT×GASでスプレッドシートに友達一覧を作ろう

こんにちは!管理人のOKBです。

前回は、LINE BOTとGASを連携し、自動返信するところまでを紹介しました。
(前回記事:LINEとGASを連携し、自動返信するところまで設定します!

さて今回は、LINEからの通知をGASで受け取り、GASからスプレッドシートに書き込んでいく処理を行っていきたいと思います。

まずはスプレッドシートを作成する

まずは、Googleスプレッドシートを作成します。下記URLにアクセスして
https://docs.google.com/spreadsheets
赤丸の空白(+)で作成します。

次にスプレッドシートのIDと、編集したいシート名をメモします。(シート名は「userlist」 に変更しました。)

スプレッドシートのIDはURLの下記赤の部分です。
https://docs.google.com/spreadsheets/d/*********/edit#gid=0

また、セルのA1は「user Id」、B1は「Name」を入れておきます。

GASのコードに加えていきます

こちら前回の記事では自動返信を行うコードのみを記述していましたが、今回は追加でスプレッドシートのコードを追記しました。

//固定値
var channel_token = "*********************"
var url = "https://api.line.me/v2/bot/message/reply"
var spreadsheet = SpreadsheetApp.openById("******************");
var sheet_userlist = spreadsheet.getSheetByName('userlist');

//LINEからのイベントがdoPostにとんでくる
function doPost(e) {
  //とんできた情報を扱いやすいように変換している
  var json = e.postData.contents
  var events = JSON.parse(json).events;
  var dat = sheet_userlist.getDataRange().getValues(); //受け取ったシートのデータを二次元配列に取得

  //とんできたイベントの種類を確認する
  events.forEach(function(event) {

    // ユーザーIDとユーザー名を取得
    var userId = event.source.userId;
    var json  = UrlFetchApp.fetch("https://api.line.me/v2/bot/profile/" + userId, {"headers" : {"Authorization" : "Bearer " + channel_token}});
    var displayName = JSON.parse(json).displayName;
    
    //スプレッドシートに書き込む
    for(var i=1;i<dat.length;i++){
      if(dat[i][0] == userId){
        break;
      }
    }
    if(i==dat.length) {
      sheet_userlist.appendRow([userId, displayName]); 
    }

    //もしイベントの種類がトークによるテキストメッセージだったら
    if(event.type == "message") {
      if(event.message.type == "text"){

        //自動返信メッセージの内容
        var message = {
                        "replyToken" : event.replyToken,
                        "messages" : [{"type": "text","text" : "こちらはbotによる自動返信です。"}]
                      };
        //メッセージに添えなければならない情報
        var options = {
          "method" : "post",
          "headers" : {
            "Content-Type" : "application/json",
            "Authorization" : "Bearer " + channel_token
          },
          "payload" : JSON.stringify(message)
        };

        //自動返信メッセージを送信する
        UrlFetchApp.fetch(url, options);
      }
    }
  });
}

赤字が今回追加したコードですが、まず一番上の

var spreadsheet = SpreadsheetApp.openById("******************");
var sheet_userlist = spreadsheet.getSheetByName('userlist');

*******には先ほどのスプレッドシートのIDを。userlistにはシート名を入れます。

 var dat = sheet_userlist.getDataRange().getValues(); //受け取ったシートのデータを二次元配列に取得

こちらは、LINEからイベントが送られてきた時点でのスプレッドシートの情報をdatに入れています。

// ユーザーIDとユーザー名を取得
var userId = event.source.userId;
var json = UrlFetchApp.fetch("https://api.line.me/v2/bot/profile/" + userId, {"headers" : {"Authorization" : "Bearer " + channel_token}});
var displayName = JSON.parse(json).displayName;

こちらはLINEから送られてきた情報を元にユーザーIDとユーザー名を取得しています。

   //スプレッドシートに書き込む
    for(var i=1;i<dat.length;i++){
      if(dat[i][0] == userId){
        break;
      }
    }
    if(i==dat.length) {
      sheet_userlist.appendRow([userId, displayName]); 

最後にスプレッドシートに書き込む処理ですが、まずは現状のシート内に既に対象のユーザーが登録済かどうかチェックしています。

一番下までチェックをし、もし該当がなかった際に、一番下に新しいユーザーIDとユーザー名を入力しました。

動作確認!

コードを編集したらデプロイします。(新しいデプロイ)
そして適当にトークを送信すると…

スプレッドシートにユーザー登録が出来ました!このユーザーIDがあれば、GASからLINEに、個別にプッシュ配信を行うことだってできちゃいます。

以上、LINE BOT×GASでスプレッドシートに友達一覧を作ろうのご紹介でした。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です