← บทความทั้งหมด
เปรียบเทียบ

ส่งข้อความผิด: ควรแก้ไข เรียกคืน หรือซ่อนเฉพาะในกล่องข้อความ?

เมื่อส่งข้อความผิดจากบัญชีที่เชื่อมต่อ ให้เลือกขอบเขตก่อน: แก้ไข คือแทนที่ข้อความที่ส่งแล้ว เรียกคืน คือขอถอนข้อความสำหรับทุกคนในบทสนทนา ส่วน ซ่อนในแอป เปลี่ยนเฉพาะหน้าจอของระบบคุณ เอกสาร UnifyPort ระบุการแก้ไขข้อความสำหรับ WhatsApp และการเรียกคืนสำหรับ Telegram, WhatsApp และ LINE ทั้งสองคำสั่งใช้กับข้อความที่บัญชีนั้นส่งเองเท่านั้น การรับ webhook แจ้งแก้ไขหรือลบได้ไม่ได้แปลว่าระบบสามารถสั่งทำสิ่งเดียวกันได้

ประเด็นสำคัญ

  • แยกการแก้คำผิด การถอนข้อความของตัวเอง และการจัดหน้าจอเจ้าหน้าที่ออกจากกัน
  • เก็บบัญชี บทสนทนา และข้อความเป็นเป้าหมายเดียวกัน อย่าเปลี่ยนไปเลือก “ข้อความล่าสุด” หลังยืนยัน
  • ตรวจความสามารถในการสั่งงานแยกจากความสามารถในการรับเหตุการณ์
  • ผล API เหตุการณ์ webhook และการล้างสำเนาในระบบปลายทางเป็นหลักฐานคนละส่วน

แก้ไข เรียกคืน และซ่อน ต่างกันอย่างไร

สมมติว่าเจ้าหน้าที่ส่งเวลานัดหมายผิด การแก้ข้อความกับการทำให้ข้อความหายจากหน้าจอเจ้าหน้าที่ไม่ได้แก้ปัญหาเดียวกัน

สิ่งที่ต้องการวิธีที่เหมาะสมสิ่งที่ยังยืนยันไม่ได้
แก้ข้อความที่ส่งแล้วแก้ไขข้อความผู้รับยังไม่เคยเห็นข้อความเดิม
ถอนข้อความที่บัญชีนี้ส่งเรียกคืนข้อความสำเนาที่บันทึกหรือส่งต่อถูกลบทั้งหมด
ซ่อนแถวในกล่องข้อความของคุณการควบคุมการแสดงผลในแอปข้อความในแชตของลูกค้าเปลี่ยนไป
ตอบสนองต่อการเรียกคืนที่พบประมวลผล message.deletedมีการส่งคำขอเรียกคืนใหม่

คำแนะนำการลบของ WhatsApp ระบุว่าผู้รับอาจเห็นข้อความก่อนถูกลบ และสื่อที่บันทึกใน Photos บน iOS อาจยังคงอยู่ อย่าตั้งชื่อปุ่มว่า “ลบทุกสำเนา” หรือถือว่าการเรียกคืนรับประกันว่าข้อมูลลับไม่เคยถูกเปิดเผย

การซ่อนในบทความนี้เป็นการออกแบบแอป ไม่ใช่ endpoint สำหรับลบข้อความเฉพาะฝั่งตัวเองที่ UnifyPort ระบุไว้ ส่วน conversation.deleted และ conversation.cleared บอกการเปลี่ยนแปลงบทสนทนาเฉพาะบัญชี ไม่ใช่การเรียกคืนข้อความหนึ่งรายการสำหรับทุกคน

ตรวจตารางคำสั่ง ไม่ใช่แค่ตารางเหตุการณ์

ตารางคำสั่งของแต่ละผู้ให้บริการ ระบุไว้ดังนี้

ผู้ให้บริการแก้ข้อความที่ส่งแล้วเรียกคืนข้อความของตัวเอง
whatsappรองรับรองรับ
telegramไม่รองรับรองรับ
lineไม่รองรับรองรับ
twitter, zalo, tiktok, whatsapp-protocolไม่รองรับไม่รองรับ

นี่คือความสามารถของ adapter ไม่ใช่การรับประกันว่าทุกคำขอจะผ่านเงื่อนไขของบัญชีหรือบริการต้นทาง คู่คำสั่งที่ยังไม่รองรับจะคืน 501 unsupported_by_provider

สำหรับทีมที่ใช้ LINE ต้องแยก การรับเหตุการณ์แก้ไขข้อความ ออกจากการสั่งแก้ไข บทความนั้นอธิบายการรวม message.updated เข้ากับข้อความเดิม ไม่ได้เปิดความสามารถในการแก้ข้อความ LINE ผ่าน UnifyPort อย่าเปิดปุ่มแก้ไขเพียงเพราะตัวรับเข้าใจเหตุการณ์นี้

สัญญาเรียกคืนของ UnifyPort ยังแคบกว่าฟังก์ชันดูแลกลุ่มแบบ native บางประเภท เพราะอนุญาตเฉพาะข้อความที่บัญชีเชื่อมต่อส่งเอง แม้เจ้าหน้าที่เป็นผู้ดูแลกลุ่ม ก็ไม่ควรเสนอคำสั่งนี้กับข้อความของสมาชิกคนอื่น

ตรึงเป้าหมายก่อนส่งคำขอ

ใช้ account_id, data.conversation.id และ data.message.id จาก message.received ที่เก็บไว้ เหตุการณ์นี้อาจเป็นข้อความขาเข้าหรือขาออก จึงต้องตรวจ data.message.direction และเจ้าของข้อความก่อนอนุญาตให้ทำงาน ค่า id ระดับบนสุดเป็น ID เหตุการณ์ ไม่ใช่ ID ข้อความ

ข้อแนะนำสำหรับแอป:

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

ด้านล่างเป็น ตัวอย่าง JSON ที่ใช้ตัวระบุสมมติ ไม่ใช่ข้อมูลลูกค้าจริง ส่งจากเซิร์ฟเวอร์ด้วย X-Api-Key และอย่าใส่คีย์ในโค้ดเบราว์เซอร์

สำหรับ POST /v1/messages/edit ค่า content คือข้อความใหม่ทั้งชุด ไม่ใช่ส่วนต่าง:

{
  "account_id": "acc_example",
  "conversation_id": "8600000000000@s.whatsapp.net",
  "message_id": "3EB0A185AAC596E2BB602C",
  "content": "ขอแก้ไข: เวลานัดหมายคือ 15:00 น."
}

สำหรับ POST /v1/messages/revoke เลือกเป้าหมายเดิมโดยไม่ส่งข้อความแทนที่:

{
  "account_id": "acc_example",
  "conversation_id": "8600000000000@s.whatsapp.net",
  "message_id": "3EB0A185AAC596E2BB602C"
}

เอกสารเรียกคืนระบุว่า sender_id มีค่าเริ่มต้นเป็นบัญชีเองและมักละได้ การใส่ผู้ส่งคนอื่นไม่เพิ่มสิทธิ์ อย่ากำหนดระยะเวลาแก้ไขร่วมกันทุกช่องทางขึ้นเอง หรือนำสิทธิ์จาก API อื่นมาใช้กับคำขอนี้

แยกผลคำขอออกจากการล้างสำเนา

ตัวอย่างผลสำเร็จของทั้งสอง endpoint มี data.ok: true ให้บันทึกผลจริง แต่ไม่ตีความว่าผู้รับทุกคนหรือระบบปลายทางลบเนื้อหาเดิมแล้ว

สิ่งที่พบสิ่งที่ควรทำ
501 unsupported_by_providerปิดคำสั่งสำหรับช่องทางนั้น ไม่ส่งซ้ำแบบเดิม
edit_message_failed หรือ revoke_message_failedตรวจข้อผิดพลาดและบริบทเป้าหมายก่อนตัดสินใจ
HTTP หมดเวลาหรือคำตอบหายคงสถานะผลไม่แน่ชัดและตรวจสอบก่อนส่งอีกครั้ง
พบ message.updated หรือ message.deleted ที่ตรงกันอัปเดตข้อความในขอบเขตที่ถูกต้องแบบ idempotent
ไม่พบเหตุการณ์ที่ตรงกันอย่าสรุปสำเร็จหรือล้มเหลวจากการไม่มีเหตุการณ์เพียงอย่างเดียว

เก็บ request_id ตามคู่มือติดตามคำขอ เพื่อสอบสวนปัญหา ไม่ใช่ใช้เป็น idempotency token หรือคีย์เชื่อม webhook ที่มีการรับประกัน

ทำตามสัญญาการส่ง webhook: ตั้ง signing_secret ตรวจ HMAC-SHA256 จาก timestamp และ raw body ตรวจความใหม่ของเวลา แล้วบันทึกถาวรก่อนตอบรับ ลำดับเหตุการณ์ไม่ได้รับการรับประกัน สำเนาในระบบค้นหา CRM หรือ AI ของคุณยังต้องล้างแยกต่างหาก ดูคู่มือล้างเนื้อหาที่ถูกเรียกคืน สำหรับขอบเขตนี้

คำถามที่พบบ่อย

ใช้คำสั่งแก้ไขแทนที่ไฟล์แนบได้ไหม?

เอกสารรองรับเฉพาะข้อความตัวอักษร อย่าใช้ content เป็นฟิลด์แทนที่สื่อ

ซ่อนในกล่องข้อความแล้วลูกค้าจะไม่เห็นด้วยหรือไม่?

ไม่ใช่ การแสดงผลเฉพาะแอปกับการเรียกคืนบนช่องทางเป็นคนละคำสั่ง ต้องระบุขอบเขตในหน้าจอให้ชัดเจน

รองรับ message.deleted แปลว่าทุกการเรียกคืนมี callback หรือไม่?

ไม่ใช่ ตารางเหตุการณ์ไม่รับประกันว่าทุกบัญชีหรือทุกการติดตั้งต้นทางจะส่งทุกเหตุการณ์ เก็บผล HTTP แยกจากสถานะที่สังเกตได้

ขั้นตอนถัดไปและแหล่งข้อมูล

เริ่มจากเอกสารเรียกคืนข้อความ แล้วทดสอบการเลือกและยืนยันในบทสนทนาทดสอบที่ได้รับอนุญาต UnifyPort เป็นอินเทอร์เฟซที่ไม่เป็นทางการ ไม่ได้แทนที่กฎของแพลตฟอร์ม และไม่รับประกันการลบสำเนาภายนอก

ตรวจข้อมูลวันที่ 2026-10-12:

UnifyPort API

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

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