เมื่อไหร่จะสิ้นเดือน!! แจ้งเตือนนับถอยหลังวันสิ้นเดือนง่าย ๆ ด้วย Cloud scheduler และ Line notify

Thanainan Khamthan
Sep 19, 2019 · 3 min read
Image for post
Image for post
Photo by Lukas Blazek on Unsplash

คนเราเมื่อเจอปัญหาก็ต้องหาวิธีที่ดีที่สุดในการแก้ ทุกอย่างเริ่มจากปัญหาหรือไม่ก็โจทย์คำถามต่าง ๆ ผมเองก็เหมือนกัน ซึ่งผมเองมักคิดว่าเหลืออีกกี่วันจะสิ้นเดือน แล้วก็เปิดปฏิทินดูว่าเหลือกี่วันจะสิ้นเดือน หลังจากที่ทำแบบนี้ซ้ำไปซ้ำมา จึงคิดได้ว่าทำไมไม่ทำการแจ้งเตือนเองเลย เสียเวลาไปดูปฏิทินทำไมกัน จึงเกิดเป็นโปรเจคเล็ก ๆ เมื่อไหร่จะสิ้นเดือนครับ

สิ่งที่ควรรู้

สิ่งที่ต้องมีในเครื่อง

Step 1: Setup firebase project

เปิด terminall บน mac หรือ command line บน window และพิมพ์คำสั่งด้านล่างเพื่อลง firebase-tools

npm i -g firebase-tools

สร้างโฟร์เดอร์ชื่อ noti-end-of-month และเข้าไปที่ directory นั้น

mkdir noti-end-of-month && cd noti-end-of-month

ทำการ login firebase สำหรับใครที่ยังไม่ได้สมัครก็สมัครได้ที่ลิ้งนี้ได้ครับ https://console.firebase.google.com

firebase login

ทำการสร้างโปรเจค firebase

firebase init

จะได้หน้าด้านล่างนี้ กด ลูกศร ⬇️ (ลง) 2 ครั้ง และกดปุ่ม Space bar เพื่อเลือกเป็น functions จากนั้นกดปุ่ม Enter

Image for post
Image for post

กด ลูกศร ⬇️ (ลง) 2 ครั้ง จากนั้นกดปุ่ม Enter เพื่อสร้างโปรเจคใหม่

Image for post
Image for post

ทำการตั้งชื่อโปรเจคไอดี โดยมีเงื่อนไขที่ว่าต้องเป็นชื่อที่ไม่ซ้ำและไม่สามารถแก้ไขที่หลังได้

Image for post
Image for post

เลือกภาษาที่จะเขียน Cloud Functions ในที่นี้ผมเลือกเป็น Javascript

Image for post
Image for post

ในหน้านี้ ถามว่าต้องการที่จะใช้ ESLint ในการตรวจจับ bug และ จัดรูปแบบโค้ดหรือไม่ ?ในที่นี้ผมเลือก Y เพราะอย่างน้อยโค้ดจะได้มีระเบียบเรียบร้อย อ่านง่าย

Image for post
Image for post

เจอหน้านี้กด Y และ Enter ไปเลย เพื่อลง install package

Image for post
Image for post

จากนั้น เข้าไปที่ https://console.firebase.google.com และกดไปที่โปรเจคที่สร้างไว้ จากนั้นกดปุ่ม อัพเกรด เพื่อเลือกเป็นแผน Blaze จ่ายตามการใช้งานจริง เพราะ Cloud scheduler ต้องเลือกเป็นแผน Blaze เท่านั้น (สำหรับแผน Blaze ต้องมีการผูกบัตรด้วย แต่ถ้าใช้ตามโควต้าฟรีก็ไม่เสีย)

Image for post
Image for post

ยังไม่หมดครับสำหรับ Cloud function จำเป็นต้องเลือกตำแหน่งทรัพยากร Google Cloud Phatform (GCP) จะเลือกใกล้บ้านเราก็ได้ครับ เพราะเป็นที่เก็บข้อมูล Cloud ของเรา

Image for post
Image for post

Step 2: coding

เข้ามาที่โฟลเดอร์ที่สร้างไว้ หน้าตาจะได้ประมาณนี้

Image for post
Image for post

เข้าไปที่โฟลเดอร์ functions และ install package moment

cd functions
npm i moment

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

ทำการรันไฟล์ index.js เพื่อทดสอบ

node index.js

จะได้ อีก 16 วัน จะสิ้นเดือน สู้สู้จ้า 🎉🎉 เป็นอันว่าโค้ดใช้งานได้

Image for post
Image for post

Step3: Line notify

เข้าไปที่ Line notify จากลิ้งด้านล้างนี้

ทำการออก Token โดยกรอกชื่อแจ้งเตือน -> เลือกห้องแชท (ในที่นี้ผมเลือกแจ้งเตือนแบบตัวต่อตัวจาก Line Notify) -> กดปุ่ม ออก Token จะได้เลข Token ทำการคัดลอกไว้ใช้ในขั้นต่อไป

Image for post
Image for post

ทำการ install package request

npm i request

นำ Token ที่ได้ไปใส่แทนที่ <accress_token> จากนั้นคัดลอกไปวางที่ไฟล์ index.js

จากโค้ด ทำการยิง API ไปที่ https://notify-api.line.me/api/notify โดยส่ง accress token ในการยืนยันตัวตน และ message ในการแจ้งเตือน

ทำการรันไฟล์ index.js เพื่อทดสอบ

node index.js

เรียบร้อยครับ จะเห็นการแจ้งเตือนจาก line เด้งขึ้นมาแบบนี้ !!

Image for post
Image for post

Step4: Cloud schedule

สำหรับ cloud schedule หน้าที่ก็คือ ใช้รัน function ที่ต้องการตามเวลาที่กำหนด อย่างเช่น ทุกนาที ทุกชั่วโมง ทุกวัน ทุกเดือน เป็นต้น สำหรับเพิ่มเติมดูได้ที่บทความของพี่ตี๋ GDE Firebase ได้เลยครับ พี่เขาเขียนไว้ดีมาก

คักลอกโค้ดด้านล่างไปวางไว้ที่ไฟล์ index.js

สร้าง function CountEndOfMonth โดยตั้งเวลาไว้ที่ทุก ๆ นาที (* * * * *)

ทำการ deploy function ขึ้นไปที่ firebase

firebase deploy

จะได้การแจ้งเตือนจาก line notify ทุก ๆ นาที

Image for post
Image for post

แต่ผมต้องการโดยที่แจ้งเตือนทุก 7 นาฬิกาของทุกวัน จะได้โค้ดตามนี้ครับ

สรุป

ก็จบไปแล้วครับสำหรับการแจ้งเตือนเมื่อไหร่จะถึงสิ้นเดือน โดยใช้ Firebase Cloud Schedule ในการตั้งเวลาทุกๆวัน และใช้ Line notify ในการแจ้งเตือน ซึ่งการเขียนโปรแกรมไม่ยากเลย โค้ดมีเพียงแค่ 30 บรรทัด สามารถทำตามได้ไม่ยากและสามารถประยุกต์ใช้ได้กับชีวิตประจำวันได้ อย่างเช่น แจ้งเตือนวันหยุด เป็นต้น

I GEAR GEEK

เราคือกลุ่มคนที่มีความหลงไหลในการเขียนโปรแกรม และ…

Thanainan Khamthan

Written by

I GEAR GEEK

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

Thanainan Khamthan

Written by

I GEAR GEEK

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

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store