몰입형 게임 내 채팅 경험 만들기: 텐센트 RTC GME와의 신속한 통합

10 분 읽기
Feb 18, 2025

시나리오 개요

인스턴트 메시징은 게임의 일반적인 요구 사항이며, 인스턴트 채팅은 멀티플레이어 게임에서 필수 기능이 되었습니다. 게임 플랫폼 자체는 다양한 그룹 유형, 사용자 정의 메시지 유형(예: 게임 내 아이템 선물 및 거래), 글로벌 액세스 및 기타 복잡한 요구 사항을 포함합니다. 이 문서는 게임 내 채팅 구축 과정에서 일반 요구 사항의 구현 방법과 가능한 문제 및 고려 사항을 정리하여 개발자가 비즈니스를 빠르게 이해하고 요구 사항을 구현할 수 있도록 돕습니다.

게임 내 인스턴트 메시징

게임 내 채팅 기능

그룹 구성원 관리

게임 플랫폼 인터페이스

사용자 정의 메시지 유형

글로벌 액세스 기능

적용된 제품

채팅

기본 통합 가이드라인

키를 사용한 UserSig 계산

채팅 계정 시스템에서 사용자 로그인을 위해 필요한 비밀번호는 채팅에서 제공하는 키로 서버에서 계산됩니다. 자세한 내용은 UserSig 생성. 개발 단계에서는 클라이언트의 개발이 지연되는 것을 방지하기 위해, UserSig콘솔 에서 계산할 수도 있습니다. 아래와 같이:

UserSig 도구

- 서명 (UserSig) 생성기
- 서명 (UserSig) 검증기
- SDKAppID
- UserID
- SDKSecretKey
- 생성
- 복사
- 검증

관리자 계정 구성

게임 내 인스턴트 메시징 관리를 위해서는 관리자가 이메일 공지를 보내거나 임시 팀업 메시지를 관리해야 할 수 있으며, 이는 채팅 서버 API를 통해 수행할 수 있습니다. 이러한 API를 호출하려면 채팅 관리자 계정을 생성 해야 합니다. 기본적으로 채팅은 UserIDadministrator인 계정을 제공합니다. 필요에 따라 여러 관리자 계정을 생성할 수도 있습니다. 단, 최대 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바이트를 초과할 수 없음. 친구 목록의 Tag_SNS_IM_Group 필드에서만 사용 가능.

사용자 프로필: 사용자 프로필에는 표준 및 사용자 정의 필드가 포함됩니다. 사용자 정의 필드는 아래의 확장 데이터 부분을 참조하십시오. 현재 채팅에서 지원하는 표준 필드는 표준 프로필 필드.

친구 프로필: 친구 프로필에는 표준 및 사용자 정의 친구 필드가 포함됩니다. 채팅의 연락처 목록은 최대 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명의 사용자 상태를 조회할 수 있습니다.

기타 호출 빈도: 초당 최대 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특징적용 시나리오
한 명의 사용자에게 일대일 메시지 전송지정된 계정으로 메시지를 전송합니다. 수신자에게 표시되는 발신자는 관리자가 아니라 관리자가 지정한 계정입니다.특정 사용자에게 메시지를 전송하는 경우, 예를 들어 사용자에게 게임 보상 메시지를 전송하는 경우
여러 사용자에게 일대일 메시지 전송한 명의 사용자에게 일대일 메시지를 최대 500명에게 동시에 전송할 수 있으며, 최대 호출 빈도는 초당 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 (메시지 본문)은 메시지 배열입니다. 여기에 텍스트 및 사용자 정의 메시지를 추가하여 보낼 수 있습니다.

이메일 목록

역사적 이메일 목록의 저장은 메시지 저장과 동일합니다. 이는 역사적 일대일 메시지 저장 및 역사적 그룹 메시지 저장으로 구성됩니다. 그룹 채팅은 최소 두 명의 사용자가 필요하므로, 관리자가 지정한 계정과 이메일을 수신하는 사용자를 포함하는 그룹을 생성하여 저장할 수 있습니다.

참고:

무료 에디션 및 프로 에디션의 경우, 저장 기간은 7일입니다. 궁극적 에디션의 경우, 저장 기간은 30일입니다. 프로 에디션 및 궁극적 에디션은 저장 기간을 연장할 수 있습니다. 관련 구성을 수정하려면 콘솔에 로그인하세요. 역사적 메시지의 저장 기간을 연장하는 것은 유료 부가 서비스입니다. 청구에 대한 자세한 내용은 부가 서비스 요금.

네트워크가 정상일 경우 최신 클라우드 데이터가 끌어와지며, 비정상일 경우 SDK가 로컬에 저장된 역사적 메시지를 반환합니다. 페이지 기반 끌어오기를 지원합니다. 다음은 역사적 이메일 목록을 끌어오는 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.

읽지 않은 이메일 수

사용자-시스템 이메일 기록은 채팅에서 대화와 동일합니다. 채팅은 사용자가 아직 읽지 않은 메시지를 알리기 위해 대화 읽지 않은 수 기능을 제공합니다. 사용자가 대화로 클릭한 후 대화 목록으로 돌아가면 읽지 않은 메시지 수가 지워집니다. 다음은 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", // 그룹 유형: Private, Public, ChatRoom, AVChatRoom 또는 Community
  "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 구성. 자세한 내용은 사용자가 그룹에 가입했을 때.

  • 게임 중 팀 떠나기: 플레이어가 자발적으로 게임을 떠나거나 네트워크 문제로 인해 떠날 때, 서버는 그룹에서 누군가가 떠났다는 것을 다른 플레이어에게 알리는 사용자가 그룹을 떠났을 때의 webhook을 통해 알릴 수 있으며, 네트워크 문제로 인해 게임을 떠나는 플레이어에게 메시지를 보낼 수도 있습니다. 다음은 사용자가 그룹을 떠났을 때.
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"
      }
  ]
}
  • 게임 종료 후 그룹 채팅 해체하기: 게임이 종료된 후 서버 측에서 그룹 채팅을 직접 해체할 수 있습니다. 다음은 그룹 해체하기.
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. 그룹 메시지를 보내기 전에 웹훅을 바인딩합니다.
  2. 웹훅 데이터를 기반으로 메시지 유형을 식별하고 메시지 데이터를 Tencent Cloud Security 또는 다른 제3자 탐지 서비스에 전달합니다.
  3. 메시지가 일반 텍스트 메시지인 경우 Tencent Cloud Security의 탐지 결과를 기다리고 메시지를 채팅 백엔드로 전달할지 여부를 나타내는 데이터 패킷을 반환합니다.

메시지를 보내기 전 웹훅의 샘플 데이터:

{
    "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": "빨간 봉투"
            }
        }
    ],
    "CloudCustomData": "당신의 클라우드 사용자 정의 데이터"
}

참고:

메시지 유형은 MsgType 필드를 기준으로 식별할 수 있으며, 필드에 대한 자세한 내용은 그룹 메시지 전송 전를 참조하십시오.

비준수 메시지를 특정 방식으로 처리하도록 선택할 수 있으며, 이는 채팅 백엔드에 반환되는 웹훅의 데이터 패킷을 통해 구현할 수 있습니다.

{
    "ActionStatus": "OK",
    "ErrorInfo": "",
    "ErrorCode": 0 // 서로 다른 `ErrorCode` 값은 서로 다른 의미를 가집니다.
}
ErrorCode설명
0발언이 허용되며, 메시지가 정상적으로 전달될 수 있습니다.
1발언이 거부되며, 클라이언트가 10016을 반환합니다.
2침묵 폐기가 활성화되어 있으며, 클라이언트는 메시지를 정상적으로 반환합니다.

참고:

필요에 따라 사용할 수 있습니다.

메시지 유형 맞춤화 (예: 소품 선물 및 거래 메시지)

게임 채팅에는 텍스트, 이모지 및 음성 메시지와 같은 단순 메시지 외에도 사용자 정의 메시지가 필요합니다. 사용자 정의 메시지는 개발자가 메시지의 콘텐츠 형식을 사용자 정의하여 게임 소품 선물 및 거래와 같은 더 많은 채팅룸 기능을 구현할 수 있도록 합니다.

채팅은 텍스트, 이모지, 지리적 위치, 이미지, 음성, 파일, 사용자 생성 짧은 비디오(UGSV), 시스템 알림 및 사용자 정의 메시지의 아홉 가지 기본 메시지 유형을 제공합니다. 사용자 정의 메시지를 제외한 모든 메시지의 형식은 고정되어 있으며, 사용자는 해당 정보를 입력하기만 하면 됩니다. 메시지 유형에 대한 자세한 설명은 일대일 메시지 유형를 참조하십시오. 메시지 형식에 대한 자세한 내용은 메시지 형식를 참조하십시오.

서버 API를 통해 사용자에게 사용자 정의 메시지를 보낼 수 있습니다. 한 사용자에게 일대일 메시지 전송, 여러 사용자에게 일대일 메시지 전송,그룹 내 일반 메시지 전송. 다음은 그룹에서 일반 메시지를 전송하는 기본 요청 샘플입니다:

{
    "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일 무료 평가판을 제공합니다. 각 SDKAppID에 대해 하나의 무료 평가판만 받을 수 있습니다. 채팅 콘솔에서 확인할 수 있습니다.

TUICallKit에 대한 자세한 내용은 통합 솔루션 (UI 포함) - 오디오/비디오 통화를 참조하십시오.

게임 채팅룸 유형

게임 채팅룸 유형은 다음과 같이 설명됩니다:

유형특징
채널채널은 일반적으로 많은 채팅 사용자를 포함하며 고정된 구성원 목록이 없습니다. 사용자는 언제든지 채널에 참여하거나 나갈 수 있습니다. 오프라인 메시지 푸시는 필요하지 않습니다.
라이브 게임 로비라이브 게임 로비는 일반적으로 여러 채팅 사용자를 포함합니다. 사용자는 언제든지 라이브 룸에 참여하거나 나갈 수 있습니다. 과거 메시지 조회가 지원됩니다.
팀은 일반적으로 소수의 채팅 사용자를 포함하며, 서로 친구일 필요는 없습니다. 게임이 끝나면 팀은 종료됩니다. 오프라인 메시지 푸시는 필요하지 않습니다.
친구일대일 채팅. 채팅 기록이 저장됩니다. 채팅 파트너는 연락처 목록의 친구여야 합니다.
비공식 메시지일대일 채팅. 채팅 파트너는 낯선 사람일 수 있습니다.
오디오-비디오 그룹채팅 사용자 수에 제한이 없으며, 사용자는 언제든지 오디오-비디오 그룹에 참여하거나 나갈 수 있습니다.

채팅은 다음과 같은 유형의 채팅룸을 제공합니다:

유형특징
작업 그룹 (Work)작업 그룹은 사용자가 그룹의 구성원인 친구의 초대를 통해 그룹에 참여할 수 있게 합니다. 초대는 수락하거나 그룹 소유자의 승인을 필요로 하지 않습니다.
공개 그룹 (Public)공개 그룹은 그룹 소유자가 그룹 관리자를 지정할 수 있게 합니다. 그룹에 참여하려면 사용자가 그룹 ID를 검색하고 요청을 보내야 하며, 요청은 그룹 소유자 또는 관리자에 의해 승인되어야 사용자가 그룹에 참여할 수 있습니다.
회의 그룹 (Meeting)회의 그룹은 사용자가 자유롭게 참여하고 나가며, 참여하기 전에 전송된 과거 메시지를 볼 수 있게 합니다. 회의 그룹은 TRTC와 통합된 시나리오에 적합하며, 오디오/비디오 회의 및 온라인 교육과 같은 기능을 지원합니다. 이 그룹 유형은 이전 버전의 채팅방(ChatRoom)과 동일합니다.
오디오-비디오 그룹 (AVChatRoom)오디오-비디오 그룹은 사용자가 자유롭게 참여하고 나갈 수 있으며, 구성원 수에 제한이 없고 메시지 기록을 저장하지 않습니다. 오디오-비디오 그룹은 클라우드 스트리밍 서비스(CSS)와 함께 사용되어 화면 댓글 채팅 시나리오를 지원할 수 있습니다.
커뮤니티 그룹 (Community)커뮤니티 그룹은 사용자가 자유롭게 참여하고 나갈 수 있으며, 최대 100,000명의 구성원을 지원하고 메시지 기록을 저장합니다. 그룹에 참여하려면 사용자가 그룹 ID를 검색하고 신청해야 하며, 신청은 관리자의 승인을 필요로 하지 않습니다.

다음은 채팅 그룹 특징을 기반으로 한 샘플 솔루션으로, 필요에 따라 게임에 적용할 수 있습니다:

유형솔루션특징
채널 및 라이브 게임 로비커뮤니티 그룹커뮤니티 그룹은 많은 사용자를 지원하며 사용자가 자유롭게 참여하고 나갈 수 있으며, 승인이 필요하지 않습니다.
친구일대일 채팅 + 권한 제어 (오직 친구만 서로에게 메시지를 보낼 수 있음)오직 친구만 서로에게 메시지를 보낼 수 있습니다.
비공식 메시지일대일 채팅 + 권한 제어 (앱 내의 두 사용자 모두 서로에게 일대일 메시지를 보낼 수 있음)어떤 두 낯선 사람도 서로에게 메시지를 보낼 수 있습니다.
팀업공개 그룹 (Public) 및 회의 그룹 (Meeting)게임의 팀 구성원만 그룹 채팅에 들어갈 수 있습니다. 오디오-비디오 채팅이 지원됩니다.
오디오-비디오 그룹오디오-비디오 그룹 (AVChatRoom)구성원 수에 제한이 없으며 사용자가 언제든지 오디오-비디오 그룹에 참여하거나 나갈 수 있습니다.

참고:

친구 및 비공식 일대일 채팅의 권한 제어에 대한 자세한 내용은 일대일 메시징 권한 제어를 참조하십시오.

그룹 시스템에 대한 자세한 내용은 정보그룹 시스템를 참조하십시오.

지금 주문하기

구매 페이지로 빠르게 이동하려면 여기를 클릭하세요.