ゲーム内IM統合ガイド

ゲームにおいて、インスタントメッセージングのニーズがよく発生します。マルチプレイヤーゲームでは、インスタントチャットが不可欠な機能となっています。ゲームプラットフォーム自体に関わる、グループタイプ、カスタムメッセージタイプ(例えば、ゲーム内で道具を贈るとか取引をするなどの業務)、グローバルアクセスなどに対するニーズは比較的複雑です。開発者が迅速に業務を理解し、ニーズを実装するように、本書では、ゲームチャットを構築中によく見られるニーズの実装方法、発生しうる問題、注意事項などを整理し、参考として提供します。



準備作業

キーを使用したUserSigの計算

IMのアカウントシステムでは、ユーザーログインに必要なパスワードはユーザーのサーバーでIMが提供するキーを使用して計算されます。ユーザーはドキュメントUserSigの計算をご参照ください。下図に示すように、開発段階では、クライアントでの開発に支障がないよう、コンソールでのUserSigの計算を行うこともできます。




管理者アカウントの設定

ゲーム内IMの管理において、管理者がゲームに対して、メールで公告を送信したり、一時的にチームを組むメッセージを管理したりすることがあります。この場合、IMサーバーAPIを使用してください。サーバー側のAPIを呼び出すには、IM管理者アカウントの作成を行ってください。IMはデフォルトでUserIDがadministratorのアカウントを開発者に提供します。開発者は運用シーンに応じて複数の管理者アカウントを作成することもできます。IMで最大5つの管理者アカウントを作成できることにご注意ください。

コールバックアドレスの設定およびコールバックの有効化

ゲーム内でチームを組むなどのニーズを実装する時、IMのコールバックモジュールを使用する必要があります。具体的には、運用シーンによって、IMバックグラウンドで開発者の業務バックグラウンドをコールバックすることがあります。開発者は下図のように、HTTPのインターフェースを提供し、コンソール > コールバック設定モジュールに設定するだけでよいです。




クライアントSDKの統合

準備作業をすべて完了した後、IMクライアントSDKをユーザーのプロジェクトに統合する必要があります。開発者はご自身のニーズに応じて、統合ソリューションを選択することができます。詳しくは、クイックインテグレーションシリーズドキュメントをご参照ください。
以下で、ゲームへのIM統合においてよく使用される機能をまとめ、開発者のご参照用としてベストプラクティスソリューションを提供します。関連の実装コードも併せてご参照ください。

ゲームチャットルームに関する機能の開発ガイド

ユーザープロフィール

よくあるユーザープロフィール

ゲーム業務で保存される一般的なユーザープロフィールは、基本情報プロフィールとその他情報プロフィールに分類できます。
基本情報
その他情報
ユーザー名、性別、誕生日、レベル、キャラクター、携帯電話番号など
その他のゲームで必要な情報

プロフィールの保存

ゲーム業務に数多くのユーザーが存在するため、膨大なユーザープロフィールを保存するのは簡単なことではありません。Tencent Cloud IMは、ユーザープロフィールホスティング機能を実装し、プロフィールに関連する完全なソリューションを提供します。Tencent Cloud IMへの保存と業務バックグラウンドへの保存の違いを以下に示します。
比較項目
IM
業務バックグラウンド
ストレージ容量
自動スケーリング
容量が限られており、スケールリングが難しい
ユーザープロフィール
標準フィールドとカスタムフィールドを提供し、フィールドの長さと名前に制限がある
カスタマイズ可能で柔軟性が高い
プロフィールの読み書き
使いやすいサービスインターフェースとヘルプガイドを提供する
自分で開発する必要がある
インターフェース
インターフェース呼出し頻度に制限あり:最大200回/秒
必要に応じて、インターフェース呼出しなどの機能を自分で開発できる
セキュリティ
リモート災害復旧・マルチサイトデプロイが可能
セルフメンテナンス
上記により、IMユーザープロフィールホスティングサービスを使用すれば、プロフィールの保存、読取り/書込み機能を活用できるほか、次のメリットもあります。
1. IMは、リモート障害復旧、マルチサイトデプロイ及び自動スケーリングを提供し、サーバーのダウンタイム、マルチマスター/スレーブレプリケーション、スケーリングなど複雑な処理プロセスからお客様を完全に解放します。
2. IMは、業界共通の業務処理フローを提供し、お客様がユーザープロフィールの業務ロジックから完全に解放されるようお手伝いします。
3. IMは、プロフェッショナルな運営フローと運営チームを提供し、年間を通じて99.99%という安定したサービス品質をお約束し、ユーザーに評判の高い安定したサービスを提供するお手伝いをします。
4. IMは、使いやすいサービスインターフェースとクイックアクセスヘルプガイドを提供し、プロセス全体で優れたサービスを提供します。

IMでユーザープロフィールを保存する方法

IMストレージソリューションには、プロフィールの保存、読取り/書込み機能が含まれています。ここでは、IMでユーザープロフィール、友達プロフィールおよび拡張プロフィールを保存する方法を説明します。プロフィールはすべてKey-Valueの形式で表します。そのうち、KeyString型で、アルファベット大文字・小文字、数字、アンダーバーのみサポートしています。Valueには以下のタイプがあります:
タイプ
説明
uint64_t
整数(カスタムフィールドではサポートされていない)
string
文字列で、500バイト以内
bytes
bufferの一部で、500バイト以内
string 配列
文字列配列で、各文字列は500バイト以内で、友達テーブルのTag_SNS_IM_Groupフィールドのみで使用可能
ユーザープロフィール:ユーザープロフィールには、標準フィールドとカスタムフィールドが含まれています。カスタムフィールドの詳細は、後述する拡張プロフィールをご参照ください。IMがサポートしているユーザープロフィールの標準フィールドについては、ユーザープロフィール標準フィールドをご参照ください。
友達プロフィール:友達プロフィールは、標準友達フィールドとカスタム友達フィールドをサポートします。IM友達リストには、最大3000人の友達を追加できます。そのうち、標準友達フィールドは次のとおりです:
フィールド名
タイプ
説明
Tag_SNS_IM_Group
Array
友達グループ。文字列配列
Tag_SNS_IM_Remark
string
友達ノート
Tag_SNS_IM_AddSource
string
友達追加ルート
Tag_SNS_IM_AddWording
string
友達追加コメント
Tag_SNS_IM_AddTime
Integer
友達追加タイムスタンプ
詳細については、
をご参照ください。- **カスタムプロフィール**:カスタムプロフィールフィールドは、IMコンソール > アプリケーション設定 > 機能設定 で申請できます。カスタムプロフィールフィールドは申請して5分以内に有効になります。 - ユーザープロフィール管理の詳細については、ユーザープロフィール管理をご参照ください。 - 友達リレーションシップチェーンのカスタムプロフィールの管理については、友達カスタムフィールドをご参照ください。

IM ユーザープロフィールの保存制限

業務特徴の制限
ストレージデータ:stringとbufferタイプのストレージ長は500バイト以内にする必要があります
カスタムフィールド:カスタムフィールドのキーワードは8バイト以内のアルファベットを使用する必要があります。カスタムフィールドの値は500バイト以内にする必要があります
友達リレーションシップチェーン:ユーザー1人あたり3000人の友達をサポートします
インターフェース関連の制限
アカウント管理:1回でユーザー名を100個までインポートできます。1回のリクエストで最大500人のユーザー状態を検索できます
その他の呼出し頻度:最大200回/秒
使用制限の詳細については、使用制限をご参照ください。

メールシステム

現在のゲームでは、メールシステムは必須機能と言えるでしょう。メールにテキストメッセージを書いたり、ゲーム内の道具や報酬などを添付ファイルとして付けたりできます。メールは1人への送信が可能で、イベントの報酬を付与するように多数人への送信もできます。以下では、プレイヤのメール受信、メーリングリスト、メールの未読カウント、全員向けメール、メールの有効期限などから、メールシステムの機能の実装を詳しく説明します。

メールの送受信

プレイヤーのメール受信:システムメールが正常に送信され、プレイヤーがネットワークに接続している場合、プレイヤーはシステムメールを正常に受信できます。受信したメールは、メールセッションのメッセージリストを取得することで履歴/最新のメールを取得できます。また、新規メッセージを受信するコールバックを追加/削除することで、すべてのタイプのメッセージ(テキスト、カスタマイズ、リッチメディアメッセージなどを含む)の受信を監視できます。Unityを例としたサンプルコードは次のとおりです:
// メッセージイベントリスナーを設定する
TencentIMSDK.AddRecvNewMsgCallback((List<Message> messages, string user_data)=>{
foreach(Message message in messages)
{
foreach (Elem elem in message.message_elem_array)
{
// 次のメッセージがある
if (elem.elem_type == TIMElemType.kTIMElem_Text)
{
string text = elem.text_elem_content;
}
}
}
})
// `RecvNewMsgCallback`コールバックを監視し、その中でメッセージを受信する
// メッセージを受信したくない場合、`RemoveRecvNewMsgCallback`を呼び出してリスナーをリムーブします。この手順は必須ではありません。必要に応じて実施してください。
詳細については、Unity-メッセージ受信をご参照ください。
システムからのメール送信:システムはいくつかの方法でサーバーAPIを使用し、ユーザーにシステムメールを送信できます。以下でこれらの方法の特徴を説明します。
メソッド
特徴
運用シーン
指定したアカウントにメッセージを送信する。受信者が見た送信者は管理者ではなく、管理者が指定したアカウントです
特定のユーザーにメッセージを送信します。例えば、ランクマッチの報酬など
1回で最大500人のユーザーにシングルメッセージを送信できます。呼出し頻度は最大200回/秒です
グループを作成する必要がないため、特定のユーザーにメッセージを送信できます。グループを作成する必要がないため、柔軟性が高いです。ただし、送信するユーザーが多い場合、数回分けて送信する必要があります
グループ内で一般メッセージを送信するには、ユーザーを同じグループに追加する必要があります。
多くのユーザーにメッセージを送信する場合、グループを作成してから一般メッセージを送信する方法があります。グループの最大メンバー数として、コミュニティ(community)は10万人です
App内の全員にメッセージをプッシュする時、ユーザータグと属性を指定してメッセージを送信できます
App内の全員にメッセージをプッシュしたり、人数が非常に多く、イベントプッシュメールなどの特徴的な属性がある場合に利用できます
説明:
全員プッシュはIMPremium editionで提供された機能です。使用するには、Premium editionを購入し、コンソール > 機能設定 > ログインとメッセージ > 全員プッシュで有効にするように設定する必要があります。
そのうち、グループ内で一般メッセージを送信するリクエストパケットの基本形式の例を以下に示します。
{
"GroupId": "@TGS#2C5SZEAEF",
"Random": 8912345, //乱数。5分間で数字が同じな場合、同一メッセージだと判断する
"MsgBody": [ // メッセージボディ。1つのelement 配列で構成される。詳細については、フィールドの説明を参照
{
"MsgType": "TIMTextElem", // テキスト
"MsgContent": {
"Text": "red packet"
}
},
{
"MsgType": "TIMCustomElem", // カスタマイズ
"MsgContent": {
"Data": "message",
"Desc": "notification",
"Ext": "url",
"Sound": "dingdong.aiff"
}
}
],
}
MsgBody(メッセージボディ)はメッセージ配列です。テキストメッセージとカスタムメッセージをMsgBody に入れて送信できます。

メーリングリスト

メーリングリスト履歴の保存はメッセージの保存と同じで、「C2Cシングルチャットメッセージ履歴の保存」と「グループチャットメッセージ履歴の保存」 に分けられます。グループチャットの最小人数は2人なので、管理者が指定したアカウントとメールを受信するユーザーを新しいグループとして作成して保存できます。
説明:
体験版とStandard editionの保存期間は7日間、アルティミト版は30日間です。Standard editionとPremium editionは、保存期間の延長をサポートします。コンソールにログインして、関連の設定を変更できます。 メッセージ履歴保存期間の延長は、有料の付加価値サービスです。料金の詳細については、付加価値サービスの料金をご参照ください。
ネットワークが正常な場合、クラウドから最新のデータを取得します。ネットワークが異常な場合、ローカルに保存されたメッセージ履歴を返します。このインターフェースは改ページでの取得をサポートします。メーリングリスト履歴を取得するUnityのサンプルコードは次のとおりです:
// シングルチャットメッセージ履歴の取得
// 初めて取得する場合は、msg_getmsglist_param_last_msgをnullに設定します
// 再度取得する場合は、msg_getmsglist_param_last_msgは、返されたメッセージリストの最後のメッセージを使用できます
var get_message_list_param = new MsgGetMsgListParam
{
msg_getmsglist_param_last_msg = LastMessage
};
TIMResult res = TencentIMSDK.MsgGetMsgList(conv_id, TIMConvType.kTIMConv_C2C, get_message_list_param, (int code, string desc, string user_data) => {
// コールバックロジックを処理します
});
より多くのメッセージ履歴を取得するには、メッセージ履歴-Unityをご参照ください。

メール未読数のカウント

ユーザー-システムメッセージの記録は、チャット内のセッションに相当します。Tencent Cloud IMは、セッションの未読数をカウントする機能を提供し、メッセージがまだ読まれていないことをユーザーをリマインドします。ユーザーがセッションに入ってまたセッションリストに戻ると、未読メッセージ数はクリアされます。Unityのサンプルコードは次のとおりです:
// すべての未読数を取得する
TIMResult res = TencentIMSDK.ConvGetTotalUnreadMessageCount((int code, string desc, GetTotalUnreadNumberResult unread, string user_data)=>{
// 非同期処理のロジック
});

// 未読数変更通知
TencentIMSDK.SetConvTotalUnreadMessageCountChangedCallback((int total_unread_count, string user_data)=>{
// コールバックロジックを処理します
});

// すべてのセッションの未読メッセージ数をクリアする
TIMResult res = TencentIMSDK.MsgMarkAllMessageAsRead((int code, string desc, string user_data)=>{
// 非同期処理のロジック
});
詳細については、Unity-セッションの未読メッセージ数をご参照ください。

全員メール

全員メールは、ゲーム内のすべてのプレイヤにメールを送信することに相当します。Tencent Cloud IMはサーバー側の 「全員プッシュ」 機能を提供します。サンプルコードは次のとおりです:
https://console.tim.qq.com/v4/all_member_push/im_push?usersig=xxx&identifier=admin&sdkappid=88888888&random=99999999&contenttype=json
リクエストパケットの例は次のとおりです:
{
"From_Account": "admin",
"MsgRandom": 56512,
"MsgLifeTime": 120, // オフラインで120秒(2分間)保存
"MsgBody": [
{
"MsgType": "TIMTextElem",
"MsgContent": {
"Text": "hi, beauty"
}
}
]
}
全員プッシュでは、オフライン時のメッセージ保存期間を設定できます。これにより、ユーザーがオフラインになっても、オフライン保存期間内である限り、メッセージを受信できます。オフライン保存期間を設定するには、`MsgLifeTiméを秒単位で設定します。最大7日間(604800 s)保存できます。デフォルトは0で、オフライン時に保存しないことを意味します。
全員プッシュの詳細については、全員プッシュをご参照ください。

メールの有効期間

メール履歴の保存期間として、体験版/Standard editionは7日間、Premium editionは30日間です。Standard editionとPremium editionは、保存期間の延長をサポートします。履歴の保存の詳細については、メッセージ履歴保存期間の設定をご参照ください。 また、サーバー側がメッセージを送信する時、リクエストパケットでMsgLifeTimeを設定することで、メッセージのオフライン保存期間(最大7日間)を設定できます。このフィールドが0の場合、メッセージはオンラインユーザーのみに送信され、オフラインでは保存されません。詳細については、サーバーAPIをご参照ください。

一時的なチーム作成

マルチプレイヤーオンラインゲームでは、一時的なチーム作成が不可欠です。以下では、チーム作成シーン、バックグラウンド、チーム内メンバがそれぞれ必要とするチーム情報から、一時的なチーム作成を説明します。

チーム作成シーン

チーム作成において、チーム作成、一時的なチーム作成から退出、キャプテンになる、チームへ招待、チーム解散などの運用シーンがよく見られます。以下では、いくつかのサンプルコードを挙げて、異なる運用シーンの実装方法を説明します。
ゲーム開始前のチーム作成:最初のメンバーがゲームに入ると、サーバーでグループを自動的に作成し、最大グループメンバー数を設定します。リクエスト時にグループまたはグループメンバーを指定した場合、作成時にグループマスターまたはグループメンバーは自動的にグループに参加します。リクエストURLの例は次のとおりです。
https://console.tim.qq.com/v4/group_open_http_svc/create_group?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json
リクエストパケットの基本形式の例は次のとおりです:
{
"Owner_Account": "leckie", // グループマスターのUserId(オプション)
"Type": "Public", // グループタイプ:Private/Public/ChatRoom/AVChatRoom/Community
"Name": "TestGroup", // グループ名(必須)
"MaxMemberCount":5 // 最大グループメンバー数(オプション)
}
説明:
Appに同時に存在するグループは10万までです。10万を超えると、料金が請求されます。詳細については、価格説明をご参照ください。サーバーでグループを作成する詳細については、グループ作成をご参照ください。
グループメンバーの追加:グループチャットを作成した後、新しいプレイヤーが続々とゲームに入る場合、グループに新しいグループメンバーを追加する必要があります。リクエストURLの例は次のとおりです:
https://console.tim.qq.com/v4/group_open_http_svc/add_group_member?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json
リクエストパケットは次のとおりです:
{
"GroupId": "@TGS#2J4SZEAEL", // 操作するグループ(必須)
"MemberList": [ // 1回で最大300メンバーを追加できる
{
"Member_Account": "tommy" // 追加するグループメンバーのID(必須)
},
{
"Member_Account": "jared"
}]
}
詳しくは、グループメンバーの追加のドキュメントをご参照ください。
チーム作成成功コールバック:グループを作成する時に最大グループメンバー数を設定した場合、チームに必要なメンバーが揃っていると、ゲームを開始できます。グループ満員後群のコールバックを呼び出して、ゲームを開始できるかを確認できます。リクエストURLの例は次のとおりです:
https://www.example.com?SdkAppid=$SDKAppID&CallbackCommand=$CallbackCommand&contenttype=json&ClientIP=$ClientIP&OptPlatform=$OptPlatform
リクエストパケットの例は次のとおりです:
{
"CallbackCommand": "Group.CallbackAfterGroupFull", // コールバックコマンド
"GroupId": "@TGS#2J4SZEAEL" // グループID
}
詳しくは、グループ満員後のコールバックをご参照ください。
新しいメンバーがグループに参加した通知:新しいプレイヤーがゲーム(グループチャット)に入ると、新しいメンバーがグループに参加したコールバックを呼び出して、その他のグループメンバーに通知します。リクエストURLの例は次のとおりです:
https://www.example.com?SdkAppid=$SDKAppID&CallbackCommand=$CallbackCommand&contenttype=json&ClientIP=$ClientIP&OptPlatform=$OptPlatform
リクエストパケットの例は次のとおりです:
{
"CallbackCommand": "Group.CallbackAfterNewMemberJoin", // コールバックコマンド
GroupId": "@TGS#2J4SZEAEL",
"Type": "Public", // グループタイプ
"JoinType": "Apply", // グループへの参加方法:Apply(グループへの参加を申請)、Invited(招待を受けてグループに参加)
"Operator_Account": "leckie", // 操作者メンバー
"NewMemberList": [ // グループに参加した新しいメンバーのリスト
{
"Member_Account": "jared"
},
{
"Member_Account": "tommy
}
]
}
説明:
コールバックを有効にするには、コールバックURLを設定し、このコールバックプロトコルに対応するスイッチをオンにする必要があります。設定方法については、サードパーティコールバックの設定ファイルをご参照ください。詳しくは、新しいメンバーがグループに参加したコールバックをご参照ください。
ゲーム中にグループを退出:プレイヤーが自発的ゲームを退出、または、ネットワークが原因でゲームを退出された場合、サーバーでグループメンバーが退出したコールバックを呼び出し、グループ内のその他のプレイヤーに通知したり、ネットワークが原因でゲームを退出されたプレイヤーにメッセージを送信したりできます。グループメンバーが退出したコールバックのリクエストURLの例は次のとおりです。
https://www.example.com?SdkAppid=$SDKAppID&CallbackCommand=$CallbackCommand&contenttype=json&ClientIP=$ClientIP&OptPlatform=$OptPlatform
リクエストパケットの例は次のとおりです:
{
"CallbackCommand": "Group.CallbackAfterMemberExit", // コールバックコマンド
"GroupId": "@TGS#2J4SZEAEL", // グループID
"Type": "Public", // グループタイプ
"ExitType": "Kicked", // メンバーの退出の形:Kicked-強制退出、Quit-自分がグループから退出
"Operator_Account": "leckie", // 操作者
"ExitMemberList": [ // グループを退出したメンバーのリスト
{
"Member_Account": "jared"
},
{
"Member_Account": "tommy"
}
]
}
ゲーム終了後にグループチャットを解散:ゲーム終了後に、サーバーでグループチャットをそのまま解散できます。グループチャットの解散のリクエストURLの例は次のとおりです:
https://console.tim.qq.com/v4/group_open_http_svc/destroy_group?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json
リクエストパケットの例は次のとおりです:
{
"GroupId": "@TGS#2J4SZEAEL"
}
一時的に作成したチーム内の音声チャットやビデオチャットは、状況が複雑なため、以下で詳しく説明します。

バックグラウンドでチーム内情報の取得

グループ内の詳細情報を取得:グループ内の詳細情報(現在のグループメンバー数、グループメンバーの基本情報などを含む)は、サーバー側のAPIグループ詳細情報の取得を使用して取得できます。リクエストパケットの中で、Filterフィールドを設定してトップに表示した情報を取得できます。サンプルコードは次のとおりです:
https://console.tim.qq.com/v4/group_open_http_svc/get_group_info?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json
リクエストパケットの例は次のとおりです:
{
"GroupIdList": [ // グループリスト(必須)
"@TGS#1NVTZEAE4",
"@TGS#1CXTZEAET"
]
}
詳細については、グループ詳細情報の取得をご参照ください。
グループメンバーの詳細情報を取得:グループメンバーの情報(カスタムフィールドを含む)のみが必要な場合、グループメンバー詳細情報の取得を使用して取得できます。サンプルコードは次のとおりです:
https://console.tim.qq.com/v4/group_open_http_svc/get_group_member_info?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json
リクエストパケットの例は次のとおりです:
{
"GroupId":"@TGS#1NVTZEAE4" // グループID(必須)
}
返却されたフィールドの中で、MemberNumからこのグループのグループメンバー数、AppMemberDefinedDataからグループメンバーのカスタムフィールド情報を取得できます。
説明:
このインターフェースはライブストリーミンググループ(AVChatRoom)をサポートしません。詳細については、グループメンバー詳細情報の取得をご参照ください。

チームメンバーのチーム情報取得

―チームメンバーは、グループメンバープロフィールの取得を使用し、その他のチームメンバーのプロフィール、例えば、メンバーのロール、待機状態などを取得できます。サンプルコードは次のとおりです:
GroupGetMemberInfoListParam param = new GroupGetMemberInfoListParam
{
group_get_members_info_list_param_group_id = "group_id",
group_get_members_info_list_param_identifier_array = new List<string>
{
"user_id"
}
};
TIMResult res = TencentIMSDK.GroupGetMemberInfoList(param, (int code, string desc, GroupGetMemberInfoListResult result, string user_data)=>{
// 非同期処理のロジック
});
説明:
詳細については、Unity-グループメンバープロフィールの取得をご参照ください。
グループ満員でゲームが開始しますメンバーがグループに参加/退出しましたなど、その他のグループ情報は、チームシーンを参照し、コールバックを呼び出してグループに通知できます。
グループの選択などグループの詳細については、グループシステムをご参照ください。グループ管理コンソールガイドの詳細については、グループ管理コンソールガイドをご参照ください。

センシティブ情報のブロック

センシティブなコンテンツのブロックはゲームのインスタントメッセージングにおいて非常に重要な機能であり、その実装方法は次のとおりです:
1. ユーザーグループにメッセージ送信前コールバックをバインドします
2. コールバックデータからメッセージタイプを判断し、メッセージデータを天御またはその他のサードパーティチェックサービスに転送します
3. メッセージが一般テキストメッセージの場合、天御のチェック結果が返されてから、メッセージを送信するかのパケットをIMバックグラウンドに返します
メッセージ送信前コールバックデータの例です。
{
"CallbackCommand": "Group.CallbackBeforeSendMsg", // コールバックコマンド
"GroupId": "@TGS#2J4SZEAEL", // グループID
"Type": "Public", // グループタイプ
"From_Account": "jared", // 送信者
"Operator_Account":"admin", // リクエストの送信者
"Random": 123456, // 乱数
"OnlineOnlyFlag": 1, //オンラインメッセージは1、そうでない場合は0となります。ライブストリーミンググループの場合はこの属性を無視し、デフォルト値の0とします。
"MsgBody": [ // メッセージボディです。TIMMessageのメッセージオブジェクトをご参照ください
{
"MsgType": "TIMTextElem", // テキスト
"MsgContent": {
"Text": "red packet"
}
}
],
"CloudCustomData": "your cloud custom data"
}
説明:
開発者はMsgBody内のMsgTypeフィールドでメッセージタイプを判断できます。詳細なフィールド説明については、コールバックドキュメントをご参照ください。
開発者は違法なメッセージに対して異なる処理を選択することができ、コールバック内のリターンパケットによってIMバックエンドで制御することができます。
{
"ActionStatus": "OK",
"ErrorInfo": "",
"ErrorCode": 0 // ErrorCodeごとに意味が異なります
}
ErrorCode
意味
0
発言を許可し、メッセージを正常に送信しました
1
発言を拒否し、クライアントが10016を返しました
2
サイレントで破棄し、クライアントが正常を返しました
説明:
開発者は自身の業務ニーズに応じて選択して使用できます。

カスタムメッセージタイプ(道具贈り、取引など)

ゲームでのチャットシーンにおいて、テキストメッセージ、スタンプメッセージ、音声メッセージなど簡単なメッセージタイプの他、開発者がメッセージ内容の形式をカスタマイズできるカスタムメッセージタイプも使用されています。カスタムメッセージタイプにより、ゲームチャットルームでゲーム道具を贈ったり、取引をしたりするチャットルームの機能を実装できます。
Tencent Cloud IMは9種類の基本メッセージタイプを提供します。具体的には、テキストメッセージ、スタンプメッセージ、地理位置メッセージ、画像メッセージ、音声メッセージ、ファイルメッセージ、ショート動画メッセージ、システム通知とカスタムメッセージです。カスタムメッセージ以外のメッセージの形式は定義されているため、具体的な情報を記入してください。メッセージタイプの詳細については、メッセージタイプをご参照ください。メッセージタイプの形式の詳細については、メッセージ形式の説明をご参照ください。
サーバーでシングルチャットメッセージの個別送信シングルチャットメッセージの一括送信グループ内での一般メッセージの送信を使用し、ユーザーにカスタムメッセージを送信できます。グループ内で一般メッセージを送信する基本的なリクエストパケットの例は次のとおりです:
{
"GroupId": "@TGS#2C5SZEAEF",
"Random": 8912345, //乱数。5分間で数字が同じな場合、同一メッセージだと判断する
"MsgBody": [ // メッセージボディ。1つのelement 配列で構成される。詳細については、フィールドの説明を参照
{
"MsgType": "TIMTextElem", // テキスト
"MsgContent": {
"Text": "red packet"
}
},
{
"MsgType": "TIMFaceElem", // スタンプ
"MsgContent": {
"Index": 6,
"Data": "abc\u0000\u0001"
}
}
],
"CloudCustomData": "your cloud custom data",
"SupportMessageExtension": 0,
}
そのうち、CloudCustomDataを編集することで、メッセージのカスタムデータ(クラウドに保存)を定義し、カスタムメッセージをMsgBody(メッセージボディ)に記入して送信できます。

グループ内ボイス/ビデオチャット

ゲーム内のボイス/ビデオチャットは重要機能の1つです。Tencent Cloud IMはInstant Messaging(IM)とTencent Real-Time Communication (TRTC)向けのオーディオビデオ通話機能(TUICallKit)を用意しており、IMでのチャットにリアルタイムの音声通話またはビデオ通話を提供します。
説明:
オーディオビデオ通話機能をより良く体験するために、SDKAppIDごとに7日間のオーディオビデオ通話機能体験版を提供します。IMコンソールでご利用のアプリケーションに対応する体験版を申請し使用することができます。SDKAppIDごとに体験版を1回のみ申請できます。
TUICallKitの詳細については、UIありの統合方法-オーディオビデオ通話をご参照ください。

ゲームチャットルームのタイプ

ゲームチャットルームには以下のタイプがあります:
タイプ
特徴
チャネル
チャットに参加する人数が非常に多く、固定メンバーリストがなく、グループチャットへの参加申請が不要で、いつでも自由に参加/退出できます。オフラインメッセージプッシュは送信不要です。
ロビー
チャットに参加する人数が比較的多く、自由に参加/退出できます。メッセージ履歴は検索可能です。
チーム
チャットに参加する人数が少なく、チャット相手が知らない人の可能性があり、ゲームが終了すると、チャットルームが廃棄されます。オフラインメッセージプッシュは送信不要です。
友達
C2Cチャットであり、チャット履歴が保存され、チャット相手が友達リストに存在します。
私信
C2Cチャットであり、チャット相手が知らない人の可能性があります。
ライブストリーミンググループ
チャットに参加する人数には制限がなく、いつでも自由に参加/退出できます。
IMが提供するゲームチャットルームには以下のタイプがあります:
タイプ
特徴
友達ワークグループ(Work)
作成後はすでにグループ内にいる友達のみがグループ参加に招待できます。被招待者側の同意またはグループの承認は不要です。
知らない人とのソーシャルグループ(Public)
作成後はグループマスターがグループ管理者を指定できます。ユーザーはグループIDを検索してグループ参加申請を送信した後、グループマスターまたは管理者が申請を承認してからでないとグループに参加できません。
臨時ミーティンググループ(Meeting)
作成後は自由に参加・退出でき、かつグループ参加前のメッセージを確認する機能をサポートしています。音声/ビデオ会議のシナリオ、eラーニングのシナリオなどのTRTC製品と連携させたシナリオに適しています。旧バージョンのChatRoomと同じです。
ライブストリーミンググループ(AVChatRoom)
作成後は自由に参加・退出ができ、グループ参加者数の上限はありませんが、メッセージ履歴の保存はサポートしていません。CSS製品との連携に適しており、弾幕チャットのシナリオに使用します。
コミュニティ(Community)
作成後、自由に出入りでき、最大10w人をサポートします。またメッセージ履歴保存、ユーザー検索グループIDをサポートし、グループ追加申請を開始でき、管理者の承認なしにグループに参加できます。
以下では、IMのグループ特徴によって、例とするソリューションを提供します。必要に応じて、ゲーム内で活用してください。
タイプ
ソリューション
特徴
チャネル、ロビー
コミュニティ(Community)
チャットに参加している人が多いため、作成後に自由に参加または退出でき、承認不要です
友達
シングルチャット+権限制御(友達だけにメッセージ送信可能
友達のみへのメッセージ送信をサポートします
私信
シングルチャット+権限制御(Appで任意2人のユーザーの間で送信したシングルチャットメッセージ)
お互い知らない任意2人の間でメッセージを送信するのをサポートします
チーム
知らない人とのソーシャルグループ(Public)、臨時ミーティンググループ(Meeting)
ゲーム内のチームメンバーだけがチャットグループに参加できます。オーディオビデでチャットするのをサポートします
ライブストリーミンググループ
ライブストリーミンググループ(AVChatRoom)
グループメンバー数には制限がありません。いつでも自由に参加または退出できます
説明:
友達とのチャット及び私信でのチャットにおける権限制御の詳細については、シングルチャットメッセージの権限制御をご参照ください。
グループシステムの詳細については、グループシステムをご参照ください。