> 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/jp/ggwp-client-sdk/no/chatto-discord-social-sdk.md).

# チャット: Discord Social SDK

*このドキュメントでは、チャットサービス向けにGGWPをDiscord Social SDKと統合するためのさまざまなアプローチを説明します。*&#x20;

Discord Social SDKを使用して、GGWP Chat APIをゲームに統合する方法は3つあります。

**注：** アプローチ(1)と(2)のモデレーション機能は制限されています（詳細は下記）が、アプローチ(3)では完全なモデレーションサポートが提供されます。

## アプローチ1: Discord Webhooks - 直接統合

1. Discord Developer Portalにログインし、 [Applicationsページ](https://discord.com/developers/applications)

   <figure><img src="/files/c982e94ba89e9314ee619ab759c6d7cceaeddcf0" alt=""><figcaption></figcaption></figure>
2. Social SDK統合で使用しているアプリケーションを選択します

   <figure><img src="/files/6a6d389ba834a5d5cf70644f00fb17626155aafd" alt=""><figcaption></figcaption></figure>
3. から `General Information` の `Settings`を選択し、 `APPLICATION ID` および `PUBLIC KEY` をコピーしてGGWPのアカウントマネージャーに共有します。

   <figure><img src="/files/c96c09905cf6e1f5d1134df88fdc3dffe631272d" alt=""><figcaption></figcaption></figure>
4. GGWPチームがシステム内であなたのアプリを設定し、 `ENDPOINT URL`
5. 選択 `Webhooks` の下の `Settings` にあるGGWPから共有されたURLを左側の `ENDPOINT URL` フィールドに入力します

   <figure><img src="/files/a3b26a43caeda0c8a992ca0665788d98b7c7930e" alt=""><figcaption></figcaption></figure>
6. 切り替え `Events` スイッチを有効にし、 `Lobby Message Create`&#x20;

   <figure><img src="/files/5d67a1150299a08d0f0dfa64d16d02eaef5a3926" alt=""><figcaption></figcaption></figure>

### **要点**

1. データ取り込みのためのコード不要の統合！
2. カスタマイズ [フィルタ強度](https://docs.ggwp.com/api-docs-chat/standard-package/chat-api#headers) は、ルーム、グループ、またはコミュニティ単位ではサポートされていません。GGWP Chatサービスではグローバルな [コンテンツフィルター設定](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のWebhook経由で適用できますが、ゲームクライアントでの通信処理と適切なアクションの適用はあなたの責任になります。

### **メッセージフロー**

<figure><img src="/files/79e5a2766e9ce1ad41869d73f34b7910f31b720e" alt=""><figcaption></figcaption></figure>

## アプローチ2: Discord Webhooks - 自己管理

1. Discordの [Webhook Eventsガイド](https://discord.com/developers/docs/events/webhook-events) に従って、サーバーにWebhookを実装します。
2. DiscordのWebhook呼び出しを通じてメッセージを受信したら [GGWP Chat 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のWebhook経由で適用できますが、ゲームクライアントでの通信処理と適切なアクションの適用はあなたの責任になります。

### メッセージフロー

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

## アプローチ3: GGWP SDKを使用

1. クライアント側の統合が必要です。SDKの初期化が完了すると、以下を自動で処理します。
   1. 短命な動的トークンを使用した安全な認証
   2. モデレーションのためにメッセージをGGWPへ送信
   3. 不適切なメッセージがSocial SDKに表示されるのを防止
2. GGWP SDK認証を処理するAPIをサーバー上に構築する必要があります

   このAPIは認証用に、 `x-api-key` を使用してGGWPサーバーと通信します。応答として、5分間有効な認証コードが返され、これを一時的なアクセストークンと交換できます。

### **要点**

1. フィルタ強度は、任意のルーム、グループ、またはコミュニティに対してクライアント側で制御できます。
2. 不適切なメッセージの表示を防止
3. GGWP Automodが有効化されると、ユーザー制裁はSDKから直接処理および適用できます

### メッセージフロー

<figure><img src="/files/02df52a81d70a212bcf96c6f6527ce16ade6c9e3" alt=""><figcaption></figcaption></figure>

### 統合ガイド - Unity

SDKを統合する前に、サービスサーバーが [動的トークン](/jp/ggwp-client-sdk/ren-zheng.md#dynamic-tokens).

GGWPのChat製品はクライアントSDK経由で完全にサポートされています。クライアント側でSDKの初期化が完了したら、Chat APIは以下のように利用できます。

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

if (GGWPSDK.Instance?.ChatAPI != null)
{
    // Chat APIは使用準備完了
}
```

このトピックでは、理解すべき点が2つあります。

1. メッセージ置換とフィルタ強度の設定 - メッセージをどのように評価し、その結果に対して何を行うかを決定します。
2. Chatサービスの呼び出し - 実際にメッセージをGGWPのサーバーに送信します

#### メッセージ置換とフィルタ強度の設定

**フィルタ強度の設定**

GGWPに送信するメッセージのフィルタ強度を設定して、評価をどれほど厳しく/緩く行うかを決定できます。フィルタ強度の設定は **完全に任意です**。設定しない場合、デフォルトが自動的に使用されます。デフォルトは [ダッシュボードを使って更新できます](/jp/dasshubdoyzgaido/guan-li-zhe-ji-neng.md#content-filter-configuration).

[ここに ](/jp/apidokyumento-chat/pakkji/chat-api-v2regash.md#headers)GGWPが提供する利用可能なオプションの一覧があります。クライアント側では、 `SetSanitizationConfig` .&#x20;

**メッセージ置換戦略**

GGWPサービスでメッセージが処理されると、応答にはメッセージの複数バージョンが返されます。 `messageReplacementConfig` 設定は、 `ReplaceMessage`.&#x20;

を呼び出す際にSDKがどのバージョンを使用するかを決定します。

* **original\_message**
  * 定義: ユーザーが送信した生のメッセージ。
  * 識別子: `UseOriginal`
* **filtered\_message**
  * 定義: フラグ付きの用語がフィルタされたメッセージのバージョン。
    * スペース区切りの言語（例: 英語）では、単語全体がフィルタリングされます。例: `お前はクソ野郎だ` --> `お前は *****`
    * 明確な単語境界のない言語（例: 韓国語、日本語、中国語）では、検出された語そのもののみがフィルタリングされます。" 例: `좆까고 있네`--> `*****고 있네`
  * (デフォルト) 識別子: `UseFiltered`
* **replaced\_message**
  * 定義: 元のメッセージの代わりに生成された、安全な、またはユーモラスな代替文。
  * 識別子:  `UseReplaced`
* **recommended\_message**
  * 定義: クライアントに渡すことが推奨されるメッセージのバージョン。アクティブユーザーの場合、この値のデフォルトは `filtered_message`です。ミュートされたユーザーの場合、 `recommended_message` は空文字列になります。
  * 識別子: `UseRecommended`

追加の戦略があります - `DropMessage` これにより、Discord Social SDKへの上流送信は一切行われません。GGWPがメッセージを不適切と判断した場合に、Discord Socialへメッセージを送信したくないときにこれを使用してください。

以下のコードスニペットは、メッセージ置換戦略とフィルタ強度の設定方法を示しています。

```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`を呼び出したときに返されるメッセージ本文に影響します。ここでは、同じ攻撃的な入力が、選択した戦略によってどのように異なる処理を受けるかを示す実践例を紹介します。

```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`を使用するたびに自動的に適用されるため、その都度指定する必要はありません。 `SetSanitizationConfig` を新しい `messageReplacementConfig` 値で再度呼び出すことで、いつでも戦略を変更できます。

**現在の設定の取得**

選択した置換戦略とサービスのデフォルトを含む、現在のサニタイズ設定を取得します。

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

// クライアント側の設定にアクセスして、有効な置換戦略を確認
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のChatサービスを呼び出す

**メッセージのサニタイズ**

有害コンテンツを確認するためにメッセージをサニタイズします。このメソッドは、置換戦略の設定に関係なく、常にメッセージのすべてのバージョンを返します。

```csharp
using GGWP.Chat;

string userMessage = "ユーザーのメッセージはこちら";

var sanitized = await GGWPSDK.Instance?.ChatAPI.SanitizeMessage(
    new ChatMessage { message = userMessage }
);

// すべてのバージョンにアクセスして、メッセージがどのように処理されたかを確認できます
string original = sanitized.messageDetails.originalMessage;
string filtered = sanitized.messageDetails.filteredMessage;
string replaced = sanitized.messageDetails.replacedMessage;

Debug.Log($"Original: {original}");
Debug.Log($"Filtered: {filtered}");
Debug.Log($"Replaced: {replaced}");
```

**サニタイズ済みメッセージを購読する**

サニタイズされたすべてのメッセージをリアルタイムで監視します。このサブスクリプションは、各サニタイズ済みメッセージのすべてのバージョンを提供し、サニタイズ処理を完全に可視化します。

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

var sanitizedSubscriber = new Subscriber<SanitizationResponse>(
    GGWPSDK.Instance?.ChatAPI.SubscribeSanitizedMessages()
);

await foreach (var sanitized in sanitizedSubscriber.GetStream())
{
    string original = sanitized.messageDetails.originalMessage;
    string filtered = sanitized.messageDetails.filteredMessage;
    string replaced = sanitized.messageDetails.replacedMessage;
    
    // サニタイズ済みメッセージを処理
    Debug.Log($"受信したサニタイズ済みメッセージ: {filtered}");
}
```

**メッセージの置換**

メッセージをサニタイズ済みバージョンに置き換えます。使用される特定のバージョンは、設定した `messageReplacementConfig` 戦略に依存します。これは、チャットシステムを構築する際に最も頻繁に使うメソッドになるはずです。選択したフィルタリング方法が自動的に適用されるためです。

```csharp
string userMessage = "ユーザーのメッセージはこちら";

var replaced = await GGWPSDK.Instance?.ChatAPI.ReplaceMessage(
    new ChatMessage { message = userMessage }
);

if (replaced != null)
{
    // メッセージは戦略に従って正常に置き換えられました
    // messageDetailsには、ReplacementStrategyで選択されたメッセージバージョンが含まれます
    string messageToDisplay = replaced.messageDetails.replacedMessage;
    Debug.Log($"表示するメッセージ: {messageToDisplay}");
}
else
{
    // メッセージは破棄されました（制裁による可能性があります）
    Debug.Log("メッセージは破棄されました");
}
```

<details>

<summary><strong>重要: 制裁によるメッセージ破棄</strong></summary>

ユーザーが制裁（ミュート）されている場合、置換戦略に関係なく、そのメッセージは破棄されます。 `ReplaceMessage` メソッドは、メッセージを送信しないことを示すためにnullを返します:

```csharp
// ユーザーがチャットチャンネルでミュートされている場合
var replaced = await GGWPSDK.Instance?.ChatAPI.ReplaceMessage(
    new ChatMessage { message = "any message" }
);

if (replaced == null)
{
    Debug.Log("ユーザーはミュートされており、メッセージは破棄されました");
}
```

</details>

## 参考情報

1. [GGWPのグローバルコンテンツフィルター設定](https://docs.ggwp.com/dashboard-user-guide/admin-features#content-filter-configuration)
2. [GGWPで利用可能なフィルター設定](https://docs.ggwp.com/api-docs-chat/standard-package/chat-api#headers)
3. [Discord Social SDKでのモデレーション](https://discord.com/developers/docs/discord-social-sdk/how-to/integrate-moderation)
4. [Social SDKアプリでDiscord Webhooksを有効にする](https://discord.com/developers/docs/events/webhook-events)
