Classic/VPC環境で利用できます。
チャンネル
Ncloud Chatでチャンネルは、ユーザーがグループでコミュニケーションできる仮想空間です。チャンネルを通じてユーザーは特定のトピックや目的に合わせて情報を共有し、チームワークを強化してコミュニケーションを組織化できます。チャンネルは業務効率を高め、特定のグループ内のコミュニケーションを一元化して管理できる便利なツールです。以下は Ncloud Chatのチャンネル機能の詳細な説明です。
チャンネルの主な機能
- グループコミュニケーション : チャンネルを作成し、特定のグループのメンバーとコミュニケーションできます。この機能は、プロジェクトチーム、部署、クラブなど様々な形のグループに適しています。
- メッセージとファイル共有 : チャンネル内では、テキストメッセージ、画像、動画、文書など様々な形式のファイルを簡単に共有できます。
- リアルタイム更新 : チャンネル内のすべてのアクティビティはリアルタイムで更新され、すべての参加者が最新の情報に触れることができます。
- 管理者制御 : チャンネルの作成者または管理者は、チャンネルの設定を変更したりユーザーを追加/削除する権限があります。
- 通話とビデオ会議機能 : 一部のチャンネルでは音声通話やビデオ会議をサポートし、メンバー間の会話をより効果的に行うことができます。
- 通知設定 : ユーザーはチャンネルごとに通知を設定して、重要なメッセージを見逃さないようにすることができます。
- 検索機能 : チャンネル内の会話やファイルを簡単に検索できるので、必要な情報を素早く見つけることができます。
チャンネル管理
- チャンネル作成 : ユーザーは目的に合ったチャンネルを新たに作成でき、チャンネル名、説明、メンバーなどの情報を設定できます。
- チャンネル招待 : チャンネルの管理者は、他のユーザーをチャンネルに招待できます。招待されたユーザーは、招待を承諾または拒否できます。
- メンバー管理 : 管理者はチャンネルメンバーの権限を設定したり、メンバーをチャンネルから削除できます。
セキュリティ
- データセキュリティ : チャンネル内のすべてのデータは暗号化されて送信され、サーバに安全に保存されます。
- 個人情報保護 : チャンネル内で共有される情報は、チャンネルメンバー間でのみアクセス可能で、外部に流出しないように保護されます。
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);
}
| ID |
Type |
Description |
| filter |
object |
クエリをフィルタ。すべてのフィールドに対して検索可能 |
| sort |
object |
ソートしたいフィールドのフィルタを定義 |
| option |
object |
オプションが存在する場合、以下を参照 |
| 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 |
更新日 |
| ID |
Type |
Description |
| created_at |
number |
作成日(昇順「1」、降順「-1」) |
| 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);
チャンネル登録
| 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 |
最後のメッセージ以降に、未読のメッセージ数 |
チャンネル情報
| ID |
Type |
Description |
| totalCount |
Int |
チャンネルの総数 |
| channels |
Channel |
チャンネルのデータリスト |
| 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);
}
| ID |
Type |
Description |
Required |
| filter |
object |
クエリをフィルタ。すべてのフィールドに対して検索可能 |
O |
| sort |
object |
ソートしたいフィールドのフィルタを定義 |
X |
| option |
object |
オプションが存在する場合、以下を参照 |
X |
| 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 |
更新日 |
| ID |
Type |
Description |
| created_at |
number |
作成日(昇順「1」、降順「-1」) |
| 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);
| 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]
});