เคยไหม เมื่อใช้งาน 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 #########################*/