Set Conversation Pinned

Mutation · setConversationPinned

setConversationPinned(conversationId: ID!, pinned: Boolean!): ConversationView!

Ghim hoặc bỏ ghim một DM hay kênh cho riêng người gọi. Ghim lần đầu lưu thời điểm vào pinnedAt; gọi lại với true giữ nguyên thời điểm đó, còn false xóa nó. Thành viên khác không bị ảnh hưởng. Query conversations vẫn sắp theo thời điểm tạo conversation; client có thể dùng pinnedAt để trình bày các mục đã ghim.

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; GUEST có thể ghim conversation mà họ đã được thêm vào.

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.
pinnedBoolean!Cótrue để ghim, false để bỏ ghim. Không nhận null; không có giá trị mặc định.

Output

Trả về ConversationView!, không null; pinnedAt là thời điểm ghim của người gọi hoặc null khi bỏ ghim.

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.
lastMessageSequenceIntMốc sequence tin nhắn gần nhất, hoặc null nếu chưa có tin nhắn.
members[ConversationMemberView!]!Thành viên conversation; danh sách 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.

Ví dụ

mutation SetConversationPinned($conversationId: ID!, $pinned: Boolean!) {
  setConversationPinned(conversationId: $conversationId, pinned: $pinned) {
    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",
  "pinned": true
}

Phản hồi minh họa:

{
  "data": {
    "setConversationPinned": {
      "id": "33333333-3333-4333-8333-333333333333",
      "workspaceId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
      "type": "CHANNEL",
      "visibility": "PRIVATE",
      "isDefault": false,
      "title": "Thiết kế",
      "description": "Bản thiết kế và phản hồi",
      "createdAt": "2026-09-20T09:00:00.000Z",
      "updatedAt": "2026-09-24T10:00:00.000Z",
      "pinnedAt": "2026-09-26T11:00:00.000Z",
      "muted": false,
      "lastMessageSequence": 4,
      "members": [
        {
          "userId": "11111111-1111-4111-8111-111111111111",
          "username": "an",
          "displayName": "An",
          "avatarUrl": null,
          "role": "OWNER",
          "lastReadSequence": 4
        },
        {
          "userId": "22222222-2222-4222-8222-222222222222",
          "username": "binh",
          "displayName": "Bình",
          "avatarUrl": null,
          "role": "MEMBER",
          "lastReadSequence": 2
        }
      ]
    }
  }
}

Thiếu hoặc sai access token trả UNAUTHENTICATED. ID sai định dạng trả BAD_USER_INPUT; người không phải thành viên conversation nhận FORBIDDEN. Gọi với pinned: false khi chưa ghim vẫn trả pinnedAt: null.

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