Gửi nhầm tin nhắn: nên sửa, thu hồi hay chỉ ẩn trong hộp thư?
Khi tài khoản đã kết nối gửi nhầm tin, hãy xác định phạm vi trước: sửa thay thế văn bản đã gửi, thu hồi yêu cầu rút tin nhắn đối với mọi người trong cuộc trò chuyện, còn ẩn cục bộ chỉ đổi cách ứng dụng của bạn hiển thị. Tài liệu UnifyPort hỗ trợ sửa văn bản trên WhatsApp và thu hồi trên Telegram, WhatsApp, LINE. Cả hai thao tác chỉ áp dụng cho tin do chính tài khoản gửi. Nhận được webhook báo sửa hoặc xóa không đồng nghĩa với quyền thực hiện thao tác tương ứng.
Điểm chính
- Sửa nội dung, thu hồi tin của mình và dọn giao diện làm việc là ba nhu cầu khác nhau.
- Giữ tài khoản, cuộc trò chuyện và tin nhắn thành một mục tiêu cố định; không chọn lại “tin mới nhất” sau khi xác nhận.
- Kiểm tra khả năng gửi lệnh riêng với khả năng nhận sự kiện.
- Kết quả API, quan sát qua webhook và việc dọn bản sao ở hệ thống sau là các loại bằng chứng khác nhau.
Sửa, thu hồi và ẩn cục bộ khác nhau thế nào?
Giả sử nhân viên hỗ trợ gửi sai giờ hẹn. Sửa văn bản và làm cho dòng tin biến mất khỏi màn hình nhân viên không giải quyết cùng một vấn đề.
| Mục đích | Cơ chế phù hợp | Điều chưa thể chứng minh |
|---|---|---|
| Sửa văn bản đã gửi | Sửa tin nhắn | Người nhận chưa từng đọc bản cũ |
| Rút tin do tài khoản này gửi | Thu hồi tin nhắn | Mọi bản lưu hoặc chuyển tiếp đều đã biến mất |
| Ẩn một dòng trong hộp thư của bạn | Điều khiển hiển thị của ứng dụng | Tin trong cuộc trò chuyện của khách đã thay đổi |
| Phản ánh một lần thu hồi đã quan sát | Xử lý message.deleted | Đã gửi yêu cầu thu hồi mới |
Hướng dẫn xóa chính thức của WhatsApp lưu ý rằng người nhận có thể đã thấy tin trước khi xóa và nội dung đa phương tiện lưu trong Photos trên iOS có thể còn lại. Không nên đặt tên nút là “xóa ở mọi nơi” hay coi thu hồi là bảo đảm thông tin nhạy cảm chưa bị lộ.
Ẩn cục bộ ở đây là thiết kế của ứng dụng, không phải endpoint UnifyPort đã được công bố để xóa cục bộ một tin. Các sự kiện conversation.deleted và conversation.cleared cũng mô tả thay đổi cục bộ của cuộc trò chuyện, không phải thu hồi một tin đối với mọi người.
Kiểm tra ma trận thao tác, không chỉ ma trận sự kiện
Ma trận thao tác theo nhà cung cấp hiện ghi nhận:
| Nhà cung cấp | Sửa văn bản đã gửi | Thu hồi tin của chính tài khoản |
|---|---|---|
whatsapp | Có | Có |
telegram | Không | Có |
line | Không | Có |
twitter, zalo, tiktok, whatsapp-protocol | Không | Không |
Đây là ánh xạ khả năng của adapter, không bảo đảm mọi yêu cầu đều đáp ứng điều kiện tài khoản hoặc dịch vụ phía trên. Tổ hợp chưa triển khai trả về 501 unsupported_by_provider. Với đội dùng cả WhatsApp và Zalo, không nên hiển thị cùng một bộ nút sửa/thu hồi chỉ vì hai kênh có chung hộp thư.
Ví dụ, bài xử lý tin LINE được sửa hướng dẫn nhận và hợp nhất message.updated, chứ không mở khả năng chủ động sửa tin LINE. Không bật nút Sửa chỉ vì bộ nhận hiểu sự kiện đó.
Hợp đồng thu hồi của UnifyPort cũng hẹp hơn một số tính năng quản trị nhóm gốc: chỉ thu hồi tin do tài khoản kết nối gửi. Dù nhân viên là quản trị viên nhóm, không nên cung cấp thao tác này cho tin của thành viên khác.
Cố định tin được chọn trước khi sửa
Lấy account_id, data.conversation.id và data.message.id từ quan sát message.received đã lưu. Sự kiện có thể biểu thị tin đến hoặc tin đi; kiểm tra data.message.direction và chủ thể gửi trước khi cho phép thao tác. id cấp cao nhất là ID sự kiện, không phải ID tin nhắn.
Các bước kiểm tra nên có trong ứng dụng:
- Xác minh nhân viên được phép thao tác với tài khoản nhắn tin và cuộc trò chuyện đã chọn.
- Cố định danh tính tin trong hộp xác nhận, hiển thị nội dung hiện tại và phạm vi thao tác.
- Kiểm tra kênh hỗ trợ và tin do chính tài khoản gửi; chỉ cho sửa tin văn bản.
- Xử lý tuần tự các lần sửa cùng mục tiêu để hai nhân viên không ghi đè quyết định của nhau.
- Lưu thao tác và kết quả riêng với nội dung đang hiển thị.
Dưới đây là ví dụ JSON dùng định danh hư cấu, không phải lưu lượng khách hàng thực tế. Gửi từ máy chủ bằng X-Api-Key; không đưa khóa vào mã chạy trên trình duyệt.
Với POST /v1/messages/edit, content là toàn bộ văn bản thay thế, không phải bản vá một phần:
{
"account_id": "acc_example",
"conversation_id": "8600000000000@s.whatsapp.net",
"message_id": "3EB0A185AAC596E2BB602C",
"content": "Đính chính: giờ hẹn là 15:00."
}
Với POST /v1/messages/revoke, chọn cùng mục tiêu nhưng không gửi nội dung thay thế:
{
"account_id": "acc_example",
"conversation_id": "8600000000000@s.whatsapp.net",
"message_id": "3EB0A185AAC596E2BB602C"
}
Tài liệu thu hồi cho biết sender_id mặc định là chính tài khoản và thường có thể bỏ qua. Điền người gửi khác không mở rộng quyền. Không tự đặt một thời hạn sửa chung cho mọi kênh hoặc áp quyền của API khác vào các yêu cầu này.
Tách kết quả yêu cầu khỏi việc dọn bản sao
Ví dụ phản hồi thành công của cả hai endpoint có data.ok: true. Hãy ghi lại kết quả thực tế, nhưng không diễn giải thành việc mọi người nhận và hệ thống sau đã xóa nội dung cũ.
| Quan sát | Cách xử lý đề xuất |
|---|---|
501 unsupported_by_provider | Tắt tổ hợp kênh/thao tác đó, không lặp lại yêu cầu nguyên trạng |
edit_message_failed hoặc revoke_message_failed | Xem lỗi và ngữ cảnh mục tiêu trước khi quyết định |
| HTTP hết thời gian chờ hoặc mất phản hồi | Giữ kết quả chưa rõ, điều tra trước khi gửi lại |
Có message.updated hoặc message.deleted tương ứng | Áp dụng quan sát vào đúng tin theo cách idempotent |
| Không có sự kiện tương ứng | Không suy ra thành công hay thất bại chỉ từ sự vắng mặt |
Lưu request_id theo hướng dẫn truy vết yêu cầu để điều tra. Nó không phải token idempotency hay khóa liên kết webhook được bảo đảm.
Khi nhận sự kiện, tuân theo hợp đồng phân phối: đặt signing_secret, xác minh HMAC-SHA256 trên dấu thời gian và phần thân nguyên bản, kiểm tra độ mới rồi lưu bền vững trước khi xác nhận. Thứ tự sự kiện không được bảo đảm. Bản sao do bạn quản lý trong tìm kiếm, CRM hoặc ngữ cảnh AI vẫn cần dọn riêng; xem hướng dẫn dọn nội dung đã thu hồi để hiểu ranh giới này.
Câu hỏi thường gặp
Có thể thay tệp đính kèm qua endpoint sửa không?
Thao tác được mô tả chỉ dành cho tin văn bản. Không dùng content như trường thay thế nội dung đa phương tiện.
Ẩn trong hộp thư có làm tin biến mất phía khách không?
Không. Hiển thị cục bộ và thu hồi phía nhà cung cấp là hai thao tác khác nhau. Cần ghi rõ phạm vi trên giao diện.
Hỗ trợ message.deleted nghĩa là lần thu hồi nào cũng có callback?
Không. Ánh xạ sự kiện không bảo đảm mọi tài khoản hay môi trường phía trên đều phát ra mọi sự kiện. Lưu kết quả HTTP riêng với trạng thái quan sát.
Bước tiếp theo và nguồn
Bắt đầu từ tài liệu thu hồi tin rồi kiểm tra luồng chọn và xác nhận trong cuộc trò chuyện thử nghiệm được cho phép. UnifyPort là giao diện không chính thức, không thay thế quy tắc nền tảng và không bảo đảm xóa bản sao bên ngoài.
Đối chiếu ngày 2026-10-12:
Biến tích hợp nhắn tin thành một pipeline sản phẩm ổn định.
Bắt đầu bằng cách gửi qua một API, rồi đưa mọi tin nhắn inbound trở lại hệ thống kinh doanh bằng sự kiện chuẩn.