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 GraphQL | Bắt buộc | Quy tắc và ý nghĩa |
|---|---|---|---|
conversationId | ID! | Có | UUID của DM hoặc kênh; không có giá trị mặc định. |
sequence | Int! | 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ường | Kiểu GraphQL | Ý nghĩa |
|---|---|---|
id | ID! | ID conversation. |
workspaceId | ID! | Workspace chứa conversation. |
type | ConversationType! | CHANNEL là kênh; DIRECT là DM hai người. |
visibility | ConversationVisibility! | PUBLIC hoặc PRIVATE; DM là PRIVATE. |
isDefault | Boolean! | true với kênh mặc định #general. |
title | String | Tên kênh; DM thường là null. |
description | String | Mô tả kênh hoặc null. |
createdAt | DateTime! | Thời điểm tạo conversation. |
updatedAt | DateTime! | Thời điểm cập nhật được lưu của conversation. |
pinnedAt | DateTime | Thời điểm người gọi ghim conversation, hoặc null. |
muted | Boolean! | Lựa chọn tắt thông báo @mention của người gọi. |
lastMessageSequence | Int | Sequence 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ường | Kiểu GraphQL | Ý nghĩa |
|---|---|---|
userId | ID! | ID người dùng. |
username | String! | Username. |
displayName | String! | Tên hiển thị. |
avatarUrl | String | URL ảnh đại diện hoặc null. |
role | MemberRole! | Vai trò trong conversation: OWNER, ADMIN hoặc MEMBER. |
lastReadSequence | Int! | 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.