こんにちは!管理人の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でスプレッドシートに友達一覧を作ろうのご紹介でした。
コメントを残す