Messages

Circle supports messaging via direct messages, group chat rooms, and chat spaces.

Chat Rooms

A Chat Room is the shared container for all real-time chat conversations in Circle.

Kind

There are two kinds of Chat Rooms:

type ChatRoomKind = 'direct' | 'group_chat'
  • direct - for one-on-one conversations

  • group_chat - for rooms with multiple people

Embedded rooms

A Chat Room can be embedded in a course lesson, live room, or a space:

  • Course Lesson:

    • When a Chat Room belongs to a Lesson for course comments, you’ll see an additional course_lesson attribute denoting the lesson ID.

  • Live Room:

    • When a Chat Room belongs to a Live Room for chat in a live stream, you’ll see an additional parent attribute denoting the live room ID.

  • Space:

    • When a Chat Room belongs to a Space as a chat space, you’ll see an additional parent attribute denoting the live room ID.

Structure

interface ChatRoom {
  id: number;
  uuid: string;
  community_id: number;
  identifier: string;
  kind: 'direct' | 'group_chat';
  name: string;
  description: string | null;
  is_embedded: boolean;
  show_history: boolean;
  last_message_id: number | null;
  pinned_message_id: number | null;
  parent_id: number | null;
  parent_type: string | null;
  created_at: Date;
  updated_at: Date;
  deleted_at: Date | null;
  community: Community;
  // available when part of a Course Lesson
  course_lesson?: CourseLesson;
  chat_room_messages: ChatRoomMessage[];
  chat_threads: ChatThread[];
  chat_room_participants: ChatRoomParticipant[];
  pinned_chat_rooms: PinnedChatRoom[];
  community_members: CommunityMember[];
  reported_participants: ReportedParticipant[];
  direct_chat_room_identifier?: DirectChatRoomIdentifier;
  last_message?: ChatRoomMessage;
  pinned_message?: ChatRoomMessage;
  // available only when the room is inside a LiveRoom or a Space (chat space)
  parent?: Space | LiveRoom;
}

Chat Room Message

A ChatRoomMessage represents a single message within a chat room. It is always attached to a ChatRoom and a participant.

Threads/Replies

A message can contain replies, or be a reply to another message. When a message contains replies, this is called a Thread.

  • The attribute parentMessageId tells you if that message you are looking at is part of a thread.

  • The attribute hasReplies tells you if that message has any nested replies.

Structure

interface ChatRoomMessage {
  id: number
  chat_room_id: number
  chat_room_uuid: string
  chat_room_participant_id: number
  body: string
  bookmark_id: number | null
  // uses TipTap, similar to Posts but a simplified version
  rich_text_body?: TipTapRichBodyText
  sent_at: string
  created_at: string
  updated_at: string | null
  deleted_at: string | null
  edited_at?: string | null
  embedded: false
  chat_thread_id?: number
  reactions: ChatMessageReaction[]
  creation_uuid?: string
  sender: {
    id: number
    name: string
    community_member_id: number
    user_public_uid: string
    avatar_url: string
  }
  thread_participant_avatar_urls: string[]
  parent_message_id: number | null
  replies_count: number
  total_thread_participants_count: number
  thread_participants_preview?: OtherParticipant[]
  chat_thread_replies_count: number
}

type ReactionEmoji = 'thumbsup' | 'heart' | 'joy' | 'open_mouth' | 'cry' | 'pray' | 'tada'

type ChatMessageReaction = {
  emoji: ReactionEmoji
  count: number
  community_member_ids: number[]
}

Last updated