Delete Message
Mutation · deleteMessage
deleteMessage(id: ID!): MessageView!
Xóa mềm tin nhắn của chính người gửi trong DM hoặc kênh. Người gửi phải còn là thành viên conversation. Tin vẫn giữ id và sequence trong lịch sử, nhưng phản hồi có content: null, deletedAt là thời điểm xóa và attachments: []. Bản ghi tệp đính kèm bị gỡ; server cố gắng xóa đối tượng tải lên riêng sau khi lưu. Tệp thư viện đã chia sẻ vẫn thuộc thư viện nên nội dung tệp đó không bị xóa bởi mutation này. Phản ứng cũ vẫn có thể hiện trong reactions.
Gọi lại trên tin đã xóa trả cùng trạng thái đã xóa. Server phát messageDeleted sau mutation; dùng query lịch sử để khôi phục trạng thái nếu client bỏ lỡ sự kiện. Gửi qua HTTP POST /graphql với Authorization: Bearer <accessToken>.
Input
| Đối số | Kiểu GraphQL | Bắt buộc | Quy tắc và ý nghĩa |
|---|---|---|---|
id | ID! | Có | UUID của tin nhắn cần xóa; không nhận null, không có giá trị mặc định. |
Output
Trả về MessageView!, không null. content bị che và attachments rỗng, còn sequence không đổi để lịch sử và đồng bộ tiếp tục theo thứ tự cũ.
MessageView
| Trường | Kiểu GraphQL | Ý nghĩa |
|---|---|---|
id | ID! | ID tin nhắn trên server. |
clientMessageId | String! | ID client đã gửi. |
conversationId | ID! | Conversation chứa tin nhắn. |
senderId | ID! | Người gửi. |
sequence | Int! | Thứ tự tăng trong conversation. |
type | MessageType! | TEXT là tin do người dùng gửi; enum cũng có SYSTEM. |
content | String | Nội dung; có thể rỗng với tin chỉ có tệp, hoặc null khi tin đã xóa mềm. |
replyToMessageId | ID | ID tin được trả lời hoặc null. |
replyTo | MessageSummary | Tóm tắt tin được trả lời hoặc null; xem MessageSummary. |
createdAt | DateTime! | Thời điểm tạo. |
updatedAt | DateTime! | Thời điểm cập nhật. |
deletedAt | DateTime | Thời điểm xóa mềm hoặc null. |
attachments | [MessageAttachmentView!]! | Tệp đính kèm; danh sách và phần tử không null. Xem MessageAttachmentView. |
reactions | [ReactionSummary!]! | Phản ứng nhóm theo emoji; danh sách và phần tử không null. Xem ReactionSummary. |
MessageSummary
| Trường | Kiểu GraphQL | Ý nghĩa |
|---|---|---|
id | ID! | ID tin được trả lời. |
senderId | ID! | Người gửi tin đó. |
content | String | Nội dung hoặc null nếu đã xóa. |
deletedAt | DateTime | Thời điểm xóa mềm hoặc null. |
MessageAttachmentView
| Trường | Kiểu GraphQL | Ý nghĩa |
|---|---|---|
id | ID! | ID tệp đính kèm để lấy URL tải hoặc xem trước. |
fileName | String! | Tên tệp sau khi server xử lý. |
contentType | String! | MIME type đã lưu. |
size | Int! | Kích thước byte do client báo. |
ReactionSummary
| Trường | Kiểu GraphQL | Ý nghĩa |
|---|---|---|
emoji | String! | Emoji phản ứng. |
userIds | [ID!]! | ID người đã dùng emoji này; danh sách và phần tử không null. |
Ví dụ
mutation DeleteMessage($id: ID!) {
deleteMessage(id: $id) {
id
clientMessageId
conversationId
senderId
sequence
type
content
replyToMessageId
replyTo { id senderId content deletedAt }
createdAt
updatedAt
deletedAt
attachments { id fileName contentType size }
reactions { emoji userIds }
}
}
Biến:
{
"id": "55555555-5555-4555-8555-555555555555"
}
Phản hồi minh họa:
{
"data": {
"deleteMessage": {
"id": "55555555-5555-4555-8555-555555555555",
"clientMessageId": "send-005",
"conversationId": "33333333-3333-4333-8333-333333333333",
"senderId": "11111111-1111-4111-8111-111111111111",
"sequence": 5,
"type": "TEXT",
"content": null,
"replyToMessageId": null,
"replyTo": null,
"createdAt": "2026-09-26T09:01:00.000Z",
"updatedAt": "2026-09-26T09:05:00.000Z",
"deletedAt": "2026-09-26T09:05:00.000Z",
"attachments": [],
"reactions": []
}
}
}
Thiếu hoặc sai access token trả UNAUTHENTICATED; ID sai định dạng trả BAD_USER_INPUT, ID không tồn tại trả NOT_FOUND. Không còn là thành viên conversation hoặc không phải người gửi trả FORBIDDEN. Sau khi xóa, URL tải tệp đính kèm cũ không còn cấp được vì bản ghi tệp đã bị gỡ.
Chữ ký operation được tạo từ GraphQL schema.