HTTP API
概要
私たちはHTTPを介してチャットサービスを提供しています。これは主にChannel API、User API、およびMessage APIで構成されています。
- チャンネルAPI
- すべてのチャンネルリストAPI
- チャンネル取得API
- チャンネル参加者取得API
- チャンネル作成API
- チャンネル削除API
- チャンネル入場API
- チャンネル退出API
- ユーザーAPI
- ユーザートークン発行API
- ユーザー参加チャンネル取得API
- ユーザーブロックリスト取得API
- ユーザーブロックAPI
- ユーザーブロック解除API
- メッセージAPI
- チャンネルアナウンスメッセージ送信API
- ユーザーアナウンスメッセージ送信API
- チャンネルカスタムメッセージ送信API
- ユーザーカスタムメッセージ送信API
- チャンネルメッセージ取得API
基本情報
HTTP APIを使用する際、共通して知っておくべき基本情報を提供します。
辞書の準備
HTTP APIを使用するには、以下のアイテムを準備する必要があります。
- Hive 認証キー: API 呼び出しのための認証トークン
- Hive コンソール > アプリセンター > プロジェクト管理 > ゲーム詳細 > 基本情報 で確認できます
- ゲームインデックス: Hive コンソール > アプリセンター > プロジェクト管理 で作成されたゲームのインデックス
チャンネルタイプ
HTTP APIを送信する際に使用されるチャネルタイプは以下の通りです。
| タイプ | 説明 |
PUBLIC | 誰でも入れるチャンネル |
PRIVATE | パスワードを入力することで入れるチャンネル |
GROUP | 特定のユーザーのみが参加できるチャンネル(例:ギルドチャンネル) |
リクエストURL
| サーバー | URL |
| LIVE | api-chat.withhive.com |
| SANDBOX | sandbox-api-chat.withhive.com |
共通のヘッダー
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン(Bearer) | string | Y |
| Content-Type | リクエストデータのタイプ(application/json) | string | Y |
レスポンスコード
| HTTP ステータスコード | コード | メッセージ | 説明 |
| 200 | 0 | 成功。 | 成功 |
| 400 | 100 | 不正なリクエスト。 | 不正なリクエスト |
| 401 | 101 | 無効なトークン。 | 無効なトークン |
| 403 | 102 | 禁止されています。 | 禁止 |
| 404 | 103 | 見つかりません。 | 見つかりません |
| 405 | 104 | メソッドは許可されていません。 | メソッドは許可されていません |
| 500 | 105 | 内部サーバーエラー。 | 内部サーバーエラー |
| HTTP ステータスコード | コード | メッセージ | 説明 |
| 400 | 200 | 重複したチャンネルIDです。 | 重複したチャンネルID |
| 201 | チャンネルが見つからないか、削除されています。 | チャンネルが見つからないか、削除されています |
| 202 | チャンネルが満杯です。 | チャンネルが満杯です |
| 203 | 無効なチャンネルパスワードです。 | 無効なチャンネルパスワードです |
| 204 | メッセージサイズを超えました。最大サイズは200です。 | メッセージサイズを超えました(最大200文字) |
| 300 | ユーザーがセッションに参加していません。 | ユーザーがセッションに参加していません(ソケットサーバーに接続されていない) |
| 301 | ユーザーがチャンネルに参加していません。 | ユーザーがチャンネルに参加していません |
| 302 | ユーザーはすでにチャンネルに参加しています。 | ユーザーはすでにチャンネルに参加しています |
| 303 | ユーザーはすでにブロックされています。 | ユーザーはすでにブロックされています |
| 304 | ブロックリストが満杯です。最大サイズは100です。 | ブロックリストが満杯です(最大100ユーザー) |
| 305 | ユーザーはブロックリストにいません。 | ユーザーはブロックリストにいません |
| 306 | ユーザーはブロックされています。 | ユーザーはブロックされています |
| 307 | ユーザーが参加できるチャンネルの最大数は10です。 | ユーザーは許可されたチャンネルの最大数を超えました(10の制限) |
| 400 | カスタムメッセージサイズを超えました。最大サイズは8,000バイトです。 | カスタムメッセージサイズを超えました(最大8,000バイト) |
| 403 | 308 | ユーザーはチャンネルの所有者ではありません。 | ユーザーはチャンネルの所有者ではありません |
チャンネルAPIの機能
これは、チャットサービスで使用されるチャネルAPIの各機能に対するAPIリクエストとレスポンス、およびサンプルコードを説明しています。
フルチャネルリストを取得
現在作成されているチャンネルのリストを取得しています。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/channels |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/channels |
| HTTP メソッド | GET |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン(Bearer) | 文字列 | Y |
クエリパラメータ
| フィールド名 | 説明 | 型 | 必須 |
| type | チャンネルタイプ(PRIVATE, PUBLIC, GROUP) | string | N |
| channelId | チャンネルをクエリするためのチャンネルID | string | N |
| channelName | チャンネル名を含むチャンネルをクエリする | string | N |
| sort | ソート基準(channelId, channelName, regTime) (デフォルト regTime) | string | N |
| order | ソート順(ASC, DESC) (デフォルト DESC) | string | N |
| size | ページごとにクエリするチャンネルの数 (最小1〜最大10、デフォルト10) | integer | N |
| page | クエリするページ番号 (1から開始、デフォルト1) | integer | N |
レスポンスボディ
| フィールド名 | 説明 | 型 |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
| data | レスポンスデータ | オブジェクト |
レスポンスボディ > データ
| フィールド名 | 説明 | タイプ |
| content | チャンネルリスト | オブジェクト配列 |
| page | ページ情報 | オブジェクト |
レスポンスボディ > データ > コンテンツ
| フィールド名 | 説明 | タイプ |
| channelId | チャンネルID | 文字列 |
| type | チャンネルタイプ(PRIVATE, PUBLIC, GROUP) | 文字列 |
| gameIndex | Hive ゲームインデックス | 整数 |
| owner | Hive チャンネルオーナーのプレイヤーID | 文字列 |
| channelName | チャンネル名 | 文字列 |
| memberCount | チャンネルの現在の参加者数 | 整数 |
| maxMemberCount | チャンネルの最大参加者数 | 整数 |
| chatHistoryAllowed | メッセージ履歴の取得が許可されているかどうか | ブール値 |
| regTime | チャンネル作成日時(UTC+0に基づく、フォーマットyyyy-MM-dd'T'HH:mm:ss.SSSZ) | 文字列 |
| regTimeMillis | チャンネル作成日時(UnixTimestampミリ秒) | 長整数 |
レスポンスボディ > データ > ページ
| フィールド名 | 説明 | タイプ |
| size | ページあたりのアイテム数 | 整数 |
| currentPage | 現在のページ番号 | 整数 |
| totalElements | アイテムの総数 | 整数 |
| totalPages | ページの総数 | 整数 |
リクエストサンプル
curl --request GET 'https://api-chat.withhive.com/api/v1/games/1/channels?type=PUBLIC&sort=regTime&order=DESC&size=10&page=1' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ysjs'
レスポンスサンプル
{
"code": 0,
"message": "Success.",
"data": {
"content": [
{
"channelId": "open:12345",
"type": "PUBLIC",
"gameIndex": 1,
"owner": "1000",
"channelName": "오픈 채팅방",
"memberCount": 2,
"maxMemberCount": 50,
"chatHistoryAllowed": true,
"regTime": "2024-12-30T15:01:01.004Z",
"regTimeMillis": 1731306364351
},
/// ... channel info
],
"page": {
"size": 10,
"currentPage": 1,
"totalElements": 100,
"totalPages": 10
}
}
}
チャンネル検索
チャンネルの詳細を取得しています。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId} |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId} |
| HTTP メソッド | GET |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
| channelId | クエリするチャンネルID | 文字列 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン (Bearer) | 文字列 | Y |
レスポンスボディ
| フィールド名 | 説明 | タイプ |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
| data | レスポンスデータ | オブジェクト |
レスポンスボディ > データ
| フィールド名 | 説明 | タイプ |
| info | チャンネル情報 | オブジェクト |
| members | 参加者リスト | オブジェクト配列 |
レスポンスボディ > データ > 情報
| フィールド名 | 説明 | タイプ |
| channelId | チャンネルID | string |
| type | チャンネルタイプ(PRIVATE, PUBLIC, GROUP) | string |
| gameIndex | Hive ゲームインデックス | integer |
| owner | チャンネルオーナー | string |
| channelName | チャンネル名 | string |
| memberCount | チャンネル内の現在の参加者数 | integer |
| maxMemberCount | チャンネル内の最大参加者数 | integer |
| chatHistoryAllowed | メッセージ履歴の取得が許可されているかどうか | boolean |
| regTime | チャンネル作成日時(UTC+0に基づく、形式yyyy-MM-dd'T'HH:mm:ss.SSSZ) | string |
| regTimeMillis | チャンネル作成日時(UnixTimestampミリ秒) | long |
レスポンスボディ > データ > メンバー
| フィールド名 | 説明 | タイプ |
| playerId | Hive プレイヤーID | long |
| connectedTime | 接続時間(UTC+0に基づく、フォーマットyyyy-MM-dd'T'HH:mm:ss.SSSZ) | string |
| connectedTimeMillis | 接続時間(Unix タイムスタンプミリ秒) | long |
リクエストサンプル
curl --request GET 'https://api-chat.withhive.com/api/v1/games/1/channels/open:12345' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ysjs'
レスポンスサンプル
{
"code": 0,
"message": "Success.",
"data": {
"info": {
"channelId": "open:12345",
"type": "PUBLIC",
"gameIndex": 1,
"owner": "SYSTEM",
"channelName": "오픈채팅방",
"memberCount": 2,
"maxMemberCount": 50,
"chatHistoryAllowed": true,
"regTime": "2024-12-30T15:01:01.004Z",
"regTimeMillis": 1731306364351
},
"members": [
{
"playerId": 1,
"connectedTime": "2024-11-25T06:22:06.604Z",
"connectedTimeMillis": 1739328218507
},
{
"playerId": 2,
"connectedTime": "2024-11-25T06:22:16.233Z",
"connectedTimeMillis": 1731306364351
}
]
}
}
チャンネル参加者クエリ
チャンネル参加者情報を取得しています。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId}/members |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId}/members |
| HTTP メソッド | GET |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
| channelId | クエリするチャンネルID | 文字列 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン (Bearer) | 文字列 | Y |
レスポンスボディ
| フィールド名 | 説明 | タイプ |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
| data | レスポンスデータ | オブジェクト |
レスポンスボディ > データ
| フィールド名 | 説明 | タイプ |
| members | チャンネル参加者のリスト | オブジェクト配列 |
レスポンスボディ > データ > メンバー
| フィールド名 | 説明 | 型 |
| playerId | Hive プレイヤーID | long |
| connectedTime | 接続時間(UTC+0に基づく、形式yyyy-MM-dd'T'HH:mm:ss.SSSZ) | string |
| connectedTimeMillis | 接続時間(Unix タイムスタンプミリ秒) | long |
リクエストサンプル
curl --request GET 'https://api-chat.withhive.com/api/v1/games/1/channels/open:12345/members' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ysjs'
レスポンスサンプル
{
"code": 0,
"message": "Success.",
"data": {
"members": [
{
"playerId": 1,
"connectedTime": "2024-11-25T06:22:06.604Z",
"connectedTimeMillis": 1739328218507
},
{
"playerId": 2,
"connectedTime": "2024-11-25T06:22:16.233Z",
"connectedTimeMillis": 1731306364351
}
]
}
}
チャンネルを作成する
新しいチャンネルを作成しています。
リクエストボディにplayerIdを入力すると、そのplayerIdに対応するユーザーが作成されるチャンネルの所有者になります。このユーザーは自分が作成したチャンネルに入ります。逆に、リクエストボディにplayerIdが入力されていない場合、作成されるSYSTEMがチャンネルの所有者になります。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/channel |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/channel |
| HTTP メソッド | POST |
| コンテンツタイプ | application/json |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
ヘッダー パラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン(Bearer) | 文字列 | Y |
| Content-Type | リクエストデータのタイプ(application/json) | 文字列 | Y |
リクエストボディ
チャンネルを作成する際に必要な送信データです。
| フィールド名 | 説明 | 型 | 必須 |
| channelId | チャンネルID (英字、数字、一部の特殊文字(-, ., _, ~, :)が許可され、最大100文字) | string | Y |
| playerId | チャンネル作成者のHiveのプレイヤーID | long | N |
| password | パスワード(チャンネルがPRIVATEの場合は必須) (最大50文字) | string | N |
| channelName | チャンネル名 (最大50文字) | string | Y |
| maxMemberCount | チャンネルの参加者の最大数 (最小2から最大5,000) | integer | Y |
| type | チャンネルタイプ(PRIVATE, PUBLIC, GROUP) | string | Y |
| chatHistoryAllowed | メッセージ履歴が表示できるかどうか (デフォルトはfalse) | boolean | N |
レスポンスボディ
| フィールド名 | 説明 | 型 |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
リクエストサンプル
curl --request POST 'https://sandbox-api-chat.withhive.com/api/v1/games/1/channel' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ysjs' \
--header 'Content-Type: application/json' \
--data'{
"channelId": "open:12345",
"playerId": 1000,
"channelName": "오픈 채팅방",
"maxMemberCount": 100,
"type": "PUBLIC",
"chatHistoryAllowed": true
}'
レスポンスサンプル
{
"code": 0,
"message": "Success."
}
チャンネルを削除
チャンネルを削除しています。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId} |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId} |
| HTTP メソッド | DELETE |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
| channelId | 削除するチャネルID | 文字列 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン(Bearer) | 文字列 | Y |
レスポンスボディ
| フィールド名 | 説明 | タイプ |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
リクエストサンプル
curl --request DELETE 'https://api-chat.withhive.com/api/v1/games/1/channels/open:12345' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ysjs'
レスポンスサンプル
{
"code": 0,
"message": "Success."
}
チャンネルに入る
チャンネルにユーザーを追加しています。
ユーザーごとに入力できる最大チャネル数は10です。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId}/enter |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId}/enter |
| HTTP METHOD | POST |
| CONTENT-TYPE | application/json |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
| channelId | チャンネルID | 文字列 | Y |
ヘッダー パラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン(Bearer) | string | Y |
| Content-Type | リクエストデータのタイプ(application/json) | string | Y |
リクエストボディ
チャンネルに入るリクエストをする際に必要なデータです。
| フィールド名 | 説明 | タイプ | 必須 |
| playerId | 入場するユーザーのプレイヤーID Hive | long | Y |
| password | パスワード(PRIVATE チャンネルに必要) | string | N |
レスポンスボディ
| フィールド名 | 説明 | タイプ |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
リクエストサンプル
curl --request POST 'https://api-chat.withhive.com/api/v1/games/1/channels/guild:12345/enter' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ysjs' \
--header 'Content-Type: application/json' \
--data '{
"playerId": 1001,
"password": "guildPass123"
}'
レスポンスサンプル
{
"code": 0,
"message": "Success."
}
チャンネルの終了
チャンネルに参加したユーザーを削除しています。チャンネルの所有者が離れても、チャンネルは残ります。チャンネルの所有者がSYSTEMでない参加者のいないチャンネルは、定期的に削除されます。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId}/exit |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId}/exit |
| HTTP METHOD | POST |
| CONTENT-TYPE | application/json |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
| channelId | チャンネルID | 文字列 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン (Bearer) | string | Y |
| Content-Type | リクエストデータのタイプ (application/json) | string | Y |
リクエストボディ
これはチャンネルを退出する際に必要な送信データです。
| フィールド名 | 説明 | タイプ | 必須 |
| playerId | 削除されるユーザーのプレイヤーID Hive | long | Y |
レスポンスボディ
| フィールド名 | 説明 | 型 |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
リクエストサンプル
curl --request POST 'https://sandbox-api-chat.withhive.com/api/v1/games/1/channels/guild:12345/exit' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ysjs' \
--header 'Content-Type: application/json' \
--data '{
"playerId": 1001
}'
応答サンプル
{
"code": 0,
"message": "Success."
}
ユーザーAPIの機能
これは、チャットサービスで使用されるユーザーAPIのAPIリクエストとレスポンス、およびサンプルコードについて説明しています。
ユーザートークンの発行
ソケットサーバーに接続するための認証トークンを発行しています。
発行されたトークンを通じて返されたソケットサーバーアドレスに接続します。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/users/{playerId}/token |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/users/{playerId}/token |
| HTTP メソッド | POST |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
| playerId | Hive プレイヤーID | 長整数 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン (Bearer) | 文字列 | Y |
レスポンスボディ
| フィールド名 | 説明 | タイプ |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
| data | レスポンスデータ | オブジェクト |
レスポンスボディ > データ
| フィールド名 | 説明 | タイプ |
| gameIndex | Hive ゲームインデックス | 整数 |
| socketAddress | ソケットサーバーアドレス | 文字列 |
| token | 発行されたトークン | 文字列 |
リクエストサンプル
curl --request POST 'https://api-chat.withhive.com/api/v1/games/1/users/1001/token' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJnYW1lSW5kZXgiOjEsInBsYXllcklkIjoxLCJpYXQiOjE3MzI1MTcyMzUsImV4cCI6MTczMjUyMDgzNX0.lm5eFqEuSPjsKZUItpTQvFy_2oWrMMJ_J0MPH9VFtNg'
レスポンスサンプル
{
"code": 0,
"message": "Success.",
"data": {
"gameIndex": 1,
"socketAddress": "wss://test-socket-chat.withhive.com/ws",
"token": "eyJhbGciOiJIUzI1NiJ9.eyJnYW1lSW5kZXgiOjEsInBsYXllcklkIjoxLCJpYXQiOjE3MzI1MTcyMzUsImV4cCI6MTczMjUyMDgzNX0.lm5eFqEuSPjsKZUItpTQvFy_2oWrMMJ_J0MPH9VFtNg"
}
}
ユーザー参加チャネルのお問い合わせ
ユーザーが参加しているチャンネルのリストを取得します。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/users/{playerId}/channels |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/users/{playerId}/channels |
| HTTP METHOD | GET |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
| playerId | Hive プレイヤーID | 長整数 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン(Bearer) | 文字列 | Y |
応答本文
| フィールド名 | 説明 | 型 |
| code | 応答結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
| data | 応答データ | オブジェクト |
レスポンスボディ > データ
| フィールド名 | 説明 | 型 |
| gameIndex | Hive ゲームインデックス | 整数 |
| playerId | Hive プレイヤーID | 長整数 |
| channels | チャンネルのリスト | オブジェクト配列 |
レスポンスボディ > データ > チャンネル
| フィールド名 | 説明 | タイプ |
| channelId | チャンネルID | 文字列 |
| type | チャンネルタイプ(PRIVATE, PUBLIC, GROUP) | 文字列 |
| gameIndex | Hive ゲームインデックス | 整数 |
| owner | チャンネルオーナー | 文字列 |
| channelName | チャンネル名 | 文字列 |
| memberCount | 現在のチャンネル参加者数 | 整数 |
| maxMemberCount | 最大チャンネル参加者数 | 整数 |
| chatHistoryAllowed | メッセージ履歴の取得が許可されているか | ブール値 |
| regTime | チャンネル作成日時(UTC+0に基づく、形式yyyy-MM-dd'T'HH:mm:ss.SSSZ) | 文字列 |
| regTimeMillis | チャンネル作成日時(UnixTimestampミリ秒) | 長整数 |
リクエストサンプル
curl --request GET 'https://sandbox-api-chat.withhive.com/api/v1/games/1/users/1001/channels' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJnYW1lSW5kZXgiOjEsInBsYXllcklkIjoxLCJpYXQiOjE3MzI1MTcyMzUsImV4cCI6MTczMjUyMDgzNX0.lm5eFqEuSPjsKZUItpTQvFy_2oWrMMJ_J0MPH9VFtNg'
レスポンスサンプル
{
"code": 0,
"message": "Success.",
"data": {
"gameIndex": 1,
"playerId": 1001,
"channels": [
{
"channelId": "guild:12345",
"type": "GROUP",
"gameIndex": 1,
"owner": "1000",
"channelName": "길드 채팅방",
"memberCount": 1,
"maxMemberCount": 50,
"chatHistoryAllowed": true,
"regTime": "2023-12-19T15:01:01.004Z",
"regTimeMillis": 1731306364351
},
{
"channelId": "open:67890",
"type": "PUBLIC",
"gameIndex": 1,
"owner": "SYSTEM",
"channelName": "오픈 채팅방",
"memberCount": 2,
"maxMemberCount": 100,
"chatHistoryAllowed": true,
"regTime": "2023-12-20T10:15:30.123Z",
"regTimeMillis": 1731302348750
}
// ... 채널
]
}
}
ユーザーブロックリストの取得
ユーザーによってブロックされたユーザーのリストを取得しています。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/users/{playerId}/blocks |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/users/{playerId}/blocks |
| HTTP メソッド | GET |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 文字列 | Y |
| playerId | Hive プレイヤーID | 長整数 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン (Bearer) | 文字列 | Y |
レスポンスボディ
| フィールド名 | 説明 | タイプ |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
| data | レスポンスデータ | オブジェクト |
レスポンスボディ > データ
| フィールド名 | 説明 | タイプ |
| gameIndex | Hive ゲームインデックス | 整数 |
| playerId | Hive プレイヤーID | 長整数 |
| blockedUsers | ブロックされたリスト | オブジェクト配列 |
レスポンスボディ > データ > ブロックされたユーザー
| フィールド名 | 説明 | タイプ |
| blockedPlayerId | ブロックされたユーザーのプレイヤーID Hive | long |
| blockedTime | ブロックの時間(UTC+0に基づく、フォーマットyyyy-MM-dd'T'HH:mm:ss.SSSZ) | string |
| blockedTimeMillis | ブロックの時間(Unix タイムスタンプミリ秒) | long |
リクエストサンプル
curl --request GET 'https://sandbox-api-chat.withhive.com/api/v1/games/1/users/1001/blocks' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJnYW1lSW5kZXgiOjEsInBsYXllcklkIjoxLCJpYXQiOjE3MzI1MTcyMzUsImV4cCI6MTczMjUyMDgzNX0.lm5eFqEuSPjsKZUItpTQvFy_2oWrMMJ_J0MPH9VFtNg'
レスポンスサンプル
{
"code": 0,
"message": "Success.",
"data": {
"gameIndex": 1,
"playerId": 1001,
"blockedUsers": [
{
"blockedPlayerId": 1002,
"blockedTime": "2023-12-20T10:15:30.123Z",
"blockedTimeMillis": 1739329550811
},
{
"blockedPlayerId": 1003,
"blockedTime": "2023-12-21T08:45:12.456Z",
"blockedTimeMillis": 1739329553137
},
// ... 차단 목록
]
}
}
ユーザーブロック
他のユーザーをブロックする。これはリアルタイムメッセージの送受信を制限する機能です。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/users/{playerId}/block/{blockPlayerId} |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/users/{playerId}/block/{blockPlayerId} |
| HTTP METHOD | POST |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 文字列 | Y |
| playerId | Hive プレイヤーID | 長整数 | Y |
| blockPlayerId | ブロックされた Hive プレイヤーID | 長整数 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン (Bearer) | 文字列 | Y |
レスポンスボディ
| フィールド名 | 説明 | 型 |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
リクエストサンプル
curl --request POST 'https://sandbox-api-chat.withhive.com/api/v1/games/1/users/1001/block/1002' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJnYW1lSW5kZXgiOjEsInBsYXllcklkIjoxLCJpYXQiOjE3MzI1MTcyMzUsImV4cCI6MTczMjUyMDgzNX0.lm5eFqEuSPjsKZUItpTQvFy_2oWrMMJ_J0MPH9VFtNg'
レスポンスサンプル
{
"code": 0,
"message": "Success."
}
ユーザーのブロックを解除
ブロックされたユーザーのブロックを解除する。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/users/{playerId}/block/{blockedPlayerId} |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/users/{playerId}/block/{blockedPlayerId} |
| HTTP METHOD | DELETE |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 文字列 | Y |
| playerId | Hive プレイヤーID | 長整数 | Y |
| blockedPlayerId | Hive アンブロックするプレイヤーID | 長整数 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | 型 | 必須 |
| Authorization | API呼び出しの認証トークン (Bearer) | 文字列 | Y |
レスポンスボディ
| フィールド名 | 説明 | 型 |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージ | 文字列 |
リクエストサンプル
curl --request DELETE 'https://sandbox-api-chat.withhive.com/api/v1/games/1/users/1001/block/1002' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJnYW1lSW5kZXgiOjEsInBsYXllcklkIjoxLCJpYXQiOjE3MzI1MTcyMzUsImV4cCI6MTczMjUyMDgzNX0.lm5eFqEuSPjsKZUItpTQvFy_2oWrMMJ_J0MPH9VFtNg'
応答サンプル
{
"code": 0,
"message": "Success."
}
メッセージAPIの機能
これは、通知メッセージやカスタムメッセージを送信するためのAPIであり、特定のチャネルからメッセージ履歴を取得するためのものです。
チャンネル通知メッセージ送信
特定のチャンネルまたはすべてのチャンネルにアナウンスメッセージを送信します。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/notice |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/notice |
| HTTP メソッド | POST |
| CONTENT-TYPE | application/json |
パスパラメータ
| フィールド名 | 説明 | 型 | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン(Bearer) | string | Y |
| Content-Type | リクエストデータのタイプ(application/json) | string | Y |
リクエストボディ
通知メッセージを送信する際に必要な送信データです。
| フィールド名 | 説明 | タイプ | 必須 |
| channelId | メッセージを送信するチャンネルID(指定がない場合はすべてのチャンネルに送信) | string | N |
| langCode | メッセージを送信するユーザーのHive言語コード(指定がない場合は言語に関係なく送信) (ISO 639 alpha-2に基づき、ISO 639 alpha-2で区別されない言語はScriptタグで区切る必要があります) | string | N |
| message | 送信されるアナウンスメッセージの内容 (最大200文字) | string | Y |
チャンネルID
channelIdがない場合、PathパラメータgameIndexはアプリに存在するすべてのチャネルにメッセージを送信します。
言語コード
langCodeが存在しない場合、メッセージは言語に関係なくすべてのユーザーに配信されます。
langCodeがある場合、メッセージを受け取るユーザーはフィールドの値によって異なります。たとえば、langCodeがenの場合、通知メッセージはクライアント接続時にリクエストボディのlangCodeがenであるユーザーにのみ送信されます。
レスポンスボディ
| フィールド名 | 説明 | タイプ |
| code | レスポンス結果コード | 整数 |
| message | 結果メッセージの説明 | 文字列 |
リクエストサンプル
curl --request POST 'https://sandbox-api-chat.withhive.com/api/v1/games/1/notice' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJnYW1lSW5kZXgiOjEsInBsYXllcklkIjoxLCJpYXQiOjE3MzI1MTcyMzUsImV4cCI6MTczMjUyMDgzNX0.lm5eFqEuSPjsKZUItpTQvFy_2oWrMMJ_J0MPH9VFtNg' \
--header 'Content-Type: application/json' \
--data '{
"channelId": "open:12345",
"langCode": "en",
"message": "서버 점검이 있습니다. 잠시 후 다시 접속해 주세요."
}'
応答サンプル
{
"code": 0,
"message": "Success."
}
ユーザー通知メッセージ送信
ユーザーに通知メッセージを送信しています。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/notice/users/{playerId} |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/notice/users/{playerId} |
| HTTP メソッド | POST |
| CONTENT-TYPE | application/json |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
| playerId | Hive プレイヤーID | 長整数 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン(Bearer) | string | Y |
| Content-Type | リクエストデータのタイプ(application/json) | string | Y |
リクエストボディ
通知メッセージを送信する際に必要な伝送データです。
| フィールド名 | 説明 | タイプ | 必須 |
| langCode | メッセージが送信されるユーザーのHive言語コード(提供されていない場合は言語に関係なく送信される) (ISO 639 alpha-2に基づく、ISO 639 alpha-2で区別されない言語はScriptタグで区切る必要があります) | 文字列 | N |
| message | 送信される通知メッセージの内容 (最大200文字) | 文字列 | Y |
言語コード
langCodeがない場合、言語に関係なくplayerIdユーザーにメッセージを送信します。
langCodeがある場合、ユーザー通知メッセージは、APIリクエストボディ内のlangCodeがクライアント接続時のリクエストボディ内のlangCodeと一致する場合にのみ送信されます。たとえば、playerId=1111のユーザーがlangCode=enでチャットクライアントに接続し、ユーザー通知メッセージ送信APIがplayerId=1111, langCode=jaで呼び出された場合、このユーザーには通知メッセージは送信されません。
レスポンスボディ
| フィールド名 | 説明 | タイプ |
| code | レスポンス結果コード | 整数 |
| message | 説明結果メッセージ | 文字列 |
リクエストサンプル
curl --request POST 'https://sandbox-api-chat.withhive.com/api/v1/games/1/notice/users/123123' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJnYW1lSW5kZXgiOjEsInBsYXllcklkIjoxLCJpYXQiOjE3MzI1MTcyMzUsImV4cCI6MTczMjUyMDgzNX0.lm5eFqEuSPjsKZUItpTQvFy_2oWrMMJ_J0MPH9VFtNg' \
--header 'Content-Type: application/json' \
--data '{
"langCode": "en",
"message": "123123 님에게 보내는 공지 메시지입니다."
}'
レスポンスサンプル
{
"code": 0,
"message": "Success."
}
チャンネルカスタムメッセージを送信
チャンネルに参加したすべてのユーザーにカスタムメッセージを送信します。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/custom-message/channels/{channelId} |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/custom-message/channels/{channelId} |
| HTTP METHOD | POST |
| CONTENT-TYPE | application/json |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
| channelId | メッセージを受信するためのチャネルID | 文字列 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン(Bearer) | string | Y |
| Content-Type | リクエストデータのタイプ(application/json) | string | Y |
リクエストボディ
カスタムメッセージを送信する際に必要な送信データです。
| フィールド名 | 説明 | タイプ | 必須 |
| message | 送信されるカスタムメッセージの内容 (UTF-8 ベース) (最大8,000バイト) | 文字列 | Y |
レスポンスボディ
| フィールド名 | 説明 | タイプ |
| code | レスポンス結果コード | 整数 |
| message | 説明結果メッセージ | 文字列 |
リクエストサンプル
curl --request POST 'https://sandbox-api-chat.withhive.com/api/v1/games/1/custom-message/channels/public:123' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJnYW1lSW5kZXgiOjEsInBsYXllcklkIjoxLCJpYXQiOjE3MzI1MTcyMzUsImV4cCI6MTczMjUyMDgzNX0.lm5eFqEuSPjsKZUItpTQvFy_2oWrMMJ_J0MPH9VFtNg' \
--header 'Content-Type: application/json' \
--data '{
"message": "커스텀 메시지입니다."
}'
応答サンプル
{
"code": 0,
"message": "Success."
}
ユーザーにカスタムメッセージを送信
ユーザーにカスタムメッセージを送信しています。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/custom-message/users |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/custom-message/users |
| HTTP メソッド | POST |
| CONTENT-TYPE | application/json |
パスパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン(Bearer) | string | Y |
| Content-Type | リクエストデータのタイプ(application/json) | string | Y |
リクエストボディ
カスタムメッセージを送信する際に必要な送信データです。
| フィールド名 | 説明 | タイプ | 必須 |
| playerIds | メッセージを受信するためのアカウント識別子のコレクション Hive プレイヤーIDリスト (最大10個) | long array | Y |
| message | 送信されるカスタムメッセージの内容(UTF-8ベース) (最大8,000バイト) | string | Y |
レスポンスボディ
| フィールド名 | 説明 | タイプ |
| code | 応答結果コード | 整数 |
| message | 説明結果メッセージ | 文字列 |
リクエストサンプル
curl --request POST 'https://sandbox-api-chat.withhive.com/api/v1/games/1/custom-message/users' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJnYW1lSW5kZXgiOjEsInBsYXllcklkIjoxLCJpYXQiOjE3MzI1MTcyMzUsImV4cCI6MTczMjUyMDgzNX0.lm5eFqEuSPjsKZUItpTQvFy_2oWrMMJ_J0MPH9VFtNg' \
--header 'Content-Type: application/json' \
--data '{
"playerIds": [
123123
],
"message": "커스텀 메시지입니다."
}'
レスポンスサンプル
{
"code": 0,
"message": "Success."
}
チャンネルメッセージ履歴の取得
チャンネルメッセージ履歴を取得しています。チャンネルメッセージ履歴はカーソルベースのページネーションで提供され、過去30日間のチャンネルメッセージ履歴のみが取得できます。このAPIはチャンネル設定で以前の会話履歴を表示するオプションが有効になっている場合にのみ使用できます。 APIレスポンスで受け取ったチャンネルメッセージ履歴には、ブロックされたユーザーからの過去のメッセージが含まれる場合があります。
ページネーション: サイズとインデックス
クエリパラメータindexを使用してページネーションを提供します。indexのデフォルト値はなく、indexなしでリクエストが行われた場合、指定されたsizeまでの最新のチャットメッセージが返されます。
たとえば、indexなしでsize=5を指定してAPIを呼び出すと、5つの最も最近のチャット履歴と、次の履歴を受け取るためのnextIndex(たとえば、68009c30780e4f2d9830d8a0のような値)が返されます。
index=68009c30780e4f2d9830d8a0 と size=5 を使ってAPIを再呼び出しすると、以前に返された最後のチャット履歴の後に発生した5つのチャット記録が返されます。
ページネーション: 次がある
レスポンス値hasNextがtrueの場合、過去のチャット履歴がさらにあることを意味します。言い換えれば、レスポンス値nextIndexをindexとして使用して、さらに以前のチャネルメッセージ履歴を取得できます。
リクエストURL
| サーバー | URL |
| LIVE | https://api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId}/messages |
| SANDBOX | https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/channels/{channelId}/messages |
| HTTP メソッド | GET |
パスパラメータ
| フィールド名 | 説明 | 型 | 必須 |
| gameIndex | Hive ゲームインデックス | 整数 | Y |
| channelId | クエリするチャンネルID | 整数 | Y |
ヘッダーパラメータ
| フィールド名 | 説明 | タイプ | 必須 |
| Authorization | API呼び出しの認証トークン (Bearer) | 文字列 | Y |
クエリパラメータ
チャネルメッセージの取得をリクエストする際に必要なクエリ文字列データです。
| フィールド名 | 説明 | タイプ | 必須 |
| size | チャンネル履歴のサイズ (最小1 ~ 最大50) | 整数 | Y |
| index | 取得に使用するインデックス(指定しない場合は、最も最近のメッセージを取得) | 文字列 | N |
レスポンスボディ
| フィールド名 | 説明 | 型 |
| code | レスポンス結果コード | 整数 |
| message | 説明結果メッセージ | 文字列 |
| data | レスポンスデータ | オブジェクト |
レスポンスボディ > データ
| フィールド名 | 説明 | タイプ |
| hasNext | 追加の取得が可能かどうか | boolean |
| nextIndex | 次の取得に使用するインデックス | string |
| content | チャンネルメッセージ履歴 | オブジェクト配列 |
レスポンスボディ > データ > コンテンツ
| フィールド名 | 説明 | タイプ |
| gameIndex | Hive ゲームインデックス | 整数 |
| from | メッセージを受信したアカウントの識別子 Hive プレイヤーID | 長整数 |
| extraData | ユーザーの追加情報(UTF-8ベース) (最大256バイト) | 文字列 |
| to | メッセージを送信したチャネルID | 文字列 |
| message | メッセージ内容 | 文字列 |
| langCode | Hive 言語コード (ISO 639 alpha-2に基づく、ISO 639 alpha-2で区別されない言語はスクリプトタグで区切る必要があります) | 文字列 |
| timestamp | メッセージが送信された日時(UTC+0ベース、yyyy-MM-dd'T'HH:mm:ss.SSSZ形式) | 文字列 |
| timestampMillis | メッセージが送信された日時(UnixTimestampミリ秒) | 長整数 |
リクエストサンプル
curl --request GET 'https://test-api-chat.withhive.com/api/v1/games/1/channels/open:1/messages?size=50' \
--header 'Authorization: hivechat 005056fffea3fd10-000400fd-00000797-f67881178d98d1cd-64ae9a76'
レスポンスサンプル
{
"code": 0,
"message": "Success.",
"data": {
"hasNext": true,
"nextIndex": "67c7d83336af25202c1c0ad4",
"content": [
// as size=50, returns 50 objects each of which is like the followings.
{
"gameIndex": 1,
"from": 1111112,
"extraData": "김하이브",
"to": "open:10",
"message": "zzz",
"langCode": "ko",
"timestamp": "2025-03-05T04:50:59.757Z",
"timestampMillis": 1741150259757
},
{
"gameIndex": 1,
"from": 1111111,
"extraData": null,
"to": "open:10",
"message": "하이브2",
"langCode": "ko",
"timestamp": "2025-03-05T04:51:01.689Z",
"timestampMillis": 1741150261689
},
]
}
}