WeChat Official Account ฟิลด์ notes ใน Template Message ไม่แสดง — การตรวจสอบและวิธีแก้ไข
ปัญหา
ขณะส่ง Template Message จากบัญชีทดสอบ (sandbox) ของ WeChat Official Account ผมเจอเหตุการณ์แปลก ๆ คือเทมเพลตกำหนดไว้ 6 ฟิลด์ แต่ฟิลด์ notes (หมายเหตุ) ไม่แสดงเลย ส่วนอีก 5 ฟิลด์แสดงปกติ
เนื้อหาเทมเพลต:
ชื่อ: {{name.DATA}}โทรศัพท์: {{phone.DATA}}เวลา: {{time.DATA}}บริการ: {{services.DATA}}พนักงาน: {{staff.DATA}}หมายเหตุ: {{notes.DATA}}API ส่งสำเร็จ (errcode = 0) แต่ในข้อความ WeChat จริงแสดงเพียง 5 บรรทัดแรก บรรทัดหมายเหตุหายไปทั้งบรรทัด รวมถึงป้ายชื่อ “หมายเหตุ” ด้วย
ขั้นตอนการตรวจสอบ
1. ตัดประเด็นจำนวนฟิลด์
สมมติฐานแรก: บัญชี sandbox จำกัดฟิลด์ไม่เกิน 5 ฟิลด์ ทดสอบ:
- ลบฟิลด์ “พนักงาน” ส่งแค่ 5 ฟิลด์ → notes ยังไม่แสดง
- เพิ่มจนเป็น 9 ฟิลด์ → ทุกฟิลด์ รวมถึง notes แสดงครบ
สรุป: ไม่ใช่เพราะจำนวนฟิลด์
2. ตัดประเด็นความยาวอักขระ
ตามเอกสารทางการ Template Message จำกัด 1 บรรทัดไม่เกิน 20 อักขระ และรวมไม่เกิน 200 อักขระ ข้อมูลทดสอบของผมต่ำกว่ามาก
สรุป: ไม่ใช่เรื่องความยาว
3. พบรูปแบบที่ชัดเจน
หลังทดสอบหลายรอบเจอรูปแบบชัดเจน:
| จำนวนฟิลด์ | ตำแหน่งของ notes | notes แสดงไหม? |
|---|---|---|
| 6 ฟิลด์ | บรรทัดสุดท้าย | ไม่แสดง |
| 9 ฟิลด์ | ลำดับที่ 6 (ไม่ใช่สุดท้าย) | แสดง |
| 7 ฟิลด์ | ลำดับที่ 6 (ไม่ใช่สุดท้าย) | แสดง |
สรุป: ตราบใดที่ notes เป็นบรรทัดสุดท้ายของเทมเพลต ก็จะหายไป ถ้ามีฟิลด์อื่นต่อท้าย ก็แสดงปกติ
4. ทดสอบชื่อฟิลด์
คงให้ notes อยู่บรรทัดสุดท้าย เปลี่ยนเฉพาะชื่อ:
| ชื่อฟิลด์ | แสดงไหม? |
|---|---|
| notes | ไม่แสดง |
| remark | ไม่แสดง |
| info | แสดง |
| message | แสดง |
notes และ remark หายทั้งคู่ ส่วน info, message แสดงตามปกติ
วิเคราะห์สาเหตุ
API Template Message ของ WeChat Official Account เดิมรองรับพารามิเตอร์ remark ระดับบนสุด ที่จะถูกเรนเดอร์เป็น “หมายเหตุ” ที่ท้ายข้อความ แต่เมื่อ 30 มีนาคม 2566 (2023) WeChat ประกาศว่า:
Template Message จะไม่แสดงฟิลด์ remark อีกต่อไป
การยกเลิกครั้งนั้นไม่ได้กระทบเฉพาะพารามิเตอร์ remark ระดับบนสุดเท่านั้น WeChat ยังทำการจับคู่ความหมายกับ ชื่อฟิลด์ เช่น notes และ remark ด้วย — เมื่อชื่อแบบนี้ปรากฏเป็นฟิลด์ สุดท้าย ของเทมเพลต มันจะถูกตัดทิ้งเงียบ ๆ ผ่านเส้นทางความเข้ากันได้กับ remark เดิม
สรุปสั้น ๆ:
notesและremarkเป็นชื่อฟิลด์สงวนใน Template Message ของ WeChat- ถ้าวางไว้ตำแหน่งสุดท้าย จะเข้าเส้น compat ของ
remarkเก่า และถูกลบทิ้งโดยไม่มีคำเตือน - ย้ายไปตำแหน่งอื่น หรือเปลี่ยนชื่อ ก็แสดงปกติ
วิธีแก้
วิธีที่ 1: เปลี่ยนชื่อฟิลด์ (แนะนำ)
ทางออกที่สะอาดที่สุด: เปลี่ยน notes เป็นชื่อนอกชุดสงวน เช่น message, info, desc ฯลฯ
ชื่อ: {{name.DATA}}โทรศัพท์: {{phone.DATA}}เวลา: {{time.DATA}}บริการ: {{services.DATA}}พนักงาน: {{staff.DATA}}ข้อความ: {{message.DATA}}วิธีที่ 2: เพิ่มฟิลด์เติมหลัง notes
ถ้าเปลี่ยนชื่อไม่ได้ (เทมเพลตผ่านการตรวจแล้ว ใช้ในระบบโปรดักชันและถูกเรียกจากหลายระบบ) ให้เพิ่มฟิลด์ dummy หลัง notes เพื่อให้มันไม่ใช่บรรทัดสุดท้ายอีกต่อไป:
ชื่อ: {{name.DATA}}โทรศัพท์: {{phone.DATA}}เวลา: {{time.DATA}}บริการ: {{services.DATA}}พนักงาน: {{staff.DATA}}หมายเหตุ: {{notes.DATA}}อื่น ๆ: {{other.DATA}}ตอนส่ง ฟิลด์ other ใส่สตริงว่างหรือ placeholder ก็พอ
ตัวอย่างปรับโค้ด
ฝั่ง backend เปลี่ยนชื่อฟิลด์จาก notes เป็น message ใน payload:
// สำคัญ: ห้ามใช้ notes เป็นชื่อฟิลด์// WeChat จะถือว่าเป็นฟิลด์ "remark" ที่ถูกสงวน และจะตัดทิ้งโดยไม่แจ้งเตือนreturn { name, phone, time: timeRange, services, staff, message // เดิม: notes};สรุป
- Template Message ของ WeChat Official Account มีชื่อฟิลด์สงวน ชื่อที่มีความหมายเชิง “หมายเหตุ” เช่น
notes,remarkฯลฯ จะถูกตีความเป็นช่องหมายเหตุเก่า และไม่แสดง - นี่คือผลพวงจากการที่ WeChat ยกเลิกการแสดงฟิลด์
remarkใน Template Message เมื่อปี 2023 — ซึ่งไม่ได้บันทึกไว้อย่างเด่นชัดในเอกสาร - วิธีแก้คือเปลี่ยนเป็นชื่อกลาง ๆ เช่น
message,info,descหรือเพิ่มฟิลด์เติมหลังnotes - สำหรับปัญหาแบบ “ไม่มี error แต่ไม่แสดง” การปรับจำนวนฟิลด์ ตำแหน่ง และชื่อทีละตัวแปร มักหาคำตอบเร็วกว่าการพึ่งเอกสาร