ส่งข้อความ WhatsApp ด้วยฟังก์ชัน Google ชีต

ในบทช่วยสอนก่อนหน้านี้ คุณได้เรียนรู้วิธี ส่งข้อความ WhatsApp จาก Google ชีต โดยใช้ WhatsApp API อย่างเป็นทางการ ฟรี 1,000 ข้อความแรกต่อเดือนสำหรับบัญชี WhatsApp Business แต่ละบัญชี จากนั้นคุณจะต้องชำระเงินต่อการใช้งานตามประเทศของผู้ส่งข้อความและผู้รับข้อความ

ราคา WhatsApp API

ตัวอย่างเช่น หากคุณกำลังส่งข้อความ WhatsApp จากหมายเลขโทรศัพท์ในสหรัฐอเมริกาไปยังผู้ใช้ WhatsApp ในฝรั่งเศส ค่าบริการจะเท่ากับ 14 ¢ ต่อข้อความ อย่างไรก็ตาม หากคุณส่งข้อความจากหมายเลข WhatsApp ในอินเดียไปยังหมายเลขอื่นในอินเดีย ค่าใช้จ่ายจะอยู่ที่ประมาณ 0.006 ¢ ต่อข้อความ บัตรราคาสำหรับการกำหนดราคา WhatsApp API มีอยู่ ที่นี่

นอกจากปัจจัยด้านต้นทุนแล้ว WhatsApp Business API ยังกำหนดให้คุณต้องมีธุรกิจที่ได้รับการยืนยันบน Facebook (ดูข้อกำหนดในการ ยืนยัน ) และข้อกำหนดกำหนดให้คุณจะส่งข้อความไปยังผู้ใช้ WhatsApp ที่เลือกรับข้อความในอนาคตจากคุณเท่านั้น วอทส์แอพ

ข้อจำกัดอื่นๆ ของ WhatsApp API คือ คุณสามารถส่งข้อความที่อิงตามเทมเพลตที่ WhatsApp อนุมัติล่วงหน้าเท่านั้น อย่างไรก็ตาม คุณสามารถส่งข้อความรูปแบบอิสระภายใน 24 ชั่วโมงของข้อความล่าสุดของผู้ใช้ในการสนทนา

Send WhatsApp Message

ฟังก์ชัน WhatsApp สำหรับ Google ชีต

หากคุณเป็นธุรกิจขนาดเล็กที่กำลังมองหาเส้นทางอื่นในการส่งข้อความถึงลูกค้าบน WhatsApp โดยไม่ต้องจ่ายค่า API ต่อไปนี้คือเทคนิคกึ่งอัตโนมัติ คุณสามารถใช้คุณสมบัติ คลิกเพื่อแชท ของ WhatsApp เพื่อส่งข้อความส่วนตัวไปยังหมายเลขโทรศัพท์ที่ลงทะเบียนใน WhatsApp ได้อย่างรวดเร็ว

สำหรับตัวอย่างนี้ เรามีชีตที่แสดงรายการชื่อลูกค้า จำนวนเงินที่ต้องจ่าย และวันครบกำหนดชำระเงิน เราสามารถใช้ฟังก์ชัน CONCATENATE หรือ TEXTJOIN ของ Google ชีตเพื่อสร้างข้อความส่วนบุคคลสำหรับลูกค้าแต่ละรายในคอลัมน์ D

Create Personalized Message

คอลัมน์ E ของ Google ชีตมีหมายเลขโทรศัพท์ของผู้ใช้ WhatsApp แต่ละคน เราสามารถใช้ฟังก์ชันที่กำหนดเองของ WHATSAPP เพื่อสร้างลิงก์แชทส่วนตัวสำหรับลูกค้าต่างๆ ใน ​​Google ชีต เมื่อคุณคลิกลิงก์แชทนี้ ระบบจะเปิดการสนทนา WhatsApp กับผู้ใช้โดยอัตโนมัติและข้อความจะถูกกรอกไว้ล่วงหน้าในกล่องแชท

วิธีนี้ต้องการการคลิกเพิ่มเล็กน้อยแต่ไม่มีค่าใช้จ่าย และใช้ได้กับทั้งบัญชีส่วนตัวของ WhatsApp Business และ WhatsApp

WhatsApp Click to Chat

ฟังก์ชัน WhatsApp

นี่คือฟังก์ชัน WHATSAPP ที่สร้างลิงก์คลิกเพื่อแชทใน Google ชีต นอกจากนี้ยังรองรับ Array Formulas

พารามิเตอร์ที่สามกำหนดว่าลิงก์ควรเปิดเว็บไซต์ WhatsApp หรือไคลเอ็นต์เดสก์ท็อป WhatsApp คุณสามารถเล่นกับแผ่นงานสดได้ ที่นี่

 /** * Create WhatsApp Click to Chat Link * * @param {string} phone The phone number with country code * @param {string} message The text message * @param {boolean} web Open the message in WhatsApp web? * @return The pre-filled message link for WhatsApp. * @customfunction */ function WHATSAPP ( phone , message , web ) { if ( Array . isArray ( phone ) ) { return phone . map ( ( row , index ) => WHATSAPP ( row [ 0 ] , message [ index ] [ 0 ] ) , web ) ; } const phoneNumber = String ( phone ) . replace ( / [^\d] / g , '' ) ; const messageText = encodeURIComponent ( message ) ; return web === true ? ` https://web.whatsapp.com/send?phone= ${ phoneNumber } &text= ${ messageText } ` : ` https://wa.me/ ${ phoneNumber } ?text= ${ messageText } ` ; }

วิธีส่งข้อความ WhatsApp จาก Google ชีตด้วย WhatsApp API และ Apps Script

WhatsApp with Google Sheets

บทช่วยสอนนี้อธิบายวิธีที่คุณสามารถใช้ WhatsApp API ใหม่กับ Google Apps Script เพื่อส่งข้อความ WhatsApp จาก Google ชีต วิธีการเดียวกันนี้จะใช้ได้กับการส่งข้อความ WhatsApp จาก Google ฟอร์มเมื่อได้รับแบบฟอร์มใหม่

ขั้นตอนที่ 1: สร้างแอพ WhatsApp

ไปที่ Developers.facebook.com แล้วคลิกปุ่ม Create App เพื่อสร้างแอปใหม่ที่เราจะใช้ในการส่งข้อความ WhatsApp

Facebook WhatsApp App

เลือก Business เป็นประเภทแอป

ตั้งชื่อแอปให้สื่อความหมาย (อย่าใช้เครื่องหมายการค้าของ Facebook เช่น WhatsApp หรือ Facebook ในชื่อแอป) แล้วคลิกปุ่ม Create App เพื่อสร้างแอป

WhatsApp App Name

เมื่อสร้างแอปแล้ว ให้คลิกปุ่ม WhatsApp บนหน้าจอถัดไปเพื่อเพิ่มความสามารถในการส่ง WhatsApp ไปยังแอปของคุณ

ในหน้าจอถัดไป คุณจะต้องเชื่อมโยงแอพ WhatsApp กับบัญชีธุรกิจ Facebook ของคุณ คุณจะมีตัวเลือกในการสร้างบัญชีธุรกิจใหม่หากคุณยังไม่มี

Add WhatsApp App

ขั้นตอนที่ 2: เพิ่มหมายเลขโทรศัพท์ของผู้รับ

Facebook จะให้หมายเลขโทรศัพท์ WhatsApp ทดสอบแก่คุณ ซึ่งจะเป็นที่อยู่เริ่มต้นสำหรับส่งแอปของคุณ สำหรับผู้รับ คุณจะมีตัวเลือกในการเพิ่มหมายเลขโทรศัพท์ได้สูงสุด 5 หมายเลขในระหว่างขั้นตอนการพัฒนาโดยไม่ต้องชำระเงินใดๆ

แอพ WhatsApp ของคุณจะมอบ โทเค็นการเข้าถึงชั่วคราว แก่คุณ ซึ่งจะใช้งานได้เป็นเวลา 23 ชั่วโมง จดบันทึกโทเค็นนี้เนื่องจากเราต้องการใช้ในขั้นตอนถัดไป

WhatsApp Phone Number

ถัดไป คลิกดรอปดาวน์ Recipient Phone Number เพื่อเพิ่มหมายเลขโทรศัพท์ WhatsApp ที่แตกต่างกันถึง 5 หมายเลขในแอปของคุณ คุณจะได้รับรหัสยืนยันจากหมายเลขที่เพิ่มเข้ามา และคุณจะสามารถส่งข้อความ WhatsApp ไปยังหมายเลขที่ได้รับการยืนยันด้วยรหัสเท่านั้น

Verify Phone Number

ขั้นตอนที่ 3: สร้างเทมเพลตข้อความ WhatsApp

เปลี่ยนไปใช้ตัว จัดการเทมเพลต และสร้างเทมเพลตข้อความ WhatsApp ใหม่

สำหรับตัวอย่างนี้ เราจะเลือกหมวดหมู่เป็นการ Account Update และตั้งชื่อที่ไม่ซ้ำสำหรับเทมเพลตข้อความของคุณ สำหรับภาษา เราจะเลือกภาษาอังกฤษซึ่งรหัสภาษาคือ en หากคุณใช้ภาษาอื่น ให้จดภาษารหัสไว้ตามที่จำเป็นสำหรับการส่งข้อความ

WhatsApp Message Template

เขียนข้อความส่วนตัว

เรากำลังใช้พารามิเตอร์ตัวแปรในข้อความ และจะถูกแทนที่ด้วยค่าจริงจาก Google ชีต คล้ายกับเครื่องหมายที่คุณอาจเคยใช้ใน Mail Merge และ Document Studio โดยมีความแตกต่างเล็กน้อยคือเครื่องหมายระบุตำแหน่งและไม่ใช่เครื่องหมายระบุชื่อ

นี่คือเทมเพลตข้อความของเราที่ตัวแปร 1 และ 2 ใช้สำหรับชื่อลูกค้าและชื่อรายการตามลำดับ

WhatsApp Message Template

WhatsApp อาจใช้เวลาถึงหนึ่งนาทีในการอนุมัติเทมเพลตข้อความใหม่ของคุณ

ขั้นตอนที่ 4: ส่งข้อความ WhatsApp

ตอนนี้การกำหนดค่าทั้งหมดของเราบนฝั่ง Facebook / WhatsApp เสร็จสมบูรณ์แล้ว มาทำงานใน Google ชีตที่จะส่งข้อความ WhatsApp ส่วนบุคคลเหล่านี้โดยอัตโนมัติ

คลิกที่นี่ เพื่อคัดลอกแผ่นงาน WhatsApp ในบัญชี Google ของคุณเอง

Google sheets WhatsApp

ถัดไป เพิ่มหมายเลขโทรศัพท์ (พร้อมรหัสประเทศ) ในคอลัมน์หมายเลขโทรศัพท์ของ Google ชีต คุณควรเพิ่มเฉพาะหมายเลขที่คุณได้ยืนยันกับบัญชี WhatsApp ทดสอบของคุณในขั้นตอนก่อนหน้านี้

จากนั้นไปที่เมนูส่วนขยายและเลือก Apps Script เพื่อเปิดสคริปต์พื้นฐาน แทนที่ WHATSAPP_ACCESS_TOKEN และ WHATSAPP_TEMPLATE_NAME ด้วยค่าที่คุณได้คัดลอกไว้ในขั้นตอนก่อนหน้านี้

คลิกปุ่ม Run ภายในตัวแก้ไข Apps Script และควรส่งข้อความ WhatsApp ไปยังหมายเลขโทรศัพท์ที่แสดงของคุณทันที

และสิ่งที่คุณมีด้านล่างนี้คือข้อความ WhatsApp จริงที่ส่งโดย WhatsApp API แทนที่ตัวทำเครื่องหมายตัวแปรในเทมเพลตด้วยค่าจริงจาก Google ชีต

WhatsApp Message Text

รายละเอียดทางเทคนิค

WhatsApp API ทำงานอย่างไรกับ Google Apps Script

สคริปต์ของ Google Apps เชื่อมต่อกับ Google ชีตและดึงรายละเอียดของลูกค้า รวมทั้งหมายเลขโทรศัพท์ที่จะส่งข้อความผ่าน WhatsApp

 // Get data from Google Sheets // for sending messages through WhatsApp const getSheetData_ = ( ) => { const sheet = SpreadsheetApp . getActiveSheet ( ) ; const [ header , ... rows ] = sheet . getDataRange ( ) . getDisplayValues ( ) ; const data = [ ] ; rows . forEach ( ( row ) => { const recipient = { } ; header . forEach ( ( title , column ) => { recipient [ title ] = row [ column ] ; } ) ; data . push ( recipient ) ; } ) ; return data ; } ;

ถัดไป สคริปต์จะวนซ้ำในแต่ละแถวของชีตและส่งข้อความ WhatsApp โดยเรียกใช้ WhatsApp Cloud API ด้วย บริการ UrlFetch

 // Send Message with WhatsApp Cloud API const sendMessage_ = ( e ) => { const apiUrl = 'https://graph.facebook.com/v13.0/114746974570888/messages' ; const request = UrlFetchApp . fetch ( apiUrl , { muteHttpExceptions : true , method : 'POST' , headers : { Authorization : ` Bearer ${ WHATSAPP_ACCESS_TOKEN } ` , 'Content-Type' : 'application/json' , } , payload : JSON . stringify ( { type : 'template' , messaging_product : 'whatsapp' , to : e . recipient_number , template : { name : WHATSAPP_TEMPLATE_NAME , language : { code : LANGUAGE_CODE } , components : [ { type : 'body' , parameters : [ { type : 'text' , text : e . customer_name } , { type : 'text' , text : e . item_name } , { type : 'text' , text : e . delivery_date } , ] , } , ] , } , } ) , } ) ; const { error } = JSON . parse ( request ) ; if ( error ) { Logger . log ( ` 😞 ${ error } ` ) ; } else { Logger . log ( ` Message sent to ${ recipient_number } ` ) ; } } ; const main = ( ) => { getSheetData_ ( ) . forEach ( ( row ) => { const status = sendMessage_ ( { recipient_number : row [ 'Phone Number' ] . replace ( / [^\d] / g , '' ) , customer_name : row [ 'Customer Name' ] , item_name : row [ 'Item Name' ] , delivery_date : row [ 'Delivery Date' ] , } ) ; } ) ; } ;

ดูเพิ่มเติมที่: ทำให้เวิร์กโฟลว์เป็นอัตโนมัติด้วย Google ชีต

วิธีฝังรูปภาพจาก Google Drive บนเว็บไซต์ของคุณ

กำลังมองหาสถานที่สำหรับโฮสต์ภาพเพื่อให้คุณสามารถฝังลงในเว็บไซต์ของคุณได้หรือไม่? บริการโฮสต์รูปภาพที่ได้รับความนิยมมากที่สุดคือ imgur.com และ imgbb.com แต่คุณรู้หรือไม่ว่าคุณสามารถใช้ Google ไดรฟ์เพื่อโฮสต์รูปภาพได้

มันทำงานบางอย่างเช่นนี้ คุณอัปโหลดไฟล์รูปภาพไปยัง Google Drive และทำให้ไฟล์นั้นเป็นสาธารณะ ตอนนี้ Google ไดรฟ์จะสร้างภาพขนาดย่อที่มีความละเอียดสูงของไฟล์ที่อัปโหลด ซึ่งคุณสามารถฝังบนเว็บไซต์หรืออีเมลของคุณได้โดยตรง

สร้างลิงก์รูปภาพของ Google ไดรฟ์

1. แชร์ไฟล์

ไปที่ Google Drive และอัปโหลดภาพที่คุณต้องการฝังในเว็บไซต์ของคุณ ถัดไป คลิกขวาที่รูปภาพแล้วเลือกรับ Get link เพื่อรับลิงก์ที่แชร์ได้ของไฟล์ที่อัปโหลด

Get Link - Google Drive

2. เปลี่ยนสิทธิ์

ภายในกล่องโต้ตอบการแชร์ ให้เลือกรายการแบบเลื่อนลงของสิทธิ์ แล้วเลือก Anyone with a link การดำเนินการนี้จะทำให้ทุกคนบนอินเทอร์เน็ตสามารถเห็นไฟล์ที่เข้าถึงลิงก์ที่แชร์ได้ ไฟล์จะพร้อมใช้งานสำหรับผู้ใช้ที่ไม่มีบัญชี Google

คลิกปุ่ม Copy link เพื่อคัดลอกลิงก์ของไฟล์ไปยังคลิปบอร์ดของคุณ

Make File Public

3. สร้างลิงค์

ถัดไป เปิดหน้า ฝัง Google ไดรฟ์ และวางลิงก์ของไฟล์ลงในช่องข้อความที่ป้อน คลิกปุ่ม Generate เพื่อดึงลิงก์โดยตรงของรูปภาพที่คุณสามารถวางไว้ในเว็บไซต์หรืออีเมลของคุณ

Google Drive Image link

วิธีสร้างลิงก์รูปภาพของไดรฟ์

ภายใน เครื่องมือใช้ลิงก์สาธารณะของรูปภาพใน Google Drive ของคุณและดึง รูปภาพ Open Graph จาก HTML จากนั้นจะเปลี่ยนพารามิเตอร์ s ภาพ OG เพื่อเปลี่ยนเป็นภาพขนาดย่อที่มีความละเอียดสูง เป็นเทคนิคที่คล้ายคลึงกันที่เราใช้เพื่อรับลิงก์โดยตรงสำหรับ รูปภาพใน Google ไดรฟ์

Google Drive OG Image

แนวทางสำรอง

หากคุณต้องการจัดการ URL ด้วยตัวเอง นี่เป็นวิธีอื่นที่จะช่วยคุณสร้างลิงก์โดยตรงสำหรับอิมเมจไดรฟ์ของคุณ

ทำให้ไฟล์ภาพใน Google Drive ของคุณเป็นแบบสาธารณะตามที่อธิบายไว้ก่อนหน้านี้แล้วคว้าลิงก์ไฟล์ของภาพสาธารณะ URL จะเป็นดังนี้:

 https://drive.google.com/file/d/13XE4Ah1aK5kSGniMbeard9DJ1iuroR_K/view?usp=sharing

ส่วน 13XE4Ah1aK5kSGniMbeard9DJ1iuroR_K ในลิงก์ Google ไดรฟ์คือรหัสเฉพาะของไฟล์ ใช้รหัสไฟล์นั้นและแทนที่ใน URL ด้านล่าง:

 < img src = " https://drive.google.com/uc?id=DRIVE_FILE_ID " alt = " Google Drive Image " />

คุณสามารถใช้ลิงก์นี้เพื่อ ฝังรูปภาพลงใน Google ชีต ได้อย่างง่ายดาย ข้อเสียเพียงอย่างเดียวของแนวทางนี้คือ คุณไม่สามารถควบคุมขนาดของรูปภาพที่สร้างขึ้นได้ ในตัวอย่างก่อนหน้านี้ คุณสามารถเปลี่ยนพารามิเตอร์ความกว้างเพื่อสร้างภาพที่มีขนาดเฉพาะได้อย่างง่ายดาย

ดูเพิ่มเติมที่: เคล็ดลับ URL ของ Google Drive

วิธีเปิดเว็บไซต์ในหน้าต่างใหม่จากเมนู Google ชีต

สมมติว่าคุณได้สร้างส่วนเสริมสำหรับ Google ชีตที่เพิ่มรายการเมนูใหม่ให้กับ UI ของชีต ตอนนี้คุณต้องการเพิ่มตัวเลือกในเมนูที่เมื่อคลิกแล้ว จะเปลี่ยนเส้นทางผู้ใช้ไปยังเว็บไซต์ของคุณโดยที่ผู้ใช้ไม่ต้องคลิกปุ่มอื่น

ตัวอย่างเช่น ในการ สาธิต Google ชี ต เรามีเมนูหลักและเมนูย่อยที่เปิดเว็บไซต์พื้นฐานในหน้าต่างใหม่

Google Sheets open Url

1. เพิ่มเมนูใน Google ชีต

ในขั้นแรก เราจะเพิ่มเมนูแบบกำหนดเองใน Google ชีตและเรียกใช้จากฟังก์ชัน onOpen เพื่อให้เมนูพร้อมใช้งานเสมอเมื่อผู้ใช้เปิด Google ชีตของคุณ

 const onOpen = ( ) => { const ui = SpreadsheetApp . getUi ( ) ; const parentMenu = ui . createMenu ( '👩🏻‍💼 Digital Inspiration' ) ; parentMenu . addItem ( 'Visit our website' , 'openWebsite' ) ; parentMenu . addToUi ( ) ; } ;

2. เพิ่ม HTML สำหรับการเปลี่ยนเส้นทางเว็บไซต์

สร้างไฟล์ url.html ใหม่ในโปรแกรมแก้ไข Apps Script และเพิ่มโค้ดต่อไปนี้

JavaScript ใช้เมธอด window.open เพื่อเปิด URL ในหน้าต่างใหม่ เนื่องจากเราได้ตั้งเป้าหมายเป็น _blank

 <! DOCTYPE html > < html > < body > < a href = " <?= url; ?> " target = " _blank " > Click here </ a > to open the webpage. </ body > < script > var windowReference = window . open ( '<?= url; ?>' , '_blank' ) ; if ( windowReference !== null ) { google . script . host . close ( ) ; } </ script > </ html >

เปิดหน้าต่างในป๊อปอัป

หากคุณต้องการเปิดเว็บไซต์ในป๊อปอัปขนาดคงที่ แทนที่จะเป็นหน้าต่างใหม่ ฟังก์ชันจะถูกเขียนเป็น:

 < script > var windowFeatures = 'popup' ; var windowReference = window . open ( '<?= url; ?>' , 'scriptWindow' , windowFeatures ) ; if ( windowReference !== null ) { google . script . host . close ( ) ; } </ script >

ค่าส่งคืนของเมธอด window.open จะเป็นโมฆะหากหน้าต่างถูกบล็อกโดยตัวบล็อกป็อปอัปในตัวของเบราว์เซอร์

ป๊อปอัปสามารถวางตำแหน่งที่ใดก็ได้บนสคริปต์และปรับขนาดเป็นความสูงและความกว้างเฉพาะโดยแก้ไขตัวแปร windowFeatures ดังต่อไปนี้:

 // before var windowFeatures = 'popup' ; // after var windowFeatures = 'left=100,top=100,width=320,height=320' ;

โปรดดู เอกสาร MDN สำหรับแนวทางปฏิบัติที่ดีที่สุดในการแก้ปัญหาการใช้งานบางส่วนที่เกี่ยวข้องกับลิงก์ที่เปิดหน้าต่างรอง

3. เปิดลิงก์จาก Google ชีต

ต่อไป เราจะเขียนฟังก์ชัน Apps Script ที่จะเรียกใช้จากเมนูและเปิดเว็บไซต์ในหน้าต่าง / แท็บใหม่

 const openWebsite = ( ) => { const htmlTemplate = HtmlService . createTemplateFromFile ( 'url.html' ) ; htmlTemplate . url = 'https://digitalinspiration.com/' ; const htmlOutput = htmlTemplate . evaluate ( ) . setHeight ( 50 ) . setWidth ( 200 ) ; const ui = SpreadsheetApp . getUi ( ) ; ui . showModelessDialog ( htmlOutput , 'Open Website' ) ; Utilities . sleep ( 2000 ) ; } ;

จำเป็นต้องเพิ่มฟังก์ชันส sleep ปเนื่องจากการเปิดหน้าต่างอาจใช้เวลาหนึ่งหรือสองวินาที หากละเว้น sleep สลีป กล่องโต้ตอบสเปรดชีตจะเปิดขึ้นและปิดทันทีโดยไม่ต้องเปิดเว็บไซต์

วิธีใช้ Google OAuth 2.0 เพื่อเข้าถึง Google APIs ด้วย Refresh Token

มาสร้างเว็บแอปพลิเคชันอย่างง่ายที่ใช้ Google OAuth 2.0 เพื่อเข้าถึง Google API ผู้ใช้สามารถลงชื่อเข้าใช้ด้วยบัญชี Google และอนุญาตให้แอปพลิเคชันเข้าถึง Google ไดรฟ์หรือบริการอื่นๆ ของ Google

เมื่อผู้ใช้ลงชื่อเข้าใช้ Google จะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าการให้สิทธิ์ Google OAuth 2.0 ผู้ใช้จะถูกขอให้อนุญาตการเข้าถึงแอปพลิเคชัน จากนั้นแอปพลิเคชันจะแลกเปลี่ยนรหัสการอนุญาตสำหรับโทเค็นการเข้าถึงและโทเค็นการรีเฟรช โทเค็นเพื่อการเข้าถึงจะหมดอายุหลังจากผ่านไปหนึ่งชั่วโมง แต่โทเค็นการรีเฟรชจะใช้งานได้อย่างไม่มีกำหนด (เว้นแต่ผู้ใช้จะเพิกถอนด้วยตนเอง)

ดังนั้น เราจะจัดเก็บโทเค็นการรีเฟรชใน Cloud Firestore และใช้เพื่อสร้างโทเค็นการเข้าถึงใหม่ทุกครั้งที่แอปพลิเคชันจำเป็นต้องเข้าถึง Google APIs ในนามของผู้ใช้

เราไม่ได้ใช้ Google Sign-in กับ Firebase Authentication เนื่องจากไม่มีโทเค็นการรีเฟรชที่จำเป็นสำหรับเรียกใช้งาน API พื้นหลังโดยไม่ต้องดูแล

ขั้นตอนที่ 1: สร้างไคลเอ็นต์ OAuth 2.0 ของ Google

สร้างไคลเอ็นต์ OAuth 2.0 ใหม่ภายในโปรเจ็กต์ Google Cloud ตามที่อธิบายไว้ใน คำแนะนำทีละขั้นตอน นี้

ภายใน Google Cloud Console ของคุณ ไปที่ส่วน APIs & Services คลิกที่ Credentials และคลิกที่ Create credentials > OAuth Client Id เพื่อสร้าง ID ไคลเอ็นต์ใหม่

Google OAuth Sign-in

ในระหว่างการพัฒนา คุณสามารถใส่ https://localhost:5001/oauthCallback เป็น URI การเปลี่ยนเส้นทาง เนื่องจากโดยค่าเริ่มต้น โปรแกรมจำลอง Firebase จะเรียกใช้เว็บแอปพลิเคชันในเครื่องบนพอร์ต 5001

จดบันทึกรหัสไคลเอ็นต์และข้อมูลลับไคลเอ็นต์ที่ Google ให้มา

ขั้นตอนที่ 2: เริ่มต้นฟังก์ชัน Firebase

เปิดเทอร์มินัลของคุณ สร้างไดเร็กทอรีโปรเจ็กต์ใหม่และเริ่มต้นโปรเจ็กต์ Firebase

 $ mkdir oauth2-application $ cd oauth2-application $ npx firebase init functions $ npm install googleapis

คุณอาจเลือกตัวเลือก Use an existing Firebase project จากนั้นเลือกโปรเจ็กต์ Google Cloud ของคุณด้วยฟังก์ชัน สลับไปที่ไดเร็กทอรี functions

ขั้นตอนที่ 3 เริ่มต้นตัวแปรสภาพแวดล้อมของ Firebase

สร้างไฟล์ .env ใหม่และเพิ่มตัวแปรสภาพแวดล้อมต่อไปนี้:

 CLIENT_ID = < your client ID > CLIENT_SECRET = < your client secret > REDIRECT_URI = < your redirect URI >

ขั้นตอนที่ 4 สร้าง URL การอนุญาต

เราจะสร้างฟังก์ชันที่สร้าง URL การให้สิทธิ์ให้ผู้ใช้ลงชื่อเข้าใช้ด้วยบัญชี Google ของตน นอกจากขอบเขตของ drive แล้ว แอปพลิเคชันของเรายังขอขอบเขต userinfo.email เพื่อรับที่อยู่อีเมลของผู้ใช้อีกด้วย

 const functions = require ( 'firebase-functions' ) ; const { google } = require ( 'googleapis' ) ; exports . googleLogin = functions . https . onRequest ( ( request , response ) => { const SCOPES = [ 'https://www.googleapis.com/auth/userinfo.email' , 'https://www.googleapis.com/auth/drive.metadata.readonly' , ] ; const oAuth2Client = new google . auth . OAuth2 ( process . env . CLIENT_ID , process . env . CLIENT_SECRET , process . env . REDIRECT_URI ) ; const authUrl = oAuth2Client . generateAuthUrl ( { access_type : 'offline' , scope : SCOPES , prompt : 'consent' , login_hint : request . query . email_address || '' , } ) ; response . set ( 'Cache-Control' , 'private, max-age=0, s-maxage=0' ) ; response . redirect ( authUrl ) ; } ) ;

เราตั้งค่า access_type เป็น offline เพื่อรับโทเค็นการรีเฟรช consent ถูกกำหนด prompt บังคับให้ผู้ใช้ยินยอมในการสมัคร นอกจากนี้เรายังตั้งค่า login_hint เป็นที่อยู่อีเมลของผู้ใช้หากพวกเขาลงชื่อเข้าใช้บัญชี Google หลายบัญชี

ขั้นตอนที่ 5. จัดเก็บโทเค็นการรีเฟรช

เมื่อผู้ใช้ลงชื่อเข้าใช้ Google จะเปลี่ยนเส้นทางผู้ใช้ไปยัง URI การเปลี่ยนเส้นทาง URI การเปลี่ยนเส้นทางมีรหัสการให้สิทธิ์ที่เราจำเป็นต้องแลกเปลี่ยนสำหรับโทเค็นการเข้าถึงและรีเฟรชโทเค็นเพื่อจัดเก็บไว้ในฐานข้อมูล

 const functions = require ( 'firebase-functions' ) ; const admin = require ( 'firebase-admin' ) ; const { google } = require ( 'googleapis' ) ; admin . initializeApp ( ) ; exports . oAuthCallback = functions . https . onRequest ( async ( request , response ) => { const { query : { error , code } = { } } = request ; // User may deny access to the application. if ( error ) { response . status ( 500 ) . send ( error ) ; return ; } const oAuth2Client = new google . auth . OAuth2 ( process . env . CLIENT_ID , process . env . CLIENT_SECRET , process . env . REDIRECT_URI ) ; // Exchange the authorization code for an access token. const { tokens } = await oAuth2Client . getToken ( code ) ; oAuth2Client . setCredentials ( tokens ) ; const oauth2 = google . oauth2 ( { auth : oAuth2Client , version : 'v2' , } ) ; // Get the user's email address and Google user ID const { data } = await oauth2 . userinfo . get ( ) ; const { id , email } = data ; const { refresh_token } = tokens ; // Store the refresh token in the Firestore database. // Set merge: true to not overwrite any other data in the same document await admin . firestore ( ) . collection ( 'users' ) . doc ( id ) . set ( { id , email , refresh_token } , { merge : true } ) ; response . set ( 'Cache-Control' , 'private, max-age=0, s-maxage=0' ) ; response . send ( ` User ${ email } is authorized! ${ id } ` ) ; } ) ;

ต่อไปนี้เป็นวิธีจัดเก็บเอกสารในฐานข้อมูล Firestore NoSQL:

Firestore Access Token

ขั้นตอนที่ 6: เข้าถึง Google APIs

ตอนนี้เรามีโทเค็นการรีเฟรชแล้ว เราจึงสามารถใช้เพื่อสร้างโทเค็นการเข้าถึงใหม่และเข้าถึง Google API ได้ ในตัวอย่างของเรา ฟังก์ชันของไดรฟ์จะส่งคืนไฟล์ 5 ไฟล์ล่าสุดจาก Google ไดรฟ์ของผู้ใช้ที่ได้รับอนุญาต

 const functions = require ( 'firebase-functions' ) ; const admin = require ( 'firebase-admin' ) ; const { google } = require ( 'googleapis' ) ; admin . initializeApp ( ) ; exports . drive = functions . https . onRequest ( async ( request , response ) => { const { user_id = '' } = request . query ; const user = await admin . firestore ( ) . collection ( 'users' ) . doc ( user_id ) . get ( ) ; if ( ! user . exists ) { response . status ( 404 ) . send ( ` User ${ user_id } not found ` ) ; return ; } const { refresh_token } = user . data ( ) ; const oAuth2Client = new google . auth . OAuth2 ( process . env . CLIENT_ID , process . env . CLIENT_SECRET , process . env . REDIRECT_URI ) ; oAuth2Client . setCredentials ( { refresh_token } ) ; const googleDrive = google . drive ( { version : 'v3' , auth : oAuth2Client } ) ; const { data : { files = [ ] } = { } } = await googleDrive . files . list ( { pageSize : 5 , fields : 'files(id, name)' , } ) ; response . status ( 200 ) . send ( { files } ) ; } ) ;

ขั้นตอนที่ 7: สร้างฟังก์ชัน Firebase Cloud

คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อทดสอบฟังก์ชันในเครื่อง:

 firebase emulators:start --only functions

เมื่อคุณพร้อมที่จะปรับใช้ฟังก์ชันกับโปรเจ็กต์ Firebase คุณสามารถเรียกใช้คำสั่งต่อไปนี้:

 firebase deploy --only functions

วิธีใช้การจัดรูปแบบตามเงื่อนไขใน Google ชีตเพื่อเน้นข้อมูล

การจัดรูปแบบตามเงื่อนไขใน Google ชีตช่วยให้คุณไฮไลต์เซลล์ที่ตรงตามเกณฑ์ที่กำหนดได้อย่างง่ายดาย ตัวอย่างเช่น คุณสามารถเปลี่ยนสีพื้นหลังของเซลล์เป็นสีเหลืองได้หากค่าของเซลล์น้อยกว่าตัวเลขที่กำหนด หรือคุณสามารถเลือกที่จะเน้นทั้งแถวหรือทั้งคอลัมน์หากตรงตามเงื่อนไขบางประการ

เน้นแต่ละเซลล์

สำหรับตัวอย่างนี้ เรามีแผนภูมิการขายที่แสดงชื่อพนักงานขาย รัฐของพวกเขา และเป้าหมายการขายทั้งหมด เราต้องการเน้นแต่ละเซลล์ในคอลัมน์ State หากพนักงานขายมาจากแคลิฟอร์เนีย

ไปที่เมนูรูปแบบ เลือก Conditional Formatting แล้วคลิก Add Condition ที่นี่ เลือกช่วงเป็น B2:B และเงื่อนไขรูปแบบเป็น Text is Exactly จากนั้นป้อนข้อความ CA ในกล่องข้อความ เลือกสีพื้นหลังที่กำหนดเองแล้วคลิก Done

Highlight Cells in Google Sheets

เน้นทั้งแถว

สำหรับแผนภูมิการขายเดียวกัน ตอนนี้เราต้องการเน้นแถวทั้งหมดที่เป้าหมายการขายมากกว่า $8,000

ภายในกฎการจัดรูปแบบ ให้ตั้งค่าช่วงเป็น A2:C เนื่องจากเราต้องการนำการจัดรูปแบบไปใช้กับทั้งตาราง จากนั้นเลือก Custom Formula is for the format rule rule condition and set the criteria as =$C2>8000

หากคุณต้องการเน้นแถวที่เป้าหมายการขายอยู่ในช่วง พูดระหว่าง $5000 ถึง $7000 คุณสามารถเพิ่ม =ISBETWEEN($C2, 5000,7000) ในกล่องเกณฑ์

Highlight Rows in Google Sheets

$ ใน $C2 นำสูตรไปใช้กับทั้งคอลัมน์ C ในขณะที่ $ ที่ขาดหายไปที่อยู่ข้างหน้าของหมายเลข 2 จะทำให้สามารถเพิ่มขึ้นได้

หากคุณต้องการเน้นแถวที่เป้าหมายการขายมากกว่าเป้าหมายการขายเฉลี่ย คุณสามารถใช้ =IF(AVERAGE($C2:C)<$C2,1) หรือ =$C2>average($C2:C) สูตรในกล่องเกณฑ์

หากคุณต้องการเน้นแถวที่มีค่าสูงสุดสำหรับการขาย คุณสามารถใช้สูตร =MAX() ในกล่องเกณฑ์

 =$C:$C=max($C:$C)

ดูเพิ่มเติมที่: เน้นแถวที่ซ้ำกันใน Google ชีต

การจัดรูปแบบตามสองเซลล์

ในตารางการขายเดียวกัน เราต้องการเน้นถึงพนักงานขายที่รับผิดชอบสถานะเฉพาะ (เช่น “CA”) และผู้ที่มีเป้าหมายการขายมากกว่า $5,000

เราสามารถทำได้โดยใช้หลายเงื่อนไขโดยใช้ฟังก์ชัน AND ดังที่แสดงด้านล่าง:

 =AND(C2>5000, B2="CA")

Multiple Criteria Formatting

การจัดรูปแบบตามเงื่อนไขตามวันที่

ตารางของเรามีรายการใบแจ้งหนี้และวันที่ครบกำหนดในใบแจ้งหนี้ เราจะใช้การจัดรูปแบบตามเงื่อนไขเพื่อเน้นใบแจ้งหนี้ที่เลยกำหนดชำระนานกว่า 30 วัน และส่งการ แจ้งเตือนทางอีเมล

 =DAYS(TODAY(),$B:$B)>=30

Invoice Due

ในอีกตัวอย่างหนึ่ง เรามีรายชื่อนักเรียนและวันเกิดของพวกเขา เราสามารถใช้ ฟังก์ชัน Date เช่น เพื่อเน้นนักเรียนที่มีอายุมากกว่า 16 ปี และมีวันเกิดในเดือนปัจจุบัน

 =AND(YEAR(TODAY())-YEAR($B2)>=16,MONTH($B2)=MONTH(TODAY()))

แผนที่ความร้อน – จัดรูปแบบเซลล์ตามระดับสี

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

ระดับสีอุณหภูมิ

ทำเครื่องหมายแถวที่มีค่าใดค่าหนึ่ง

ด้วยการจัดรูปแบบตามเงื่อนไขใน Google ชีต คุณสามารถไฮไลต์แถวที่มีค่าเฉพาะได้อย่างง่ายดาย ตัวอย่างเช่น คุณสามารถเน้นแถวทั้งหมดที่มีค่า CA ในคอลัมน์ State

อย่างไรก็ตาม ถ้าคุณต้องการเน้นแถวที่มีค่าค่าใดค่าหนึ่งจากหลายค่า คุณสามารถใช้ฟังก์ชัน OR หรือใช้ฟังก์ชัน OR หรือใช้ นิพจน์ทั่วไป ที่มีสูตรแบบกำหนดเองก็ได้

สูตรนี้จะเน้นแถวทั้งหมดที่มี CA หรือ NY หรือ FL ในคอลัมน์ State

 =REGEXMATCH(UPPER($B:$B), "^(CA|NY|FL)$")

RegEx Conditional Formatting

หรือคุณอาจมีรายการสถานะแสดงอยู่ในชีตอื่นและใช้ MATCH with INDIRECT เพื่อเน้นแถวที่มีสถานะใดสถานะหนึ่ง

 =MATCH($B1, INDIRECT("'List of States'!A1:A"),0)

ใช้การจัดรูปแบบตามเงื่อนไขกับทั้งคอลัมน์

จนถึงขณะนี้ เราได้สำรวจตัวอย่างการเน้นแต่ละเซลล์หรือทั้งแถวเมื่อตรงตามเงื่อนไขบางประการ อย่างไรก็ตาม คุณสามารถใช้การจัดรูปแบบตามเงื่อนไขเพื่อเน้นทั้งคอลัมน์ของ Google ชีตได้

ในตัวอย่างนี้ เรามียอดขายสำหรับปีที่แตกต่างกันตามภูมิภาค เมื่อผู้ใช้ป้อนปีในเซลล์ A9 คอลัมน์ที่เกี่ยวข้องจะถูกเน้นในตารางการขาย สูตรที่กำหนดเองจะเป็น =B$1=$A$9 โปรดสังเกตว่า $ ถูกใช้กับตัวเลขในการอ้างอิงเซลล์ เนื่องจากการตรวจสอบจะทำในแถวแรกเท่านั้น

Conditional Formatting Column in Google Sheets

การจัดรูปแบบตามเงื่อนไขด้วย Google Apps Script

ถ้าคุณต้องใช้กฎแบบมีเงื่อนไขเดียวกันกับ Google สเปรดชีตหลายรายการในคราวเดียว ขอแนะนำให้คุณ ทำให้ Google Apps Script เป็นอัตโนมัติ มิเช่นนั้นจะต้องใช้เวลามากขึ้นในการใช้การจัดรูปแบบด้วยตนเอง

 const applyConditionalFormatting = ( ) => { const sheet = SpreadsheetApp . getActiveSheet ( ) ; const color = SpreadsheetApp . newColor ( ) . setThemeColor ( SpreadsheetApp . ThemeColorType . BACKGROUND ) . build ( ) ; const rule1 = SpreadsheetApp . newConditionalFormatRule ( ) . setRanges ( [ sheet . getRange ( 'B:B' ) ] ) . whenTextEqualTo ( 'CA' ) . setUnderline ( true ) . setBold ( true ) . setBackground ( color ) . build ( ) ; const rule2 = SpreadsheetApp . newConditionalFormatRule ( ) . setRanges ( [ sheet . getRange ( 'A1:C15' ) ] ) . whenFormulaSatisfied ( '=$C1>5000' ) . setBackground ( 'green' ) . setFontColor ( '#00FF00' ) . build ( ) ; const conditionalFormatRules = sheet . getConditionalFormatRules ( ) ; conditionalFormatRules . push ( rule1 ) ; conditionalFormatRules . push ( rule2 ) ; sheet . setConditionalFormatRules ( conditionalFormatRules ) ; } ;

โปรดตรวจสอบเอกสารของ ConditionalFormatRuleBuilder สำหรับรายละเอียดเพิ่มเติม วิธีนี้จะช่วยคุณคัดลอกกฎการจัดรูปแบบตามเงื่อนไขจากสเปรดชีตหนึ่งไปยังอีกสเปรดชีต

วิธีอัปโหลดไฟล์ไปยัง Google Drive ด้วย Node.js, Express และ Multer

คำแนะนำทีละขั้นตอนนี้อธิบายวิธีสร้างเว็บฟอร์มสำหรับการอัปโหลดไฟล์ไปยัง Google Drive โดยใช้ Node.js, Express และ Multer

เว็บฟอร์มเข้ารหัสไฟล์เป็น multipart/form-data และส่งข้อมูลในคำขอ POST ไปยังแอปพลิเคชัน Node.js Multer เป็นมิดเดิลแวร์ด่วนสำหรับจัดการข้อมูลแบบฟอร์มหลายส่วน

1. สร้างแบบฟอร์ม HTML

แบบฟอร์ม HTML ประกอบด้วยช่องอัปโหลดไฟล์ที่อนุญาตให้อัปโหลดหลายไฟล์ได้ นอกจากนี้ยังมีช่องข้อความสำหรับชื่อ อีเมล และประเทศของผู้ตอบ

เมื่อส่งแบบฟอร์ม จะใช้ File API ในตัวของเบราว์เซอร์เพื่อส่งไฟล์ไปยังแอปพลิเคชัน Node.js

 <! DOCTYPE html > < html > < head > < meta charset = " utf-8 " /> < meta name = " viewport " content = " width=device-width, initial-scale=1 " /> </ head > < body > < form > < input type = " file " name = " Files " required multiple /> < input type = " text " name = " Name " placeholder = " Name " /> < input type = " email " name = " Email Address " placeholder = " Email " required /> < input type = " text " name = " Country " placeholder = " Country " /> < button type = " submit " > Submit </ button > </ form > </ body > < script > const formElem = document . querySelector ( 'form' ) ; formElem . addEventListener ( 'submit' , async ( e ) => { e . preventDefault ( ) ; await fetch ( '/upload' , { method : 'POST' , body : new FormData ( formElem ) , } ) ; } ) ; </ script > </ html >

2. สร้างแอปพลิเคชัน Node.js

แอปพลิเคชัน Node.js จะได้รับไฟล์จากแบบฟอร์มและอัปโหลดไปยัง Google ไดรฟ์ เส้นทางหลักจะแสดงหน้า HTML ที่มีแบบฟอร์ม

 // index.js const express = require ( 'express' ) ; const uploadRouter = require ( './router' ) ; const app = express ( ) ; app . get ( '/' , ( _ , res ) => { res . sendFile ( ` ${ __dirname } /index.html ` ) ; } ) ; app . use ( express . json ( ) ) ; app . use ( express . urlencoded ( { extended : true } ) ) ; app . use ( uploadRouter ) ; app . listen ( 8080 , ( ) => { console . log ( 'Form running on port 8080' ) ; } ) ;

3. เราเตอร์อัปโหลด Google ไดรฟ์

Multer เพิ่มวัตถุร่างกายและวัตถุไฟล์ไปยังวัตถุที่ร้องขอ วัตถุเนื้อหามีฟิลด์ข้อความของแบบฟอร์ม ในขณะที่วัตถุไฟล์จะมีไฟล์ที่อัปโหลดผ่านแบบฟอร์ม

คุณสามารถรับรองความถูกต้องของบริการ Google ไดรฟ์ด้วย บัญชีบริการ สร้างโฟลเดอร์ใหม่ใน Google ไดรฟ์ แชร์โฟลเดอร์นั้นกับที่อยู่อีเมลของบัญชีบริการ และแทนที่ DRIVE_FOLDER_ID ด้วย ID ของโฟลเดอร์

 // router.js const stream = require ( 'stream' ) ; const express = require ( 'express' ) ; const multer = require ( 'multer' ) ; const { google } = require ( 'googleapis' ) ; const uploadRouter = express . Router ( ) ; const upload = multer ( ) ; const uploadFile = async ( fileObject ) => { const bufferStream = new stream . PassThrough ( ) ; bufferStream . end ( fileObject . buffer ) ; const { data } = await google . drive ( { version : 'v3' } ) . files . create ( { media : { mimeType : fileObject . mimeType , body : bufferStream , } , requestBody : { name : fileObject . originalname , parents : [ 'DRIVE_FOLDER_ID' ] , } , fields : 'id,name' , } ) ; console . log ( ` Uploaded file ${ data . name } ${ data . id } ` ) ; } ; uploadRouter . post ( '/upload' , upload . any ( ) , async ( req , res ) => { try { const { body , files } = req ; for ( let f = 0 ; f < files . length ; f += 1 ) { await uploadFile ( files [ f ] ) ; } console . log ( body ) ; res . status ( 200 ) . send ( 'Form Submitted' ) ; } catch ( f ) { res . send ( f . message ) ; } } ) ; module . exports = uploadRouter ;

วิธีอัปโหลดไฟล์ไปยัง Google Drive ด้วยบัญชีบริการ

คำแนะนำทีละขั้นตอนนี้จะแนะนำวิธีการอัปโหลดไฟล์ไปยัง Google ไดรฟ์ด้วยบัญชีบริการโดยใช้ Node.js สำหรับตัวอย่างนี้ เรามีโฟลเดอร์ในฮาร์ดไดรฟ์ในเครื่องของคุณซึ่งมีไฟล์หลายไฟล์ และเราจำเป็นต้องอัปโหลดไฟล์เหล่านี้ไปยังโฟลเดอร์เฉพาะใน Google ไดรฟ์

1. สร้างโครงการ Google Cloud

ไปที่ cloud.google.com และสร้างโครงการ Google Cloud ใหม่ ตั้งชื่อโปรเจ็กต์ของคุณ เปลี่ยนรหัสโปรเจ็กต์ แล้วคลิกปุ่ม Create

Create Google Cloud Project

2. เปิดใช้งาน Google APIs

เลือก APIs & Services จากเมนูด้านซ้าย และคลิกที่ Enable APIs and Services เพื่อเปิดใช้งาน Google APIs ต่างๆ หากคุณวางแผนที่จะอัปโหลดไฟล์ไปยัง Google Drive คุณจะต้องเปิดใช้งาน Drive API หากคุณต้องการใช้ Google Cloud Storage API คุณจะต้องเปิดใช้งาน Storage API

Google Drive API

3. สร้างบัญชีบริการ

ในส่วน APIs & Services ให้คลิกที่ Credentials และคลิกที่ Create credentials เพื่อสร้างบัญชีบริการ

Create Service Account

3ก. อธิบายบัญชีบริการ

ตั้งชื่อบัญชีบริการและรหัสบัญชีบริการของคุณ นี่เป็นเหมือนที่อยู่อีเมลและจะใช้เพื่อระบุบัญชีบริการของคุณในอนาคต คลิก Done เพื่อสร้างบัญชีบริการให้เสร็จสิ้น

Service Account Details

3b. สร้างไฟล์คีย์

ใน Cloud Console ให้ไปที่หน้า IAM และผู้ดูแลระบบ > บัญชีบริการ คลิกที่อยู่อีเมลของบัญชีบริการที่คุณต้องการสร้างคีย์ คลิกแท็บ Keys คลิกเมนูแบบเลื่อนลง Add key จากนั้นเลือก Create new key

เลือก JSON เป็นประเภทคีย์ จากนั้นคลิก สร้าง การดำเนินการนี้จะดาวน์โหลดไฟล์ JSON ที่มีคีย์ส่วนตัวของคุณ อย่าส่งไฟล์นี้ไปยังที่เก็บ Github

Service Account Key

4. แชร์โฟลเดอร์ไดรฟ์

สำหรับตัวอย่างนี้ เราต้องการอัปโหลดไฟล์จากโฟลเดอร์ในเครื่องไปยังโฟลเดอร์เฉพาะใน Google ไดรฟ์

ไปที่ Google Drive ของคุณและสร้างโฟลเดอร์ใหม่ คลิกขวาที่โฟลเดอร์ เลือก แชร์ และเพิ่มที่อยู่อีเมลของบัญชีบริการที่คุณสร้างในขั้นตอนที่ 3 เป็นตัวแก้ไขในโฟลเดอร์นี้

ดังนั้นแอปพลิเคชัน Node.js ของคุณจะสามารถเข้าถึงโฟลเดอร์นี้และอัปโหลดไฟล์ไปยังโฟลเดอร์นี้ได้ แอปพลิเคชันจะไม่สามารถเข้าถึงทรัพยากรอื่นๆ บน Google ไดรฟ์ของคุณ

Share Google Drive Folder

5. กำหนดค่า Node.js App

เมื่อตั้งค่าบัญชีบริการแล้ว เราต้องตั้งค่าแอป Node.js ที่จะอัปโหลดไฟล์ไปยัง Google ไดรฟ์ เราจะเรียกใช้แอปนี้จากบรรทัดคำสั่ง แต่คุณยังสามารถแปลงเป็นเว็บแอปด้วย Google Cloud Run และ Docker

5ก. สร้างไคลเอ็นต์ OAuth2 ที่ได้รับอนุญาต

แทนที่ service.json ด้วยชื่อไฟล์รหัสบัญชีบริการที่คุณสร้างในขั้นตอนที่ 3b

 // service.js const { google } = require ( 'googleapis' ) ; const path = require ( 'path' ) ; const getDriveService = ( ) => { const KEYFILEPATH = path . join ( __dirname , 'service.json' ) ; const SCOPES = [ 'https://www.googleapis.com/auth/drive' ] ; const auth = new google . auth . GoogleAuth ( { keyFile : KEYFILEPATH , scopes : SCOPES , } ) ; const driveService = google . drive ( { version : 'v3' , auth } ) ; return driveService ; } ; module . exports = getDriveService ;

5ข. เขียนไฟล์อัพโหลด

แทนที่โฟลเดอร์หลักด้วยรหัสโฟลเดอร์ของโฟลเดอร์ Google ไดรฟ์ที่คุณต้องการอัปโหลด หลังจากอัปโหลดไฟล์แล้ว เราจะย้ายไฟล์ในเครื่องไปที่ถังขยะด้วย

 // upload.js const fs = require ( 'fs' ) ; const getInvoiceFolder = require ( './folder' ) ; const drive = require ( './service' ) ; const uploadSingleFile = async ( fileName , filePath ) => { const folderId = 'DRIVE_FOLDER_ID' ; const { data : { id , name } = { } } = await drive . files . create ( { resource : { name : fileName , parents : [ folderId ] , } , media : { mimeType : 'application/pdf' , body : fs . createReadStream ( filePath ) , } , fields : 'id,name' , } ) ; console . log ( 'File Uploaded' , name , id ) ; } ; const scanFolderForFiles = async ( folderPath ) => { const folder = await fs . promises . opendir ( folderPath ) ; for await ( const dirent of folder ) { if ( dirent . isFile ( ) && dirent . name . endsWith ( '.pdf' ) ) { await uploadSingleFile ( dirent . name , path . join ( folderPath , dirent . name ) ) ; await fs . promises . rm ( filePath ) ; } } } ; module . exports = scanFolderForFiles ;

6. เรียกใช้ตัวอัปโหลดไฟล์

เมื่อทุกอย่างได้รับการตั้งค่าแล้ว ให้สร้างไฟล์ index.js และเรียกใช้คำสั่ง node index.js เพื่ออัปโหลดไฟล์ไปยัง Google ไดรฟ์

 // index.js const scanFolderForFiles = require ( './scan' ) ; scanFolderForFiles ( 'local-folder' ) . then ( ( ) => { console . log ( '🔥 All files have been uploaded to Google Drive successfully!' ) ; } ) ;

คุณอาจลองใช้ขอบเขต https://www.googleapis.com/auth/drive.file แทน https://www.googleapis.com/auth/drive ขอบเขตที่กว้างกว่ามาก ในกรณีนั้น ควรสร้างโฟลเดอร์หลักเริ่มต้นด้วยแอพเดียวกัน มิฉะนั้นจะไม่ได้รับอนุญาตให้เขียนไปยังโฟลเดอร์