LINE Notify—แจ้งเตือนพยากรณ์อากาศจาก Google Sheet [Apps Script]

LINE Notify เป็น Official Account(OA) ตัวหนึ่งที่ได้จัดเตรียม APIs ให้นักพัฒนาสามารถที่จะส่งข้อความเข้าไปได้ และจะแจ้ง Notifications ให้กับบุคคลแบบ 1 ต่อ 1 หรือแบบกลุ่มก็ได้ วันนี้ผมเลยมาทดลองใช้ LINE Notify เพื่อแจ้งเตือนพยากรณ์อากาศ โดยทำเพิ่มจากบทความ Google Sheet — เก็บข้อมูลสภาพอากาศผ่านระบบ API ของกรมอุตุนิยมวิทยา [Apps Script] และสิ่งที่ต้องการคือ เมื่อได้รับข้อมูลพยากรณ์อากาศมาแล้ว นอกจากจะเก็บข้อมูลไว้ใน Google Sheet ผมจะเพิ่มฟังก์ชันในการแจ้งเตือนผ่าน LINE Notify ด้วยครับ มาดูกันว่าทำได้อย่างไร


1. Hello LINE Notify

— ให้เราทำการเพิ่มตัว LINE OA ที่ชื่อ LINE Notify ก่อน โดยจะใช้ LINE แสกน QR จากรูปนี้ หรือจะค้นคำว่า LINE Notify จาก LINE OA ก็ได้ครับ

— ต่อด้วยให้เข้าไปที่เว็บไซต์ https://notify-bot.line.me/en/ แล้วให้กด Log in ที่มุมขวาบน ระบุอีเมลและรหัสผ่านให้เรียบร้อย แล้วจิ้ม Log in ต่อไปเลย

— เมื่อ Log in ผ่านแล้ว ให้เลือกเมนู My page ที่มุมบนขวา แล้วจะให้เรา Generate access token ให้กด Generate token เบาๆ ด้วยความนุ่มนวล

— จะมี Popup เด้งมา ให้ตั้งชื่อ Token จะได้รู้ว่า Notification อันนี้มาจากเรื่องอะไร และด้านล่างจะมี 2 ทางเลือกคือ ให้ Notify แบบ 1 ต่อ 1 มาให้เราเพียงผู้เดียว กับอีกทางเลือกคือ กลุ่มที่เราต้องการ Notify ไป (เฉพาะกรณีที่เลือกแบบ กลุ่มให้ Invite ตัว LINE Notify เข้ากลุ่มด้วยครับ) ซึ่งในที่นี่ผมจะเลือกแบบ 1 ต่อ 1 มาให้ผมเพียงผู้เดียว จากนั้นก็กด Generate token ได้เลย

— ให้กด Copy ตัว Token ไว้ให้ดีครับ เพราะจะได้เจอมันแค่ครั้งเดียวต่อการสร้างหนึ่งครั้ง

— LINE Notify ก็มีข้อความแจ้งเตือนว่าได้มีการสร้าง Access Token แล้ว


2. Coding กันต่อ

— ทำความเข้าใจรายละเอียด LINE Notify API เพื่อส่งข้อความ Notification กันก่อนครับ เพิ่มเติมดูได้ที่ https://notify-bot.line.me/doc/en/

Endpoint: https://notify-api.line.me/api/notify
Method: POST
Headers:
- Content-Type: application/x-www-form-urlencoded หรือถ้าต้องการอัพโหลดภาพให้ใช้ multipart/form-data
Authorization: Bearer <access_token>
Params:
- message: ข้อความไม่เกิน 1,000 ตัวอักษร (Required)
- imageThumbnail: URL ของรูปภาพที่จะแสดงใน chat (Optional)
- imageFullsize: URL ของรูปภาพที่เมื่อคลิก imageThumbnail แล้วจะสามารถแสดงออกมาได้ขนาดใหญ่ (Optional)
- imageFile: ไฟล์รูปภาพที่สามารถอัพโหลดไปที่ server ของ LINE ได้ (Optional)
- stickerPackageId: ID ของแพ๊คเกจสติ๊กเกอร์นั้นๆ (Optional)
- stickerId: ID ของสติ๊กเกอร์นั้นๆ (Optional)

ตัวแปร imageThumbnail จะต้องระบุ imageFullsize ด้วยเสมอ เช่นเดียวกับการระบุตัวแปร stickerPackageId จะต้องระบุ stickerId ด้วย (ดูรายละเอียดของแพ๊คเกจสติ๊กเกอร์ได้ที่ https://devdocs.line.me/files/sticker_list.pdf)

— ทำการเปิด App Script ที่ทำไว้ในบทความก่อน แล้วเพิ่มฟังก์ชันส่งข้อความไปที่ LINE Notify จากตัวอย่างจะส่งทั้งข้อความ และสติ๊กเกอร์ ในครั้งเดียว และสะพานเชื่อมที่สำคัญก็คือ UrlFetchApp.fetch(url, options) จากคำแนะนำผมเลยไม่ได้กำหนด Content-Type เพราะอะไรดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchallrequests

— บร๊ะเจ้า! ทดลอง Run ฟังก์ชันปุ๊บ ข้อความเข้าปั๊บเลย ดีใจจนน้ำตาไหล

— มา Code ให้ครบตามต้องการกันเลย โดยปั้นตัวแปร ข้อมูลต่างๆ เพิ่มจากฟังก์ชันเดิมที่เคยทำไว้ในบทความก่อนได้เลยครับ

— มาดูตัวอย่าง Code แบบเต็มๆ กันครับ

— ทดลอง Run ฟังก์ชันปุ๊บ ได้มาครบตามต้องการเลยครับ

— แถมอีกนิดหนึ่งครับใน Code ผมจะระบุ ตัวแปร imageThumbnail พร้อมระบุ imageFullsize ด้วยเสมอ ด้วยค่า HTTPS URL เดียวกันไปเลยครับ ทั้งนี้ในตัวอย่างนั้นผมฝากไฟล์รูปภาพไว้ที่ Google Drive หากไปกด Share Link มาแล้ว Link ที่ได้จะทำให้รูปภาพไม่แสดงครับ ต้องทำการเปลี่ยนเป็น Direct Link ก่อน โดยให้ไปที่ https://www.directlinkgenerator.com/ แล้วเอา Share Link ไปสร้าง Direct Link ได้เลย

Share Link : https://drive.google.com/open?id=<Your imageId>

จะได้เป็น

Direct Link : https://drive.google.com/uc?id=<Your imageId>

พอจะเห็นความแตกต่างของทั้ง 2 อย่างแล้วใช่หรือเปล่าครับ ผมก็แค่นำ imageId มาต่อท้ายเพื่อให้เป็น Direct Link ก่อนส่งไปที่ Line Notify แค่นี้ก็ได้รูปพระอาทิตย์ยิ้มแฉ่งส่งไปด้วยแล้วครับ


ท้ายสุด เป็นอย่างไรบ้างครับกับการเชื่อมต่อการแจ้งเตือนไปที่ LINE Notify ไม่ได้ยากเลย ในตัวอย่างผมทำการปั้นข้อมูลที่ได้มาจากกรมอุตุนิยมวิทยาเลย หากเพื่อนๆ ต้องการอ่านข้อมูลจาก Google Sheet โดยตรงก็ลองเขียนโค้ดปั้นตัวแปรแล้วเอาฟังก์ชันในตัวอย่างไปประกอบได้ครับ ก็หวังว่าบทความนี้จะเป็นตัวอย่างให้เพื่อนๆ ได้นำไปใช้ได้น่ะครับ ไม่ว่าจะใช้การแจ้งเตือนข้อมูลอะไรก็ลองดูกันครับ Happy Coding…🎅


โปรโมชั่น คูปองส่วนลด และดีล ที่ดีที่สุดของร้านค้าออนไลน์กว่า 300 แบรนด์พร้อมรับเงินคืนจาก ShopBack
🔗 https://bit.ly/3c4tlmV

Ruk-Com จดโดเมน-เช่าโฮสต์ ราคาประหยัด พร้อมให้บริการใน 1 นาที
🔗 http://bit.ly/36q8A12