Message Updated

Subscription · messageUpdated

messageUpdated(conversationId: ID!): MessageView!

Nhận trạng thái tin nhắn sau khi người gửi sửa nội dung bằng editMessage, hoặc một thành viên thêm/gỡ phản ứng bằng addReaction/removeReaction. Các thao tác phản ứng cũng cập nhật updatedAt; gỡ phản ứng chưa tồn tại vẫn có thể phát một payload với danh sách reactions không đổi. Xóa tin dùng subscription riêng messageDeleted, không đi qua stream này.

Kết nối GraphQL WebSocket (graphql-ws) tại wss://<host>/graphql hoặc ws://<host>/graphql trong môi trường local. Truyền connectionParams.authorization: "Bearer <accessToken>". Người gọi phải là thành viên conversation; server kiểm tra quyền khi đăng ký và trước mỗi sự kiện, đồng thời kiểm tra lại access token. Nếu mất kết nối, truy vấn lại các trang messages liên quan để lấy trạng thái tin cũ. messagesSince chỉ lấy sequence mới, nên không tự khôi phục chỉnh sửa hoặc phản ứng bị bỏ lỡ trên tin đã có.

Input

Đối sốKiểu GraphQLBắt buộcQuy tắc và ý nghĩa
conversationIdID!CóUUID của conversation muốn theo dõi; không nhận null, không có giá trị mặc định.

Output

Mỗi sự kiện trả về MessageView!, không null, với nội dung hoặc reactions và updatedAt sau khi thao tác hoàn tất. Đây là thông báo realtime, không phải nguồn dữ liệu bền vững.

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ụ

subscription MessageUpdated($conversationId: ID!) {
  messageUpdated(conversationId: $conversationId) {
    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:

{
  "conversationId": "33333333-3333-4333-8333-333333333333"
}

Một payload minh họa sau khi thêm phản ứng:

{
  "data": {
    "messageUpdated": {
      "id": "55555555-5555-4555-8555-555555555555",
      "clientMessageId": "send-005",
      "conversationId": "33333333-3333-4333-8333-333333333333",
      "senderId": "22222222-2222-4222-8222-222222222222",
      "sequence": 5,
      "type": "TEXT",
      "content": "Chào bạn",
      "replyToMessageId": null,
      "replyTo": null,
      "createdAt": "2026-09-26T09:01:00.000Z",
      "updatedAt": "2026-09-26T09:05:00.000Z",
      "deletedAt": null,
      "attachments": [],
      "reactions": [
        {
          "emoji": "👍",
          "userIds": ["11111111-1111-4111-8111-111111111111"]
        }
      ]
    }
  }
}

Thiếu hoặc sai Bearer token bị từ chối khi kết nối; ID sai định dạng trả BAD_USER_INPUT, còn người không phải thành viên conversation nhận FORBIDDEN. Token hết hạn hoặc quyền thành viên bị thu hồi khiến lần phát tiếp theo ngừng stream.

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