没入感のあるゲーム内チャット体験を実現: Tencent RTC GME との迅速な統合

10 分読む
Feb 18, 2025

シナリオの概要

インスタントメッセージングはゲームにおいて一般的な要件であり、インスタントチャットはマルチプレイヤーゲームにおける必須機能となっています。ゲームプラットフォーム自体は、さまざまなグループタイプ、カスタムメッセージタイプ(例えば、ゲーム内アイテムの贈与や取引)、グローバルアクセスなど、多様で複雑な要件を含んでいます。この文書は、ゲーム内チャット構築プロセスにおける一般的な要件の実装方法、考えられる問題や考慮事項を整理し、開発者がビジネスを迅速に理解し、要件を実装できるよう支援します。

Instant messaging in gaming: Key features and implementation considerations

This image illustrates a gaming platform's instant messaging interface

適用される製品

チャット

基本的な統合ガイドライン

キーを使ったUserSigの計算

チャットアカウントシステムでは、ユーザーログインに必要なパスワードは、チャットから提供されたキーを使用してサーバーによって計算されます。詳細については、UserSigの生成. 開発段階では、クライアントの開発を遅延させないために、UserSig コンソール で計算することもできます。

UserSig Tools for Chat Account System

UserSig Generator and Verifier
- Quickly generate UserSig for demo and debugging
- Validate UserSig validity

管理者アカウントの設定

ゲーム内インスタントメッセージングを管理するには、管理者がゲームにメールアナウンスを送信したり、一時的なチームアップメッセージを管理したりする必要があります。これはチャットサーバーAPIを通じて行うことができます。これらのAPIを呼び出すには、チャット管理者アカウントを作成する必要があります. デフォルトで、チャットはadministratorのアカウントを提供します。また、必要に応じて複数の管理者アカウントを作成することもできます。最大で5つの管理者アカウントを作成できますのでご注意ください。

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

ゲーム内チームアップなどの要件を実装するには、Webhookイベントを使用します。ここでは、特定のシナリオでチャットバックエンドがビジネスバックエンドを呼び出します。HTTP APIを提供し、 Webhook設定 モジュールに構成するだけで済みます。

クライアントSDKの統合

準備が整ったら、チャットクライアントSDKをプロジェクトに統合する必要があります。必要に応じて異なる統合オプションを選択できます。詳細な手順については、TUIKitの紹介.

以下に、ゲームに統合する一般的なチャット機能と実装コードのベストプラクティスについて説明します。

シナリオ特有の実装

ユーザープロファイル

一般的なユーザープロファイル

ゲームビジネスで保存される一般的なユーザープロファイルは、基本情報プロファイルとその他の情報プロファイルに分けられます。

基本情報その他の情報
ユーザー名、性別、生年月日、レベル、役割、携帯電話番号など。ゲームで必要なその他の情報

プロファイルストレージ

ゲームビジネスには多くのユーザーがいるため、大量のユーザーデータを保存することは困難です。チャットは、ユーザープロファイルホスティング機能を通じて完全なプロファイルソリューションを提供しています。以下は、チャットとビジネスバックグラウンドのユーザープロファイルの保存を比較したものです。

項目チャットビジネスバックグラウンド
ストレージ容量自動スケーリングをサポート限られた容量をサポートし、スケーリングが困難
ユーザープロファイル標準フィールドとカスタムフィールドをサポート。フィールドの長さと名前に制限ありカスタマイズ可能で、より柔軟
プロファイルの読み書き使いやすいサービスAPIとガイドラインをサポート自分で開発する必要がある
APIAPI呼び出しの頻度は200回/秒以下が必要必要に応じてAPI呼び出しや他の機能を開発できる
セキュリティリモート災害復旧とクロスリージョン展開をサポート自分でメンテナンスが必要

プロファイルストレージと読み書き機能に加えて、チャットには以下の利点があります:

1. チャットはリモート災害復旧、クロスリージョン展開、自動スケーリング機能を提供します。これにより、サーバーダウンタイム、マルチコピー主従レプリケーション、キャパシティスケーリングなどの複雑な処理フローから完全に解放されます。

2. チャットは業界で一般的に使用されるビジネス処理フローを提供しており、ユーザープロファイルビジネスロジックについて心配する必要がありません。

3. チャットは専門の運用プロセスとチームを提供し、年間99.99%のサービス品質を保証し、安定性で知られるサービスを提供するのを助けます。

4. チャットは使いやすいサービスAPIとアクセスしやすいガイドラインを提供し、全プロセスにわたってプレミアムサービスを提供します。

チャットユーザープロファイルストレージ方法

チャットのストレージスキームには、ユーザープロファイルのストレージと読み書き機能が含まれています。以下に、チャットがユーザープロファイル、友達プロファイル、および拡張データをどのように保存するかを説明します。すべてのデータはKey-Value形式で保存されます。KeyString型で、英大文字、小文字、数字、アンダースコアのみがサポートされています。Valueは以下のタイプをサポートします:

タイプ説明
uint64_t整数(カスタムフィールドではサポートされていません。)
string文字列。文字列の長さは500バイトを超えてはいけません。
bytesバッファ。バッファの長さは500バイトを超えてはいけません。
string array文字列配列。各文字列は500バイトを超えてはいけません。友達リストのフィールドのみに利用可能です。

ユーザープロファイル: ユーザープロファイルには標準フィールドとカスタムフィールドが含まれます。カスタムフィールドについては、以下の拡張データ部分を参照してください。チャットが現在サポートしている標準フィールドについては、標準プロファイルフィールド.

友達プロファイル: 友達プロファイルには標準フィールドとカスタム友達フィールドが含まれます。チャットの連絡先リストは最大3,000人の友達をサポートします。標準友達フィールドは以下の通りです:

フィールド名タイプ説明
Tag_SNS_IM_Group配列友達リスト
Tag_SNS_IM_Remark文字列友達の備考
Tag_SNS_IM_AddSource文字列友達リクエストのソース
Tag_SNS_IM_AddWording文字列友達リクエストの内容
Tag_SNS_IM_AddTime整数友達リクエストのタイムスタンプ

詳細については、標準友達フィールドをご覧ください。

カスタムプロファイル: カスタムプロファイルフィールドを申請するには、アプリ管理者が チャットコンソールにログインし、自分のアプリを見つけて機能設定に移動します。申請を提出すると、カスタムプロファイルフィールドは5分以内に有効になります。

ユーザープロファイル管理の詳細については、プロファイル管理.

関係チェーンのカスタムプロファイル管理の詳細については、カスタム友達フィールド.

チャットユーザープロファイルストレージ制限

サービス機能制限

データストレージ: 各文字列またはバッファは500バイトを超えてはいけません。

カスタムフィールド: カスタムフィールドのキーワードは英字で構成され、長さは8バイト以内でなければなりません。カスタムフィールドの値は500バイトを超えてはいけません。

友達関係チェーン: 各ユーザーは最大3,000人の友達を持つことができます。

API関連の制限

アカウント管理: 一度に最大100のユーザー名をインポートでき、リクエストごとに最大500ユーザーの状態を照会できます。

その他の呼び出し頻度: 1秒あたり最大200回。

使用制限の詳細については、使用制限.

メールシステム

メールシステムは、現在のゲームではほぼ必須です。メールにはテキストメッセージに加え、ゲーム内アイテムや報酬などのメール添付が含まれます。メールは単一のユーザーに送信することも、グループメールとしてイベント報酬を配布することもできます。以下では、プレイヤーがメールを受信する方法、メールリスト、未読メール数、全メンバーへのメール送信、メールの有効期限など、メールシステムの機能がさまざまな観点からどのように実装されるかを説明します。

メールの受信と送信

プレイヤーがメールを受信する: システムメールが正常に送信され、プレイヤーがオンラインである場合、プレイヤーはシステムメールを正しく受け取ることができます。プレイヤーはメール会話のメッセージリストを取得することで、履歴メールや最新メールを取得できます。また、すべてのタイプの新しいメッセージ(テキスト、カスタム、リッチメディアメッセージを含む)の受信リスナーを追加または削除することもできます。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を介してユーザーにシステムメールを送信できます。以下はその特徴を説明します:

API特徴適用シナリオ
1ユーザーへの1対1メッセージの送信指定されたアカウントにメッセージを送信します。受信者に表示される送信者は、管理者ではなく、管理者が指定したアカウントです。特定のユーザーにメッセージを送信する場合、例えば、ゲーム報酬メッセージをユーザーに送信する場合など。
複数のユーザーへの1対1メッセージの送信1対1メッセージを最大500ユーザーに同時に送信でき、最高呼び出し頻度は1秒あたり200回です。特定のユーザーにメッセージを送信し、受取人グループを作成する必要がありません。受信者の数が多い場合は、メッセージをバッチで送信する必要があります。
グループ内の通常メッセージの送信グループに通常メッセージを送信する際は、すべての受信者を同じグループに追加する必要があります。多くのユーザー(最大100,000ユーザー)に通常メッセージを送信する場合。
すべてのユーザーへのプッシュアプリ内のすべてのユーザーにメッセージをプッシュします。メッセージ送信のためにユーザータグや属性を指定できます。アプリ内のすべてのユーザーや特定の特性属性を持つ多数のユーザーにメッセージをプッシュする場合、例えばキャンペーンメールなど。

注:

すべてのユーザーへのプッシュは、アルティメット版でのみ利用可能です。これを使用するには、 アルティメット版を購入し、コンソール, 機能設定 > ログインとメッセージ > すべてのユーザーへのプッシュを選択し、機能を有効にする必要があります。

以下は、グループ内の通常メッセージを送信するための基本リクエストのサンプルです:

{
    "GroupId": "@TGS#2C5SZEAEF",
    "Random": 8912345, // ランダム数。5分以内に二つのメッセージのランダム数が同じであれば、それは同じメッセージと見なされます。
    "MsgBody": [ // メッセージ本体は要素配列で構成されます。詳細についてはフィールドの説明を参照してください。
        {
            "MsgType": "TIMTextElem", // テキスト
            "MsgContent":{
            "Text": "赤いパケット"
            }
        },
        {
            "MsgType": "TIMCustomElem", // カスタム
            "MsgContent":{
            "Data": "メッセージ",
            "Desc": "通知",
            "Ext": "url",
            "Sound":"dingdong.aiff"
            }
        }
    ],
}

MsgBody(メッセージ本体)はメッセージ配列です。テキストメッセージとカスタムメッセージを追加して送信できます。

メールリスト

履歴メールリストのストレージはメッセージのストレージと同等です。それは履歴の1対1メッセージのストレージと履歴のグループメッセージのストレージで構成されます。グループチャットには少なくとも2人のユーザーが必要なので、管理者が指定したアカウントとメールを受信するユーザーを含むグループを作成することができます。

注:

フリー版およびプロ版では、ストレージ期間は7日です。アルティメット版では、ストレージ期間は30日です。プロ版およびアルティメット版では、ストレージ期間の延長が可能です。関連設定を変更するには、コンソールにログインします。履歴メッセージのストレージ期間を延長することは、有料の付加価値サービスです。料金に関する詳細については、付加価値サービスの価格設定.

ネットワークが正常な場合、最新のクラウドデータがプルされ、異常な場合はSDKがローカルに保存された履歴メッセージを返します。ページネーションをサポートしています。以下は、履歴メールリストをプルするためのUnityサンプルコードです:

// 履歴の1対1メッセージをプル
// 最初のプルには`msg_getmsglist_param_last_msg`を`null`に設定します。
// 2回目のプルには`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.

未読メール数

ユーザーシステムメールの記録は、チャット内の会話と同等です。チャットは未読カウント機能を提供し、ユーザーに未読メッセージがあることを知らせます。ユーザーが会話にクリックし、会話リストに戻ると、未読メッセージ数はクリアされます。以下は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 - 会話の未読数.

すべてのメンバーへのメール送信

すべてのメンバーへのメール送信とは、ゲーム内のすべてのプレイヤーにメールメッセージを送信することを指します。チャットはサーバー側でメンバー全員へのプッシュ機能を提供します。以下はサンプルコードです:

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": "こんにちは、美人"
            }
        }
    ]
}

すべてのメンバーへのメッセージ送信機能では、オフラインストレージ期間を設定でき、オンラインでないユーザーでも指定されたオフラインストレージ期間内にメッセージを受け取ることができます。MsgLifeTime(単位: 秒)を設定して、オフラインストレージ期間を指定します。最大期間は604,800秒(7日間)です。デフォルト値は0で、メッセージはオフラインに保存されないことを示します。

すべてのユーザーへのプッシュの詳細については、すべてのユーザーへのプッシュ.

メールの有効期限

履歴メールのストレージ期間は次のとおりです:フリー版およびプロ版では、ストレージ期間は7日です。アルティメット版では、ストレージ期間は30日です。プロ版およびアルティメット版では、ストレージ期間の延長が可能です。履歴メール送信時に、MsgLifeTimeを設定して、メッセージのオフラインストレージ期間(最大7日)を指定できます。MsgLifeTime0の場合、メッセージはオンラインユーザーにのみ送信され、オフラインに保存されません。詳細については、 こちら.

一時的なチームアップ

一時的なチームアップはオンラインマルチプレイヤーゲームにおいて不可欠です。以下では、一時的なチームアップのシナリオと、バックグラウンドおよびチームメンバーがチーム情報を取得する方法を説明します。

チームベースのシナリオ

チームベースのシナリオには、ゲーム開始前のチーム作成、一時的なチームからの離脱、チームリーダーになること、他のメンバーをチームに招待すること、チームの解散が含まれます。以下は、さまざまなシナリオの実装を説明するコード例です。

  • ゲーム開始前のチーム作成: 最初のプレイヤーがゲームに参加すると、サーバーが自動的にグループを作成し、最大メンバー数を指定できます。リクエストでグループオーナーやメンバーを指定した場合、指定されたオーナーやメンバーはグループ作成時に自動的に追加されます。以下はサンプルリクエスト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", // グループタイプ: プライベート、パブリック、チャットルーム、AVチャットルーム、またはコミュニティ
  "Name": "TestGroup", // グループ名(必須)
  "MaxMemberCount":5 // 最大メンバー数(オプション)
}

注:

アプリは最大100,000グループをサポートします。追加のグループを作成するには、一定の料金が必要です。詳細は、 価格設定. サーバー側でのグループ作成の詳細については、グループ作成.

  • グループメンバーの追加: グループチャットが作成された後に新しいプレイヤーがゲームに参加した場合、既存のグループに新しいプレイヤーを追加する必要があります。以下はサンプルリクエスト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": [ // 一度に最大300メンバーを追加できます。
      {
          "Member_Account": "tommy" // 追加するメンバーのID(必須)
      },
      {
          "Member_Account": "jared"
  }]
}

詳細については、 グループメンバーの追加.

  • チームが満杯になった後のWebhook: 最大メンバー数が設定された場合、すべての必要なメンバーがグループにいるときにのみゲームを開始できます。グループが満杯になった後のwebhookを受信したときに、ゲームを開始できます。以下はサンプルリクエストURLです:
https://www.example.com?SdkAppid=$SDKAppID&CallbackCommand=$CallbackCommand&contenttype=json&ClientIP=$ClientIP&OptPlatform=$OptPlatform

以下はサンプルリクエストです:

{
  "CallbackCommand": "Group.CallbackAfterGroupFull", // Webhookコマンド
  "GroupId": "@TGS#2J4SZEAEL" // グループID
}

詳細については、グループが満杯になった後.

  • 新しいメンバーがグループに参加したときの通知: 新しいプレイヤーがゲーム(グループチャット)に参加すると、システムは他のグループメンバーに新しいメンバーが参加したことを通知するために、ユーザーがグループに参加した後のwebhookを送信します。以下はサンプルリクエストURLです:
https://www.example.com?SdkAppid=$SDKAppID&CallbackCommand=$CallbackCommand&contenttype=json&ClientIP=$ClientIP&OptPlatform=$OptPlatform

以下はサンプルリクエストです:

{
  "CallbackCommand": "Group.CallbackAfterNewMemberJoin", // Webhookコマンド
  "GroupId" : "@TGS#2J4SZEAEL",
  "Type": "Public", // グループタイプ
  "JoinType": "Apply", // グループ参加方法: `Apply`(申請);`Invited`(招待)
  "Operator_Account": "leckie", // 操作するアカウント
  "NewMemberList": [ // 新しいメンバーのリスト
      {
          "Member_Account": "jared"
      },
      {
          "Member_Account": "tommy"
      }
  ]
}

注:

このWebhookを有効にするには、Webhook URLを設定し、対応するプロトコルをオンにする必要があります。設定方法の詳細については、Webhook設定. その他の情報については、ユーザーがグループに参加した後.

  • ゲーム中にチームを離れる: プレイヤーが自主的にゲームを離れるか、ネットワークの問題で離れる場合、サーバーは他のプレイヤーに誰かがグループチャットを離れたことを通知し、ネットワークの問題でゲームを離れたプレイヤーにメッセージを送信することができます。以下は、ユーザーがグループを離れた後のリクエストURLの例です:
https://www.example.com?SdkAppid=$SDKAppID&CallbackCommand=$CallbackCommand&contenttype=json&ClientIP=$ClientIP&OptPlatform=$OptPlatform

以下はサンプルリクエストです:

{
  "CallbackCommand": "Group.CallbackAfterMemberExit", // Webhookコマンド
  "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 グループプロファイルの取得を呼び出すことで、グループ内のメンバー数やメンバーの基本情報などのグループ詳細を取得できます。リクエストのフィルターフィールドを使用して、取得する情報をフィルタリングできます。以下はサンプルリクエストURLです:
https://console.tim.qq.com/v4/group_open_http_svc/get_group_info?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json

以下はサンプルリクエストです:

{
  "GroupIdList": [ // クエリに指定されたグループIDのリスト。このパラメータは必須です。
      "@TGS#1NVTZEAE4",
      "@TGS#1CXTZEAET"
  ]
}

詳細については、 グループプロファイルの取得

  • グループメンバー詳細の取得: API グループメンバープロファイルの取得を呼び出すことで、グループメンバーの詳細情報(カスタムフィールドを含む)を取得できます。以下はサンプルリクエストURLです:
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がグループメンバーのカスタムフィールド情報を示します。

注意:

このAPIは音声・ビデオグループ(AVChatRoom)をサポートしていません。詳細については、グループメンバープロファイルの取得

チームメンバーがチーム情報を取得する

チームのメンバーはAPI グループメンバープロファイルの取得を呼び出して、他のメンバーの役割やステータスなどの詳細情報を取得できます。

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)=>{
 // 非同期ロジックを処理します
});

注意:

センシティブ情報のフィルタリング

センシティブコンテンツのフィルタリングはゲームにおいて重要な機能です。実装の手順は次のとおりです:

  1. グループメッセージ送信前にWebhookをバインドします。
  2. Webhookデータに基づいてメッセージタイプを識別し、メッセージデータをTencent Cloud Securityまたは他のサードパーティの検出サービスに送信します。
  3. メッセージが通常のテキストメッセージの場合、Tencent Cloud Securityの検出結果を待ち、メッセージをチャットバックエンドに配信するかどうかを示すデータパケットを返します。

メッセージ送信前のWebhookのサンプルデータ:

{
    "CallbackCommand": "Group.CallbackBeforeSendMsg", // Webhookコマンド
    "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": "レッドパケット"
            }
        }
    ],
    "CloudCustomData": "あなたのクラウドカスタムデータ"
}

注意:

メッセージタイプはMsgTypeフィールドに基づいて識別できます。フィールドの詳細については、グループメッセージ送信前

準拠していないメッセージの処理方法を選択でき、それはWebhookからチャットバックエンドに返されるデータパケットを通じて実装できます。

{
    "ActionStatus": "OK",
    "ErrorInfo": "",
    "ErrorCode": 0 // 異なる`ErrorCode`値は異なる意味を持ちます。
}
ErrorCode説明
0発言が許可されており、メッセージは正常に配信されます。
1発言が拒否され、クライアントは10016を返します。
2サイレント廃棄が有効になっており、クライアントはメッセージを通常通り返します。

注意:

必要に応じて使用できます。

メッセージタイプのカスタマイズ(アイテム贈呈や取引メッセージなど)

ゲームチャットには、テキスト、絵文字、音声メッセージなどのシンプルなメッセージに加えてカスタムメッセージが必要です。カスタムメッセージにより、開発者はメッセージのコンテンツフォーマットをカスタマイズして、ゲームアイテムの贈呈や取引などのチャットルーム機能を実装できます。

チャットはテキスト、絵文字、地理的位置、画像、音声、ファイル、ユーザー生成短編動画(UGSV)、システム通知、カスタムメッセージの9つの基本メッセージタイプを提供します。カスタムメッセージ以外のすべてのメッセージのフォーマットは固定されており、ユーザーは対応する情報を入力するだけで済みます。メッセージタイプの詳細については、 1対1メッセージタイプメッセージフォーマットの詳細については、メッセージフォーマットを参照してください。

サーバーAPIを通じてユーザーにカスタムメッセージを送信できます。1対1メッセージを1人のユーザーに送信1対1メッセージを複数のユーザーに送信およびグループ内の通常メッセージを送信以下はグループ内の通常メッセージを送信するための基本的なリクエストサンプルです:

{
    "GroupId": "@TGS#2C5SZEAEF",
    "Random": 8912345, // ランダム番号。同じメッセージのランダム番号が5分以内に同じ場合、それらは同じメッセージと見なされます。
    "MsgBody": [ // メッセージ本体。要素配列で構成されます。詳細についてはフィールドの説明を参照してください。
        {
            "MsgType": "TIMTextElem", // テキスト
            "MsgContent":{
                "Text": "レッドパケット"
            }
        },
        {
            "MsgType": "TIMFaceElem", // 絵文字
            "MsgContent":{
            "Index": 6,
            "Data": "abc\u0000\u0001"
            }
        }
    ],
    "CloudCustomData": "あなたのクラウドカスタムデータ",
    "SupportMessageExtension": 0,
}

カスタムメッセージデータ(クラウドに保存)を定義するためにCloudCustomDataを変更し、送信するためのカスタムメッセージをMsgBody(メッセージ本体)に入力できます。

チーム内の音声/ビデオチャット

ゲームにおける音声/ビデオチャットは重要な機能です。チャットアプリは、Tencent Real-Time Communication(TRTC)およびTUICallKitを使用してリアルタイムの音声/ビデオ通話機能を備えています。

注意:

各SDKAppIDに対して音声/ビデオ通話機能の7日間の無料トライアルを提供しています。チャットコンソール

TUICallKitの詳細については、統合ソリューション(UI含む) - 音声/ビデオ通話

ゲームチャットルームの種類

ゲームチャットルームの種類は以下のとおりです:

タイプ特徴
チャンネルチャンネルは通常、多くのチャットユーザーを巻き込み、固定メンバーのリストはありません。ユーザーはいつでもチャンネルに参加したり離れたりできます。オフラインメッセージプッシュは必要ありません。
ライブゲームロビーライブゲームロビーは通常、多数のチャットユーザーを巻き込みます。ユーザーはいつでもライブルームに参加したり離れたりできます。過去のメッセージのクエリがサポートされています。
チームチームは通常、少数のチャットユーザーを巻き込み、互いに友達である必要はありません。ゲームが終了するとチームは解散します。オフラインメッセージプッシュは必要ありません。
友達1対1のチャット。チャット履歴は保存されます。チャット相手は連絡先リスト内の友達のみです。
プライベートメッセージ1対1のチャット。チャット相手は見知らぬ人である可能性があります。
音声・ビデオグループチャットユーザーの数に制限はなく、ユーザーはいつでも音声・ビデオグループに参加したり離れたりできます。

チャットは以下の種類のチャットルームを提供します:

タイプ特徴
ワークグループ(Work)ワークグループは、ユーザーがグループのメンバーである友達から招待されて参加できます。招待は受け入れる必要がなく、グループオーナーの承認も必要ありません。
パブリックグループ(Public)パブリックグループは、グループオーナーがグループ管理者を指定できます。グループに参加するには、ユーザーがグループIDを検索し、リクエストを送信する必要があります。リクエストは、ユーザーがグループオーナーまたは管理者によって承認される必要があります。
ミーティンググループ(Meeting)ミーティンググループでは、ユーザーは自由に参加・退出でき、参加前に送信された過去のメッセージを表示できます。ミーティンググループは、音声・ビデオ会議やオンライン教育など、Tencent Real-Time Communication(TRTC)を統合したシナリオに最適です。このグループタイプは、以前のバージョンのチャットルーム(ChatRoom)と同じです。
音声・ビデオグループ(AVChatRoom)音声・ビデオグループでは、ユーザーは自由に参加・退出でき、メンバー数に制限はなく、メッセージ履歴は保存されません。音声・ビデオグループは、オンスクリーンコメントチャットシナリオをサポートするために、Cloud Streaming Services(CSS)と一緒に使用できます。
コミュニティグループ(Community)コミュニティグループでは、ユーザーは自由に参加・退出でき、最大100,000人のメンバーをサポートし、メッセージ履歴が保存されます。グループに参加するには、ユーザーがグループIDを検索し、申請を送信する必要があります。この申請は、管理者によって承認される必要はありません。

以下は、チャットグループの特性に基づいたいくつかのサンプルソリューションであり、必要に応じてゲームに適用できます。

タイプソリューション特徴
チャンネルとライブゲームロビーコミュニティグループコミュニティグループは多数のユーザーをサポートし、ユーザーは自由に参加・退出でき、承認は不要です。
友達1対1のチャット+権限管理(友達のみがメッセージを送信できる)友達のみが互いにメッセージを送信できます。
プライベートメッセージ1対1のチャット+権限管理(アプリ内の任意の2ユーザーが互いに1対1メッセージを送信できる)任意の2人の見知らぬ人が互いにメッセージを送信できます。
チームアップパブリックグループ(Public)およびミーティンググループ(Meeting)ゲーム内のチームメンバーのみがグループチャットに入ることができます。音声・ビデオチャットがサポートされています。
音声・ビデオグループ音声・ビデオグループ(AVChatRoom)メンバー数に制限はなく、ユーザーはいつでも音声・ビデオグループに参加したり離れたりできます。

注意:

友達とプライベートの1対1チャットの権限管理についての詳細は、 1対1メッセージング権限管理

グループシステムに関する詳細は、 こちら および グループシステム

今すぐ注文

クリックして ここ t購入ページにすぐに移動します。