> For the complete documentation index, see [llms.txt](https://docs.ggwp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ggwp.com/kr/ggwp-sdk/additional-supported-integrations/discord-social-sdk.md).

# 채팅: Discord Social SDK

*이 문서는 GGWP를 Discord Social SDK의 채팅 서비스와 통합하는 여러 접근 방식을 다룹니다.*&#x20;

Discord Social SDK를 사용하는 게임에 GGWP 채팅 API를 통합하는 방법은 세 가지가 있습니다.

**참고:** 방법 (1) 및 (2)의 중재 기능은 제한적입니다(아래 참조). 반면 방법 (3)은 완전한 중재 지원을 제공합니다.

## 방법 1: Discord 웹후크 - 직접 통합

1. Discord 개발자 포털에 로그인하고 [애플리케이션 페이지](https://discord.com/developers/applications)

   <figure><img src="/files/86de5ebf0075950beaf01e01e274a7426672e072" alt=""><figcaption></figcaption></figure>
2. Social SDK 통합에 사용 중인 애플리케이션을 선택합니다

   <figure><img src="/files/16b2de1bc318cce6595e5a993534a9ffab0c8200" alt=""><figcaption></figcaption></figure>
3. 에서 `일반 정보` 옵션을 `설정`에서, `애플리케이션 ID` 및 `공개 키` 를 복사하여 귀하의 GGWP 계정 관리자와 공유하십시오.

   <figure><img src="/files/d6412cedb534aa4a6522b7c97a3365ad7763b63d" alt=""><figcaption></figcaption></figure>
4. GGWP 팀은 귀하의 앱을 자체 시스템에 구성하고 `엔드포인트 URL`
5. 선택 `웹후크` 왼쪽의 `설정` 에서 GGWP가 공유한 URL을 `엔드포인트 URL` 필드에

   <figure><img src="/files/572776d90a0284f8a398c9b1bdc30e5b41f76604" alt=""><figcaption></figcaption></figure>
6. 토글 `이벤트` 스위치를 활성 상태로 전환하고 `로비 메시지 생성`&#x20;

   <figure><img src="/files/3eb22f871e58d9f8805e4631afabc84d18e33c68" alt=""><figcaption></figcaption></figure>

### **주요 사항**

1. 데이터 수집을 위한 코드 없는 통합!
2. 맞춤 설정 [필터 강도](https://docs.ggwp.com/api-docs-chat/standard-package/chat-api#headers) 을(를) 룸, 그룹 또는 커뮤니티별로 설정하는 것은 지원되지 않습니다. GGWP 채팅 서비스는 전역 [콘텐츠 필터 구성](https://docs.ggwp.com/dashboard-user-guide/admin-features#content-filter-configuration).
3. 를 사용합니다. 독성이 있는 메시지는 삭제할 수 없습니다. 현재 Discord Social SDK는 [클라이언트에서만 중재를 지원합니다](https://discord.com/developers/docs/discord-social-sdk/how-to/integrate-moderation).
4. GGWP Automod가 활성화되면 사용자 제재는 GGWP 웹후크를 통해 시행될 수 있지만, 게임 클라이언트에서의 통신 처리 및 적절한 조치 적용은 귀하의 책임입니다.

### **메시지 흐름**

<figure><img src="/files/8a409d552cb76ca89b76149e74c87cdae165d093" alt=""><figcaption></figcaption></figure>

## 방법 2: Discord 웹후크 - 자체 관리

1. Discord의 [웹후크 이벤트 가이드](https://discord.com/developers/docs/events/webhook-events) 를 따라 서버에 웹후크를 구현하십시오.
2. Discord 웹후크 호출을 통해 메시지를 수신하면 [GGWP 채팅 API](https://docs.ggwp.com/api-docs-chat/standard-package/chat-api) 를 GGWP에서 공유한 API 키를 사용하여 호출합니다.

### **주요 사항**

1. Chat API를 직접 호출하므로 로비 ID나 채널 ID와 같은 속성을 사용하여 각 룸, 그룹 또는 커뮤니티에 대한 필터 강도를 설정할 수 있습니다. 지정하지 않으면 전역 [콘텐츠 필터 설정](https://docs.ggwp.com/dashboard-user-guide/admin-features#content-filter-configuration) 이 사용됩니다.
2. 를 사용합니다. 독성이 있는 메시지는 삭제할 수 없습니다. 현재 Discord Social SDK는 [클라이언트에서만 중재를 지원합니다](https://discord.com/developers/docs/discord-social-sdk/how-to/integrate-moderation).
3. GGWP Automod가 활성화되면 사용자 제재는 GGWP 웹후크를 통해 시행될 수 있지만, 게임 클라이언트에서의 통신 처리 및 적절한 조치 적용은 귀하의 책임입니다.

### 메시지 흐름

<figure><img src="/files/fd26a7eda2a686b478d307a754a1d8927d25684c" alt=""><figcaption></figcaption></figure>

## 방법 3: GGWP SDK 사용

1. 클라이언트 측 통합이 필요합니다. SDK 초기화가 완료되면 다음을 처리합니다.
   1. 단기간 유효한 동적 토큰을 사용한 안전한 인증
   2. 메시지를 GGWP로 전송하여 중재 처리
   3. 독성 메시지가 Social SDK에 표시되지 않도록 방지
2. GGWP SDK 인증을 처리하기 위해 서버에 API를 구축해야 합니다

   이 API는 인증을 위해 GGWP 서버와 `x-api-key` 를 사용하여 통신합니다. 응답으로 5분 동안 유효한 인증 코드를 받으며, 이는 임시 액세스 토큰으로 교환할 수 있습니다.

### **주요 사항**

1. 필터 강도는 클라이언트 측에서 특정 룸, 그룹 또는 커뮤니티에 대해 제어할 수 있습니다.
2. 독성 메시지가 표시되는 것을 방지합니다
3. GGWP Automod가 활성화되면 사용자 제재는 SDK를 통해 직접 처리 및 시행할 수 있습니다

### 메시지 흐름

<figure><img src="/files/c9d09e1cf2dfb1bc6f62ea05826f4c0c427868df" alt=""><figcaption></figcaption></figure>

### 통합 가이드 - Unity

SDK를 통합하기 전에 서비스 서버가 [동적 토큰](/kr/ggwp-sdk/authentications.md#dynamic-tokens).

인증을 지원하도록 설정되어 있는지 확인하십시오. GGWP의 채팅 제품은 클라이언트 SDK를 통해 완전히 지원됩니다. 클라이언트에서 SDK 초기화가 완료되면 채팅 API에 아래와 같이 액세스할 수 있습니다:

```csharp
GGWPSDK.Instance?.InitializeSDK("user_id", "username");

if (GGWPSDK.Instance?.ChatAPI != null)
{
    // 채팅 API를 사용할 준비가 되었습니다
}
```

이 주제에서 이해해야 할 두 가지 측면이 있습니다:

1. 메시지 교체 및 필터 강도 구성 - 메시지를 어떻게 평가하고 결과에 따라 무엇을 할지 결정합니다.
2. 채팅 서비스 호출 - 실제로 메시지를 GGWP 서버로 전송합니다

#### 메시지 교체 및 필터 강도 구성

**필터 강도 설정**

필터 강도는 메시지가 얼마나 엄격하게/완화되어 평가될지를 결정하기 위해 GGWP로 전송되는 메시지에 대해 설정할 수 있습니다. 필터 강도 구성은 **완전히 선택 사항입니다**. 설정하지 않으면 기본값이 자동으로 사용됩니다. 기본값은 [대시보드를 사용하여 업데이트할 수 있습니다](/kr/dashboard-user-guide/admin-features.md#content-filter-configuration).

[여기 ](/kr/api/standard-package/api-v2.md#headers)GGWP가 제공하는 사용 가능한 옵션 목록입니다. 클라이언트에서는 `SetSanitizationConfig` .&#x20;

**을(를) 사용하여 설정할 수 있습니다**

메시지 교체 전략 `메시지가 GGWP 서비스에 의해 처리되면 응답에 메시지의 여러 버전이 반환됩니다.` messageReplacementConfig `설정은 ReplaceMessage를 호출할 때 SDK가 어떤 버전을 사용할지를 결정합니다.`.&#x20;

다음 메시지 버전들이 사용 가능하며 클라이언트에서 교체 전략을 설정할 때 사용할 식별자가 함께 제공됩니다

* **original\_message**
  * 정의: 사용자가 보낸 원본(raw) 메시지입니다.
  * 식별자: `UseOriginal`
* **filtered\_message**
  * 정의: 표시된 용어가 필터링된 메시지 버전입니다.
    * 공백으로 구분되는 언어(예: 영어)의 경우 전체 단어가 필터링됩니다. 예: `You are a shithead` --> `You are a *****`
    * 명확한 단어 경계가 없는 언어(예: 한국어, 일본어, 중국어)의 경우 감지된 용어 자체만 필터링됩니다. 예: `좆까고 있네`--> `*****고 있네`
  * (기본) 식별자: `UseFiltered`
* **replaced\_message**
  * 정의: 원본 메시지를 대체하기 위해 생성된 안전하거나 유머러스한 대체 문구입니다.
  * 식별자:  `UseReplaced`
* **recommended\_message**
  * 정의: 클라이언트에 전달될 권장 메시지 버전입니다. 활발한 사용자에 대해서는 이 값이 기본적으로 `filtered_message`입니다. 음소거된 사용자의 경우, `recommended_message` 는 빈 문자열이 됩니다.
  * 식별자: `UseRecommended`

추가 전략이 하나 더 있습니다 - `DropMessage` 이는 GGWP가 메시지를 독성으로 판단한 경우 Discord Social SDK로 상류에 아무것도 전송되지 않도록 합니다. Discord로 어떤 메시지도 보내고 싶지 않다면 이 옵션을 사용하십시오.

다음 코드 스니펫은 메시지 교체 전략과 필터 강도를 설정하는 예시를 보여줍니다:

```csharp
using GGWP.Chat;

GGWPSDK.Instance?.ChatAPI.SetSanitizationConfig(new SanitizationConfigUpdate
{
    client = new GGWP.Chat.Impl.SanitizationClientConfig
    {
        // ReplaceMessage를 호출할 때 사용할 메시지 버전을 선택합니다
        messageReplacementConfig = ReplacementStrategy.UseFiltered  // 기본: filtered_message 사용
        // messageReplacementConfig = ReplacementStrategy.UseReplaced  // replaced_message 사용
        // messageReplacementConfig = ReplacementStrategy.UseRecommended  // recommended_message 사용
        // messageReplacementConfig = ReplacementStrategy.UseOriginal  // original_message 사용
        // messageReplacementConfig = ReplacementStrategy.DropMessage  // 메시지를 완전히 드롭함
    },
    service = new GGWP.Chat.Impl.SanitizationServiceConfig
    {
        violence = ConfigOptionSetting.High,
        sexualContent = ConfigOptionSetting.High,
        verbalAbuse = ConfigOptionSetting.High,
        identityHate = ConfigOptionSetting.High,
        profanity = ConfigOptionSetting.High,
        linkSharing = ConfigOptionSetting.High,
        drugs = ConfigOptionToggle.On,
        spam = ConfigOptionToggle.On,
        selfHarm = ConfigOptionToggle.Off,
        pii = ConfigOptionToggle.On,
        replace = ConfigOptionToggle.On,
    }
});
```

**교체 전략이 메시지 처리에 미치는 영향**

선택한 교체 전략은 ReplaceMessage를 호출할 때 어떤 메시지 텍스트가 반환되는지에 영향을 줍니다. 다음은 동일한 공격적 입력이 선택한 전략에 따라 어떻게 다르게 처리되는지 보여주는 실용적인 예입니다: `설정은 ReplaceMessage를 호출할 때 SDK가 어떤 버전을 사용할지를 결정합니다.`// 원래 사용자 입력

```csharp
string userMessage = "you stupid idiot go away";
// ReplaceMessage를 호출하면 반환된 메시지는 전략에 따라 달라집니다:

var replaced = await GGWPSDK.Instance?.ChatAPI.ReplaceMessage(
new ChatMessage { message = userMessage }
    // UseFiltered(기본)일 때: "you ****** ***** go away"
);

// UseReplaced일 때: "you silly person go away"
// UseRecommended일 때: 서비스의 AI가 이 특정 메시지에 가장 적합한 버전을 선택합니다  
// UseOriginal일 때: "you stupid idiot go away"
선택한 전략은 ReplaceMessage를 사용할 때 자동으로 적용되므로 매번 명시할 필요가 없습니다. 언제든지
```

을(를) 호출하여 새 `설정은 ReplaceMessage를 호출할 때 SDK가 어떤 버전을 사용할지를 결정합니다.`값으로 전략을 변경할 수 있습니다. `SetSanitizationConfig` 현재 구성 가져오기 `메시지가 GGWP 서비스에 의해 처리되면 응답에 메시지의 여러 버전이 반환됩니다.` 선택한 교체 전략과 서비스 기본값을 포함한 현재 정화(sanitization) 구성을 가져옵니다:

**var config = await GGWPSDK.Instance?.ChatAPI.GetSanitizationConfig();**

// 어떤 교체 전략이 활성화되어 있는지 확인하려면 클라이언트 측 구성을 확인하세요

```csharp
var replacementStrategy = config.client.messageReplacementConfig;

Debug.Log($"현재 전략: {replacementStrategy}");
// 서비스 측 구성에 접근하기
if (config.service != null)

var spamSetting = config.service.Value.spam;
var selfHarmSetting = config.service.Value.selfHarm;
{
    클라이언트에서 GGWP 채팅 서비스 호출하기
    메시지 정화하기
}
```

#### 메시지를 정화하여 독성 내용을 확인합니다. 이 메서드는 교체 전략 설정과 관계없이 항상 메시지의 모든 버전을 반환합니다:

**string userMessage = "사용자의 메시지가 여기에 들어갑니다";**

var sanitized = await GGWPSDK.Instance?.ChatAPI.SanitizeMessage(

```csharp
using GGWP.Chat;

// 처리된 방식(모든 버전)에 접근할 수 있습니다

string original = sanitized.messageDetails.originalMessage;
    // UseFiltered(기본)일 때: "you ****** ***** go away"
);

string filtered = sanitized.messageDetails.filteredMessage;
string replaced = sanitized.messageDetails.replacedMessage;
Debug.Log($"원본: {original}");
Debug.Log($"필터된: {filtered}");

Debug.Log($"대체된: {replaced}");
정화된 메시지 구독하기
모든 정화된 메시지를 실시간으로 모니터링합니다. 이 구독은 각 정화된 메시지에 대한 모든 메시지 버전을 제공하므로 정화 과정에 대한 완전한 가시성을 제공합니다:
```

**var sanitizedSubscriber = new Subscriber\<SanitizationResponse>(**

GGWPSDK.Instance?.ChatAPI.SubscribeSanitizedMessages()

```csharp
using GGWP.Utils.Async;
using GGWP.Chat;

await foreach (var sanitized in sanitizedSubscriber.GetStream())
    // 정화된 메시지를 처리합니다
);

Debug.Log($"정화된 메시지 수신: {filtered}");
{
    string replaced = sanitized.messageDetails.replacedMessage;
    Debug.Log($"원본: {original}");
    Debug.Log($"필터된: {filtered}");
    
    메시지 교체하기
    메시지를 정화된 버전으로 교체합니다. 사용되는 특정 버전은 구성된
}
```

**전략에 따라 달라집니다. 이는 일반적으로 채팅 시스템을 구축할 때 가장 자주 사용할 메서드로, 선택한 필터링 방식을 자동으로 적용합니다:**

if (replaced != null) `메시지가 GGWP 서비스에 의해 처리되면 응답에 메시지의 여러 버전이 반환됩니다.` // 메시지가 선택한 전략에 따라 성공적으로 교체되었습니다

```csharp
// 처리된 방식(모든 버전)에 접근할 수 있습니다

new ChatMessage { message = userMessage }
    // UseFiltered(기본)일 때: "you ****** ***** go away"
);

// messageDetails에는 ReplacementStrategy에 의해 선택된 메시지 버전이 포함됩니다
{
    string messageToDisplay = replaced.messageDetails.replacedMessage;
    Debug.Log($"표시할 메시지: {messageToDisplay}");
    else
    // 메시지가 드롭되었습니다(제재 때문일 수 있음)
}
Debug.Log("메시지가 드롭되었습니다");
{
    중요: 제재로 인한 메시지 드롭
    사용자가 제재(뮤트)를 당하면 교체 전략과 관계없이 해당 사용자의 메시지는 드롭됩니다. 이 메서드는 메시지를 전송하지 말아야 함을 나타내기 위해 null을 반환합니다:
}
```

<details>

<summary><strong>// 사용자가 채팅 채널에서 뮤트된 경우</strong></summary>

new ChatMessage { message = "any message" } `설정은 ReplaceMessage를 호출할 때 SDK가 어떤 버전을 사용할지를 결정합니다.` if (replaced == null)

```csharp
Debug.Log("사용자가 뮤트되어 메시지가 드롭되었습니다");
new ChatMessage { message = userMessage }
    참고 문헌
);

GGWP 전역 콘텐츠 필터 구성
{
    GGWP에서 사용 가능한 필터 설정
}
```

</details>

## Discord Social SDK를 통한 중재

1. [Social SDK 앱에서 Discord 웹후크 활성화](https://docs.ggwp.com/dashboard-user-guide/admin-features#content-filter-configuration)
2. [Enabling Discord Webhooks in your Social SDK app](https://docs.ggwp.com/api-docs-chat/standard-package/chat-api#headers)
3. [Enabling Discord Webhooks in your Social SDK app](https://discord.com/developers/docs/discord-social-sdk/how-to/integrate-moderation)
4. [Enabling Discord Webhooks in your Social SDK app](https://discord.com/developers/docs/events/webhook-events)
