1. บทนำ
ธุรกิจและบุคคลหลายพันล้านรายใช้ Gmail และบริการ G Suite อื่นๆ เพื่อสื่อสารและประมวลผลข้อมูล Google มี G Suite API ที่ช่วยให้คุณเข้าถึงข้อมูลในบริการเหล่านี้แบบเป็นโปรแกรมได้ และคุณใช้ API ดังกล่าวเพื่อทำให้เวิร์กโฟลว์รายวันทำงานโดยอัตโนมัติได้อย่างง่ายดาย ใน Lab นี้ คุณจะได้สร้างส่วนขยาย Gmail ที่มีประสิทธิภาพ ซึ่งจะจัดหมวดหมู่อีเมลในข้อความขาเข้าโดยอัตโนมัติ และบันทึกหมวดหมู่เหล่านั้นไว้ใน Google ชีต ส่วนขยายนี้จะใช้ RESTful API, Google Cloud Functions และบริการอื่นๆ ของ Google Cloud Platform
สิ่งที่คุณจะสร้าง
ในห้องทดลองนี้ คุณจะสร้างและทำให้ฟังก์ชันระบบคลาวด์บางรายการเชื่อมต่อกับ G Suite API และบริการอื่นๆ ของ Google Cloud Platform ใช้งานได้ ฟังก์ชันเหล่านี้จะ
- ให้สิทธิ์เข้าถึงข้อมูล Gmail และ Google ชีตอย่างปลอดภัย
- ดึงรูปภาพที่แนบอยู่กับอีเมลขาเข้า
- จัดหมวดหมู่รูปภาพเหล่านั้นโดยใช้ Cloud Vision API
- เขียนหมวดหมู่ ที่อยู่ของผู้ส่ง และชื่อไฟล์แนบลงใน Google ชีต
สิ่งที่คุณจะได้เรียนรู้
- ข้อมูลพื้นฐานเกี่ยวกับ RESTful API ของ G Suite
- ข้อมูลพื้นฐานของ Google Cloud Functions และบริการอื่นๆ ของ Google Cloud Platform
- วิธีเข้าถึง Gmail แบบเป็นโปรแกรมโดยใช้ Google Cloud Functions
สิ่งที่ต้องมี
- บัญชี Google ที่มีสิทธิ์เข้าถึง Gmail และ Google ชีต หากยังไม่มี ให้สร้างบัญชีที่นี่
- ความรู้พื้นฐานเกี่ยวกับ JavaScript/Node.js
2. สิ่งที่ต้องทำก่อน
เปิดใช้ API
ในห้องทดลองนี้ คุณจะใช้ผลิตภัณฑ์/บริการของ Google ต่อไปนี้
- Google Cloud Functions
- Pub/Sub ของ Google Cloud
- Google Cloud Vision API
- Google Cloud Datastore
- Gmail API
- Google Sheets API
Google Cloud Functions
Google Cloud Functions เป็นแพลตฟอร์ม Serverless Functions-as-a-Service ของ Google ที่ช่วยให้คุณเรียกใช้ข้อมูลโค้ดแต่ละรายการ ("ฟังก์ชัน") ได้อย่างง่ายดายและรองรับการปรับขนาด
หากต้องการเปิดใช้ Google Cloud Functions ให้คลิกเมนูแฮมเบอร์เกอร์ที่ด้านบนซ้ายของหน้าจอเพื่อเปิดแถบด้านข้างการนำทางด้านซ้าย
ค้นหา Cloud Functions ในเมนูการนำทาง แล้วคลิกตัวเลือกดังกล่าว คลิกเปิดใช้ API เพื่อเปิดใช้ Google Cloud Functions ในโปรเจ็กต์
Pub/Sub ของ Google Cloud
Google Cloud Pub/Sub เป็นพื้นฐานที่เรียบง่ายและรองรับการปรับขนาดสำหรับการสตรีมข้อมูลและการส่งมอบเหตุการณ์ ใน Lab นี้ ศูนย์จะทำหน้าที่เป็นผู้ให้บริการจัดส่งระหว่าง Gmail และ Google Cloud Functions
หากต้องการเปิดใช้ Google Cloud Pub/Sub ให้เปิดแถบด้านข้างการนำทางด้านซ้าย ค้นหา Pub/Sub แล้วคลิกที่แถบดังกล่าว คลิกเปิดใช้ API เพื่อเปิดใช้ Google Cloud Pub/Sub ในโปรเจ็กต์ของคุณ
Google Cloud Datastore
Google Cloud Datastore เป็นฐานข้อมูลแบบ Serverless ที่สามารถปรับขนาดและกระจายได้
หากต้องการเปิดใช้ Google Cloud Datastore ให้ไปที่ Datastore ที่แถบการนำทางด้านซ้าย แล้วคลิกตัวเลือกนั้น คลิกเลือกโหมด Datastore ในหน้าใหม่
คุณสามารถใช้ตำแหน่งฐานข้อมูลใดก็ได้สำหรับห้องทดลองนี้ คลิกสร้างฐานข้อมูลเพื่อเปิดใช้ Google Cloud Datastore อาจใช้เวลาสักครู่จึงจะเสร็จสมบูรณ์
Google Cloud Vision
Google Cloud Vision API คือบริการแมชชีนเลิร์นนิงที่มีประสิทธิภาพซึ่งใช้โมเดลก่อนการฝึกเพื่อรับข้อมูลเชิงลึกจากอิมเมจ
ดูวิธีการเปิดใช้ Google Cloud Vision API ได้ที่ด้านล่าง
การเปิดใช้ Gmail API, Google Sheets API และ Google Cloud Vision API
อีกครั้ง ให้เปิดแถบนำทางด้านซ้าย แล้วค้นหา API และ บริการ คลิกคลัง ในการค้นหา API และ Services ให้พิมพ์ Gmail ในผลการค้นหา ให้เลือก Gmail API แล้วคลิกเปิดใช้
กลับไปที่หน้าไลบรารี API ค้นหา Google Sheets API และเปิดใช้
ทำกระบวนการเดิมซ้ำ ค้นหา Cloud Vision API และเปิดใช้งาน
เปิด Google Cloud Shell
ในห้องทดลองนี้ คุณจะใช้ Google Cloud Shell ในการดำเนินการส่วนใหญ่ Cloud Shell มีบรรทัดคำสั่งเพื่อเข้าถึงทรัพยากร Google Cloud Platform ได้จากเบราว์เซอร์โดยตรง ซึ่งจะช่วยให้คุณจัดการทรัพยากรดังกล่าวได้โดยไม่ต้องใช้เครื่องภายใน
หากต้องการเปิด Google Cloud Shell ให้คลิกปุ่มเปิดใช้งาน Cloud Shell ที่แถบแนวนอนสีน้ำเงินด้านบน
แผงใหม่จะปรากฏที่ด้านล่างของหน้าจอ
คลิกปุ่มเปิดตัวแก้ไขโค้ดเพื่อเริ่มต้นเครื่องมือแก้ไขโค้ด Cloud Shell
ตัวแก้ไขโค้ด Cloud Shell จะเปิดขึ้นในหน้าต่างใหม่
ดาวน์โหลดโค้ด
เรียกใช้คำสั่งด้านล่างเพื่อโคลนโปรเจ็กต์ใน Cloud Shell
git clone https://github.com/googlecodelabs/gcf-gmail-codelab.git cd gcf-gmail-codelab
คุณควรเห็นโฟลเดอร์ใหม่ gcf-gmail-codelab
ปรากฏในตัวแก้ไขโค้ดของ Cloud Shell
3. ภาพรวมทางสถาปัตยกรรม
ขั้นตอนการทํางานของห้องทดลองนี้มีดังนี้
- ผู้ใช้ตั้งค่าข้อความ Push ของ Gmail กล่าวคือ ทุกครั้งที่ข้อความใหม่มาถึงกล่องจดหมาย Gmail จะส่งการแจ้งเตือนไปยัง Cloud Pub/Sub
- Cloud Pub/Sub จะส่งการแจ้งเตือนข้อความใหม่ไปยัง Google Cloud Functions
- เมื่อได้รับการแจ้งเตือนข้อความใหม่ อินสแตนซ์ Cloud Functions จะเชื่อมต่อกับ Gmail และเรียกข้อมูลข้อความใหม่
- หากอีเมลมีอิมเมจเป็นไฟล์แนบ อินสแตนซ์ Cloud Functions จะเรียกใช้ Cloud Vision API เพื่อวิเคราะห์ไฟล์แนบ
- อินสแตนซ์ Cloud Functions จะอัปเดตสเปรดชีตใน Google ชีตที่คุณเลือก โดยระบุบุคคลที่ส่งข้อความและตำแหน่งที่จะดาวน์โหลดไฟล์แนบ
4. ให้สิทธิ์เข้าถึง Gmail
ก่อนที่จะตั้งค่า Cloud Function ให้อ่านอีเมลโดยอัตโนมัติ คุณต้องให้สิทธิ์เข้าถึง Gmail ก่อน คุณจะต้องลงทะเบียนไคลเอ็นต์ OAuth กับ Google และสร้างรหัสไคลเอ็นต์ที่เชื่อมโยง
ลงทะเบียนไคลเอ็นต์ OAuth
ในเมนูการนำทางด้านซ้ายของ Google Cloud Console ให้ค้นหา API และ บริการ คลิกหน้าจอขอความยินยอม OAuth
พิมพ์ชื่อในช่องชื่อแอปพลิเคชัน เช่น GCF + Gmail Codelab ไม่ต้องสนใจการตั้งค่าอื่นๆ จากนั้นเลื่อนลงมาที่ด้านล่างของหน้า แล้วคลิกบันทึก
สร้างรหัสไคลเอ็นต์ที่เชื่อมโยง
เปลี่ยนไปที่แท็บข้อมูลเข้าสู่ระบบ คลิกสร้างข้อมูลเข้าสู่ระบบ แล้วเลือกรหัสไคลเอ็นต์ OAuth เลือกประเภทเว็บแอปพลิเคชัน แล้วตั้งชื่อ (คุณสามารถใช้ GCF + Gmail Codelab อีกครั้งได้ที่นี่) แล้วคลิกสร้าง โปรดเว้นช่องข้อจำกัดว่างไว้ก่อนในตอนนี้
จดรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์ที่แสดงผลในหน้าต่างป๊อปอัป คุณคลิกชื่อลูกค้าในหน้าเว็บเพื่อดูค่าเหล่านี้อีกครั้งได้
ดำเนินการให้สิทธิ์
ในโค้ดตัวอย่าง auth/index.js
จะระบุ Cloud Functions 2 รายการ คือ auth_init
และ auth_callback
ที่ทำงานร่วมกันเพื่อดำเนินการกระบวนการให้สิทธิ์ โดยใช้รหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์ที่คุณเพิ่งสร้างขึ้น
หากต้องการตรวจสอบโค้ด ให้เปิด auth/index.js
ใน Cloud Shell Code Editor
กระบวนการให้สิทธิ์แสดงผลโทเค็น 2 ประเภท ได้แก่ โทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช
- โทเค็นเพื่อการเข้าถึงเป็นหลักฐานข้อมูลระบุตัวตนที่มีอายุสั้นซึ่งให้สิทธิ์ทุกคนที่ครอบครองอยู่มีสิทธิ์เข้าถึงข้อมูลของคุณ
auth_callback
บันทึกไว้ใน Cloud Datastore - โทเค็นการรีเฟรชจะใช้เพื่อรับโทเค็นเพื่อการเข้าถึงใหม่และมีอายุการใช้งานนานขึ้นมาก
ซึ่งโดยปกติจะเข้ารหัสและ/หรือจัดเก็บแยกต่างหากจากโทเค็นเพื่อการเข้าถึง
แก้ไข auth/env_vars.yaml
ในตัวแก้ไขโค้ด Cloud Shell แทนที่ YOUR-GOOGLE-CLIENT-ID
และ YOUR-GOOGLE-CLIENT-SECRET
ด้วยค่าของคุณเอง ดูข้อมูลเพิ่มเติมได้ในขั้นตอนก่อนหน้า ยังไม่เปลี่ยนแปลงค่าของ YOUR-GOOGLE-CLIENT-CALLBACK-URL
และ YOUR-PUBSUB-TOPIC
หลังจากแก้ไข auth/env_vars.yaml
แล้ว ให้เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อทำให้ Cloud Functions ใช้งานได้
cd ~ cd gcf-gmail-codelab/auth # Deploy Cloud Function auth_init gcloud functions deploy auth_init --runtime=nodejs8 --trigger-http --env-vars-file=env_vars.yaml # Deploy Cloud Function auth_callback gcloud functions deploy auth_callback --runtime=nodejs8 --trigger-http --env-vars-file=env_vars.yaml
การทำให้ Cloud Functions ใช้งานได้อาจใช้เวลา 2-3 นาที ให้สิทธิ์ Cloud SDK ในการติดตั้งคำสั่งเบต้าหากได้รับข้อความแจ้ง
จากนั้นให้ไปที่ Google Cloud Console แล้วคลิก Cloud Functions ในเมนูการนำทางด้านซ้าย คลิก auth_callback
ในรายการ Cloud Functions และสลับไปที่แท็บทริกเกอร์
คัดลอก URL ในหน้าเว็บ กลับไปที่หน้า Cloud Functions แล้วคลิก auth_init
ในรายการ Cloud Functions ในแท็บทั่วไป ให้คลิกแก้ไข คลิกตัวแปรสภาพแวดล้อม เครือข่าย ระยะหมดเวลา และอื่นๆ แล้วแทนที่ค่า GOOGLE_CALLBACK_URL
ด้วย URL ที่คุณเพิ่งคัดลอก
คลิกทำให้ใช้งานได้เพื่อใช้การเปลี่ยนแปลง ทำขั้นตอนนี้ซ้ำและอัปเดต auth_callback
ด้วย
สุดท้าย ให้เปิดเมนูการนำทางด้านซ้าย แล้วคลิก API และ บริการ > การยืนยันโดเมน หากต้องการเพิ่มโดเมนที่ได้รับอนุญาต ให้คลิกเพิ่มโดเมน ตัวอย่างเช่น หาก URL ที่คุณคัดลอกไว้ก่อนหน้านี้มีลักษณะดังนี้
https://us-central1-my-project.cloudfunctions.net/auth_callback
คุณควรเพิ่มสิ่งต่อไปนี้เป็นโดเมนที่ได้รับอนุญาต
us-central1-my-project.cloudfunctions.net
กดเพิ่มโดเมนเพื่อยืนยัน
กลับไปที่หน้าข้อมูลเข้าสู่ระบบ คลิกชื่อไคลเอ็นต์ OAuth และเพิ่ม URL ที่คุณคัดลอกเป็น URI การเปลี่ยนเส้นทางที่ได้รับอนุญาต กด Enter เพื่อยืนยัน
นำส่วน /auth_callback
ออกจาก URL และเพิ่มส่วนที่เหลือเป็นต้นทาง JavaScript ที่ได้รับอนุญาต เช่น หาก URL ของคุณมีลักษณะดังนี้
https://us-central1-my-project.cloudfunctions.net/auth_callback
คุณควรเพิ่มสิ่งต่อไปนี้เป็นต้นทาง
https://us-central1-my-project.cloudfunctions.net/
กด Enter เพื่อยืนยัน แล้วคลิกบันทึกเพื่อใช้การเปลี่ยนแปลง
5. ตั้งค่าข้อความ Push ของ Gmail
หากกระบวนการให้สิทธิ์สำเร็จ auth_callback
จะเรียกใช้ Gmail API โดยอัตโนมัติเพื่อตั้งค่าข้อความ Push
หากต้องการรับข้อความ Push ของ Gmail คุณต้องสร้างหัวข้อ Pub/Sub สมาชิกคนใดก็ตามในหัวข้อจะได้รับการแจ้งเตือนข้อความขาเข้าโดยอัตโนมัติ เมื่อมาจาก Gmail
ในการสร้างหัวข้อ Pub/Sub ให้ไปที่ Google Cloud Console แล้วคลิก Pub/Sub > หัวข้อในเมนูการนำทางด้านซ้าย คลิกสร้างหัวข้อ พิมพ์ชื่อหัวข้อ เช่น gmail-watch
แล้วคลิกสร้าง นอกจากนี้ คุณต้องให้สิทธิ์ Gmail ในการส่งข้อความไปยังหัวข้อ Pub/Sub โดยคลิกเมนูตามบริบทของหัวข้อที่คุณเพิ่งสร้างขึ้น (จุดแนวตั้ง 3 จุด) และเลือกสิทธิ์ คลิกเพิ่มสมาชิก ระบุ gmail-api-push@system.gserviceaccount.com
เป็นสมาชิกใหม่ และให้บทบาท Pub/Sub > ผู้เผยแพร่ Pub/Sub สุดท้าย ให้คลิกบันทึกเพื่อใช้การเปลี่ยนแปลง
อัปเดต Cloud Function auth_callback
เพื่อระบุหัวข้อ Pub/Sub ที่จะใช้ คลิก Cloud Functions ในเมนูการนำทางด้านซ้าย แล้วเลือก auth_callback
ในรายการ Cloud Functions ในแท็บทั่วไป ให้คลิกแก้ไข คลิกเพิ่มเติม แล้วแทนที่ค่าของ PUBSUB_TOPIC
ด้วยชื่อของหัวข้อ Pub/Sub ที่คุณเพิ่งสร้าง คลิกบันทึกเพื่อใช้การเปลี่ยนแปลง
ตอนนี้คุณพร้อมจะให้สิทธิ์และตั้งค่าข้อความ Push ของ Gmail แล้ว รอจนกว่าการเปลี่ยนแปลงใหม่จะเสร็จสมบูรณ์ จากนั้นกลับไปที่หน้า Cloud Functions เลือก auth_init
ในรายการ Cloud Functions แล้วสลับไปที่แท็บทริกเกอร์ คลิก URL แล้วระบบจะเปลี่ยนเส้นทางคุณไปยังหน้าลงชื่อเข้าใช้ด้วย Google
ลงชื่อเข้าใช้ด้วยบัญชี Gmail ที่คุณเป็นเจ้าของ ข้อความใหม่ที่เข้ามาในกล่องจดหมายของบัญชีจะเรียกใช้ข้อความ Push หลังจากลงชื่อเข้าใช้ คุณจะเห็นหน้าเว็บด้านล่างนี้:
คลิกอนุญาตเพื่อให้สิทธิ์เข้าถึง auth_callback
จะดำเนินขั้นตอนการให้สิทธิ์ให้เสร็จสมบูรณ์ บันทึกโทเค็นเพื่อการเข้าถึง และตั้งค่าข้อความ Push ของ Gmail ให้คุณ คุณควรเห็นข้อความ Successfully set up Gmail push notifications
ในเบราว์เซอร์เมื่อกระบวนการนี้เสร็จสิ้น
Codelab นี้ใช้แพ็กเกจ @google-cloud/express-oauth2-handlers
เพื่อทำให้เวิร์กโฟลว์การให้สิทธิ์โดยอัตโนมัติสำหรับคุณ ดูข้อมูลเพิ่มเติมได้ที่ที่เก็บของ GitHub
6. ประมวลผลข้อความขาเข้า
ตามที่เราได้กล่าวไว้ก่อนหน้านี้ สมาชิกทุกคนในหัวข้อ Pub/Sub ที่คุณสร้างขึ้นจะได้รับการแจ้งเตือนเมื่อมีข้อความใหม่เข้ามาในกล่องจดหมายของคุณ pubsub/index.js
ระบุ Cloud Function ซึ่งก็คือ watchGmailMessages
ซึ่งเมื่อนำไปใช้ในฐานะสมาชิกของหัวข้อแล้ว จะอ่านข้อความใหม่ จัดหมวดหมู่รูปภาพที่แนบ และส่งออกหมวดหมู่เหล่านั้นไปยังสเปรดชีตใน Google ชีต
หากต้องการตรวจสอบโค้ด ให้เปิด pubsub/index.js
ใน Cloud Shell Code Editor
กำลังเรียกข้อความ
ข้อความ Push ของ Gmail ประกอบด้วยอีเมลที่เชื่อมโยงกับการแจ้งเตือนและรหัสประวัติ เพื่อความง่าย ใน Codelab คุณจะถามเพียง Gmail API สำหรับข้อความล่าสุดเมื่อมีข้อความ Push เข้ามา เพื่อผลลัพธ์ที่ดีขึ้น ให้ใช้รหัสประวัติเพื่อค้นหาข้อความแทน
// Look up the most recent message. const listMessagesRes = await gmail.users.messages.list({ userId: email, maxResults: 1 }); const messageId = listMessagesRes.messages[0].id; // Get the message using the message ID. const message = await gmail.users.messages.get({ userId: email, id: messageId }); return message;
วิเคราะห์ไฟล์แนบที่เป็นรูปภาพ
หากข้อความมีไฟล์แนบที่เป็นรูปภาพ watchGmailMessages
จะเรียกใช้ Cloud Vision API เพื่อใส่คำอธิบายประกอบในรูปภาพ ใน Codelab นี้ คุณจะขอให้ Cloud Vision API จำแนกประเภทรูปภาพและแสดงผลแท็กรูปภาพจำนวนหนึ่ง เช่น หากมีรูปภาพท้องฟ้าสีคราม Cloud Vision API อาจแสดงผลแท็กเป็น blue, sky และ nature
watchGmailMessages
ใช้ไลบรารี Cloud Vision API สำหรับ Node.js เพื่อเรียกใช้ Cloud Vision API ดังนี้
// Tag the attachment using Cloud Vision API const analyzeAttachment = async (data, filename) => { var topLabels = ['', '', '']; if (filename.endsWith('.png') || filename.endsWith('.jpg')) { const [analysis] = await visionClient.labelDetection({ image: { content: Buffer.from(data, 'base64') } }); const labels = analysis.labelAnnotations; topLabels = labels.map(x => x.description).slice(0, 3); } return topLabels; };
อัปเดต Google ชีต
watchGmailMessages
จะส่งออกผลการวิเคราะห์นี้ไปยังสเปรดชีตใน Google ชีต ซึ่งรวมถึงชื่อผู้ส่ง ชื่อไฟล์แนบ และแท็กของไฟล์แนบที่เป็นรูปภาพ (หากมี)
ก่อนอื่นให้สร้างสเปรดชีตใน Google ชีต เปิด Google ชีตแล้วคลิกเทมเพลตว่างในส่วนเริ่มสเปรดชีตใหม่ คัดลอกรหัสของชีต ตัวอย่างเช่น หากที่อยู่ในเบราว์เซอร์มีลักษณะดังนี้
https://docs.google.com/spreadsheets/d/abcdefghij01234567890/edit#gid=0
รหัสสเปรดชีตของคุณคือ abcdefghij01234567890
ใน Cloud Shell Code Editor ให้อัปเดต gcf-gmail-codelab/pubsub/env_vars.yaml
แล้วแทนที่ YOUR-GOOGLE-SHEET-ID
ด้วยค่าของคุณเอง
watchGmailMessages
เชื่อมต่อกับ Google Sheets API เพื่อต่อท้ายข้อมูล
const updateReferenceSheet = async (from, filename, topLabels) => { await googleSheets.spreadsheets.values.append({ spreadsheetId: SHEET, range: SHEET_RANGE, valueInputOption: 'USER_ENTERED', requestBody: { range: SHEET_RANGE, majorDimension: 'ROWS', values: [ [from, filename].concat(topLabels) ] } }); };
ขั้นตอนสุดท้าย
ในเครื่องมือแก้ไขโค้ด Cloud Shell ให้เปิด gcf-gmail-codelab/pubsub/env_vars.yaml
แล้วแทนที่ YOUR-GOOGLE-CLIENT-ID
, YOUR-GOOGLE-CLIENT-SECRET
และ YOUR-GOOGLE-CALLBACK-URL
ด้วยค่าของคุณเอง คุณค้นหาค่าเหล่านี้ได้ใน Google Cloud Console โดยเปิด Cloud Functions ในเมนูการนำทางด้านซ้าย เลือก auth_init
ในรายการ Cloud Functions และค้นหาส่วนตัวแปรสภาพแวดล้อม
ปรับใช้โค้ด
เรียกใช้คำสั่งด้านล่างเพื่อทำให้ Cloud Function ใช้งานได้
cd ~ cd gcf-gmail-codelab/pubsub gcloud functions deploy watchGmailMessages --runtime=nodejs8 --trigger-topic=gmail-watch --env-vars-file=env_vars.yaml
หากคุณตั้งชื่อหัวข้อ Cloud Pub/Sub อย่างอื่นที่ไม่ใช่ gmail-watch
ให้แทนที่ gmail-watch
ในคำสั่งด้านบนด้วยชื่อหัวข้อ การทำให้ Cloud Function ใช้งานได้อาจใช้เวลา 2-3 วินาที
7. ลองเลย
ขอแสดงความยินดี ทุกอย่างเรียบร้อยแล้ว ส่งอีเมลถึงตัวเองพร้อมไฟล์แนบรูปภาพ ในอีกไม่กี่วินาที คุณจะเห็นสเปรดชีตใน Google ชีตที่สร้างขึ้นอัปเดตโดยอัตโนมัติด้วยข้อมูลที่คุณให้ไว้