> 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/apidokyumento-chat/gaido-ggwpheno.md).

# 技術ガイド: GGWPへの移行

## 1. 基本統合

### 1.1 はじめに

* GGWPのアカウント担当者から、APIキーと環境情報（dev/prod）を入手してください。
* 当社の [標準パッケージ](/jp/apidokyumento-chat/pakkji.md#authentication) セクションで、認証に関する詳細をご確認ください。

### 1.2 データを準備する

GGWPのChat APIは、最小限の必須フィールドを含むシンプルなJSONペイロードを受け付けます：

* **session\_id** （例: "match\_123”）
* **user\_id** （例: "player\_456”）
* **message** （例: "くたばれ"）

注：次のような任意のメタデータも *タイムスタンプ、ユーザー名、言語、message\_url、channel、* または *参加者* 含めることができます。

### 1.3 GGWPにデータを送信する

REST APIエンドポイントを使用して、チャットメッセージをリアルタイムで送信します。

* POST /chat/v2/message
* レスポンスには、カテゴリフラグ、深刻度、フィルタ済みテキストが含まれます。

{% tabs %}
{% tab title="cURL" %}

```bash
curl --request POST 'https://api.ggwp.com/chat/v2/message' \\
--header 'x-api-key: <GGWP_API_KEY>' \\
--header 'x-api-config: <BASE64_ENCODED_CONFIG>' \\
--header 'Content-Type: application/json' \\
--data-raw '{
  "session_id": "match_1234",
  "message": "お前は本当にバカだ！",
  "user_id": "user001",
  "username": "playerOne",
  "timestamp": "2024-09-01 12:00:00"
}'

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import json

# APIエンドポイント
url = "https://api.ggwp.com/chat/v2/message"

# APIキーと設定を使ってヘッダーを設定します
headers = {
    "x-api-key": "<GGWP_API_KEY>",
    "x-api-config": "<BASE64_ENCODED_CONFIG>",
    "Content-Type": "application/json"
}

# メッセージデータを含むペイロードを定義します
payload = {
    "session_id": "match_1234",
    "message": "お前は本当にバカだ！",
    "user_id": "user001",
    "username": "playerOne",
    "timestamp": "2024-09-01 12:00:00"
}

# POSTリクエストを送信
response = requests.post(url, headers=headers, data=json.dumps(payload))

# レスポンスのステータスコードとJSONレスポンスを出力します
print(response.status_code)
print(response.json())

```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');

// APIエンドポイント
const url = 'https://api.ggwp.com/chat/v2/message';

// APIキーと設定を使ってヘッダーを設定します
const headers = {
  'x-api-key': '<GGWP_API_KEY>',
  'x-api-config': '<BASE64_ENCODED_CONFIG>',
  'Content-Type': 'application/json'
};

// メッセージデータを含むペイロードを定義します
const payload = {
  session_id: 'match_1234',
  message: 'お前は本当にバカだ！',
  user_id: 'user001',
  username: 'playerOne',
  timestamp: '2024-09-01 12:00:00'
};

// POSTリクエストを送信します
axios.post(url, payload, { headers })
  .then(response => {
    console.log(response.status);    // ステータスコードを出力します
    console.log(response.data);      // レスポンスデータを出力します
  })
  .catch(error => {
    console.error(error);            // エラーを処理します
  });

```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class ChatApiRequest {
    public static void main(String[] args) throws Exception {
        // APIエンドポイント
        String url = "https://api.ggwp.com/chat/v2/message";

        // APIキーとbase64エンコード済み設定
        String apiKey = "<GGWP_API_KEY>";
        String apiConfig = "<BASE64_ENCODED_CONFIG>";

        // メッセージデータを含むペイロードを定義します
        String payload = "{"
                + "\"session_id\": \"match_1234\","
                + "\"message\": \"お前は本当にバカだ！\","
                + "\"user_id\": \"user001\","
                + "\"username\": \"playerOne\","
                + "\"timestamp\": \"2024-09-01 12:00:00\""
                + "}";

        // HTTPクライアントを作成します
        HttpClient client = HttpClient.newHttpClient();

        // ヘッダーとペイロードを使ってPOSTリクエストを作成します
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("x-api-key", apiKey)
                .header("x-api-config", apiConfig)
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(payload))
                .build();

        // リクエストを送信してレスポンスを取得します
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        // レスポンスのステータスコードと本文を出力します
        System.out.println(response.statusCode());
        System.out.println(response.body());
    }
}

```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // APIエンドポイント
        string url = "https://api.ggwp.com/chat/v2/message";

        // APIキーとbase64エンコード済み設定
        string apiKey = "<YOUR_API_KEY>";
        string apiConfig = "<BASE64_ENCODED_CONFIG>";

        // メッセージデータを含むペイロードを定義します
        string payload = @"{
            ""session_id"": ""match_1234"",
            ""message"": ""お前は本当にバカだ！"",
            ""user_id"": ""user001"",
            ""username"": ""playerOne"",
            ""timestamp"": ""2024-09-01 12:00:00""
        }";

        // HttpClientインスタンスを作成します
        using HttpClient client = new HttpClient();

        // リクエストにヘッダーを追加します
        client.DefaultRequestHeaders.Add("x-api-key", apiKey);
        client.DefaultRequestHeaders.Add("x-api-config", apiConfig);

        // 送信するコンテンツを準備します
        var content = new StringContent(payload, Encoding.UTF8, "application/json");

        // POSTリクエストを送信してレスポンスを取得します
        HttpResponseMessage response = await client.PostAsync(url, content);

        // レスポンスのステータスコードと本文を出力します
        Console.WriteLine(response.StatusCode);
        Console.WriteLine(await response.Content.ReadAsStringAsync());
    }
}

```

{% endtab %}
{% endtabs %}

## 2. ポリシーの整合とカスタマイズ

### 2.1 カテゴリマッピング

GGWPは、以下に示す包括的なモデルカテゴリ一覧を提供しています。

当社チームは、これらのカテゴリを既存のモデレーション設定にマッピングするため、お客様と緊密に連携し、移行がシームレスでポリシーに整合したものになるようにします。

詳細なモデル定義と例については、当社の [テキスト＆音声モデル用語集](/jp/tekisutomoderu.md).

#### **妨害的検出**

* **アイデンティティ攻撃**
  * アイデンティティへの憎悪
  * アイデンティティへの偏見
  * 性別による偏見
* **嫌がらせ**
  * 自傷行為
  * 脅迫
  * 性的暴力
  * セクハラ
  * 性的コンテンツ
  * 暴言
  * いじめ
* **不適切なコンテンツ**
  * 攻撃的な言葉
  * ゲームプレイへの批判
  * 建設的でない批判
  * 薬物への言及
  * スパム
  * リンク共有
  * PII（個人を特定できる情報）
  * 詐欺
  * 勧誘
  * 年齢に関する懸念

#### **警告**

* 児童へのグルーミング
* 過激主義
* メンタルヘルス上のリスク

#### **向社会的な検出**

* 感謝
* 称賛
* チームワーク
* 親切
* 前向きな態度

### 2.2 フィルター設定

設定レバーを使用して、 [Chat API v2（レガシー）](/jp/apidokyumento-chat/pakkji/chat-api-v2regash.md#headers) またはダッシュボードから直接、各検出カテゴリの厳しさをカスタマイズできます：

* **しきい値制御**：フィルタリング感度を調整します（低、中、高）
* **カスタムブロックリストと許可リスト**：独自の用語や例外を追加して、検出動作を微調整します

## 3. モデレーションツール

### 3.1 ダッシュボードアクセス

以下の [ダッシュボードユーザーガイド](/jp/dasshubdoyzgaido.md) を参照して、モデレート済みコンテンツを完全に可視化してください：

* インシデントを検索して確認する
* 言語、深刻度、セッション、プレイヤーで絞り込む
* 手動アクション（警告、ミュート、BAN）を実行する

### 3.2 設定管理

コード変更なしで、GGWP Dashboardから直接フィルター設定を変更できます。更新は即座に適用されます。

## 4. 自動化

### 4.1 ライブフィルタリング

GGWPのAPI出力をチャットシステムに直接統合し、有害なコンテンツをリアルタイムで自動的にブロックまたはマスクします。主に `recommended_message` APIレスポンス内のkeyを見て、クライアントに渡し、他のユーザーに表示します。以下は部分的なレスポンス例です：

```json
{
  "message_details": {
    "message_id": "20240901120000.000000-ae254ea9-f9ca-4dd8-bfd1-f1ac98f84f83",
    "original_message": "お前は本当にバカだ！",
    "flag": true,
    "severity": "medium",
    "filtered_message": "お前は本当に*****！",
    "replaced_message": "チーム エドワード >>>>>> チーム ジェイコブ",
    "recommended_message": "",
    "language": "英語",
    "violence": false,
    "verbal_abuse": true,
    ...
  },
  "player_details": {
    ...
    "user_status": {
      "status": "ミュート済み",
      "expiry_at": "2024-09-02 11:59:48"
    }
  },
  ...
}
```

#### ルーム別フィルター設定を `x-api-config`

チャットルームの種類ごとに異なるフィルター感度を設定できます（例：公開チャットでは厳しめ、パーティーチャットでは緩め）。base64エンコードされたJSONオブジェクトを `x-api-config` ヘッダーに渡します。以下の例では「Public Room」（厳しめ）と「Party/DM」（より緩め）を示しています。&#x20;

* 作成 `config.json`&#x20;

{% tabs %}
{% tab title="Public Room（厳しめ）" %}

```json
{
  "violence":"high",
  "sexual_content":"high",
  "verbal_abuse":"high",
  "identity_hate":"high",
  "profanity":"high",
  "link_sharing":"high",
  "drugs":"on",
  "spam":"on",
  "self_harm":"on",
  "pii":"on",
  "scam":"on",
  "solicitation":"on",
  "age_concern":"on"
}

```

{% endtab %}

{% tab title="Party/DM（より緩め）" %}

```json
{
  "violence":"off",
  "sexual_content":"low",
  "verbal_abuse":"low",
  "identity_hate":"medium",
  "profanity":"off",
  "link_sharing":"off",
  "drugs":"off",
  "spam":"off",
  "self_harm":"on",
  "pii":"off",
  "scam":"on",
  "solicitation":"off",
  "age_concern":"off"
}

```

{% endtab %}
{% endtabs %}

* base64に変換：

{% code overflow="wrap" %}

```bash
$ base64 config.json
ewogICJub25fZXhwbGljaXRfbnVkaXR5IjogIm9mZiIsCiAgImdhbWJsaW5nIjogIm9mZiIsCiAgInZpb2xlbmNlIjogIm9uIgp9
```

{% endcode %}

* リクエストを送信：

{% code overflow="wrap" %}

```bash
curl --request POST 'https://api.ggwp.com/chat/v2/message' \\
--header 'x-api-key: <GGWP_API_KEY>' \\
--header 'x-api-config: <BASE64_ENCODED_CONFIG>' \\
--header 'Content-Type: application/json' \\
--data-raw '{
  "session_id": "match_1234",
  "message": "お前は本当にバカだ！",
  "user_id": "user001",
  "username": "playerOne",
  "timestamp": "2024-09-01 12:00:00"
}'

```

{% endcode %}

### 4.2 GGWP Automod

GGWP Automodを有効にすると、シンプルな [Webhook](/jp/webhook.md).

#### **Webhookの設定**

* **Webhookエンドポイントを定義する**：\
  サーバー上に、POSTリクエストを受信できるURLを作成します。
* **Webhookイベントを購読する**：\
  プレイヤーへの制裁を処理するための関連イベント一覧です：

  * [/pages/596cc55347ea91c99beee26efe90c0925209b295#id-1.-player-sanctioned](https://docs.ggwp.com/jp/apidokyumento-chat/pages/596cc55347ea91c99beee26efe90c0925209b295#id-1.-player-sanctioned "mention")
  * [/pages/596cc55347ea91c99beee26efe90c0925209b295#id-2.-player-reinstated](https://docs.ggwp.com/jp/apidokyumento-chat/pages/596cc55347ea91c99beee26efe90c0925209b295#id-2.-player-reinstated "mention")
  * [/pages/596cc55347ea91c99beee26efe90c0925209b295#id-3.-warning](https://docs.ggwp.com/jp/apidokyumento-chat/pages/596cc55347ea91c99beee26efe90c0925209b295#id-3.-warning "mention")

  イベントタイプを購読するには、次のAPIリクエストを使用します：

```bash
curl --request POST 'https://api.ggwp.com/webhook/v1/subscriptions' \\
--header 'x-api-key: <GGWP_API_KEY>' \\
--header 'Content-Type: application/json' \\
--data-raw '{
  "url": "https://example.com/customerapi",
  "enabled": true,
  "event_type": "player-sanctioned",
  "version": "1.1"
}'
```

* **イベントの受信**

  購読すると、Webhookエンドポイントは次のようなイベントの受信を開始します `player-sanctioned`。エンドポイントが次のように設定されていることを確認してください：

  * **次を検証する `secret_key`** リクエストがGGWPからのものであることを確認します。
    * 注：各サブスクリプションには一意の `secret_key`があります。これはWebhookリクエストがGGWP由来であることを確認するために使用されるため、安全に保管してください。
  * **受信ペイロードを解析する** そしてインシデントデータを処理します。
  * **次を返す `200 OK`** 応答を返して受信を確認します。

**Webhookペイロードのサンプル**

主に `player_sanction` Webhookペイロード内のkeyを見て、アクションをクライアントへ転送します。以下は部分的なレスポンス例です：

```json
{
  "type": "player-sanctioned",
  "event_id": "edce24d3-bf56-46b4-b5ea-40266mnaa5a84",
  "created_at": "2022-06-02 16:49:00",
  "data": {
    "session_id": "freeforallsession_o34u2",
    "incident_id": "20230629051500.000000-1aaf864e-1cdc-4c10-b1f2-ec90bfd4b244",
    "user_id": "12aladf91",
    "username": "sharonsfakeaccount",
    "reputation_score": 150,
    "player_sanction": {
      "status": "ミュート済み",
      "duration": 86400,
      "expiry_at": "2022-06-03 16:49:00"
    },
    "ladder_level_change": {
      "current_ladder_level": 1,
      "previous_ladder_level": 0
    },
    ...
  }
}
```

#### **Automodルール設定**

ルールは完全に設定可能で、インシデントの深刻度、信頼度、プレイヤーの評判スコア、最近のインシデントなど、さまざまな要素の組み合わせを考慮できます。

当社チームは、お客様のコミュニティニーズに最適で、自動アクションの影響を透明に把握できる形でAutomodを展開できるよう、緊密に連携します。 &#x20;

## 5. 他のワークフローと接続する

### 5.1 マルチモーダルモデレーション

テキストチャット以外にもモデレーションを拡張できます。GGWPは次もサポートしています：

* [音声モデレーション](https://docs.ggwp.com/api-docs-voice)：音声ネイティブモデルと、テキストエンジンに接続されたSTTパイプライン経由
* [ユーザー名](https://docs.ggwp.com/api-docs-usernames)：不適切なハンドル名やその他の短いテキストの検出用
* [プレイヤーレポート](https://docs.ggwp.com/api-docs-reports)：プレイヤーから提出されたレポートを取り込み、分析し、優先度付けします
* 画像（ベータ）：露骨または暴力的な画像を検出します

### 5.2 外部システム連携

* [チケッティング](https://docs.ggwp.com/webhooks/webhook-events#id-4.-workflow-integrations)：インシデントをJira、Zendesk、または社内モデレーションキューに送信します。
* [異議申し立て](https://docs.ggwp.com/api-docs-appeals)：プレイヤーの異議申し立てシステムを接続し、ライフサイクル全体を管理します。
* [コンテキストデータ](https://docs.ggwp.com/api-docs-contextual-information)：プレイヤーの課金額、アクティビティ、ソーシャルグラフ情報、その他関連する入力を使ってモデレーションのコンテキストを充実させます。<br>
