เก็บ UserID ของ LineOA ด้วย Google Script

เคยไหม เมื่อใช้งาน LineOA แล้วอยากเก็บข้อมูลลูกค้าที่แอดเข้ามาใช้งานใน LineOA ของเรา ในวันนี้เราจะมาทำ Workshop เพื่อเก็บ UserIDรวมถึงข้อมูลต่างๆของผู้ใช้ จาก LineOA โดยจะมีการเช็คข้อมูลเพื่อไม่ให้เก็บ UserID ซ้ำ รวมถึงถ้ามีการกดบล็อคแล้วทำการเพิ่มเพื่อนใหม่ ก็จะไม่เก็บ UserID ซ้ำอีกด้วย ไปลุยกันเล้ยยย

main.gs

// Presented by BrilliantPy v.1.0.1
/*######################### Editable1 Start #########################*/
let sheetName = "ชีต1";
let sheetUserName = "user";
let ss_id = "16nyYvFsNDDoHvqA7NdRIcKZXJ_-NnfG3BrIlLiAntPy";
let is_add_unblock = false;
/*#########################  Editable1 End  #########################*/
// Init
let ss,sheet,lastRow,lastCol,range,values;
Logger = BetterLog.useSpreadsheet(ss_id);

function doPost(e) {
  initSpreadSheet();
  try{
    let req_content = e.postData.contents;
    Logger.log(`req_content:${req_content}`);

    let event_0 = JSON.parse(req_content).events[0];
    let event_0_type = event_0.type || "";
    let event_0_follow = event_0.follow || {};
    let isUnblocked = event_0_follow.isUnblocked;
    let source = event_0.source || {};
    let userId = source.userId;
    Logger.log(`event_0_type:${event_0_type}, isUnblocked:${isUnblocked}, userId:${userId}`);

    //check new follow
    if(event_0_type=="follow" && (!isUnblocked || is_add_unblock)){
      let res_profile = getLineProfile(userId);
      let _userId = res_profile.userId;
      let _displayName = res_profile.displayName;
      let _pictureUrl = res_profile.pictureUrl;
      let _language = res_profile.language;
      let sheetUser = ss.getSheetByName(sheetUserName);
      Logger.log(`appendRow=>_userId:${_userId}, _displayName:${_displayName}, _language:${_language}, _pictureUrl:${_pictureUrl}`);
      sheetUser.appendRow([_userId, _displayName, _language, _pictureUrl]);
    }
    let user_msg = event_0.message.text;
    Logger.log(`user_msg:${user_msg}`);

    let token = event_0.replyToken;
    let replyText = "";

    for(let i=0;i<values.length;i++){
      let key = values[i][0];
      let value = values[i][1];
      if(key == user_msg){
        replyText = value;
        break;
      }
    }

    if(event_0.message.type === "text"){
      if(replyText){
        replyMessage(token, replyText);
      }
    }
  }catch(e){
    Logger.log(`doPost error:${e}`);
  }
}

function initSpreadSheet() {
  ss = SpreadsheetApp.getActive();
  sheet = ss.getSheetByName(sheetName);
  lastRow = sheet.getLastRow();
  lastCol = sheet.getLastColumn();
  range = sheet.getDataRange();
  values = range.getValues();
  Logger.log(`initSpreadSheet completed`);
}

async function replyMessage(token,replyText) {
  let url = "https://api.line.me/v2/bot/message/reply";
  let lineHeader = {
    "Content-Type": "application/json",
    "Authorization": "Bearer "+CHANNEL_ACCESS_TOKEN
  };

  let postData = {
    "replyToken" : token,
    "messages" : [{
      "type" : "text",
      "text" : replyText
    }]
  };
  // let postData = {
  //   "replyToken" : token,
  //   "messages" : [flex_obj]
  // };

  let options = {
    "method" : "POST",
    "headers" : lineHeader,
    "payload" : JSON.stringify(postData)
  };

  try {
    let response = await UrlFetchApp.fetch(url, options);
    Logger.log("response:"+response);
  }
  
  catch (error) {
    Logger.log(error.name + ":" + error.message);
    return;
  }
    
  if (response.getResponseCode() === 200) {
    Logger.log("Sending message completed.");
  }
}

function getLineProfile(lineUserId) {
  const accessToken = CHANNEL_ACCESS_TOKEN; // Replace with your LINE Channel Access Token
  
  const url = `https://api.line.me/v2/bot/profile/${lineUserId}`;
  const headers = {
    'Authorization': `Bearer ${accessToken}`
  };
  
  const options = {
    'method': 'get',
    'headers': headers,
    'muteHttpExceptions': true
  };
  
  const response = UrlFetchApp.fetch(url, options);
  const jsonResponse = JSON.parse(response.getContentText());
  
  Logger.log(`getProfile:${jsonResponse}`);
  return jsonResponse;
}

config.gs

// Presented by BrilliantPy v.1.0.1
/*######################### Editable1 Start #########################*/
let CHANNEL_ACCESS_TOKEN = 'Bri5ll26/antP9ri5ll07/pyb9ri5ll26/antP9ri5ll07/py+3591Bri9ll26/antP9ri5ll07/pyb9ri5ll2y+3Bri9ll26/antP9ri5ll07/pyf58Bri9ll26/antP9ri5ll06/antP9ri5ll07/py/1B/1cB9ri5ll07/py='
/*#########################  Editable1 End  #########################*/

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *