LINE Notify ปิดตัวแล้ว — ส่งแจ้งเตือนถึงตัวเองด้วย Python ฟรีไม่จำกัด¶
เกิดอะไรขึ้นกับ LINE Notify¶
LINE Notify ปิดตัวลงแล้วตั้งแต่ 31 มีนาคม 2025 — บริการที่นักพัฒนาไทยใช้
ส่งแจ้งเตือนหาตัวเองบน LINE ฟรี ๆ ผ่าน https://notify-api.line.me/api/notify
ด้วย pattern แบบนี้:
import requests
requests.post(
"https://notify-api.line.me/api/notify",
headers={"Authorization": "Bearer <access token>"},
data={"message": "เซิร์ฟเวอร์เริ่มต้นสำเร็จ"},
)
ตอนนี้ endpoint ข้างบนตายแล้ว สคริปต์แจ้งเตือนทั้งหลายที่เคยรันได้ (cron แจ้งเตือน backup, สคริปต์เช็คราคาหุ้น/คริปโต, แจ้งเตือนเซิร์ฟเวอร์) เงียบหมดโดยไม่มี error ให้เห็นชัดเจน บทความนี้แนะนำทางเลือกที่ส่งได้ ฟรี ไม่จำกัดจำนวน ด้วย Python เหมือนเดิม — ผ่าน บัญชี LINE ส่วนตัวของคุณเอง ด้วย OkLine
ทางเลือกที่ 1: Messaging API (ทางการ)¶
ทางการแนะนำให้ย้ายไปใช้ Messaging API แต่สำหรับ use case "แจ้งเตือนตัวเอง" มันหนักเกินจำเป็น:
- ต้องสมัคร developer ที่ developers.line.biz สร้าง provider + Messaging API channel
- ต้องแอดบอทเป็นเพื่อนก่อน บอทจึงจะส่งถึงคุณได้ — ข้อความมาในนามบอท ไม่ใช่ในนามคุณเอง
- แพ็กเกจฟรีส่ง push ได้ราว ๆ 200 ข้อความต่อเดือน — ถ้าแจ้งเตือนถี่หน่อย (เช่น ทุก 5 นาที) โควตาหมดกลางเดือน
- ถ้าจะรับข้อความตอบมาด้วย ต้องเปิด webhook สาธารณะ (โดเมน + HTTPS หรือ ngrok)
ทางเลือกที่ 2: บัญชีส่วนตัวของคุณเอง + OkLine¶
OkLine เป็น unofficial Python SDK ที่ทำงานกับ บัญชี LINE ส่วนตัวของคุณเอง โดยตรง — ล็อกอินด้วย QR ใน terminal แล้วส่งข้อความในนามของคุณเองได้เลย:
| LINE Notify (ปิดตัวแล้ว) | Messaging API (ทางการ) | OkLine (unofficial) | |
|---|---|---|---|
| สถานะ | ปิดตัว 31 มี.ค. 2025 | ใช้ได้ | ใช้ได้ (v2.9.2, live test ก.ย. 2026) |
| ค่าใช้จ่าย | ฟรี | ฟรี ~200 push/เดือน | ฟรี ไม่จำกัด |
| ต้องสมัคร developer | ไม่ต้อง | ต้อง | ไม่ต้อง |
| ต้องแอดเพื่อน/ติดตามบอทก่อน | ต้อง | ต้อง | ไม่ต้อง — ส่งในนามตัวคุณเอง |
| ต้องเปิด webhook | ไม่ต้อง | ต้อง (ถ้าจะรับข้อความ) | ไม่ต้อง |
| รูปแบบข้อความ | text + sticker + รูป | ครบทุกแบบ (flex, ฯลฯ) | text, sticker, รูป, วิดีโอ, ไฟล์ |
ข้อแลกเปลี่ยนที่ต้องรู้: OkLine เป็น unofficial SDK — การทำงานอัตโนมัติกับบัญชี ส่วนตัวขัดกับข้อกำหนดการใช้บริการของ LINE มีความเสี่ยงที่บัญชีจะถูกจำกัดหรือ ระงับ (ดูหน้าหลัก) สำหรับ use case แจ้งเตือนตัวเองปริมาณ ปกติ ความเสี่ยงจะอยู่ระดับต่ำ แต่ไม่มีใครการันตีได้ — ตัดสินใจด้วยความเข้าใจ ความเสี่ยงนะครับ
เตรียมความพร้อม (ครั้งเดียว)¶
pip install okline
node --version # ต้องมี Node.js 18+ ใน PATH (ใช้เซ็น X-Hmac)
okline login # สแกน QR ด้วยแอป LINE → ยืนยัน PIN → ได้ tokens.json
รายละเอียดขั้นตอนล็อกอิน ดูที่ สอนล็อกอินด้วย QR — แค่ทำครั้ง
เดียว ครั้งต่อไปโหลด tokens.json ได้เลย และ token จะถูก refresh อัตโนมัติ
(เขียนกลับไฟล์ให้ด้วย) จึงตั้ง cron ทิ้งไว้ได้ยาว ๆ
สคริปต์ notify.py (พร้อมใช้)¶
เซฟเป็น notify.py:
#!/usr/bin/env python3
"""notify.py — ส่งแจ้งเตือนถึงตัวเองบน LINE ฟรี ไม่จำกัด (ทดแทน LINE Notify)
การใช้งาน:
python notify.py "backup เสร็จแล้ว"
python notify.py --to mom "ฝากซื้อกาแฟด้วย"
python notify.py --tokens-file /path/tokens.json "เซิร์ฟเวอร์รีสตาร์ท"
"""
from __future__ import annotations
import argparse
from okline import OkLine
def main() -> None:
p = argparse.ArgumentParser(description="ส่งแจ้งเตือน LINE ถึงตัวเอง (ทดแทน LINE Notify)")
p.add_argument("message", help="ข้อความที่จะส่ง")
p.add_argument(
"--tokens-file",
default="tokens.json",
help="ไฟล์เซสชัน (ค่าเริ่มต้น tokens.json — สร้างด้วย `okline login`)",
)
p.add_argument(
"--to",
default=None,
help="ผู้รับ: mid ของเพื่อน/กลุ่ม (u... / c...) — เว้นว่าง = ส่งถึงตัวเอง",
)
args = p.parse_args()
# โหลดเซสชัน (token + คีย์ E2EE) — ถ้า token หมดอายุจะถูก refresh
# และเขียนกลับไฟล์ให้อัตโนมัติ
api = OkLine.from_tokens_file(args.tokens_file)
try:
# ถ้าไม่ระบุผู้รับ ให้ส่งถึงตัวเอง — ข้อความจะไปอยู่ในแชทส่วนตัว
# ของตัวคุณเอง (ห้องเดียวกับที่ใช้บันทึกโน้ตถึงตัวเองในแอป)
to = args.to or api.get_profile()["mid"]
res = api.send_text(to, args.message)
msg_id = res.get("id") if isinstance(res, dict) else res
print(f"ส่งแล้ว (message id: {msg_id})")
finally:
api.close() # ปิด Node bridge ที่ใช้เซ็น X-Hmac
if __name__ == "__main__":
main()
ทดลอง:
ไม่กี่วินาทีข้อความจะเด้งเข้ามือถือของคุณเอง — ในนามของคุณเอง ไม่ใช่บอท
ถ้าแชทเป้าหมายเปิด Letter Sealing (E2EE) แล้ว
send_textไม่ผ่าน ให้เปลี่ยน เป็นapi.send_encrypted_text(to, args.message)(รองรับแชท 1:1) — ไฟล์เซสชัน จากokline loginพกคีย์ E2EE มาให้แล้ว
ตัวอย่างการใช้งานจริง¶
แจ้งเตือนจาก cron (สคริปต์สำรองข้อมูลทุกวัน 02:00 แล้วส่งผลลัพธ์):
0 2 * * * cd /home/me/tools && /usr/bin/python3 backup.py && \
/usr/bin/python3 notify.py "backup สำเร็จ $(date +\%d/\%m/\%Y)" || \
/usr/bin/python3 notify.py "backup ล้มเหลว!"
แจ้งเตือนในสคริปต์ Python — ทดแทน requests.post เดิมแค่สองบรรทัด:
from okline import OkLine
api = OkLine.from_tokens_file("tokens.json")
api.send_text(api.get_profile()["mid"], "เซิร์ฟเวอร์เริ่มต้นสำเร็จ")
เดิม (LINE Notify) vs ใหม่ (OkLine):
# เดิม — ใช้การไม่ได้แล้วตั้งแต่ 31 มี.ค. 2025
import requests
requests.post(
"https://notify-api.line.me/api/notify",
headers={"Authorization": "Bearer <token>"},
data={"message": "เซิร์ฟเวอร์เริ่มต้นสำเร็จ"},
)
# ใหม่ — OkLine กับบัญชีส่วนตัวของคุณเอง
from okline import OkLine
api = OkLine.from_tokens_file("tokens.json")
api.send_text(api.get_profile()["mid"], "เซิร์ฟเวอร์เริ่มต้นสำเร็จ")
แจ้งเตือนด่วนจาก shell — ถ้าล็อกอินไว้แล้ว ไม่ต้องเขียน Python เลยก็ได้:
ข้อควรระวัง¶
- ToS — บัญชีส่วนตัวทำงานอัตโนมัติขัดข้อกำหนด LINE จริง ใช้กับบัญชีตัวเอง อย่าส่งสแปม และตั้ง rate ให้สมเหตุสมผล (แจ้งเตือนสิบกว่าครั้งต่อวันไม่มีปัญหา ระดับพันครั้งต่อชั่วโมงคนละเรื่อง)
- เก็บ
tokens.jsonให้ดี — ไฟล์นี้เท่ากับรหัสผ่านบัญชีคุณ อย่า commit ลง repo - หลายเครื่อง / หลายสคริปต์ — แชร์ไฟล์เซสชันเดียวกันได้ แต่ให้ระวังการ refresh พร้อมกันจน token เก่าใช้ไม่ได้ แนะนำให้แยกไฟล์ต่อเครื่อง
- ถ้าโดน kickout (gateway code 10201) หรือเปลี่ยนรหัสผ่าน/อุปกรณ์ — แค่
okline loginใหม่อีกครั้ง
สรุป¶
LINE Notify จากไปแล้ว แต่ use case "แจ้งเตือนตัวเองบน LINE ด้วย Python ฟรี ไม่จำกัด" ยังอยู่ — Messaging API ก็ทำได้แต่ต้องแลกด้วยการสมัคร developer, แอดบอท, และโควตา ~200 push/เดือน ส่วน OkLine ใช้บัญชีส่วนตัวของคุณเอง ล็อกอินครั้งเดียวด้วย QR แล้วส่งได้ไม่จำกัด ทั้งถึงตัวเอง เพื่อน และกลุ่ม (แลกด้วยความเสี่ยง ToS ที่ต้องยอมรับ)
ขั้นต่อไป: หน้าหลัก (ไทย) · สอนล็อกอินด้วย QR (ไทย) · Cookbook ตัวอย่าง 22 สคริปต์ (EN)