チャンネル

Prev Next

Classic/VPC環境で利用できます。

チャンネル

Ncloud Chatでチャンネルは、ユーザーがグループでコミュニケーションできる仮想空間です。チャンネルを通じてユーザーは特定のトピックや目的に合わせて情報を共有し、チームワークを強化してコミュニケーションを組織化できます。チャンネルは業務効率を高め、特定のグループ内のコミュニケーションを一元化して管理できる便利なツールです。以下は Ncloud Chatのチャンネル機能の詳細な説明です。

チャンネルの主な機能

  1. グループコミュニケーション : チャンネルを作成し、特定のグループのメンバーとコミュニケーションできます。この機能は、プロジェクトチーム、部署、クラブなど様々な形のグループに適しています。
  2. メッセージとファイル共有 : チャンネル内では、テキストメッセージ、画像、動画、文書など様々な形式のファイルを簡単に共有できます。
  3. リアルタイム更新 : チャンネル内のすべてのアクティビティはリアルタイムで更新され、すべての参加者が最新の情報に触れることができます。
  4. 管理者制御 : チャンネルの作成者または管理者は、チャンネルの設定を変更したりユーザーを追加/削除する権限があります。
  5. 通話とビデオ会議機能 : 一部のチャンネルでは音声通話やビデオ会議をサポートし、メンバー間の会話をより効果的に行うことができます。
  6. 通知設定 : ユーザーはチャンネルごとに通知を設定して、重要なメッセージを見逃さないようにすることができます。
  7. 検索機能 : チャンネル内の会話やファイルを簡単に検索できるので、必要な情報を素早く見つけることができます。

チャンネル管理

  • チャンネル作成 : ユーザーは目的に合ったチャンネルを新たに作成でき、チャンネル名、説明、メンバーなどの情報を設定できます。
  • チャンネル招待 : チャンネルの管理者は、他のユーザーをチャンネルに招待できます。招待されたユーザーは、招待を承諾または拒否できます。
  • メンバー管理 : 管理者はチャンネルメンバーの権限を設定したり、メンバーをチャンネルから削除できます。

セキュリティ

  • データセキュリティ : チャンネル内のすべてのデータは暗号化されて送信され、サーバに安全に保存されます。
  • 個人情報保護 : チャンネル内で共有される情報は、チャンネルメンバー間でのみアクセス可能で、外部に流出しないように保護されます。

Ncloud Chatのチャンネル機能を活用することで、組織内または個人的なコミュニケーションを円滑にし、情報を効果的に管理できます。このような特性は、特に大規模な組織や様々なプロジェクトを管理する際に非常に役立ちます。

チャンネル作成

すべての会話はチャンネルを作成する必要があり、チャンネル内に参加することで正常にチャットできます。以下で、チャンネルを作成して登録する方法をご案内します。

Javascript/Typescript

await nc.createChannel({
    type: [TYPE], 
    name: [NAME], 
    customField: [CUSTOM_FIELD]
});
ID Type Description Required
NAME string チャンネル名 O
TYPE string チャンネルの種類(PUBLIC or PRIVATE) O
CUSTOM_FIELD string ユーザー定義フィールド、JSON Stringで入力すると様々に活用可能 X

Android (Kotlin)

NChat.createChannel([TYPE], [NAME], [CUSTOM_FIELD]) { result, e -> 
    if (e != null) {
        // 失敗
    } else {
       // 成功
    }
}
ID Type Description Required
NAME String チャンネル名 O
TYPE String チャンネルの種類(PUBLIC or PRIVATE) O
CUSTOM_FIELD String ユーザー定義フィールド、JSON Stringで入力すると様々に活用可能 X

iOS (Swift)

NChat.createChannel(NCChannel(
    name: [NAME],
    type: [.publicChannel or .privateChannel]),
    customField: [CUSTOM_FIELD])) { result in
        switch(result)
        {
        case .success(let status) :
            // 成功
            break
        case .failure(let error) :
            // エラー
            break
        }
    }
ID Type Description Required
NAME String チャンネル名 O
TYPE String チャンネルの種類(PUBLIC or PRIVATE) O
CUSTOM_FIELD String ユーザー定義フィールド、JSON Stringで入力すると様々に活用可能 X

iOS (Objective-C)

NSDictionary *channelDict = @{
    @"name": [NAME],
    @"type": [TYPE],
    @"customField": [CUSTOM_FIELD]
};

[NChatBridge.shared createChannelWithChannel:channelDict :^(NSDictionary * _Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];
ID Type Description Required
NAME NSString* チャンネル名 O
TYPE NSString* チャンネルの種類(PUBLIC or PRIVATE) O
CUSTOM_FIELD NSString* ユーザー定義フィールド、JSON Stringで入力すると様々に活用可能 X

Unity

await nc.createChannel(new NBaseSDK.Channel
{
    name = [NAME],
    type = [TYPE],    // PUBLIC or PRIVATE
    customField = [CUSTOM_FIELD]
});
ID Type Description Required
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の場合、参加できる ID X
CustomField string ユーザー定義フィールド、JSON Stringで入力すると様々に活用可能 X
参考
  • セキュリティのためにクライアントからチャンネルを作成するより、サーバからチャンネルを作成することをお勧めします。

チャンネル登録

ご希望のチャンネルに登録(ルームに参加)します。登録を解除するまで、参加しているチャンネルに再アクセス時にも自動的に参加します。

Javascript/Typescript

await nc.subscribe([CHANNEL_ID], {"language":"en"});
ID Type Description Required
CHANNEL_ID string チャンネル ID O
language string 言語コード X

Android (Kotlin)

val options: Map<String, Any?> = mapOf(
    "language" to "en",
)
NChat.subscribe([CHANNEL_ID], options) { data, e ->
    if (e != null) {
        //エラー
    } else {
       // 成功
    }
}
ID Type Description Required
CHANNEL_ID String チャンネル ID O
language String 言語コード X

iOS (Swift)

let options: [String: Any] = ["language": "en"]
NChat.subscribe(channelId: [CHANNEL_ID], options: [OPTION]) {
    result in
    switch(result)
    {
    case .success(let subscription) :
       // 成功
        break;
    case .failure(let error) :
        // エラー
        break;
    }
}

iOS (Objective-C)

[NChatBridge.shared subscribeWithChannelId:[CHANNEL _ID] :^(NSDictionary * _ Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];

Unity

Hashtable option = new Hashtable
{
    { "language", "ja" }    //自動翻訳時に必要なオプション以外にも様々なオプションを追加できます。
};
await nc.subscribe([CHANNEL_ID], option);

チャンネル登録解除

当該チャンネルへの登録を解除します。当該チャンネルからメッセージを受信できません。

Javascript/Typescript

await nc.unsubscribe([CHANNEL_ID]);

Android (Kotlin)

NChat.unsubscribe([CHANNEL_ID]) { data, e ->
    if (e != null) {
        //エラー
    } else {
       // 成功
    }
}

iOS (Swift)

NChat.unsubscribe(channelId: [CHANNEL_ID]) {
    result in
    switch(result)
    {
    case .success(let subscription) :
       // 成功
        break;
    case .failure(let error) :
        // エラー
        break;
    }
}

iOS (Objective-C)

[NChatBridge.shared unsubscribeWithChannelId:[CHANNEL _ID] :^(NSDictionary * _ Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];

Unity

await nc.unsubscribe([CHANNEL_ID]);

参加者リスト

(特定チャンネルに対し)参加者リストを取得できます。

Javascript/Typescript

const filter = { channel _id: [CHANNEL_ ID] };
const sort = { created_at: -1 };
const option = { offset: 0, per_page: 100 };
const subscriptions = await nc.getSubscriptions(filter, sort, option);

Android (Kotlin)

 // フィルタ設定
val filter: Map<String, Any?> = mapOf(
    "channel _id" to "[CHANNEL_ ID]"
)

// ソート設定
val sort: Map<String, Any?> = mapOf(
    "created_at" to -1
)

// オプション設定
val options: Map<String, Any?> = mapOf(
    "per_page" to 10,
    "offset" to 0
)
NChat.getSubscriptions(filter, sort, options) {  subscriptions, e ->
    if (e != null) {
     // エラー
    } else {
        // 成功
    }
}

iOS (Swift)

let filter: [String: Any] = ["channel _id": [CHANNEL_ ID]]
let option: [String: Any] = ["per_page": 10, "offset": 0]
let sort: [String: Any] = ["created_at": "-1"]

NChat.getSubscriptions(filter: filter, option: option, sort: sort) { result in
    switch(result)
    {
    case .success(let subscriptions) :
        // 成功
        break;
    case .failure(let error) :
        // エラー
        break;
    }
}

iOS (Objective-C)

[NChatBridge.shared getSubscriptionsWithCompletion:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];

Unity

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
ID Type Description
filter object クエリをフィルタ。すべてのフィールドに対して検索可能
sort object ソートしたいフィールドのフィルタを定義
option object オプションが存在する場合、以下を参照
  • Filter
ID Type Description
project_id String プロジェクト ID
channel_id String チャンネル ID
user_id String ユーザー ID
language String 言語
uniquekey String ユニークキー
online Boolean オンラインステータス
push Boolean プッシュ通知の使用有無
created_at String 作成日
updated_at String 更新日
  • Sort
ID Type Description
created_at number 作成日(昇順「1」、降順「-1」)
  • Options
ID Type Description
offset number 開始 offset
per_page number リターン数(最大100個)

応用編

特定チャンネルに対しオンラインアクセスステータスの訪問者リストのみ取得するには、filterに onlineを trueで追加します。

Unity

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
ID Type Description
id string ユニーク ID
channel_id string チャンネル ID
user_id string ユーザーの固有 ID
created_at string 作成日
online boolean オンライン状態の有無
push boolean プッシュ参加の有無
language string アクセス言語
channel string チャンネル情報
mark.user_id string 最後にメッセージを送信したユーザー
mark.message_id string 最後のメッセージ ID
mark.sort_id string 最後のメッセージソート ID
mark.unread string 最後のメッセージ以降に、未読のメッセージ数

チャンネル情報

  • ChannelData data class
ID Type Description
totalCount Int チャンネルの総数
channels Channel チャンネルのデータリスト
  • Channel Data Class
ID Type Description
id string チャンネル ID(unique)
project_id string プロジェクト ID
name string チャンネル名
user_id string (チャンネルを作成した)ユーザー ID
user User (チャンネルを作成した)ユーザー情報
unique_id string 開発会社で設定できるチャンネル ID(unique)
type string チャンネルの種類(PUBLIC or PRIVATE)
members string 参加いているユーザーリスト
push boolean プッシュメッセージのサポート有無
disabled boolean チャンネルステータス
customField string ユーザー定義データ
subscribed boolean 呼び出しユーザーのチャンネル登録の有無
unread int 未読のメッセージ数
created_at string 作成日
updated_at string 更新日
last_message Message 最後のメッセージ情報

チャンネルデータを取得する

プロジェクトのチャンネルデータをリスト形式で取得するには、以下のコードを使用します。

Javascript/Typescript

const filter = { state: true };
const sort = { created_at: -1 };
const option = { offset: 0, per_page: 100 };
const channels = await nc.getChannels(filter, sort, option);

Android (Kotlin)

val filter: Map<String, Any?> = mapOf(
    "state" to true
)
val sort: Map<String, Any?> = mapOf(
    "created_at" to -1
)
val options: Map<String, Any?> = mapOf(
    "per_page" to 10,
    "offset" to 0
)
NChat.getChannels(filter, sort, options) { channelData, e ->
    if (e != null) {
       // エラー
    } else {
        // 成功
    }
}

iOS (Swift)

let filter: [String: Any] = ["state": true]
let option: [String: Any] = ["per_page": 10, "offset": 0]
let sort: [String: Any] = ["created_at": "-1"]

NChat.getChannels(filter: filter, option: option, sort: sort) { result in
    switch(result)
    {
    case .success(let channelData) :
        // 成功
        break;
    case .failure(let error) :
        // 失敗
        break;
    }
}

iOS (Objective-C)

[NChatBridge.shared getChannelsWithFilter:@{} option:@{} sort:@{} :^(NSDictionary * _Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];

Unity

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
ID Type Description Required
filter object クエリをフィルタ。すべてのフィールドに対して検索可能 O
sort object ソートしたいフィールドのフィルタを定義 X
option object オプションが存在する場合、以下を参照 X
  • Filter
ID Type Description
id String チャンネル ID
project_id String プロジェクト ID
name String チャンネル名
user_id String ユーザー ID
unique_id String ユニーク ID
type String チャンネルタイプ
push Boolean プッシュ通知の使用有無
disabled Boolean 無効化の有無
customField String ユーザー定義フィールド
link_url String リンク URL
image_url String 画像 URL
subscribed Boolean 登録有無
unread Int 未読のメッセージ数
created_at String 作成日
updated_at String 更新日
  • Sort
ID Type Description
created_at number 作成日(昇順「1」、降順「-1」)
  • Option
ID Type Description
offset number 開始 offset
per_page number リターン数(最大100個)

個別チャンネル

  • 個別チャンネルに関する情報を取得できます。

Javascript/Typescript

const channel = await nc.getChannel(channelId);

Android (Kotlin)

NChat.getChannel([CHANNEL_ID]) { channel, e ->
    if (e != null) {
       // エラー
    } else {
        // 成功
    }
}

iOS (Swift)

NChat.getChannel(channelId: [CHANNEL_ID]) { result in
    switch(result)
    {
    case .success(let channel) :
        // 成功
        break;
    case .failure(let error) :
        // 失敗
        break;
    }
}

iOS (Objective-C)

[NChatBridge.shared getChannelWithChannelId:[CHANNEL _ID] :^(NSDictionary * _ Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];

Unity

Channel channel = await nc.getChannel(id);

チャンネル内にユーザーを招待

PRIVATEチャンネルの場合、参加を希望するユーザーを招待します。

Javascript/Typescript

const channel = await nc.addUsers(channelId, [userIds], {
    message: "user joins",
});

Android (Kotlin)

val userIds = listOf("user1", "user2")
NChat.addUsers([CHANNEL_ID],userIds) { channel, e->
    if (e != null) {
        // エラー
    } else {
        // 成功
    } 
}

iOS (Swift)

let userIds = ["userId1", "userId2", "userId3"] // サンプルユーザーの ID配列
NChat.addUsers(channelId: [CHANNEL_ID], userIds: userIds) { result in
    switch(result)
    {
    case .success(let channel) :
        // 成功
        break;
    case .failure(let error) :
        // 失敗
        break;
    }
}

iOS (Objective-C)

[NChatBridge.shared addUsersWithChannelId:[CHANNEL _ID] userIds:@[[USER_ ID]] :^(NSDictionary  * _Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];

Unity

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

チャンネル内でユーザーを削除

PRIVATEチャンネルの場合、参加しているユーザーを削除します。

Javascript/Typescript

const channel = await nc.removeUsers(channelId, [user_id], {
    message: "user removed",
});

Android (Kotlin)

val userIds = listOf("user1", "user2")
NChat.removeUsers([CHANNEL_ID],userIds) { channel, e->
    if (e != null) {
        // エラー
    } else {
        // 成功
    } 
}

iOS (Swift)

let userIds = ["userId1", "userId2", "userId3"] // サンプルユーザーの ID配列
NChat.removeUsers(channelId: [CHANNEL_ID], userIds: userIds) { result in
    switch(result)
    {
    case .success(let channel) :
        // 成功
        break;
    case .failure(let error) :
        // 失敗
        break;
    }
}

iOS (Objective-C)

[NChatBridge.shared removeUsersWithChannelId:[CHANNEL _ID] userIds:@[[USER_ ID]] :^(NSDictionary  * _Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];

Unity

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

チャンネル内でユーザーをブロック

チャンネル内でユーザーをブロックします。チャンネルを作成した権限を持つユーザーや、全体管理者のみ使用できます。

Javascript/Typescript

const subscribe = await nc.banUser(channelId, id, {
    timeout: 60 * 60,
    reason: "暴言によりブロックされました。",
});

Android (Kotlin)

val options: Map<String, Any?> = mapOf(
    "timeout" to [終了時間(秒)],
    "reason" to "[ブロック理由]"
)
NChat.banUser([CHANNEL_ID], userId, options) { channel, e->
    if (e != null) {
        // エラー
    } else {
        // 成功
    } 
}

iOS (Swift)

let option: [String: Any] = ["timeout": [終了時間(秒)], "reason": "[ブロック理由]"]
NChat.banUser(channelId: [CHANNEL_ID], userId: userId, options: options) { result in
    switch(result)
    {
    case .success(let channel) :
        // 成功
        break;
    case .failure(let error) :
        // 失敗
        break;
    }
}

iOS (Objective-C)

[NChatBridge.shared banUserWithChannelId:[CHANNEL _ID] userId:[USER_ ID] options:@{@"timeout": [終了時間(秒)], @"reason": [ブロック理由]} :^(NSDictionary  * _Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];

Unity

Hashtable option = new Hashtable
{
    { "timeout", [終了時間(秒)] },
    { "reason", [ブロック理由] }
};
await nc.banUser(channelId, userId, options);
  • Options Data Class
ID Type Description
timeout string ブロック時間(seconds)
reason string ブロック理由

チャンネル内でユーザーブロックを解除

チャンネル内でブロックしたユーザーのブロックを解除します。チャンネルを作成した権限を持つユーザーや、全体管理者のみ使用できます。

Javascript/Typescript

const subscribe = await nc.unbanUser(channelId, id);

Android (Kotlin)

NChat.unbanUser([CHANNEL_ID],userId) { channel, e->
    if (e != null) {
        // エラー
    } else {
        // 成功
    } 
}

iOS (Swift)

NChat.unbanUser(channelId: [CHANNEL_ID],userId: userId) { result in
    switch(result)
    {
    case .success(let channel) :
        // 成功
        break;
    case .failure(let error) :
        // 失敗
        break;
    }
}

iOS (Objective-C)

[NChatBridge.shared unbanUserWithChannelId:[CHANNEL _ID] userId:userId :^(NSDictionary * _ Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];

Unity

await nc.unbanUser(channelId, userId);

チャンネル削除

当該チャンネルを削除します(1つまたは複数同時に削除できます)。

Javascript/Typescript

const channel = await nc.deleteChannel(channelId);

Android(Kotlin)

NChat.deleteChannel([CHANNEL_ID]) { channel, e->
    if (e != null) {
        //  エラー
    } else {
        // 成功
    }
}

iOS(Swift)

NChat.deleteChannel(channelId: [CHANNEL_ID]) { result in
    switch(result)
    {
    case .success(let channel) :
        // 成功
        break
    case .failure(let error) :
        // 失敗
        break
    }
}

iOS (Objective-C)

[NChatBridge.shared deleteChannelWithChannelId:[CHANNEL _ID] :^(NSDictionary * _ Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];

Unity

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

チャンネル変更

チャンネル情報を更新します。

Javascript/Typescript

const channel = await nc.updateChannel(channelId, {
    name,
    type: "PUBLIC",
    members: [],
});

Android(Kotlin)

import com.nbase.adpater.cloudchat.model.Channel

val newChannel = Channel(name = "New Channel2")
NChat.updateChannel([CHANNEL_ID], newChannel) { channel, e->
    if (e != null) {
        // エラー
    } else {
        // 成功
    }
}

iOS(Swift)

var newChannel: NCChannel = NCChannel(name: "New Channel2")
NChat.updateChannel(channelId: [CHANNEL_ID], channel: newChannel) { result in
    switch(result)
    {
    case .success(let channel) :
        // 成功
        break
    case .failure(let error) :
        // 失敗
        break
    }
}

iOS (Objective-C)

NSMutableDictionary *channelDict = [NSMutableDictionary dictionary];
channelDict[@"name"] = @"New Channel2";

[NChatBridge.shared updateChannelWithChannelId:[CHANNEL _ID] channel:channelDict :^(NSDictionary * _ Nullable result, NSError * _Nullable error) {
    if (error) {
        // エラー
    } else {
        // 成功
    }
}];

Unity

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