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 GraphQLBắt buộcQuy tắc và ý nghĩa
idID!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ườngKiểu GraphQLÝ nghĩa
idID!ID tin nhắn trên server.
clientMessageIdString!ID client đã gửi.
conversationIdID!Conversation chứa tin nhắn.
senderIdID!Người gửi.
sequenceInt!Thứ tự tăng trong conversation.
typeMessageType!TEXT là tin do người dùng gửi; enum cũng có SYSTEM.
contentStringNội dung; có thể rỗng với tin chỉ có tệp, hoặc null khi tin đã xóa mềm.
replyToMessageIdIDID tin được trả lời hoặc null.
replyToMessageSummaryTóm tắt tin được trả lời hoặc null; xem MessageSummary.
createdAtDateTime!Thời điểm tạo.
updatedAtDateTime!Thời điểm cập nhật.
deletedAtDateTimeThờ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ườngKiểu GraphQLÝ nghĩa
idID!ID tin được trả lời.
senderIdID!Người gửi tin đó.
contentStringNội dung hoặc null nếu đã xóa.
deletedAtDateTimeThời điểm xóa mềm hoặc null.

MessageAttachmentView

TrườngKiểu GraphQLÝ nghĩa
idID!ID tệp đính kèm để lấy URL tải hoặc xem trước.
fileNameString!Tên tệp sau khi server xử lý.
contentTypeString!MIME type đã lưu.
sizeInt!Kích thước byte do client báo.

ReactionSummary

TrườngKiểu GraphQLÝ nghĩa
emojiString!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.