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]へ行きます。

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

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

Loading

LINEで簡易予約システムを作成No4-LINEとスプレッドシートの連携」への4件のフィードバック

  1. やりたかったことをご説明いただいている内容だったので試してみたのですが、こちらGASへ貼り付けたところ、、エラーとなってしまいました。。
    こちらどのようにすれば良いか御指南頂けますと幸いです。

    • 匿名希望 様コメントありがとうございます。
      どのような形でエラーが出たかお知らせいただけると原因が分かるかもしれません。
      過去にGASスクリプトの貼り付けがうまくいかないとのコメントがありましたので
      動作しているスクリプトをダウンロードできるようにいたしました。
      https://310riyo.hstech.jp/blog/?p=123
      お試しになっていない場合こちらをお試しください。

      GASスクリプトに誤記述があったとしても、LINEでは何も表示されません。
      これは、GASスクリプトに問題がなくても、LINE連携がうまくいかない時にも発生します。

      GASスクリプト単体でのデバッグはうまくいきません(正常であってもエラーログが残ります)。
      LINEと連携して動作するスクリプトなので、LINEからのパラメーターを受け取らないと正常に動作しないからです。

      これらは私が経験したものです。(笑)
      どうぞよろしくお願いします。

  2. WEBを参考に試作させていただいております。パスワードを送信するところで止まりました。LENEの応答設定ですが、現在BOTを選択できない仕様になっているようです。チャットをOFFにする、でよろしいでしょうか。

    • T様
      コメントありがとうございます。
      確認いたしましたところ、確かに新規チャンネル作成で仕様が変わったようです。
      そこで”Messaging API”を選択していただければ、ボットが作れると思います。
      詳細はブログにアップいたします。
      どうぞよろしくお願いいたします。

コメントを残す

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

CAPTCHA