コンテンツにスキップ

キャンペーン登録

前提条件

キャンペーンを登録するためのAPIと同期するには、認証トークン(APIキー)を発行する必要があります。すでにキーを持っている場合は、追加の権限をリクエストしてください。認証トークンのリクエストと発行方法については、Hive Server API > Notification > Push v4 > Authenticationを参照してください。

キャンペーン登録のためのAPI

基本データとリクエスト変数

メソッド POST
URL /push/campaigns
部門 フィールド名 説明 タイプ 必須
ヘッダー Content-Type application/json;charset=utf-8
Authorization bearer {{API KEY}}
ボディ id キャンペーン編集のための必須フィールド 整数
status キャンペーン編集のための必須フィールド 整数
company 会社
  • gamevil: Com2uS Holdings
  • com2us: Com2uS
  • gcp: Com2uS Platform
文字列 O
companyIndex 会社コード(AppCenterに登録された会社番号) 整数 O
Description キャンペーンの説明 文字列 O
notice 通知を送信するかどうか ブール値 X
Type 送信タイプ
  • B: バルクプッシュ
  • T: ターゲティングプッシュ
文字列 O
targetingId ターゲティングID ターゲティングキャンペーンの場合の必須フィールド 整数
registrant name 登録者名 文字列 X
id 登録者ID 文字列 O
reservation localizing このフラグは、通知を送信する際にユーザーのタイムゾーンに基づいてスケジュールを適用するかどうかを決定します。
  • true: 通知はユーザーの現地時間に従って送信されます。
  • false: 通知送信のタイムゾーンはgmtOffset値に基づいて決定されます。
ブール値 O
startDate startDateは、スケジュールされた通知送信が開始される日付を表し、endDateは通知送信が終了する日付を表します。
これら2つの日付の間の期間中、指定された時間に基づいてプッシュ通知が送信されます (timeフィールド)。
(ISO 8601形式、YYYY-MM-DD)
String O
endDate String O
time プッシュ送信の時間 (HH:mm) String O
gmtOffset このフィールドは、localizingfalseに設定されているときに通知を送信するためのタイムゾーンを指定するために使用されます。UTCからの差(秒単位)を示し、-43200から50400の値を持つことができます。デフォルト値は32400で、これは韓国標準時(KST)のオフセットです。
-18000はUTC-5(EST)を表します。
32400はUTC+9(KST)を表します。
例:
startDate2025-11-06time17:00gmtOffset-18000の場合、2025-11-06T17:00-5:00で送信が開始されます。
Long X
repeat このフラグは、特定の期間中に通知の送信を繰り返すかどうかを示します。 Boolean O
weekday これは、通知が繰り返し送信される曜日を示します。
  • 1: 月曜日
  • 2: 火曜日
  • 3: 水曜日
  • 4: 木曜日
  • 5: 金曜日
  • 6: 土曜日
  • 7: 日曜日
Integer[] X
skip 定期的な送信の期間中にプッシュ送信をスキップする日付 String[] X
distribution enable 分散送信するかどうか Boolean X
interval 分散送信の間隔 Integer X
count 分散送信の回数 Integer X
continents 選択された大陸による情報リスト (参照: 国コード) CampaignContinent構造体およびを確認してください CampaignContinent[] O
選択した国の情報(国コードを参照) String[] O
ゲーム ゲームインデックス ゲームインデックス Integer O
サーバーID サーバーIDのリスト String[] X
アプリ[] アプリインデックス アプリインデックス Integer O
アプリID AppId String O
デフォルト言語 デフォルト設定言語(言語コードを参照) String O
通知 {{LANGUAGE}} メッセージ情報 メッセージ構造を以下で確認してください メッセージ X
オプション バッジ プッシュ通知用のバッジ Integer X
上書き プッシュを上書きするかどうか Boolean X
コラプスキー プッシュを上書きするためのキー値 String X
エンゲージメント ユーザーエンゲージメント String X
コメント コメント String X
グループキー ユーザーがiOSまたはAndroid OS環境で通知を受け取るときに、通知をグループで表示するためのグループキー値。デバイスOSで選択された通知設定がデフォルトで適用されます。オプションの詳細については、以下のドキュメントを参照してください。 String X
android アイコン プッシュ通知がユーザーのデバイスに表示されるときに公開されるアイコン画像ファイル名。この画像ファイルは/src/main/res/drawableに配置する必要があります。サポートされている画像ファイル形式については、こちらを参照してください。画像ファイルの代わりにウェブ上の画像を公開したい場合は、画像ファイル名の代わりにこのフィールドに画像のURLを入力してください。このフィールドが空白のままの場合、アプリアイコン画像が公開されます。 String X
サウンド これは、ユーザーのデバイスにプッシュ通知が表示されたときに再生される通知音ファイルの名前です。アプリバンドルに含まれるサウンドソースファイルを指定でき、サウンドソースファイルは/src/main/res/rawに配置する必要があります。このフィールドが空の場合、システムのデフォルトサウンドファイルが使用されます。 文字列 X
優先度 Androidデバイスに送信されるメッセージの優先度。この優先度は、メッセージが送信されるタイミングを制御するFCMの概念です。NORMALまたはHIGHの値を持つことができ、デフォルトはNORMALです。詳細については、Firebaseガイドを参照してください。
  • NORMAL = データメッセージのデフォルト優先度。通常の優先度メッセージは、デバイスがスリープモードでないときに即座に送信されます。デバイスがスリープモードのとき、バッテリーを節約するために送信が遅れる場合があります。新しいメール通知、UIの同期維持、またはバックグラウンドアプリデータの同期など、あまり時間が重要でないメッセージの場合は、通常の配信優先度を選択してください。
  • HIGH = FCMは高優先度メッセージを即座に送信しようとし、必要に応じてデバイスを起こして、非常に限られたネットワークアクセスを含むいくつかの制限された処理を行う場合があります。高優先度メッセージは通常、ユーザーがアプリや通知と対話することを含みます。
enum(NORMAL, HIGH) X
ios サウンド これは、ユーザーのデバイスにプッシュ通知が表示されたときに再生される通知音ソースファイルの名前です。サウンドファイルはアプリコンテナのLibrary/Soundsまたはアプリのメインバンドルに存在する必要があります。このフィールドが空の場合、自動的に「default」に設定され、ユーザーのAppleデバイスのシステムデフォルトサウンドソースが使用されます。 td> 文字列 X
Note

optionに関する詳細は、それぞれの市場のガイドラインを参照してください。

CampaignContinent 構造

区分 フィールド名 説明 タイプ 必須
CampaignContinent 大陸 大陸の種類 文字列 O
countries 大陸内の国のコード 文字列[] O

キャンペーン大陸の例

[
    {
      "name": "Africa",
      "countries": [
        "Algeria",
        "Angola",
        "Benin",
        "Sudan",
        "Swaziland",
        "Tanzania",
        "Togo",
        "Tunisia",
        "Zambia",
        "Zimbabwe"
      ]
    }
]

メッセージ構造

部門 フィールド名 説明 タイプ 必須
メッセージ android title タイトル 文字列 O
message メッセージ 文字列 O
messageExpanded 拡張メッセージ 文字列 X
imageUrl 画像URL 文字列 X
ticker ティッカー 文字列 X
summaryText 要約メッセージ 文字列 X
iOS title タイトル 文字列 O
message メッセージ 文字列 O
mediaUrl 画像URL 文字列 X

メッセージの例

{
"ko": {
      "android": {
        "messageExpanded": "(Ad) TEST(Block: Available in settings)",
        "ticker": "gg",
        "title": "(Ad)test",
        "message": "(Ad) test (Restriction: Available in settings)",
        "summaryText": "",
        "imageUrl": ""
      },
      "ios": {
        "mediaUrl": "",
        "title": "Push",
        "message": "(Ad) TEST (Block: Available in settings)"
      },
    }
}

出力結果

ヘッダー コンテンツタイプ application/json;charset=utf-8
UUID {{UUID}}
ボディ 成功した場合、ボディは空です

応答状態コード

キー 説明
200 成功 (ボディは空です)
400 不正なリクエスト POSTデータが省略されています
JSON形式エラー
必要な要素が省略されているか無効です
ボディ内の理由メッセージで追加確認可能
401 認証されていません リクエストメッセージの認証ヘッダーが省略されているか無効です
認証トークン(APIキー)が登録されていません
関連APIへのアクセス権がありません
403 禁止されています 認証ヘッダーの認証スキームが「Bearer」ではありません(Bearerのみサポート)
404 見つかりません リクエストURLが間違っています
500 内部サーバーエラー サーバー上の内部エラー
502 不正なゲートウェイ プッシュゲートウェイサーバーが過負荷です
ネットワーク接続が間違った方法で行われています
503 サービス利用不可 APIサーバーまたは認証サーバーがフリーズしています

サンプルコード

キャンペーン登録

  • 呼び出し
curl -v -L \
-H "Content-Type: application/json"  \
-H "Authorization: Bearer {API KEY}" \
-d '{
    "description": "TEST",
    "status": 1,
    "company": "gcp",
    "companyIndex": 3,
    "type": "B",
    "targetingId": 0,
    "reservation": {
        "localizing": false,
        "startDate": "2025-11-06",
        "endDate": "2025-11-06",
        "time": "17:00:00",
        "gmtOffset": 32400,
        "repeat": false,
        "periodType": "",
        "weekday": [],
        "skip": []
    },
    "game": {
        "gameName": "Step by Step",
        "gameindex": 597,
        "serverIds": [],
        "apps": [
            {
                "appindex": 20009,
                "appid": "com.gcp.stepbystep.android.google.global.normal",
                "versions": []
            }
        ],
        "serverAll": true
    },
    "distribution": {
        "enable": false,
        "interval": 0,
        "count": 0
    },
    "defaultLanguage": "ko",
    "option": {
        "badge": 1,
        "engagement": "",
        "overwrite": false,
        "collapseKey": "0",
        "comment": "",
        "groupKey": "",
        "android": {
            "icon": "",
            "sound": "",
            "priority": "high"
        },
        "ios": {
            "sound": ""
        }
    },
    "registrant": {
        "id": "test",
        "name": "Test"
    },
    "notification": {
        "ko": {
            "android": {
                "title": "TEST",
                "message": "(Advertising) TEST (Unsubscribe: Change in settings)",
                "messageExpanded": "",
                "ticker": "",
                "summaryText": "",
                "imageUrl": ""
            },
            "ios": {
                "title": "TEST",
                "message": "(Advertising) TEST (Unsubscribe: Change in settings)",
                "mediaUrl": ""
            }
        }
    },
    "countries": [
        "KR"
    ],
    "continents": [
        {
            "name": "Africa",
            "countries": []
        },
        {
            "name": "Americas",
            "countries": []
        },
        {
            "name": "Asia",
            "countries": [
                "South Korea"
            ]
        },
        {
            "name": "Europe",
            "countries": []
        },
        {
            "name": "Oceania",
            "countries": []
        },
        {
            "name": "Polar",
            "countries": []
        }
    ]
}' \
https://sandbox-notification.qpyou.cn/push/campaigns
  • リクエスト
> POST /push/campaigns HTTP/1.1
> User-Agent: curl/7.29.0
> Host: sandbox-notification.qpyou.cn
> Accept: */*
> Content-Type: application/json
> Authorization: Bearer {API KEY}
> Content-Length: 1314
> Expect: 100-continue
  • レスポンス
< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
< Content-Length: 1491
< Content-Type: application/json
<: 3d18420b-4cf3-48a8-a3bf-6c9ac6cbe86a
<
{
    "uuid": "3d18420b-4cf3-48a8-a3bf-6c9ac6cbe86a",
    "status": 1,
    "modify": true,
    "id": 10163,
    "type": "B",
    "company": "gcp",
    "companyIndex": 3,
    "description": "TEST",
    "targetingId": 0,
    "reservation": {
        "localizing": false,
        "startDate": "2025-11-06",
        "endDate": "2025-11-06",
        "time": "17:00:00",
        "repeat": false,
        "gmtOffset": 32400
    },
    "distribution": {
        "count": 0,
        "interval": 0,
        "enable": false
    },
    "continents": [
        {
            "name": "Africa",
            "countries": []
        },
        {
            "name": "Americas",
            "countries": []
        },
        {
            "name": "Asia",
            "countries": [
                "South Korea"
            ]
        },
        {
            "name": "Europe",
            "countries": []
        },
        {
            "name": "Oceania",
            "countries": []
        },
        {
            "name": "Polar",
            "countries": []
        }
    ],
    "countries": [
        "KR"
    ],
    "lastEndTime": 1762448400,
    "lastEndTimestamp": 1762416000,
    "tasks": {
        "17:00:00": {
            "startTime": 1762448400,
            "endTime": 1762448400,
            "time": "17:00:00",
            "gmtOffset": 32400,
            "zones": [
                "Asia/Seoul"
            ],
            "startTimestamp": 1762416000,
            "endTimestamp": 1762416000
        }
    },
    "game": {
        "gameindex": 597,
        "gameName": "Step by Step",
        "apps": [
            {
                "appid": "com.gcp.stepbystep.android.google.global.normal",
                "appindex": 20009
            }
        ]
    },
    "defaultLanguage": "ko",
    "notification": {
        "ko": {
            "android": {
                "messageExpanded": "",
                "ticker": "",
                "summaryText": "",
                "imageUrl": "",
                "title": "TEST",
                "message": "(Advertising) TEST (Unsubscribe: Change in settings)"
            },
            "ios": {
                "title": "TEST",
                "message": "(Advertising) TEST (Unsubscribe: Change in settings)",
                "mediaUrl": ""
            }
        }
    },
    "option": {
        "badge": 1,
        "engagement": "",
        "overwrite": false,
        "collapseKey": "0",
        "comment": "",
        "groupKey": "",
        "android": {
            "icon": "",
            "priority": "high",
            "sound": ""
        },
        "ios": {
            "sound": ""
        }
    },
    "timestamp": {
        "date": "2024-10-21 15:18:57.923",
        "time": 1729491537923
    },
    "registrant": {
        "name": "Test",
        "id": "test"
    },
    "dryRun": false,
    "debug": false
}

キャンペーンの修正

  • 呼び出し
curl -v -L \
-H "Content-Type: application/json"  \
-H "Authorization: Bearer {API KEY}" \
-d '{
    "id": 10163,
    "description": "TEST",
    "status": 1,
    "company": "gcp",
    "companyIndex": 3,
    "type": "B",
    "targetingId": 0,
    "reservation": {
        "localizing": false,
        "startDate": "2025-11-06",
        "endDate": "2025-11-06",
        "time": "17:00:00",
        "gmtOffset": -18000,
        "repeat": false,
        "periodType": "",
        "weekday": [],
        "skip": []
    },
    "game": {
        "gameName": "Step by Step",
        "gameindex": 597,
        "serverIds": [],
        "apps": [
            {
                "appindex": 20009,
                "appid": "com.gcp.stepbystep.android.google.global.normal",
                "versions": []
            }
        ],
        "serverAll": true
    },
    "distribution": {
        "enable": false,
        "interval": 0,
        "count": 0
    },
    "defaultLanguage": "ko",
    "option": {
        "badge": 1,
        "engagement": "",
        "overwrite": false,
        "collapseKey": "0",
        "comment": "",
        "groupKey": "",
        "android": {
            "icon": "",
            "sound": "",
            "priority": "high"
        },
        "ios": {
            "sound": ""
        }
    },
    "timestamp": {
        "time": 0,
        "date": ""
    },
    "registrant": {
        "id": "test",
        "name": "Test"
    },
    "notification": {
        "ko": {
            "android": {
                "title": "TEST",
                "message": "(Advertising) TEST (Unsubscribe: Change in settings)",
                "messageExpanded": "",
                "ticker": "",
                "summaryText": "",
                "imageUrl": ""
            },
            "ios": {
                "title": "TEST",
                "message": "(Advertising) TEST (Unsubscribe: Change in settings)",
                "mediaUrl": ""
            }
        }
    },
    "countries": [
        "KR"
    ],
    "continents": [
        {
            "name": "Africa",
            "countries": []
        },
        {
            "name": "Americas",
            "countries": []
        },
        {
            "name": "Asia",
            "countries": [
                "South Korea"
            ]
        },
        {
            "name": "Europe",
            "countries": []
        },
        {
            "name": "Oceania",
            "countries": []
        },
        {
            "name": "Polar",
            "countries": []
        }
    ]
}' \
https://sandbox-notification.qpyou.cn/push/campaigns
  • リクエスト
> POST /push/campaigns HTTP/1.1
> User-Agent: curl/7.29.0
> Host: sandbox-notification.qpyou.cn
> Accept: */*
> Content-Type: application/json
> Authorization: Bearer {API KEY}
> Content-Length: 1314
> Expect: 100-continue
  • レスポンス
< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
< Content-Length: 1491
< Content-Type: application/json
< UUID: 65420989-ab96-4587-b19a-195fe13f9086
<
{
    "uuid": "65420989-ab96-4587-b19a-195fe13f9086",
    "status": 1,
    "id": 10163,
    "type": "B",
    "company": "gcp",
    "companyIndex": 3,
    "description": "TEST",
    "targetingId": 0,
    "reservation": {
        "localizing": false,
        "startDate": "2025-11-06",
        "endDate": "2025-11-06",
        "time": "17:00:00",
        "repeat": false,
        "gmtOffset": -18000
    },
    "distribution": {
        "count": 0,
        "interval": 0,
        "enable": false
    },
    "continents": [
        {
            "name": "Africa",
            "countries": []
        },
        {
            "name": "Americas",
            "countries": []
        },
        {
            "name": "Asia",
            "countries": [
                "South Korea"
            ]
        },
        {
            "name": "Europe",
            "countries": []
        },
        {
            "name": "Oceania",
            "countries": []
        },
        {
            "name": "Polar",
            "countries": []
        }
    ],
    "countries": [
        "KR"
    ],
    "lastEndTime": 1762498800,
    "lastEndTimestamp": 1762466400,
    "tasks": {
        "07:00:00": {
            "startTime": 1762498800,
            "endTime": 1762498800,
            "time": "07:00:00",
            "gmtOffset": -18000,
            "zones": [
                "Asia/Seoul"
            ],
            "startTimestamp": 1762466400,
            "endTimestamp": 1762466400
        }
    },
    "game": {
        "gameindex": 597,
        "gameName": "Step by Step",
        "apps": [
            {
                "appid": "com.gcp.stepbystep.android.google.global.normal",
                "appindex": 20009
            }
        ]
    },
    "defaultLanguage": "ko",
    "notification": {
        "ko": {
            "android": {
                "messageExpanded": "",
                "ticker": "",
                "summaryText": "",
                "imageUrl": "",
                "title": "TEST",
                "message": "(Advertising) TEST (Unsubscribe: Change in settings)"
            },
            "ios": {
                "title": "TEST",
                "message": "(Advertising) TEST (Unsubscribe: Change in settings)",
                "mediaUrl": ""
            }
        }
    },
    "option": {
        "badge": 1,
        "engagement": "",
        "overwrite": false,
        "collapseKey": "0",
        "comment": "",
        "groupKey": "",
        "android": {
            "icon": "",
            "priority": "high",
            "sound": ""
        },
        "ios": {
            "sound": ""
        }
    },
    "timestamp": {
        "date": "2024-10-21 15:25:45.611",
        "time": 1729491945611
    },
    "registrant": {
        "name": "Test",
        "id": "test"
    },
    "dryRun": false,
    "debug": false
}

国コード

大陸 コード コード
アフリカ アンゴラ AO マダガスカル MG
ブルキナファソ BF マリ ML
ブルンジ BI モーリタニア MR
ベナン BJ モーリシャス MU
ボツワナ BW マラウイ MW
コンゴ民主共和国 CD モザンビーク MZ
中央アフリカ共和国 CF ナミビア NA
コンゴ共和国 CG ニジェール NE
コートジボワール CI ナイジェリア NG
カメルーン CM レユニオン RE
カーボベルデ CV ルワンダ RW
ジブチ DJ セーシェル SC
アルジェリア DZ スーダン SD
エジプト EG セントヘレナ SH
西サハラ EH シエラレオネ SL
エリトリア ER セネガル SN
エチオピア ET ソマリア SO
ガボン GA 南スーダン SS
ガーナ GH サントメ・プリンシペ ST
ガンビア GM スワジランド SZ
ギニア GN チャド TD
赤道ギニア GQ フランス領南方地域 TF
ギニアビサウ GW トーゴ TG
英領インド洋地域 IO チュニジア TN
ケニア KE タンザニア TZ
コモロ KM ウガンダ UG
リベリア LR マヨット YT
レソト LS 南アフリカ ZA
リビア LY ザンビア ZM
モロッコ MA ジンバブエ ZW
アメリカ大陸 アンティグア・バーブーダ AG ホンジュラス HN
アングィラ AI ハイチ HT
アルゼンチン AR ジャマイカ JM
アルバ AW セントキッツ・ネーヴィス KN
バルバドス BB ケイマン諸島 KY
サン・バルテルミー BL セントルシア LC
バミューダ BM サン・マルタン MF
ボリビア BO マルティニーク MQ
ボネール、セント・ユースタティウス、サバ BQ モントセラト MS
ブラジル BR メキシコ MX
バハマ BS ニカラグア NI
ベリーズ BZ パナマ PA
カナダ CA ペルー PE
チリ CL サン・ピエール島とミクロン PM
コロンビア CO プエルトリコ PR
コスタリカ CR パラグアイ PY
キューバ CU スリナム SR
キュラソー CW エルサルバドル SV
ドミニカ DM シント・マールテン SX
ドミニカ共和国 DO タークス・カイコス諸島 TC
エクアドル EC トリニダード・トバゴ TT
フォークランド諸島 FK アメリカ合衆国の小離島 UM
グレナダ GD アメリカ合衆国 US
フランス領ギアナ GF ウルグアイ UY
グリーンランド GL セントビンセントおよびグレナディーン諸島 VC
グアドループ GP ベネズエラ VE
南ジョージア・南サンドイッチ諸島 GS 英領バージン諸島 VG
グアテマラ GT アメリカ領バージン諸島 VI
ガイアナ GY
アジア アラブ首長国連邦 AE レバノン LB
アフガニスタン AF スリランカ LK
アルメニア AM ミャンマー MM
アゼルバイジャン AZ モンゴル MN
バングラデシュ BD マカオ MO
バーレーン BH モルディブ MV
ブルネイ BN マレーシア MY
ブータン BT ネパール NP
中国 CN オマーン OM
ジョージア GE フィリピン PH
香港 HK パキスタン PK
インドネシア ID パレスチナ地域 PS
イスラエル IL カタール QA
インド IN サウジアラビア SA
イラク IQ シンガポール SG
イラン IR シリア SY
ヨルダン JO タイ TH
日本 JP タジキスタン TJ
キルギス KG 東ティモール TL
カンボジア KH トルクメニスタン TM
北朝鮮 KP トルコ TR
韓国 KR 台湾 TW
クウェート KW ウズベキスタン UZ
カザフスタン KZ ベトナム VN
ラオス LA イエメン YE
ヨーロッパ アンドラ AD アイスランド IS
アルバニア AL イタリア IT
オーストリア AT ジャージー JE
オーランド諸島 AX リヒテンシュタイン LI
ボスニア・ヘルツェゴビナ BA リトアニア LT
ベルギー BE ルクセンブルク LU
ブルガリア BG ラトビア LV
ベラルーシ BY モナコ MC
スイス CH モルドバ MD
キプロス CY モンテネグロ ME
チェコ共和国 CZ マケドニア MK
ドイツ DE マルタ MT
デンマーク DK オランダ NL
エストニア EE ノルウェー NO
スペイン ES ポーランド PL
フィンランド FI ポルトガル PT
フェロー諸島 FO ルーマニア RO
フランス FR セルビア RS
イギリス GB ロシア RU
ガーンジー GG スウェーデン SE
ジブラルタル GI スロベニア SI
ギリシャ GR スヴァールバル諸島とヤンマイエン島 SJ
クロアチア HR スロバキア SK
ハンガリー HU サンマリノ SM
アイルランド IE ウクライナ UA
マン島 IM バチカン VA
オセアニア アメリカ領サモア AS ニウエ NU
オーストラリア AU ニュージーランド NZ
ココス諸島 CC フランス領ポリネシア PF
クック諸島 CK パプアニューギニア PG
クリスマス島 CX ピトケアン PN
フィジー FJ パラオ PW
ミクロネシア FM ソロモン諸島 SB
グアム GU トケラウ TK
キリバス KI トンガ TO
マーシャル諸島 MH ツバル TV
北マリアナ諸島 MP バヌアツ VU
ニューカレドニア NC ウォリス・フツナ WF
ノーフォーク島 NF サモア WS
ナウル NR
極地 南極大陸 AQ

言語コード

言語コード 言語
ko 韓国語
zh-hans 中国語 (簡体字)
zh-hant 中国語 (繁体字)
en 英語
ja 日本語
ar アラビア語
fr フランス語
de ドイツ語
es スペイン語
pt ポルトガル語
th タイ語
it イタリア語
ru ロシア語
id インドネシア語
vi ベトナム語
tr トルコ語