LoginSignup
2
3

More than 3 years have passed since last update.

LINEを使った注文システムソースコード

Posted at

ソースコード

// LINE developersのメッセージ送受信設定に記載のアクセストークン
  var ACCESS_TOKEN = '/*LINEのACCESS TOKEN*/';

function doPost(e) {
  // WebHookで受信した応答用Token
  var replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
  var id = JSON.parse(e.postData.contents).events[0].source.userId;
  // ユーザーのメッセージを取得
  var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
  var replyMessage = "https://peraichi.com/landing_pages/view/orderline";
  var comma;
  var menu;
  var menu_num;
  var amount;
  var table_ID
  var A = "A".charCodeAt(0);
  var T = userMessage.slice(0,1);
  var n;
  var n2;
  var n3;
  var m =2;
  var s = "";
  var s2 = "";
  var s3 = "";

  //spread sheet書き込み
  function write(ID,content)
  {
    var sheet_id = "/*Spread SheetのID*/";
    var sheet_name = "注文集計";

    // シートの取得
    var spreadsheet = SpreadsheetApp.openById(sheet_id);
    var sheet = spreadsheet.getSheetByName(sheet_name);

    // 書き込み
    sheet.getRange(ID).setValue(content);
  }

  //厨房シート書き込み
  function write_kitchen(menu,amount,table)
  {
    var sheet_id = "/*Spread SheetのID*/";
    var sheet_name = "厨房";
    var ID =1;
    // シートの取得
    var spreadsheet = SpreadsheetApp.openById(sheet_id);
    var sheet = spreadsheet.getSheetByName(sheet_name);
    var cell = "A"+ ID;
    // 読み込み
    var x =sheet.getRange(cell).getValue();
    while(x != null && x!= "")
    {
      ID += 1;
      cell ="A"+ ID;
      x =sheet.getRange(cell).getValue();
    }
    // 書き込みmenu
    sheet.getRange(cell).setValue(menu);
    //書き込みamount
    cell = "B"+ ID;
    sheet.getRange(cell).setValue(amount);
    //書き込みtable
    cell = "C"+ ID;
    sheet.getRange(cell).setValue(table);
  }

  //spread sheet読み込み
  function read(ID)
  {
    var sheet_id = "/*Spread SheetのID*/";
    var sheet_name = "注文集計";

    // シートの取得
    var spreadsheet = SpreadsheetApp.openById(sheet_id);
    var sheet = spreadsheet.getSheetByName(sheet_name);

    // 読み込み
    return sheet.getRange(ID).getValue();
  }


  //テーブル検索(LINE IDから)
  function find_table(ID)
  {
    //シートの選択
    var sheet_id = "/*Spread SheetのID*/"
    var sheet_name = "注文集計"

    // シートの取得
    var spreadsheet = SpreadsheetApp.openById(sheet_id);
    var sheet = spreadsheet.getSheetByName(sheet_name);
    var data = sheet.getRange(2,2,11,97).getValues();//検索範囲(セルB2:CS11)
    //検索
    var i;
    var j;
    for (j = 0; j <= 96; j++){
      for(i = 0; i <= 9; i++){
        if(data[i][j] == ID){
          j = Math.floor((j+3)/3);
          return j;
        }
      }
    }
    return -1;
  }


  //テーブル設定
  if(T == "T" || T =="t")
  {
    if(find_table(id) == -1)
    {
      n = userMessage.replace(/[^-^0-9\.]/g,"");
      n = n*3-1;
      while (n >= 1) {
        n--;
        s = String.fromCharCode(A + (n % 26)) + s;
        n = Math.floor(n / 26);
      }

      table_ID = s+m;
      while (read(table_ID) != null && read(table_ID)!= ""){
        m += 1;
        table_ID = s+m;
      }
      if (m <= 11){
        write(table_ID,id);
        n = userMessage.replace(/[^-^0-9\.]/g,"");
        replyMessage = n +"番テーブルを選択しました。";
      } 
    }
    else
    {
      replyMessage = find_table(id)+"番テーブルをすでに選択しています。メニュー番号と注文数をコンマ(,)で区切って入力してください\n\n(例)1番のオムライスを2人前注文する場合:\n「1,2」と入力して下さい。";
    }
  }

 //メッセージ変換
  if(userMessage.indexOf(",") != -1)
  {
    comma = userMessage.indexOf(",");
    menu_num = userMessage.slice(0,comma);
    amount = userMessage.slice(comma+1);
    amount = amount.replace(/[^-^0-9\.]/g,"");
    menu_num = Math.floor(menu_num);
    if(find_table(id) == -1)
    {
      replyMessage = "Tのうしろに座席番号を入力して座席を選択してください\n\n(例)5番テーブルを選択する場合:\n「T5」と入力してください";
    }
    else
    {
      n = find_table(id);
      n = n*3-1;
      n2 = n+1;
      n3 = n+2;
      m = 12;
      while (n >= 1) {
        n--;
        s = String.fromCharCode(A + (n % 26)) + s;
        n = Math.floor(n / 26);
      }
      while (n2 >= 1) {
        n2--;
        s2 = String.fromCharCode(A + (n2 % 26)) + s2;
        n2 = Math.floor(n2 / 26);
      }
      while (n3 >= 1) {
        n3--;
        s3 = String.fromCharCode(A + (n3 % 26)) + s3;
        n3 = Math.floor(n3 / 26);
      }
      table_ID = s+m;
      while (read(table_ID) != null && read(table_ID)!= ""){
        m += 1;
        table_ID = s+m;
      }
      n = find_table(id);
      switch(menu_num)
      {
        case 1:
          menu = "オムライス";
          replyMessage = menu + "を" + amount + "つ承りました";
          write(table_ID,menu);
          table_ID = s2+m;
          write(table_ID,"980");
          table_ID = s3+m;
          write(table_ID,amount);
          write_kitchen(menu,amount,n);
          break;

        case 2:
          menu = "カレーライス";
          replyMessage = menu + "を" + amount + "つ承りました";
          write(table_ID,menu);
          table_ID = s2+m;
          write(table_ID,"980");
          table_ID = s3+m;
          write(table_ID,amount);
          write_kitchen(menu,amount,n);
          break;

        case 3:
          menu = "サラダ";
          replyMessage = menu + "を" + amount + "つ承りました";
          write(table_ID,menu);
          table_ID = s2+m;
          write(table_ID,"320");
          table_ID = s3+m;
          write(table_ID,amount);
          write_kitchen(menu,amount,n);
          break;

        case 4:
          menu = "ピクルス";
          replyMessage = menu + "を" + amount + "つ承りました";
          write(table_ID,menu);
          table_ID = s2+m;
          write(table_ID,"540");
          table_ID = s3+m;
          write(table_ID,amount);
          write_kitchen(menu,amount,n);
          break;

        case 5:
          menu = "スープ";
          replyMessage = menu + "を" + amount + "つ承りました";
          write(table_ID,menu);
          table_ID = s2+m;
          write(table_ID,"320");
          table_ID = s3+m;
          write(table_ID,amount);
          write_kitchen(menu,amount,n);
          break;

        case 6:
          menu = "紅茶";
          replyMessage = menu + "を" + amount + "つ承りました";
          write(table_ID,menu);
          table_ID = s2+m;
          write(table_ID,"280");
          table_ID = s3+m;
          write(table_ID,amount);
          write_kitchen(menu,amount,n);
          break;

        default:
          menu = "メニューは6番までです。";
          replyMessage =menu + "1~6"+ "までの数字の後に「,個数」を入力して下さい" ;
          break;
      }
    }
  }

  // 応答メッセージ用のAPI URL
  var url = 'https://api.line.me/v2/bot/message/reply';

  if(userMessage == "menu"){
    UrlFetchApp.fetch(url, {
      'headers': {
        'Content-Type': 'application/json; charset=UTF-8',
        'Authorization': 'Bearer ' + ACCESS_TOKEN,
      },
      'method': 'post',
      'payload': JSON.stringify({
        'replyToken': replyToken,
        'messages': [
          {
            "type": "template",
            "altText": "this is a buttons template",
            "template": {
              "type": "carousel",
              "actions": [],
              "columns": [
                {
                  "thumbnailImageUrl": "https://3.bp.blogspot.com/-fRi465qB0PU/WWNAjw1nHBI/AAAAAAABFUc/qRqCiP3QlM87_Qvi8souFa3x81ZaHJOJACLcBGAs/s400/food_dish_blank.png",
                  "title": "Food",
                  "text": "を選択",
                  "actions": [
                    {
                      "type": "message",
                      "label": "Food",
                      "text": "Food"
                    }
                  ]
                },

                {
                  "thumbnailImageUrl": "https://www.illust-box.jp/db_img/sozai/00004/44339/watermark.jpg",
                  "title": "Drink",
                  "text": "を選択",
                  "actions": [
                    {
                      "type": "message",
                      "label": "Drink",
                      "text": "Drink"
                    }
                  ]
                }
              ]
            }
          }
        ]
      }),
    }); 
  }
  else{

    if(userMessage == "Food"){
          UrlFetchApp.fetch(url, {
      'headers': {
        'Content-Type': 'application/json; charset=UTF-8',
        'Authorization': 'Bearer ' + ACCESS_TOKEN,
      },
      'method': 'post',
      'payload': JSON.stringify({
        'replyToken': replyToken,
        'messages': [
          {
            "type": "template",
            "altText": "this is a buttons template",
            "template": {
              "type": "carousel",
              "actions": [],
              "columns": [
                {
                  "thumbnailImageUrl": "https://www.illust-box.jp/db_img/sozai/00004/47321/watermark.jpg",
                  "title": "オムライス",
                  "text": "を選択",
                  "actions": [
                    {
                      "type": "message",
                      "label": "注文",
                      "text": "1,1"
                    }
                  ]
                },

                //カレー、サラダを選択
                {
                  "thumbnailImageUrl": "https://illustkun.com/wp-content/uploads/illustkun-03313-curry.png",
                  "title": "カレーライス",
                  "text": "を選択",
                  "actions": [
                    {
                      "type": "message",
                      "label": "注文",
                      "text": "2,1"
                    }
                  ]
                },

                {
                  "thumbnailImageUrl": "https://i.pinimg.com/originals/03/1b/5b/031b5b955b4df4fb68e8ed0a7a929a64.jpg",
                  "title": "サラダ",
                  "text": "を選択",
                  "actions": [
                    {
                      "type": "message",
                      "label": "注文",
                      "text": "3,1"
                    }
                  ]
                },
                {
                  "thumbnailImageUrl": "https://www.otafuku.co.jp/image.jsp?id=1607",
                  "title": "ピクルス",
                  "text": "を選択",
                  "actions": [
                    {
                      "type": "message",
                      "label": "注文",
                      "text": "4,1"
                    }
                  ]
                },
                //スープを選択
                {
                  "thumbnailImageUrl": "https://www.lettuceclub.net/img/dish/1/S20121210161005A_000.png",
                  "title": "スープ",
                  "text": "を選択",
                  "actions": [
                    {
                      "type": "message",
                      "label": "注文",
                      "text": "5,1"
                    }
                  ]
                }
              ]
            }
          }
        ]
      }),
    });
    }

    else{
      if(find_table(id) == -1){
        UrlFetchApp.fetch(url, {
          'headers': {
            'Content-Type': 'application/json; charset=UTF-8',
            'Authorization': 'Bearer ' + ACCESS_TOKEN,
          },
          'method': 'post',
          'payload': JSON.stringify({
            'replyToken': replyToken,
            'messages': [{
              'type': 'text',
              'text': replyMessage,
            }],
          }),
        }); 
      }

      else{
        UrlFetchApp.fetch(url, {
          'headers': {
            'Content-Type': 'application/json; charset=UTF-8',
            'Authorization': 'Bearer ' + ACCESS_TOKEN,
          },
          'method': 'post',
          'payload': JSON.stringify({
            'replyToken': replyToken,
            'messages': [
              {
                "type": "template",
                "altText": "this is a buttons template",
                "template": {
                  "type": "buttons",
                  "actions": [
                    {
                      "type": "message",
                      "label": "menu",
                      "text": "menu"
                    },
                  ],
                    "text": replyMessage
                    }
                    }

                  ],
                }),
              }); 
              }
              }
 //             }
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
              }
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3