Mark Conversation As Read

Mutation · markConversationAsRead

markConversationAsRead(conversationId: ID!, sequence: Int!): ConversationView!

Đánh dấu các tin nhắn đến sequence là đã đọc cho riêng người gọi trong DM hoặc kênh. sequence là số thứ tự tin nhắn trong conversation, không phải ID tin nhắn hay vị trí trong một trang kết quả. Client có thể gọi mutation sau khi đã hiển thị các tin nhắn tương ứng. Khi gửi tin nhắn, mốc đọc của người gửi cũng được cập nhật tự động.

Mốc lastReadSequence chỉ tăng: gọi lại cùng mốc hoặc mốc thấp hơn không lùi trạng thái đã đọc. Nếu sequence lớn hơn lastMessageSequence, server giới hạn nó ở sequence mới nhất; conversation chưa có tin nhắn dùng mốc 0. Mutation không gửi sự kiện đọc qua subscription.

Gửi mutation qua HTTP POST /graphql với Authorization: Bearer <accessToken>. Cần đăng nhập và là thành viên của conversation; thành viên workspace chưa tham gia conversation không thể đánh dấu đã đọc.

Input

Đối sốKiểu GraphQLBắt buộcQuy tắc và ý nghĩa
conversationIdID!CóUUID của DM hoặc kênh; không có giá trị mặc định.
sequenceInt!CóMốc sequence muốn đánh dấu đã đọc; số nguyên không âm, kể cả 0. Không nhận null; không có giá trị mặc định. Giá trị vượt sequence mới nhất được giới hạn như mô tả trên.

Output

Trả về ConversationView!, không null. Trong members, bản ghi của người gọi có lastReadSequence sau khi cập nhật; mốc của các thành viên khác không thay đổi vì lời gọi này. muted và pinnedAt là tùy chọn của người gọi.

ConversationView

TrườngKiểu GraphQLÝ nghĩa
idID!ID conversation.
workspaceIdID!Workspace chứa conversation.
typeConversationType!CHANNEL là kênh; DIRECT là DM hai người.
visibilityConversationVisibility!PUBLIC hoặc PRIVATE; DM là PRIVATE.
isDefaultBoolean!true với kênh mặc định #general.
titleStringTên kênh; DM thường là null.
descriptionStringMô tả kênh hoặc null.
createdAtDateTime!Thời điểm tạo conversation.
updatedAtDateTime!Thời điểm cập nhật được lưu của conversation.
pinnedAtDateTimeThời điểm người gọi ghim conversation, hoặc null.
mutedBoolean!Lựa chọn tắt thông báo @mention của người gọi.
lastMessageSequenceIntSequence tin nhắn gần nhất, hoặc null nếu chưa có tin nhắn.
members[ConversationMemberView!]!Danh sách thành viên và phần tử không null. Xem ConversationMemberView.

ConversationMemberView

TrườngKiểu GraphQLÝ nghĩa
userIdID!ID người dùng.
usernameString!Username.
displayNameString!Tên hiển thị.
avatarUrlStringURL ảnh đại diện hoặc null.
roleMemberRole!Vai trò trong conversation: OWNER, ADMIN hoặc MEMBER.
lastReadSequenceInt!Mốc sequence đã đọc của thành viên; dùng cùng lastMessageSequence để tính số tin chưa đọc.

Ví dụ

mutation MarkConversationAsRead($conversationId: ID!, $sequence: Int!) {
  markConversationAsRead(conversationId: $conversationId, sequence: $sequence) {
    id
    workspaceId
    type
    visibility
    isDefault
    title
    description
    createdAt
    updatedAt
    pinnedAt
    muted
    lastMessageSequence
    members {
      userId
      username
      displayName
      avatarUrl
      role
      lastReadSequence
    }
  }
}

Biến:

{
  "conversationId": "33333333-3333-4333-8333-333333333333",
  "sequence": 4
}

Phản hồi minh họa, khi người gọi là an và conversation có tin nhắn đến sequence 7:

{
  "data": {
    "markConversationAsRead": {
      "id": "33333333-3333-4333-8333-333333333333",
      "workspaceId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
      "type": "DIRECT",
      "visibility": "PRIVATE",
      "isDefault": false,
      "title": null,
      "description": null,
      "createdAt": "2026-09-20T09:00:00.000Z",
      "updatedAt": "2026-09-24T10:00:00.000Z",
      "pinnedAt": null,
      "muted": false,
      "lastMessageSequence": 7,
      "members": [
        {
          "userId": "11111111-1111-4111-8111-111111111111",
          "username": "an",
          "displayName": "An",
          "avatarUrl": null,
          "role": "MEMBER",
          "lastReadSequence": 4
        },
        {
          "userId": "22222222-2222-4222-8222-222222222222",
          "username": "binh",
          "displayName": "Bình",
          "avatarUrl": null,
          "role": "MEMBER",
          "lastReadSequence": 7
        }
      ]
    }
  }
}

Thiếu hoặc sai access token trả UNAUTHENTICATED. ID sai định dạng hoặc sequence âm trả BAD_USER_INPUT; người không phải thành viên conversation nhận FORBIDDEN. Với ví dụ trên, gọi tiếp bằng sequence: 2 vẫn trả mốc đọc 4, còn sequence: 999 tăng mốc đó đến 7.

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