채널

채널

Game Chat에서 채널은 사용자들이 그룹으로 소통할 수 있는 가상의 공간입니다. 채널을 통해 사용자는 특정 주제나 목적에 맞게 정보를 공유하고, 팀워크를 강화하며, 커뮤니케이션을 조직화할 수 있습니다. 채널은 업무 효율을 높이고, 특정 그룹 내 커뮤니케이션을 중앙집중화하여 관리할 수 있는 유용한 도구입니다. 아래는 Game Chat의 채널 기능에 대한 자세한 설명입니다.

채널의 주요 기능

  1. 그룹 커뮤니케이션: 채널을 생성하여 특정 그룹의 멤버들과 소통할 수 있습니다. 이는 프로젝트 팀, 부서, 클럽 등 다양한 형태의 그룹에 적합합니다.

  2. 메시지 및 파일 공유: 채널 내에서는 텍스트 메시지, 이미지, 동영상, 문서 등 다양한 형태의 파일을 쉽게 공유할 수 있습니다.

  3. 실시간 업데이트: 채널 내의 모든 활동은 실시간으로 업데이트되어, 모든 참여자가 최신의 정보를 접할 수 있습니다.

  4. 관리자 제어: 채널의 생성자 또는 관리자는 채널 설정을 변경하거나 사용자를 추가/제거할 권한을 가집니다.

  5. 통화 및 화상회의 기능: 일부 채널에서는 음성 통화나 화상 회의를 지원하여, 멤버 간의 대화를 더욱 효과적으로 할 수 있습니다.

  6. 알림 설정: 사용자는 채널별로 알림을 설정하여 중요한 메시지를 놓치지 않도록 할 수 있습니다.

  7. 검색 기능: 채널 내의 대화나 파일을 쉽게 검색할 수 있어, 필요한 정보를 빠르게 찾을 수 있습니다.

채널 관리

  • 채널 생성: 사용자는 목적에 맞는 채널을 새로 생성할 수 있으며, 채널명, 설명, 멤버 등의 정보를 설정할 수 있습니다.

  • 채널 초대: 채널의 관리자는 다른 사용자를 채널에 초대할 수 있습니다. 초대받은 사용자는 초대를 수락하거나 거절할 수 있습니다.

  • 멤버 관리: 관리자는 채널 멤버의 권한을 설정하거나 멤버를 채널에서 제거할 수 있습니다.

보안

  • 데이터 보안: 채널 내의 모든 데이터는 암호화되어 전송되며, 서버에 안전하게 저장됩니다.

  • 개인 정보 보호: 채널 내에서 공유되는 정보는 채널 멤버들 사이에서만 접근 가능하며, 외부에 유출되지 않도록 보호됩니다.

Game Chat의 채널 기능을 활용하면 조직 내 또는 개인적인 소통을 원활하게 하고, 정보를 효과적으로 관리할 수 있습니다. 이러한 특성은 특히 대규모 조직이나 다양한 프로젝트를 관리할 때 매우 유용합니다.

채널 생성

모든 대화는 채널을 생성해야 하며 채널에 참여해야 정상적으로 채팅을 할 수 있습니다. 아래는 채널을 생성하고 구독하는 방법을 안내합니다.

await nc.createChannel(new NBaseSDK.Channel
{
    name = "New Channel",
    type =[TYPE],    // PUBLIC or PRIVATE
    customField = [CustomField]
});
IDTypeDescriptionRequired

NAME

string

채널 이름

O

TYPE

string

채널 종류 ( PUBLIC or PRIVATE )

O

UniqueID

string

고유한 ID

X

push

boolean

푸시 알림 여부

X

linkUrl

string

링크 여부

X

imageUrl

string

링크 여부

X

integrationId

string

연동 기능 (번역, 보이스 등)

X

disabled

string

채널 사용여부

X

members

array

PRIVATE 일 경우 참여 가능한 아이디

X

CustomField

string

사용자 정의 필드, JSON String으로 넣으면 다양하게 활용 가능

X

참고

보안을 위해서 클라이언트에서 채널을 생성하는 것보다는 서버를 통한 채널을 생성을 추천해 드립니다.

채널 구독

원하는 채널에 가입(방 참여)합니다. 참여된 채널에는 구독 해제할 때까지 재접속 시에도 자동으로 참여하게 됩니다.

Hashtable option = new Hashtable
{
    { "language", "en" }    // 자동 번역시 필요한 옵션 이외에도 다양한 옵션 추가 가능합니다.
};
await nc.subscribe([CHANNEL_ID], option);

채널 구독 해제

해당 채널에 대한 가입을 해지합니다. 해당 채널에서 더 이상 메시지를 받을 수 없습니다.

await nc.unsubscribe([CHANNEL_ID]);

참여자 리스트

(특정 채널에 대해) 참여자 리스트를 가져올 수 있습니다.

Hashtable filter = new Hashtable
{
    { "channel_id", channelId }
};
Hashtable sort = new Hashtable
{
    { "created_at", -1 }
};
Hashtable option = new Hashtable
{
    { "offset", 0 },
    { "per_page", 10 }
};
var subscriptions = await nc.getSubscriptions(filter, sort, option);
foreach (var subscription in subscriptions.edges)
{
    string id = subscription.node.id.ToString();
    Console.WriteLine("[CloudChatSample] id={0}", id);
}
  • Parameters

IDTypeDescription

filter

object

쿼리를 필터 모든 필드에 대해서 검색 가능

sort

object

소트하고자 하는 필드의 필터 정의 (오름차순 "1", 내림차순 "-1")

option

object

옵션이 존재할 경우 아래 참고

  • Options

IDTypeDescription

offset

number

시작 offset

per_page

number

리턴하는 개수(최대 100개)

응용편

특정 채널에 온라인 접속 상태인 접속자 목록만 가져오려면 filter에 online을 true로 추가해 주십시오.

Hashtable filter = new Hashtable
{
    { "channel_id", [CHANNEL_ID] },
    { "online" , true}
};
Hashtable sort = new Hashtable
{
    { "created_at", -1 }
};
Hashtable option = new Hashtable
{
    { "offset", 0 },
    { "per_page", 10 }
};

var subscriptions = await nc.getSubscriptions(filter, sort, option);

채널 구독

  • Subscription Data Class

    IDTypeDescription

    id

    string

    유니크 아이디

    channel_id

    string

    채널 아이디

    user_id

    string

    유저 고유 아이디

    created_at

    string

    생성 일자

    online

    boolean

    온라인 여부

    push

    boolean

    푸시 참여 여부

    language

    string

    접속 언어

    channel

    string

    채널 정보

    mark.user_id

    string

    마지막 메시지 보낸 사용자

    mark.message_id

    string

    마지막 메시지 아이디

    mark.sort_id

    string

    마지막 메시지 정렬 ID

    mark.unread

    string

    마지막 메시지 이후 안읽은 메시지 갯수

채널 정보

  • Channel Data Class

IDTypeDescription

id

string

채널 아이디 (unique)

project_id

string

프로젝트 아이디

unique_id

string

개발사에서 설정 가능한 채널 아이디 (unique)

name

string

채널 이름

user_id

string

(채널을 생성한) 유저 아이디

unique_id

string

채널 고유 ID

default_lang

string

기본 언어

lang

string

현재 접속 중인 이용자의 언어

members

string

Private일 경우 참여된 사용자 목록

last_message

array

마지막 메시지 정보 [MessageType] 참고

push

boolean

푸시 메시지 지원 여부 (Private 채널일 경우)

state

boolean

채널 상태

customField

string

사용자 정의 데이터

created_at

string

생성 일자

updated_at

string

갱신 일자

채널 데이터 가져오기

프로젝트의 채널 데이터를 목록 형태로 가져오려면 아래 코드를 사용해 주십시오.

Hashtable filter = new Hashtable
{
    { "state", true }
};
Hashtable sort = new Hashtable
{
    { "created_at", -1 }
};
Hashtable option = new Hashtable
{
    { "offset", 0 },
    { "per_page", 10 }
};
var channels = await nc.getChannels(filter,sort,option);
foreach (var channel in channels.edges)
{
    string id = channel.node.id.ToString();
    Console.WriteLine("[CloudChatSample] id={0}", id);
}
  • Parameters

IDTypeDescriptionRequired

filter

object

쿼리를 필터 모든 필드에 대해서 검색 가능

O

sort

object

소트하고자 하는 필드의 필터 정의

X

option

object

옵션이 존재할 경우 아래를 참고

X

  • Options

IDTypeDescription

offset

number

시작 offset

per_page

number

리턴하는 개수(최대 100개)

개별 채널

개별 채널에 대한 정보를 가져올 수 있습니다.

Channel channel = await nc.getChannel(id);

채널 내 사용자 초대

PRIVATE 채널의 경우 참여하고자 하는 사용자를 초대합니다.

await nc.addUsers(newChannelId, new string[] { "ID", "ID" });

채널 내 사용자 삭제

PRIVATE 채널의 경우 참여된 사용자를 삭제합니다.

await nc.removeUsers(channelId, new string[] { "ID", "ID" });

채널 내 사용자 차단

채널 내에 사용자를 차단합니다. 채널을 생성한 권한을 가지고 있는 유저나 전체 관리자만 사용이 가능합니다.

Hashtable option = new Hashtable
{
    { "timeout", [종료시간(초)] },
    { "reason", [차단사유] }
};
await nc.banUser(channelId, userId, options);
  • Options Data Class

IDTypeDescription

timeout

string

차단 시간 (seconds)

reason

string

차단 사유

채널 내 사용자 차단 해제

채널 내에 차단한 사용자의 차단을 해제합니다. 채널을 생성한 권한을 가지고 있는 유저나 전체 관리자만 사용이 가능합니다.

await nc.unbanUser(channelId, userId);

채널 삭제

해당 채널을 삭제합니다 (한 개 또는 여러 개를 삭제할 수 있습니다).

Channel channel = await nc.deleteChannel([CHANNEL_ID]);

채널 수정

채널 정보를 업데이트합니다.

Channel channel = await nc.updateChannel([CHANNEL_ID],new NBaseSDK.Channel
{
    name = "Update Channel",
    type =[TYPE],    // PUBLIC or PRIVATE
    customField = [CustomField]
});

Last updated