วิธีส่งข้อความบริการ LINE MINI App ด้วยโทเค็นการแจ้งเตือน
หากต้องการส่งข้อความบริการ LINE MINI App ให้รับ LIFF access token ชุดใหม่หลังผู้ใช้ทำรายการ แล้วส่งไปแลกบนเซิร์ฟเวอร์เป็น service notification token ที่ผูกกับผู้ใช้รายนั้น จากนั้นเรียก endpoint ทางการสำหรับส่งข้อความด้วยเทมเพลตที่ได้รับอนุมัติ ทุกครั้งที่ได้รับการตอบกลับต้องบันทึก notificationToken ตัวใหม่ เพราะค่าโทเค็นจะเปลี่ยนหลังส่งสำเร็จแต่ละครั้ง และ remainingCount เป็นตัวกำหนดว่ายังส่งข้อความติดตามสำหรับรายการนั้นได้อีกกี่ครั้ง
ประเด็นสำคัญ
- การส่งข้อความบริการใน production ต้องใช้ LINE MINI App ที่ได้รับการรับรองและเทมเพลตที่ผ่านการอนุมัติ แอปที่ยังไม่ได้รับการรับรองทดสอบได้เฉพาะผ่านช่อง Developing ภายใน โดยใช้บัญชี Admin หรือ Tester เท่านั้น
- LIFF access token หนึ่งชุดใช้ขอ service notification token ได้หนึ่งชุดผ่าน
POST /message/v3/notifier/tokenโทเค็นที่ได้จะผูกกับผู้ใช้หนึ่งรายและเซสชันการดำเนินการหนึ่งเซสชัน - ส่งข้อความผ่าน
POST /message/v3/notifier/send?target=serviceแล้วแทนที่โทเค็นที่จัดเก็บไว้ด้วยnotificationTokenตัวใหม่จากการตอบกลับ - โทเค็นที่ออกใหม่หมดอายุในหนึ่งปีและโดยทั่วไปเริ่มต้นด้วยสิทธิ์ส่งห้าครั้ง กรณีการใช้งานที่ผ่านการพิจารณาอาจได้จำนวนต่างออกไป จึงควรใช้
remainingCountเป็นข้อมูลจริงขณะระบบทำงาน - ขั้นตอนทางการนี้ใช้กับข้อความยืนยัน ผลลัพธ์ และการแจ้งเตือนที่สัมพันธ์กับการดำเนินการใน MINI App ไม่ใช่กล่องข้อความบริการลูกค้าที่สนทนาได้อย่างอิสระ และไม่ใช่ API สำหรับส่งข้อความส่งเสริมการขาย
สิ่งที่ต้องพร้อมก่อนออก notification token
บทความนี้เริ่มจากจุดที่ตรวจสอบสิทธิ์การใช้งานแล้ว หากยังไม่แน่ใจว่าแอปของคุณส่งข้อความบริการใน production ได้หรือไม่ โปรดอ่าน เช็กลิสต์ LINE MINI App ที่ได้รับและยังไม่ได้รับการรับรอง ก่อน
ก่อนพัฒนาขั้นตอนจัดการโทเค็น ให้ยืนยันเงื่อนไขทั้งสี่ข้อดังนี้:
| เงื่อนไข | สถานะที่ต้องมี | เหตุผลที่สำคัญ |
|---|---|---|
| ช่อง LINE MINI App | ได้รับการรับรองสำหรับ production | แอปที่ยังไม่ได้รับการรับรองส่งข้อความบริการจากช่อง Published ไม่ได้ |
| เทมเพลตข้อความบริการ | เพิ่มและได้รับอนุมัติแล้ว โดยมีสถานะ PUBLISHING | API รับเฉพาะชื่อเทมเพลตที่ผ่านการตรวจสอบและตัวแปรที่กำหนดไว้ในเทมเพลตนั้น |
| การดำเนินการของผู้ใช้ | การจอง การซื้อ การ check-in การจัดส่ง หรือการดำเนินการอื่นที่ได้รับอนุมัติ | การแจ้งเตือนทุกข้อความต้องยืนยันหรือตอบกลับการดำเนินการนั้น |
| ข้อมูลรับรองของเซิร์ฟเวอร์ | Stateless หรือ short-lived channel access token | ช่อง LINE MINI App ไม่รองรับข้อมูลรับรองแบบ long-lived หรือ Channel Access Token v2.1 |
LINE แนะนำให้ใช้ stateless channel access token เพราะแอปไม่ต้องจัดการวันหมดอายุด้วยตนเอง เก็บ channel access token ไว้บนเซิร์ฟเวอร์เท่านั้น และห้ามส่งกลับไปยัง client ของ MINI App
ความแตกต่างของโทเค็น LINE ทั้งสามประเภท
การออกแบบระบบจะชัดเจนขึ้นเมื่อข้อมูลรับรองแต่ละประเภทมีหน้าที่เพียงอย่างเดียว:
| ข้อมูลรับรอง | ได้มาจากที่ใด | ใช้ยืนยันอะไร | กฎสำคัญของวงจรชีวิต |
|---|---|---|---|
| LIFF access token | liff.getAccessToken() ใน MINI App | ผู้ใช้ LINE ปัจจุบันให้สิทธิ์เข้าถึงแล้ว | ใช้งานได้สูงสุด 12 ชั่วโมง แต่อาจถูกเพิกถอนเมื่อผู้ใช้ปิดแอป |
| Channel access token | ข้อมูลรับรอง LINE ฝั่งเซิร์ฟเวอร์ | ช่อง LINE MINI App ของคุณมีสิทธิ์เรียก API | ใช้ stateless token เมื่อทำได้ และอย่าเปิดเผยให้ browser |
| Service notification token | POST /message/v3/notifier/token | ผู้ใช้หนึ่งรายมีสิทธิ์รับการแจ้งเตือนที่ผูกกับการดำเนินการหนึ่งรายการ | ผูกกับผู้ใช้ ใช้งานได้สูงสุดหนึ่งปี จำกัดจำนวนครั้ง และได้รับการต่ออายุหลังส่งแต่ละครั้ง |
LIFF access token หนึ่งชุดออก service notification token ได้เพียงหนึ่งชุด ควรแลกโทเค็นทันทีหลังผู้ใช้ทำรายการ เพราะ LIFF token ที่ดูเหมือนยังไม่หมดอายุอาจใช้ไม่ได้เมื่อผู้ใช้ปิด MINI App หรือให้สิทธิ์เพิ่มเติม
วิธีส่งข้อความบริการ LINE MINI App ด้วย notification token
1. รับ LIFF access token หลังผู้ใช้ทำรายการ
เรียก liff.getAccessToken() ใน MINI App หลังการจอง การซื้อ หรือการดำเนินการอื่นที่ได้รับอนุมัติสำเร็จ ส่งค่านั้นไปยัง backend ของคุณผ่าน HTTPS และเชื่อมโยงคำขอฝั่ง backend กับระเบียนรายการภายใน แต่ห้ามบันทึกทั้ง LIFF token และ service notification token ที่จะได้รับภายหลังลงใน application log
Browser ไม่ควรเรียก Service Message API โดยตรง เพราะทั้งการออกโทเค็นและการส่งข้อความต้องใช้ channel access token ด้วย
2. แลกเป็น service notification token
เรียก endpoint ทางการสำหรับออกโทเค็นจากเซิร์ฟเวอร์:
curl -X POST https://api.line.me/message/v3/notifier/token \
-H "Authorization: Bearer ${LINE_CHANNEL_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"liffAccessToken\":\"${LIFF_ACCESS_TOKEN}\"}"
การตอบกลับที่สำเร็จมีสี่ฟิลด์:
{
"notificationToken": "34c11a03-b726-49e3-8ce0-949387a9f531",
"expiresIn": 31536000,
"remainingCount": 5,
"sessionId": "xD06R2407210008"
}
จัดเก็บโทเค็นแบบเข้ารหัส พร้อม expiresIn, remainingCount, sessionId และรหัสอ้างอิงผู้ใช้กับรายการในระบบของคุณ อย่าใช้ sessionId เป็นตัวระบุผู้ใช้ เพราะ service notification token มีข้อมูลผูกกับผู้รับอยู่แล้วและนำไปใช้กับผู้ใช้รายอื่นไม่ได้
3. ส่งเทมเพลตที่ได้รับอนุมัติ
ใช้โทเค็นกับ endpoint ทางการสำหรับส่งข้อความ โดย query parameter target=service เป็นค่าบังคับ:
curl -X POST "https://api.line.me/message/v3/notifier/send?target=service" \
-H "Authorization: Bearer ${LINE_CHANNEL_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"templateName": "thankyou_msg_en",
"params": {
"date": "2026-07-21",
"username": "Brown & Cony"
},
"notificationToken": "34c11a03-b726-49e3-8ce0-949387a9f531"
}'
ใช้ templateName และ key ของตัวแปรให้ตรงกับที่แสดงใน LINE Developers Console ทุกประการ รูปแบบชื่อเทมเพลตคือ {template name}_{BCP 47 language tag} และยาวได้ไม่เกิน 30 ตัวอักษร suffix ภาษาที่รองรับสำหรับข้อความบริการ ได้แก่ ja, en, zh-TW, th, id และ ko หากเทมเพลตที่เลือกไม่มีตัวแปร ฟิลด์ params ก็ยังจำเป็นและต้องเป็น {}
4. บันทึกโทเค็นที่ต่ออายุแล้วหลังส่งทุกครั้ง
เมื่อส่งสำเร็จ LINE จะตอบกลับด้วย notificationToken ตัวใหม่ พร้อมค่า expiresIn และ remainingCount ที่อัปเดตแล้ว รวมถึง sessionId เดิมซึ่งอ้างถึงการดำเนินการเดียวกัน อัปเดตระเบียนแบบ atomic ก่อนตั้งเวลาการแจ้งเตือนครั้งถัดไป การนำโทเค็นตัวเดิมกลับมาใช้อาจทำให้ข้อความติดตามที่ถูกต้องส่งไม่สำเร็จ
หากทั้ง expiresIn และ remainingCount เป็น 0 แสดงว่า LINE รับข้อความปัจจุบันแล้ว แต่ไม่สามารถต่ออายุโทเค็นได้ ให้ทำเครื่องหมายเซสชันการดำเนินการว่าเสร็จสมบูรณ์และอย่าตั้งเวลาส่งข้อความเพิ่มจากการตอบกลับนี้
เช็กลิสต์การจัดเก็บและการลองส่งใหม่
จัดการ service notification token ในฐานะข้อมูลรับรองที่หมุนเวียน ไม่ใช่ที่อยู่ถาวรของผู้ใช้:
- สร้างระเบียนการดำเนินการหนึ่งระเบียนเมื่อผู้ใช้ทำรายการที่เข้าเงื่อนไขใน MINI App สำเร็จ
- แลก LIFF token เพียงครั้งเดียว แล้วบันทึก
sessionId, โทเค็นที่เข้ารหัส, วันหมดอายุ และจำนวนครั้งที่เหลือ - ล็อกระเบียนการดำเนินการหรือใช้ versioning ขณะส่ง เพื่อป้องกันไม่ให้ worker สองตัวใช้โทเค็นเดียวกันพร้อมกัน
- เมื่อได้รับ HTTP
200ให้ commit โทเค็นและตัวนับชุดใหม่ก่อนนำการแจ้งเตือนครั้งถัดไปเข้าคิว - เมื่อได้รับ
400ให้ตรวจสอบ body, สถานะผู้รับ และตัวแปรของเทมเพลตก่อนลองใหม่ - เมื่อได้รับ
401ให้ต่ออายุข้อมูลรับรองของ channel ฝั่งเซิร์ฟเวอร์หรือเริ่มขั้นตอนการดำเนินการของผู้ใช้ใหม่ อย่าส่ง LIFF token หรือ service notification token ที่ไม่ถูกต้องซ้ำไปเรื่อย ๆ - เมื่อได้รับ
403ให้ตรวจสอบว่า channel ได้รับอนุญาต และมีเทมเพลตชื่อนั้นอยู่จริงในสถานะที่ใช้งานได้
อย่ากำหนดนโยบายลองใหม่เป็นตัวเลขขึ้นเองสำหรับ LINE เอกสารทางการระบุประเภทข้อผิดพลาด แต่ไม่ได้เผยแพร่ request rate แบบตายตัวสำหรับ API นี้ ให้ลองใหม่แบบมีขอบเขตเฉพาะความล้มเหลวชั่วคราว และอย่าเปลี่ยนรายการที่ล้มเหลวให้กลายเป็นการแจ้งเตือนที่ไม่เกี่ยวข้อง
UnifyPort ทำหน้าที่ส่วนใด
ใช้ Service Message API ทางการของ LINE สำหรับการแจ้งเตือนธุรกรรมจาก MINI App โดย UnifyPort ไม่ได้ออกหรือต่ออายุ service notification token ของ LINE ไม่ได้ส่งเทมเพลตเข้ารับการพิจารณา ไม่ได้ให้สถานะ verified และไม่ได้เปลี่ยนข้อความทั่วไปให้เป็นข้อความบริการ MINI App
UnifyPort เหมาะกับอีกเส้นทางหนึ่ง คือการสนทนาบริการลูกค้าแบบอิสระ หากลูกค้าเปิดแชต LINE ตามปกติก่อนหรือหลังการแจ้งเตือนธุรกรรม บัญชี LINE ที่เชื่อมต่ออยู่สามารถส่งต่อข้อความขาเข้าเป็น event มาตรฐาน message.received จากนั้นระบบบริการลูกค้าของคุณจึงกำหนดเส้นทางร่วมกับ event จาก WhatsApp, Telegram, Zalo, TikTok หรือ X และใช้ POST /v1/messages เมื่อ provider capability matrix ยืนยันว่ารองรับ สำหรับทีมในไทยซึ่งใช้ LINE เป็นช่องทางหลักของลูกค้า จุดสำคัญคือต้องแยกแชตปกตินี้ออกจากข้อความบริการของ LINE MINI App อย่างชัดเจน
การแยกส่วนดังกล่าวเป็นสถาปัตยกรรมเดียวกับที่อธิบายใน คู่มือการชำระเงิน LINE MINI App และ support webhook: API ทางการของ MINI App ดูแลธุรกรรม ส่วน customer-message pipeline ดูแลการรับบทสนทนาทั่วไป สำหรับเส้นทางหลังให้เริ่มจาก คู่มือการอนุญาต LINE และ เอกสาร event message.received โดยตรง
ข้อจำกัดและสิ่งที่ต้องแลก
เส้นทางข้อความบริการทางการเหมาะเมื่อ LINE MINI App ที่ได้รับการรับรองต้องยืนยันการจอง แจ้งผลลัพธ์ หรือเตือนผู้ใช้เกี่ยวกับการดำเนินการที่ทำเสร็จแล้ว การแจ้งเตือนจึงผูกอยู่กับผู้ใช้ LINE เทมเพลตที่ผ่านการตรวจสอบ และกรณีการใช้งานที่ได้รับอนุมัติ
ขอบเขตของฟีเจอร์นี้ถูกจำกัดไว้อย่างชัดเจน โดยทั่วไปหนึ่งการดำเนินการส่งได้สูงสุดห้าข้อความ เทมเพลตต้องผ่านการพิจารณา และห้ามใช้กับโฆษณา คูปอง รางวัล การโปรโมตสินค้า และประกาศกิจกรรมทั่วไป LY Corporation อาจกำหนดจำนวนต่างออกไปในขั้นตอนพิจารณา แต่ละ channel ตั้งค่าเทมเพลตได้สูงสุด 20 รายการ และวัตถุประสงค์ของข้อความต้องตรงกับกรณีการใช้งานที่ยื่นไว้เสมอ
อินเทอร์เฟซที่ไม่เป็นทางการไม่สามารถเปลี่ยนกฎเหล่านี้หรือเพิ่มจำนวนครั้งของโทเค็นได้ ขณะเดียวกัน Service Message API ก็ไม่ได้ใช้แทนกล่องข้อความบริการลูกค้าแบบเปิด เชื่อมสองระบบด้วยรหัสคำสั่งซื้อหรือรหัสการจองของคุณเอง แทนการใช้ platform token ร่วมกัน
คำถามที่พบบ่อย
Service notification token ของ LINE ใช้งานได้นานเท่าใด
โทเค็นที่ออกใหม่หมดอายุในหนึ่งปี หรือ 31,536,000 วินาที และอาจใช้ไม่ได้เร็วกว่านั้นเมื่อจำนวนข้อความเหลือศูนย์ ให้ยึดค่า expiresIn และ remainingCount ล่าสุดที่ LINE ส่งกลับมาเสมอ
ใช้ notification token เดิมกับข้อความบริการครั้งถัดไปได้หรือไม่
ให้ใช้ notificationToken ที่ต่ออายุแล้วจากการส่งสำเร็จครั้งล่าสุด ไม่ใช่ค่าเดิม นอกจากนี้โทเค็นยังผูกกับผู้ใช้หนึ่งรายและนำไปใช้กับผู้รับรายอื่นไม่ได้
ส่งข้อความบริการ LINE MINI App ได้กี่ข้อความต่อหนึ่งการดำเนินการของผู้ใช้
มาตรฐานคือสูงสุดห้าข้อความต่อหนึ่งการดำเนินการที่เข้าเงื่อนไข LINE อาจอนุมัติจำนวนอื่นสำหรับกรณีการใช้งานเฉพาะ ดังนั้น remainingCount ในการตอบกลับจึงเป็นขีดจำกัดที่ต้องใช้จริง
LINE MINI App ที่ยังไม่ได้รับการรับรองใช้ notification token API ได้หรือไม่
สามารถทดสอบผ่านช่อง Developing ภายในด้วยบัญชี Admin หรือ Tester ได้ แต่การส่งจากช่อง Published ไปยังผู้ใช้ production ต้องใช้ LINE MINI App ที่ได้รับการรับรองและเทมเพลตที่ผ่านการอนุมัติ
Service notification token ของ LINE เหมือนกับ user ID ของ Messaging API หรือไม่
ไม่เหมือนกัน โทเค็นนี้คือสิทธิ์แบบหมุนเวียนซึ่งผูกกับผู้ใช้ เพื่อส่งข้อความบริการสำหรับการดำเนินการหนึ่งรายการใน MINI App ไม่ใช่ที่อยู่ผู้ใช้ที่ใช้ซ้ำได้ ไม่ใช่ข้อมูลรับรองทั่วไปสำหรับ push message และไม่ใช่ตัวระบุแชตบริการลูกค้า
ขั้นตอนถัดไป
พัฒนาขั้นตอนเรียกสองครั้งตาม เอกสารอ้างอิง LINE MINI App API และจัดเก็บโทเค็นที่ต่ออายุแล้วหลังส่งทุกครั้ง หากความต้องการอีกส่วนคือรับข้อความ LINE ตามปกติจากลูกค้า ให้ใช้ คู่มือการอนุญาต LINE ของ UnifyPort เป็นเส้นทางรอง
แหล่งข้อมูล
แหล่งข้อมูลทางการของ LINE ที่ตรวจสอบเมื่อ 2026-07-21: