Edit Message

Mutation · editMessage

editMessage(content: String!, id: ID!): MessageView!

Sửa nội dung văn bản của một tin nhắn đã gửi. Người gửi phải còn là thành viên conversation; người khác không thể sửa tin. Nội dung mới có ít nhất một ký tự không phải khoảng trắng và dài tối đa 10.000 ký tự, kể cả khi tin có tệp đính kèm. Không thể sửa tin đã xóa mềm. Mutation giữ nguyên ID, sequence, người gửi, câu trả lời và tệp đính kèm; updatedAt phản ánh lần cập nhật. Server phát messageUpdated sau khi lưu để các client đang kết nối cập nhật bản tin.

Gửi mutation qua HTTP POST /graphql với Authorization: Bearer <accessToken>. Subscription là thông báo realtime; client có thể dùng messages hoặc messagesSince để đọc lại trạng thái đã lưu khi cần.

Input

Đối sốKiểu GraphQLBắt buộcQuy tắc và ý nghĩa
idID!CóUUID của tin nhắn cần sửa; không có giá trị mặc định.
contentString!CóVăn bản mới, tối đa 10.000 ký tự và không chỉ gồm khoảng trắng. Không nhận null; không có giá trị mặc định.

Output

Trả về MessageView!, không null, với nội dung và updatedAt mới. Các trường danh sách bên dưới không chứa phần tử null.

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 EditMessage($id: ID!, $content: String!) {
  editMessage(id: $id, content: $content) {
    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",
  "content": "Chào cả nhóm"
}

Phản hồi minh họa:

{
  "data": {
    "editMessage": {
      "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": "Chào cả nhóm",
      "replyToMessageId": null,
      "replyTo": null,
      "createdAt": "2026-09-26T09:01:00.000Z",
      "updatedAt": "2026-09-26T09:05:00.000Z",
      "deletedAt": null,
      "attachments": [],
      "reactions": []
    }
  }
}

Thiếu hoặc sai access token trả UNAUTHENTICATED. ID sai định dạng, nội dung rỗng/toàn khoảng trắng hoặc quá dài, hay sửa tin đã xóa 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.

Chữ ký operation được tạo từ GraphQL schema.