← บทความทั้งหมด
บทช่วยสอน

แอนิเมชันกำลังโหลดใน 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 หลายตัวต่ออายุภาพแสดงสถานะเดียวกันอย่างอิสระ

แยกตัวจับเวลาออกจากงานธุรกิจ

แนวทางออกแบบแอปที่แนะนำ:

  1. ตรวจสอบความถูกต้องและจัดเก็บงานขาเข้าอย่างถาวรก่อนพึ่งพาภาพแสดงสถานะ
  2. ให้หนึ่งงานรับผิดชอบการตัดสินใจตอบ และเรียกแอนิเมชันสั้น ๆ เฉพาะการสนทนาตัวต่อตัวที่เหมาะสม
  3. ประมวลผลงานแยกต่างหาก แอนิเมชันล้มเหลวต้องไม่ทำให้งานที่บันทึกไว้ถูกทิ้ง
  4. เมื่อผลลัพธ์พร้อม ให้ส่งด้วยวิธีที่เหมาะสม ไม่ต้องรอให้แอนิเมชันหมดเวลา
  5. หากงานใช้เวลานาน ให้มีนโยบายตอบภายหลังที่ชัดเจน แทนการวนแสดงแอนิเมชันไม่สิ้นสุด

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:

UnifyPort API

เปลี่ยนการเชื่อมต่อข้อความให้เป็น pipeline ผลิตภัณฑ์ที่เสถียร

เริ่มจากการส่งผ่าน API เดียว แล้วส่งข้อความขาเข้าทั้งหมดกลับสู่ระบบธุรกิจของคุณด้วย event มาตรฐาน