LINEで簡易予約システムを作成No4-LINEとスプレッドシートの連携

それではいよいよスプレッドシートにGASスクリプトを記述します。作成したスプレッドシートを開き。[ツール]⇒[スクリプトエディタ]とクリックするとスクリプトエディタが起動します。

以下が張り付けるコードです↓

function doPost(e) {
var replyToken= JSON.parse(e.postData.contents).events[0].replyToken;
if (typeof replyToken === ‘undefined’) {
return;
}

var url = ‘https://api.line.me/v2/bot/message/reply’;
var channelToken = ‘ここに取得したトークンを張り付けます‘;
var event = JSON.parse(e.postData.contents).events[0];
//日付け時刻の取得
var date = new Date();
var month = date.getMonth() + 1;
var day = date.getDate();
var dateMsg = month + ‘月’ + day +’日’;
var hournow = date.getHours();
// ユーザーのメッセージを取得
var mess2 =”;
var mess1 = ”;
var reply =”;
var userMessage = event.message.text;
var odrNum = userMessage;
var user_id = event.source.userId;
var nickname = getUserProfile(user_id);
//スプレッドシートから設定を取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange(1,4,1,6);
var count = range.getValues();
var number = count[0][4];
var pass = count[0][0];
var limit = count[0][1];
var adminName = count[0][3];
var timelim = count[0][5];
var holiday = count[0][2];
if (holiday === 0){ var order = ‘4’;} else {
var order = odrNum.slice(0,1);;
}
//管理者メニュー
if(odrNum==pass||adminName==nickname){
var mess1 = nickname + ‘様\n管理者でログインしています。\n’;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, 7).setValue(nickname);
var range = sheet.getRange(1,1,number,3);
var value = range.getValues();
var cnt = 0;

switch (odrNum) {

 case ‘6’:
sheet.getRange(1, 6).setValue(0);
mess2 = mess2 + ‘予約不可に設定しました。\n’;
break;

case ‘7’:
sheet.getRange(1, 6).setValue(1);
mess2 = mess2 + ‘予約可能に設定しました。\n’;
break;
case ‘8’:
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange(1,1,number,2);
var value = range.getValues();
for(let i = 0; i <= (number-1); i++){
sheet.getRange(i+1,2).clear();

     }
    mess2 = mess2 + '予約をすべて削除しました。\n';
break;

case ‘9’:
mess2 = mess2 + ‘ログアウトしました。\n’;
sheet.getRange(1, 7).setValue(”);
break;
 default:
mess2 = mess2 + ‘予約確認をします。\n’;

          for(let i = 0; i <= (number-1); i++){
    if(value[i][1]){
    mess2 = mess2 +value[i][0] + ' に' + value[i][1] + '様の予約があります。\n';
      cnt++;
    }  
    }


    break;
    }
    if (count[0][2] === 0){ var mess3 = '予約できない設定です\n';}else{ mess3 = '予約出来る設定です\n';}

mess2 = mess2 + '予約' + cnt + '件です。\n' + mess3 +'\n管理者メニューです\n 6 予約不可(休日処理)\n 7 予約可\n 8 すべての予約を削除(終了処理)\n 9 管理者からログアウト\n 予約確認のみは、その他のキー\n';

} else {

//お客様メニュー
switch (order) {
 case ‘1’:
var reply = dateMsg + ‘の予約を受け付けます\n’;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange(1,1,number,3);
var value = range.getValues();
var limCount = limit;
for(let i = 0; i <= (number-1) ; i++){ var same = value[i][2]; var tttt = same – hournow – timelim; if(!value[i][1]&&tttt>=0){
mess2 = mess2 + value[i][0] + ‘予約可 予約番号 ‘+ (500+i) +’\n’;
limCount–;
if(limCount==0){
break;
}
}
}
mess2 = mess2 + ‘\n予約はまだ完了していません。\n予約番号送信後、必ず返信をご確認ください\n’;
break;
 case ‘2’:
var reply = ‘予約をキャンセルします。\n’;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange(1,1,number,2);
var value = range.getValues();
for(let i = 0; i <= (number-1); i++){
if(value[i][1]==nickname){
mess2 = mess2 + value[i][0] + ‘ ‘ + value[i][1] + ‘様の予約をキャンセルしました。\n’;
sheet.getRange(i+1,2).clear();
}
}
mess2 = mess2 + ‘\n 1ご予約 2キャンセル 3予約確認 \n 番号のみ返信してください。\n’;
  break;
 case ‘3’:
var reply = ‘予約確認\n’;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange(1,1,number,2);
var value = range.getValues();
for(let i = 0; i <= (number-1); i++){
if(value[i][1]==nickname){
mess2 = mess2 +value[i][0] + ‘ に’ + value[i][1] + ‘様の予約があります。\n’;
}
}

 mess2 = mess2 + '\n 1ご予約 2キャンセル 3予約確認 \n 番号のみ返信してください。\n'; 
break;

case '4':

// var reply = ‘休日処理’;
mess2 = mess2 + ‘本日は定休日、または予約を停止しています。\n\n’;
break;
case ‘5’:
var reply = nickname + ‘様、予約処理の結果です。\n’;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange(1,1,number,3);
var value = range.getValues();
var yoyaku = odrNum – 500;
var same = value[yoyaku][2];
var tttt = same – hournow – timelim;
if(tttt>=0){
mess2 = mess2 + value[yoyaku][0] + ‘でご予約承りました。\nどうもありがとうございました。\n 3 を送信すると予約確認ができます。\n’;
sheet.getRange(yoyaku+1,2).setValue(nickname);
break;
}
else {
mess2 = mess2 + value[yoyaku][0] + ‘は予約出来ませんでした。\n\n 1ご予約 2キャンセル 3予約確認 \n 番号のみ返信してください。\n’;
break;
}

 default:
var reply = ‘番号が認識できませんでした。番号を確認し、もう一度お試しください。\n\n 1ご予約 2キャンセル 3予約確認 \n 番号のみ返信してください。\n’ ;
// if(odrNum==pass||adminName==nickname){reply=”;}
  break;
}

var mess1 = mess1 + reply ;
}

var messages = [{
‘type’: ‘text’,
‘text’: mess1 + mess2 ,
// ‘text’: ‘こんにちは’+ nickname +’さん\n プロトタイプ準備中の為、運用を一時停止しています。\n’ ,

}];

UrlFetchApp.fetch(url, {
‘headers’: {
‘Content-Type’: ‘application/json; charset=UTF-8’,
‘Authorization’: ‘Bearer ‘ + channelToken,
},
‘method’: ‘post’,
‘payload’: JSON.stringify({
‘replyToken’: replyToken,
‘messages’: messages,
}),
});
return ContentService.createTextOutput(JSON.stringify({‘content’: ‘post ok’})).setMimeType(ContentService.MimeType.JSON);
}

function doGet() {
return;
// HtmlService.createHtmlOutputFromFile(‘index’);
}

function getUserProfile(user_id){
var channelToken = ‘ここに取得したトークンを張り付けます‘;
var url_2 = ‘https://api.line.me/v2/bot/profile/’ + user_id;
var userProfile_2 = UrlFetchApp.fetch(url_2,{
‘headers’: {
‘Authorization’ : ‘Bearer ‘ + channelToken,
},
})
return JSON.parse(userProfile_2).displayName;
//return;
}

↑ここまで

貼り付けたら、[公開]⇒[ウェブアプリケーションとして導入]をクリックすると以下の窓が開きます。最初の選択肢は New 2番目は Me(****@gmail.com) 3番目は Anyone, even Anonymous を選択し Deploy ボタンをクリックします。

許可を確認をクリックします。するとアカウントの選択画面になりますから、自分のアカウントを選択します。
矢印部分をクリックします。
許可をクリックします。
https://script.google.comで始まるURLをコピーします。これをLINEにHOOKします。メモ帳に保存しておくとよいでしょう。OKをクリックします。

次にライン公式アカウントに戻ります。

[ライン公式アカウントログイン][アカウント][設定][Messaging API]へ行きます。

先ほどコピーしたアドレスを貼り付けて作業は終了です。

次回はいよいよ動作確認です。

 867 total views,  1 views today

コメントを残す

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

CAPTCHA