แอนิเมชันกำลังโหลดใน LINE ไม่แสดง? ตรวจแชตและจังหวะการเรียก
แอนิเมชันกำลังโหลดของ LINE จะแสดงเฉพาะใน แชตแบบตัวต่อตัวระหว่างผู้ใช้กับ LINE Official Account และผู้ใช้ต้องกำลังเปิดหน้าจอแชตนั้นอยู่ เรียกผ่าน POST /v2/bot/chat/loading/start หากผู้ใช้อยู่หน้าจออื่น LINE จะไม่ส่งการแจ้งเตือน และไม่เก็บแอนิเมชันไว้แสดงเมื่อกลับมาเปิดแชต ดังนั้นคำขอสำเร็จไม่ได้ยืนยันว่าผู้ใช้เห็นแอนิเมชันแล้ว
ประเด็นสำคัญ
- ใช้ ID ของผู้ใช้เป็น
chatIdไม่ใช่ ID กลุ่มหรือ reply token - แอนิเมชันหายเมื่อครบเวลาที่ระบุ หรือเมื่อมีข้อความใหม่จาก Official Account มาถึง
- การเรียกซ้ำขณะยังแสดงอยู่จะกำหนดเวลาที่เหลือใหม่ ไม่ใช่การรายงานความคืบหน้าของงาน
- แยกแอนิเมชัน การตอบรับ webhook การจบงาน และการส่งคำตอบออกจากกัน
แอนิเมชันของ LINE ควบคุมอะไร
คู่มือแอนิเมชันอย่างเป็นทางการ ระบุระยะเวลาแสดง 5–60 วินาที รองรับแชตตัวต่อตัว ไม่รองรับแชตกลุ่มหรือแชตหลายคน
ระบบควรแยกเวลาสามส่วนนี้:
| เวลา | สิ่งที่ควบคุม | สิ่งที่ไม่ได้ยืนยัน |
|---|---|---|
| ระยะเวลาแอนิเมชัน | เวลาที่ตัวบอกสถานะสามารถแสดงได้ | worker ยังทำงานอยู่ |
| อายุของงานในแอป | เวลาที่ระบบใช้ประมวลผล | ผู้ใช้กำลังดูแชต |
| โอกาสในการตอบกลับ | ยังใช้การตอบกลับของ API ทางการได้หรือไม่ | แอนิเมชันมองเห็นได้ |
อย่าใช้แอนิเมชันเป็นระบบติดตามงาน การหายไปไม่ได้แปลว่า AI ทำงานล้มเหลวเสมอไป อาจเพียงหมดเวลา หรือมีข้อความจาก Official Account เข้ามา
หากปัญหาจริงคือส่งคำตอบไม่สำเร็จ ให้อ่าน คู่มือ reply token หมดอายุและการตอบช้า แยกต่างหาก เอกสารของ endpoint แอนิเมชันไม่ได้ระบุว่าจะต่ออายุหรือออก reply token ใหม่
ส่งคำขอทดสอบหนึ่งครั้งในเงื่อนไขที่ควบคุมได้
เตรียม channel access token ของ Messaging API บน backend และ ID ผู้ใช้จากการสนทนาแบบตัวต่อตัวของ channel ที่ต้องการ อย่าใส่ token ในโค้ดฝั่งเบราว์เซอร์หรือบันทึก log ที่ใช้ร่วมกัน
ตัวอย่าง Node.js นี้ใช้ endpoint และฟิลด์จาก Messaging API reference ให้ส่ง token และ ID ผู้ใช้จริงเข้าไป เป็นโค้ดประกอบคำอธิบาย ไม่ใช่ผลการทดสอบระบบที่ดำเนินการแล้ว
async function showLoading(channelAccessToken, userId) {
const response = await fetch(
'https://api.line.me/v2/bot/chat/loading/start',
{
method: 'POST',
headers: {
Authorization: `Bearer ${channelAccessToken}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
chatId: userId,
loadingSeconds: 5
})
}
);
if (!response.ok) {
throw new Error(`Loading request failed: ${response.status}`);
}
}
ในการทดสอบครั้งแรก ให้ผู้ทดสอบเปิดแชตในแอป LINE ค้างไว้ และอย่าส่งข้อความอื่นจาก Official Account ระหว่างแสดงแอนิเมชัน บันทึกผล HTTP แยกจากสิ่งที่ผู้ทดสอบมองเห็น อย่าตีความ HTTP สำเร็จว่าเป็นใบตอบรับการอ่าน
ฟังก์ชันนี้ตั้งใจไม่ retry และไม่ส่งคำตอบ ความล้มเหลวของตัวบอกสถานะไม่ควรสร้างงานธุรกิจซ้ำ หรือทำให้คำตอบที่พร้อมแล้วถูกส่งช้าลง
ตรวจอาการไม่แสดงหรือหายเร็ว
| อาการ | ตรวจอะไรเป็นอันดับแรก | แนวทางดำเนินการ |
|---|---|---|
| ไม่แสดงในกลุ่ม | ประเภทแชตไม่รองรับ | อย่า retry ด้วย ID กลุ่มต่อไป |
| ไม่แสดงเมื่อผู้ใช้อยู่นอกแชต | ไม่ได้เปิดแชตเป้าหมาย | ทดสอบใหม่โดยเปิดแชตไว้ |
| เปิดแชตภายหลังก็ไม่เห็น | ไม่ใช่การแจ้งเตือนแบบรอส่ง | อย่ารับรองว่าจะเห็นเมื่อกลับมา |
| หายทันทีที่ข้อความรับเรื่องมาถึง | ข้อความจาก Official Account ทำให้แอนิเมชันจบ | กำหนดลำดับข้อความรับเรื่องกับแอนิเมชัน |
| แสดงนานกว่าที่คาด | คำขออื่นอาจเขียนทับเวลา | ตรวจการเรียกจากทุก worker และเครื่องมือ |
| คำขอ HTTP ล้มเหลว | token เป้าหมาย body และผล API จริง | ตรวจคำขอก่อนแก้ตรรกะหน้าจอ |
ตารางนี้เป็นแนวทางสืบหาปัญหา ไม่ใช่รหัสข้อผิดพลาดใหม่ของ LINE หากใช้หลายเครื่องมือ ให้ดู เช็กลิสต์หลายเครื่องมือบน Official Account เดียว เพื่อระบุผู้รับผิดชอบแต่ละคำขอ อย่าให้ worker หลายตัวต่ออายุภาพแสดงสถานะเดียวกันอย่างอิสระ
แยกตัวจับเวลาออกจากงานธุรกิจ
แนวทางออกแบบแอปที่แนะนำ:
- ตรวจสอบความถูกต้องและจัดเก็บงานขาเข้าอย่างถาวรก่อนพึ่งพาภาพแสดงสถานะ
- ให้หนึ่งงานรับผิดชอบการตัดสินใจตอบ และเรียกแอนิเมชันสั้น ๆ เฉพาะการสนทนาตัวต่อตัวที่เหมาะสม
- ประมวลผลงานแยกต่างหาก แอนิเมชันล้มเหลวต้องไม่ทำให้งานที่บันทึกไว้ถูกทิ้ง
- เมื่อผลลัพธ์พร้อม ให้ส่งด้วยวิธีที่เหมาะสม ไม่ต้องรอให้แอนิเมชันหมดเวลา
- หากงานใช้เวลานาน ให้มีนโยบายตอบภายหลังที่ชัดเจน แทนการวนแสดงแอนิเมชันไม่สิ้นสุด
LINE ระบุว่าการเรียกครั้งที่สองขณะแอนิเมชันยังแสดงอยู่จะเขียนทับเวลาที่เหลือจนกว่าจะหาย นี่เป็นกฎการแสดงผล ไม่ใช่วิธีเพิ่มเวลาประมวลผลบนเซิร์ฟเวอร์หรือจองโอกาสในการตอบกลับ
ขอบเขตของ UnifyPort
อินเทอร์เฟซที่ไม่เป็นทางการของ UnifyPort เป็นเส้นทางแยกสำหรับบัญชีที่เชื่อมต่อ คู่มือการยืนยันตัวตน LINE อธิบายการอนุญาตด้วย QR ไม่ใช่การนำ channel access token ไปผูกกับ Official Account
ตารางการรองรับคำสั่งของแต่ละแพลตฟอร์ม ที่เปิดเผยในปัจจุบันไม่มีคำสั่งแอนิเมชันนี้ อย่าสมมติว่ามี endpoint แสดงสถานะกำลังพิมพ์ หรือใส่ chatId กับ loadingSeconds ลงในคำขอส่งข้อความมาตรฐาน เอกสารส่งข้อความตัวอักษร ใช้ POST /v1/messages พร้อม account_id, to และ message
หากต้องใช้แอนิเมชันของ Official Account ให้เลือก Messaging API ทางการ สำหรับกล่องข้อความของบัญชีที่เชื่อมต่อ คุณสามารถแสดงสถานะประมวลผลในหน้าจอเจ้าหน้าที่ของคุณเอง และใช้เฉพาะคำสั่งส่งที่มีเอกสารรองรับ สถานะในหน้าจอนั้นไม่ใช่แอนิเมชันในแชต LINE
คำถามที่พบบ่อย
ใช้ในกลุ่ม LINE ได้ไหม?
ไม่ได้ เอกสารระบุเฉพาะแชตตัวต่อตัวกับ Official Account ไม่รวมกลุ่มหรือแชตหลายคน
ถ้าผู้ใช้ไม่ได้ดูแชต จะได้รับการแจ้งเตือนไหม?
ไม่ คำขอนี้ไม่ส่งการแจ้งเตือน และการเปิดแชตภายหลังจะไม่แสดงแอนิเมชันจากคำขอเดิม
loadingSeconds ต่ออายุ reply token หรือไม่?
ไม่มีพฤติกรรมนี้ในเอกสาร ให้แยกเวลาของภาพแสดงสถานะออกจากการตอบกลับ
ทำไมแอนิเมชันหายก่อนครบเวลา?
ข้อความใหม่จาก Official Account ทำให้แอนิเมชันจบ ให้ตรวจทั้งเวลาและคำขอจากส่วนอื่นด้วย
ขั้นตอนถัดไปและแหล่งอ้างอิง
ทดสอบเงื่อนไขตาม คู่มือแอนิเมชันทางการ หากใช้ UnifyPort ให้ตรวจ ตารางคำสั่งที่รองรับ ก่อนออกแบบส่วนควบคุมที่ลูกค้าใช้งาน
ตรวจสอบแหล่งข้อมูลทางการเมื่อ 2026-10-20:
เปลี่ยนการเชื่อมต่อข้อความให้เป็น pipeline ผลิตภัณฑ์ที่เสถียร
เริ่มจากการส่งผ่าน API เดียว แล้วส่งข้อความขาเข้าทั้งหมดกลับสู่ระบบธุรกิจของคุณด้วย event มาตรฐาน