สองบทแรก แอปของคุณเริ่ม “พูด” ได้แล้วเวลามี event เกิดขึ้น
แต่ยังมี notification อีกแบบที่สำคัญมาก และต่างออกไปชัดเจน นั่นคือแบบที่ไม่ได้รอให้ใครกดอะไรเลย แต่ทำงานเมื่อ “ถึงเวลา”
นี่คือจุดที่แอปเริ่มมี routine ของตัวเอง
แอปที่ฉลาดไม่ได้แค่ตอบสนองต่อเหตุการณ์ แต่มันรู้ด้วยว่าถึงเวลาต้องทำอะไร
ลองนึกถึงผู้ช่วยที่ดีอีกครั้ง
เขาไม่ได้รอให้คุณเรียกทุกครั้ง เช่น ทุกเช้าเขาอาจสรุปสิ่งสำคัญมาให้ หรือทุกเย็นเขาอาจเตือนเรื่องที่ยังค้างอยู่
แอปก็ทำแบบนั้นได้เหมือนกัน
ในบทนี้เราจะใช้ตัวอย่างที่เหมาะมากกับ expense tracker คือ
เมื่อ ถึง 8 โมงเช้าทุกวัน -> ส่งสรุปรายจ่ายของเมื่อวานทางอีเมล
นี่คือ scheduled task (งานที่ทำตามเวลาที่กำหนด)
คุณยังไม่ต้องเข้าใจเบื้องหลังลึกๆ ขอให้คิดง่ายๆ ว่า มันเหมือนตั้งนาฬิกาปลุกไว้ให้แอป พอถึงเวลา แอปก็ลุกขึ้นมาทำงานชิ้นนั้น
event trigger คือมีอะไรเกิดขึ้นแล้วค่อยตอบ time trigger คือถึงเวลาแล้วค่อยทำ ทั้งสองแบบสำคัญ แต่ให้ความรู้สึกกับผู้ใช้ต่างกัน
แต่ก่อนจะส่ง summary ทุกวัน ต้องให้ผู้ใช้เลือกก่อนว่าอยากรับไหม
นี่คือจุดที่สำคัญมากของบทนี้
notification ตามเวลา มีโอกาสน่ารำคาญกว่าพวก event มาก เพราะมันเกิดซ้ำได้เรื่อยๆ
เพราะฉะนั้นก่อนสั่งให้แอปส่ง daily summary ทุกเช้า เราควรให้ผู้ใช้เลือกก่อนว่าอยากรับหรือไม่
นี่คือ opt-in / opt-out (เลือกรับ / เลือกไม่รับ)
พูดง่ายๆ คือ อย่าเดาแทนผู้ใช้ว่าทุกคนอยากได้ summary ทุกวัน ให้มีสวิตช์ให้เขาเลือกเอง
welcome email ส่งครั้งเดียว คนส่วนใหญ่มักโอเค แต่ summary รายวันคือของที่จะตามไปเรื่อยๆ ถ้าไม่ให้คนเลือกก่อน มันจะเริ่มกลายเป็น spam ได้ง่ายมาก
ตัวอย่างก่อน — daily summary ของ expense tracker ควรหน้าตาแบบไหน
ลองนึกถึง experience ที่ดี
ในหน้า settings ของแอป มีตัวเลือกประมาณว่า
- รับอีเมลสรุปรายจ่ายทุกเช้า
- รับอีเมลเตือนเมื่อใช้เงินใกล้เกินงบ
- รับข่าวหรืออัปเดตอื่นๆ
สำหรับบทนี้ เราจะเริ่มจากอันเดียวก่อน คือ daily summary
ถ้าผู้ใช้เปิดสวิตช์ไว้ แอปจะส่งอีเมลทุกเช้า
ถ้าปิดไว้ แอปจะเงียบ
นี่คือหลักง่ายๆ ที่ช่วยให้แอปดูเป็นผู้ช่วยที่ดี ไม่ใช่คนที่พูดใส่เราเองตลอดเวลา
Supabase ช่วยให้แอปมีงานตามเวลาได้
จาก docs ตอนนี้ Supabase รองรับ scheduled jobs ผ่าน cron และสามารถให้ task ไปเรียก Edge Function ได้
ในคอร์สนี้คุณยังไม่ต้องลงลึกคำว่า cron หรือ edge function มาก แค่ให้จำภาพนี้ไว้
- มีงานหนึ่งชิ้นที่ตั้งเวลาไว้
- พอถึงเวลา งานนั้นจะถูกรัน
- งานนั้นไปดึงข้อมูลที่ต้องใช้
- แล้วส่งอีเมลออกไป
สำหรับบทนี้ ภาพนี้พอแล้ว
สิ่งสำคัญกว่าคือการอธิบายให้ AI รู้ว่า งานนั้นควรทำอะไร เมื่อไร และกับใคร
ลงมือทำ — เพิ่มสวิตช์เลือกรับ และระบบส่ง daily summary
เปิดโปรเจกต์ expense tracker ของคุณ แล้วส่ง prompt นี้
เพิ่มระบบส่งสรุปรายจ่ายประจำวันทางอีเมล
- เพิ่มตัวเลือกในหน้า settings ให้ผู้ใช้เปิดหรือปิดการรับอีเมลสรุปรายวันได้
- ถ้าผู้ใช้เปิดไว้ ให้ส่งอีเมลสรุปรายจ่ายของเมื่อวานทุกวันเวลา 08:00 น.
- ในอีเมลให้สรุปยอดรวมของเมื่อวาน และรายการสำคัญแบบอ่านง่าย
- ส่งเฉพาะให้ผู้ใช้ที่เลือกเปิดรับเท่านั้น
- ใช้ Resend สำหรับส่งอีเมล
- ใช้ Supabase สำหรับงานที่รันตามเวลา
- ทำให้ข้อความในอีเมลอ่านง่าย และไม่ยาวเกินไป
ไม่เปลี่ยนฟังก์ชันหรือ design ที่มีอยู่แล้ว
prompt นี้เชื่อม 4 เรื่องเข้าด้วยกัน
- trigger: ถึงเวลา 08:00
- เงื่อนไขเพิ่ม: เฉพาะคนที่ opt-in
- action: ส่งอีเมล summary
- ข้อมูลที่ใช้: รายจ่ายของเมื่อวาน
นี่คือจุดที่แอปเริ่มทำงานเองโดยไม่ต้องรอคลิก
ทดสอบ — ไม่ต้องรอถึงพรุ่งนี้เช้าจริง
บทนี้ถ้ารอ 8 โมงจริงทุกครั้งจะช้าเกินไป
วิธีที่ดีกว่าคือทดสอบแบบ manual ก่อน ให้ AI ช่วยเพิ่มทางเรียกใช้งานงาน summary แบบกดทดสอบได้ หรือใช้ dashboard ของ Supabase เพื่อรันงานนั้นหนึ่งครั้ง
สิ่งที่คุณต้องการตรวจมี 3 อย่าง
- ถ้าผู้ใช้เปิดสวิตช์ไว้ แล้วรันงาน summary -> มีอีเมลเข้า
- ถ้าผู้ใช้ปิดสวิตช์ไว้ -> ไม่ควรมีอีเมลเข้า
- เนื้อหาใน summary อ่านแล้วรู้เรื่องจริง ไม่ยาวและไม่งง
ถ้าทั้งสามข้อผ่าน แปลว่า logic ของระบบนี้เริ่มถูกทางแล้ว แม้คุณยังไม่ได้รอให้ถึงเวลา 8 โมงจริง
ถ้าคนที่เปิดรับได้อีเมล summary และคนที่ปิดรับไม่ได้รับ แปลว่าแอปของคุณไม่ได้แค่ส่งอีเมลได้ แต่เริ่มรู้จักเวลาและรู้จักเลือกคนที่จะส่งแล้ว
ถ้ายังส่งออกไปทุกคน หรือปิดแล้วแต่ยังมาอยู่
บทนี้มีสองจุดที่พลาดได้ง่าย
จุดแรกคือ ระบบไม่เช็กว่าใคร opt-in
จุดที่สองคือ summary รันได้ แต่กรองผู้ใช้ไม่ถูก
ถ้าเจอแบบนี้ ลองบอก AI แบบนี้
ตอนนี้ระบบส่ง daily summary ออกไปโดยไม่เช็กว่าใครเปิดรับ
ช่วยทำให้ส่งเฉพาะผู้ใช้ที่เปิดรับอีเมลสรุปรายวันไว้เท่านั้น
ไม่เปลี่ยนฟังก์ชันหรือ design ที่มีอยู่แล้ว
ถ้ายังไม่มีทางทดสอบแบบ manual ลองเพิ่มว่า
เพิ่มวิธีทดสอบระบบ daily summary แบบ manual เพื่อให้ตรวจได้ทันทีโดยไม่ต้องรอถึงเวลา 08:00
ไม่เปลี่ยนฟังก์ชันหรือ design ที่มีอยู่แล้ว
ของที่ทำงานตามเวลา ถ้าทดสอบได้เฉพาะตอนเวลาจริง จะช้ามาก ควรมีวิธีลองรันหนึ่งรอบแบบตั้งใจทดสอบได้
สำหรับแอปของคุณเอง
time trigger ใช้ได้กับหลายแอปมาก เช่น
- แอปสูตรอาหาร: ทุกวันศุกร์ -> ส่งสูตรใหม่ประจำสัปดาห์
- แอปจดโน้ต: ทุกเช้า -> ส่งรายการที่ควรทบทวนวันนี้
- แอปคอร์ส: ทุกวันจันทร์ -> ส่งสรุปความคืบหน้าการเรียน
- แอป subscription: ก่อนสมาชิกหมดอายุ 3 วัน -> ส่งอีเมลเตือน
คำถามสำคัญคือ
ถ้าส่งสิ่งนี้เป็นประจำ ผู้ใช้จะรู้สึกว่าได้ประโยชน์จริงไหม หรือแค่ถูกเตือนเพราะระบบทำได้
ถ้ายังไม่แน่ใจ ให้เริ่มจากความถี่ที่น้อยกว่า เช่น รายสัปดาห์ก่อนรายวัน
วันนี้คุณไม่ได้แค่เพิ่มอีเมลอีกประเภท
สิ่งที่คุณเพิ่มจริงๆ คือ “จังหวะเวลา” ให้กับแอป
ก่อนหน้านี้ แอปจะขยับเมื่อมี event เกิดขึ้นเป็นหลัก แต่ตอนนี้มันเริ่มมีงานประจำของตัวเองแล้ว มันรู้ว่าเมื่อถึงเวลา ควรลุกขึ้นมาทำอะไรบางอย่างให้ผู้ใช้
นี่คืออีกขั้นของความรู้สึกว่าแอปมีชีวิตจริง
พอ daily summary ทำงานได้ แอปของคุณก็เริ่มขยับจากของที่รอการกด ไปสู่ของที่มีวินัยและมีจังหวะของตัวเอง
คุณเพิ่งทำอะไรสำเร็จไปแล้วบ้าง
- คุณเข้าใจแล้วว่า scheduled task คือการให้งานบางอย่างรันเมื่อถึงเวลา
- คุณเพิ่ม opt-in / opt-out ก่อนส่ง notification แบบซ้ำได้
- คุณทำให้แอปส่งสรุปรายจ่ายประจำวันเฉพาะกับคนที่เลือกเปิดรับได้แล้ว
- แอปของคุณเริ่มมี routine ของตัวเอง โดยไม่ต้องรอให้ผู้ใช้กดอะไรทุกครั้ง
บทต่อไป เราจะเปลี่ยนจากการแจ้งผ่านอีเมล ไปสู่การแจ้งเตือนภายในแอป เพื่อให้เวลาผู้ใช้กำลังใช้งานอยู่ แอปสามารถบอกสิ่งสำคัญได้ทันทีบนหน้าจอนั้นเลย