LINE OA ฟรีส่งได้ 300 ข้อความ/เดือน: ข้อความแบบไหนนับโควตา และทำไมบอทแจ้งเตือนถึงเงียบ
วันหนึ่งระบบดักงานที่ผมทำไว้ ซึ่งคอยส่ง LINE มาบอกว่ามีงานใหม่เข้า เงียบไปเฉยๆ ทั้งวัน เปิดหน้าตั้งค่าดู token ยังถูก บอทยังออนไลน์ หน้าสถานะยังเขียวทุกอย่าง แต่ไม่มีข้อความเข้าสักข้อความ สาเหตุคือ โควตาข้อความของ LINE OA แพ็กเกจฟรีเต็มแล้ว
เรื่องนี้เจอบ่อยมากกับคนที่เริ่มทำบอท LINE เพราะในคู่มือส่วนใหญ่ทดสอบแค่ไม่กี่ข้อความ ไม่มีใครส่งจนเต็มโควตา บทความนี้จะแยกให้ชัดว่าข้อความแบบไหนนับโควตา แบบไหนไม่นับ และควรออกแบบระบบยังไงไม่ให้เงียบแบบนี้
- โควตาของแพ็กเกจฟรีเท่าไหร่
- reply กับ push ต่างกันยังไง
- อาการเมื่อโควตาเต็ม
- วิธีออกแบบไม่ให้เงียบ
1. แพ็กเกจฟรีของ LINE OA ส่งได้เท่าไหร่
LINE for Business ประเทศไทยประกาศปรับแพ็กเกจตั้งแต่ 1 ส.ค. 2024 แพ็กเกจฟรีส่งข้อความได้ 300 ข้อความต่อเดือน (เดิม 500) ส่วนแพ็กเกจ Pro ได้ 35,000 ข้อความต่อเดือน และข้อความส่วนเกินคิดข้อความละ 0.06 บาท
สิ่งที่ต้องเข้าใจคือ "300 ข้อความ" ไม่ได้หมายถึงข้อความทุกแบบที่บอทส่ง
2. Reply message กับ Push message ต่างกันยังไง
ใน Messaging API การส่งข้อความหลักๆ มีสองแบบ
| แบบ | ใช้เมื่อ | นับโควตาไหม |
|---|---|---|
| Reply | ตอบกลับทันทีหลังผู้ใช้ส่งข้อความมา โดยใช้ replyToken ที่มากับ webhook | ไม่นับ (ฟรี) |
| Push / Multicast / Broadcast | บอทเป็นฝ่ายส่งไปหาเอง เช่น แจ้งเตือนคิว ส่งโปรโมชั่น แจ้งเจ้าของร้านว่ามีออเดอร์ | นับ |
แปลว่าบอทที่ตอบแชทลูกค้าอย่างเดียวแทบไม่กินโควตาเลย แต่ทันทีที่มีฟีเจอร์แบบ "มีจองใหม่เด้งเข้า LINE เจ้าของร้าน" หรือ "เตือนลูกค้าก่อนถึงคิว 1 วัน" ทุกข้อความนั้นคือ push ที่นับโควตา
กับดักของ replyToken
replyToken ใช้ได้ครั้งเดียวและมีอายุสั้น ถ้าระบบเรียก AI แล้วรอคำตอบนาน
หรือคิวงานค้างจนตอบช้า token อาจหมดอายุ หลายคนแก้ด้วยการเปลี่ยนไปใช้ push แทน
ซึ่งทำงานได้ แต่ทุกคำตอบจะกลายเป็นข้อความที่นับโควตาโดยไม่รู้ตัว
ถ้าจำเป็นต้องใช้ AI ที่ตอบช้า ให้ตั้งเวลาตัด (timeout) ไว้ และเตรียมคำตอบสำรองที่ตอบผ่าน reply ได้ทันที
3. อาการเมื่อโควตาเต็ม
- คำสั่ง push ได้ error จาก API กลับมา แต่ถ้าโค้ดไม่ได้เช็คผลลัพธ์ จะไม่มีอะไรฟ้องเลย
- บอทยังตอบแชทได้ปกติ (เพราะ reply ไม่นับ) ทำให้คิดว่าระบบปกติ
- หน้าตั้งค่าที่เช็คแค่ "ตั้ง token ไว้หรือยัง" ยังขึ้นเขียว เพราะ token ไม่ได้ผิด
อาการผสมแบบนี้ทำให้หาสาเหตุยากมาก เพราะทุกอย่างดูเหมือนทำงานอยู่
4. ออกแบบยังไงไม่ให้ระบบแจ้งเตือนเงียบ
เช็คผลการส่งทุกครั้ง
อย่าเรียก API แล้วทิ้ง ให้เช็ค HTTP status ที่ได้กลับมา ถ้าไม่ใช่ 200 ให้บันทึก log พร้อมข้อความ error และนับไว้ว่าวันนี้ส่งไม่สำเร็จกี่ครั้ง
r = requests.post("https://api.line.me/v2/bot/message/push",
headers={"Authorization": f"Bearer {token}"},
json={"to": user_id, "messages": [{"type": "text", "text": msg}]},
timeout=10)
if r.status_code != 200:
log_error("line_push", r.status_code, r.text[:300]) # อย่าเงียบ
return False
return True
มีช่องแจ้งเตือนสำรอง
โควตาผูกกับ LINE OA แต่ละบัญชีแยกกัน ถ้ามี OA ตัวที่สองไว้ใช้ภายใน ให้ระบบลองช่องหลักก่อน ถ้าส่งไม่สำเร็จค่อยลองช่องสำรอง เพดานรวมจะเพิ่มเป็นสองเท่าทันที หรือจะใช้ช่องทางอื่นเป็นสำรองก็ได้ เช่น อีเมล หรือ Telegram
รวมแจ้งเตือนเป็นข้อความเดียว
ถ้ามีงานเข้า 5 งานในรอบเดียว ส่งสรุป 1 ข้อความดีกว่าส่ง 5 ข้อความ LINE นับโควตาตามจำนวนผู้รับต่อการส่งหนึ่งครั้ง การ push หนึ่งครั้งใส่ข้อความ (message object) ได้สูงสุด 5 ก้อน และยังนับเป็นการส่งครั้งเดียว ถ้าต้องส่งหลายเรื่องพร้อมกัน รวมไว้ในการเรียกครั้งเดียวจะประหยัดกว่า (วิธีนับอาจเปลี่ยน ให้ตรวจหน้า pricing ของ LINE Developers อีกครั้ง)
ทำหน้าสถานะที่ทดสอบจริง
หน้าตั้งค่าที่ดีไม่ควรเช็คแค่ว่า "มีค่าอยู่ในช่องไหม" แต่ควรมีปุ่มส่งข้อความทดสอบจริง และแสดงผลลัพธ์ครั้งล่าสุดที่ส่งสำเร็จ ถ้าส่งสำเร็จครั้งล่าสุดเมื่อ 3 วันก่อน แปลว่ามีอะไรผิดปกติแล้ว
สรุป
- แพ็กเกจฟรีมีโควตา 300 ข้อความ/เดือน แต่นับเฉพาะข้อความที่บอทส่งเอง (push/multicast/broadcast)
- การตอบกลับด้วย replyToken ไม่นับโควตา ระวังอย่าเปลี่ยนไปใช้ push โดยไม่จำเป็น
- เช็คผลการส่งทุกครั้ง มีช่องสำรอง และรวมแจ้งเตือนเป็นก้อน
ถ้าใส่ ID ผิดตัวก็ส่งไม่ออกเหมือนกัน และอาการคล้ายกันมาก อ่านต่อได้ที่ LINE User ID กับ Bot Basic ID ต่างกันยังไง