콘텐츠로 이동

메시지

메시지 내역 조회, 메시지 유형 별 전송, 메시지 번역을 위한 API 사용 방법을 안내합니다.

개요

API로 지원하는 메시지 유형 및 전송 방식, 메시지 번역 및 추가 기능에 대해 설명합니다.

채널 메시지

  • 채널 참여자에게 전송하는 메시지로, 브로드캐스팅(broadcasting) 방식으로 동작합니다.
  • channelId 를 기준으로 메시지 내역을 제공합니다.

Direct 메시지

  • 상대방에게 직접 전송하는 메시지로, 단방향으로 동작합니다.

공지 메시지

공지 메시지는 크게 채널 공지 메시지와 사용자 공지 메시지로 나뉩니다.

  • 채널 공지 메시지: 해당 channelId에 접속한 유저에게만 전송되는 메시지입니다.
  • 사용자 공지 메시지: 해당 playerId 유저에게만 전송되는 메시지입니다.

커스텀 메시지

  • 커스텀 메시지는 일반적인 채팅 메시지와는 다르게, 사용자 간의 대화가 아닌 대용량의 데이터를 전달하기 위해 사용되는 메시지 유형입니다.

메시지 번역

메시지 번역 기능으로 자동 번역과 수동 번역, 번역 가능한 언어 코드를 설명합니다.

자동 번역

  • 게임 클라이언트에서는 채널별로 자동 번역 여부를 설정할 수 있으며, 채널에서 퇴장하거나 소켓 서버와 연결이 해제되면 자동 번역 설정은 초기화됩니다.
  • 소켓 서버 접속 시 설정한 언어 코드로 메시지가 번역됩니다. 번역 언어를 변경하려면 새로운 언어 코드로 다시 접속해야 합니다.

수동 번역

언어 코드

언어 언어별 표기법 Hive 언어코드
한국어 한국어 ko
영어 English en
일본어 日本語 ja
중국어 간체 简体中文 zh-hans
중국어 번체 繁體中文 zh-hant
프랑스어 Français fr
독일어 Deutsch de
러시아어 русский ru
스페인어 Español es
포르투갈어 Português pt
인도네시아어 Bahasa Indonesia id
베트남어 tiếng Việt vi
태국어 ไทย th
이탈리아어 Italiano it
터키어 Türkçe tr
아랍어 العربية ar

메시지 추가 기능

전송한 메시지에 추가할 수 있는 기능으로 좋아요, 멘션, 답글이 있습니다.

  • 좋아요: 채널의 각 메시지에 '좋아요'를 추가하거나 취소할 수 있습니다.
  • 멘션: 채널 메시지에서 특정 유저를 언급(멘션)하여 알림을 보낼 수 있습니다.
  • 달기: 채널 내 전송된 특정 메시지에 답글을 입력할 수 있습니다.

채널 메시지 내역 조회 API

messageId를 기준으로 해당 채널 메시지 이전 및 이후 내역을 조회합니다. 단, 채널 설정에서 chatHistoryAllowedtrue 인 경우에만 요청할 수 있습니다.

채널 메시지 내역은 커서 기반 페이지네이션으로 제공하며, 최근 30일 이내의 채널 메시지 내역만 조회 가능합니다.

Request URL

서버 URL
LIVE https://api-chat.withhive.com/api/v2/games/{gameIndex}/channels/{channelId}/messages
SANDBOX https://sandbox-api-chat.withhive.com/api/v2/games/{gameIndex}/channels/{channelId}/messages
HTTP METHOD GET

Path parameters

필드명 설명 타입 필수 여부
gameIndex Hive 게임 인덱스 integer Y
channelId 조회할 채널 ID integer Y

Header parameters

필드명 설명 타입 필수 여부
Authorization API 호출을 위한 인증 토큰 (Bearer) string Y

Query parameters

필드명 설명 타입 필수 여부
prevSize 이전 채널 메시지 조회 사이즈 (최소 0 ~ 최대 50)
(기본값: 0)
integer N
nextSize 이후 채널 메시지 조회 사이즈
messageId가 없으면 이 값은 무시됩니다. (최소 0 ~ 최대 50)
(기본값: 0)
integer N
messageId 조회에 사용할 messageId (null인 경우 가장 최신 채널 기준 메시지 조회) string N
order 날짜 기준 정렬 방식 (ASC, DESC)
(기본값: DESC)
string N

prevSize와 nextSize

prevSizenextSize는 한 번에 조회할 메시지 범위를 정의하는 파라미터입니다.

messageId에 해당되는 메시지를 기준으로 prevSize는 이전 메시지 내역을, nextSize는 이후 메시지 내역을 조회합니다. 예를 들어, messageId와 함께 prevSize=10, nextSize=5으로 지정하면 messageId에 해당하는 메시지의 이전 10개 메시지, 이후 5개 메시지를 조회할 수 있습니다.

또한 messageId를 지정하지 않고 채널 메시지 내역 조회 API를 호출하면, 채널의 가장 최신 메시지부터 prevSize로 설정된 메시지 개수만큼만 조회하며, 이때 nextSize 값은 적용되지 않습니다.

Response body

필드명 설명 타입
code 응답 결과 코드 integer
message 설명 결과 메시지 string
data 응답 데이터 object

Response body > data

필드명 설명 타입
hasNext 이후 메시지 조회 가능 여부 boolean
nextMessageId 이후 메시지 조회 시 사용할 messageId string
hasPrev 이전 메시지 조회 가능 여부 boolean
prevMessageId 이전 메시지 조회 시 사용할 messageId string
content 채널 메시지 내역 object array
  • hasNext : hasNexttrue이면 이후 메시지 내역이 더 존재합니다. 이 때, nextMessageId에 해당하는 메시지 이후의 채널 메시지 내역을 더 조회할 수 있습니다.
  • hasPrev : hasPrevtrue이면 이전 메시지 내역이 더 존재합니다. 이 때, prevMessageId에 해당하는 메시지 이전의 채널 메시지 내역을 더 조회할 수 있습니다.

Response body > data > content

필드명 설명 타입
gameIndex Hive 게임 인덱스 integer
from 메시지 전달받은 계정 식별자
Player ID
long
messageId 메시지 ID string
extraData 사용자 부가 정보 (UTF-8 기준)
(최대 256 Byte)
string
pluginData 메시지 추가 기능 object
to 메시지 전송한 채널 ID string
message 메시지 내용 string
langCode Hive 언어 코드 string
timestamp 메시지 전송된 일시 (UTC+0 기준, yyyy-MM-dd'T'HH:mm:ss.SSSZ 형식) string
timestampMillis 메시지 전송된 일시 (UnixTimestamp Millisecond) long

Response body > data > content > pluginData

  • 메시지 추가 기능을 사용한 경우에만 아래의 데이터가 추가됩니다.
필드명 설명 타입
like '좋아요' 정보 object
mentions 멘션 정보 object array
reply 답글 정보 object

Response body > data > content > pluginData > like

필드명 설명 타입
playerIds '좋아요`를 추가한 유저의 player ID (복수) long array

Response body > data > content > pluginData > mentions

필드명 설명 타입
playerId 멘션된 유저의 player ID long

Response body > data > content > pluginData > reply

필드명 설명 타입
originalMessageId 원문 메시지의 ID string
originalMessage 원문 메시지의 내용 string
originalExtraData 원문 메시지의 부가 정보 string
originalTimestampMillis 원문 메시지의 전송 일시 (UnixTimestamp Millisecond) long

Request sample

curl --request GET 'https://test-api-chat.withhive.com/api/v2/games/1/channels/open:1/messages?messageId=abcdefg&nextSize=10&prevSize=10&order=DESC' \
--header 'Authorization: hivechat 005056fffea3fd10-000400fd-00000797-f67881178d98d1cd-64ae9a76'

Response sample

{
  "code": 0,
  "message": "Success.",
  "data": {
    "hasNext": true,
    "nextMessageId": "XY0QSDRezljxWI02",
    "hasPrev": true,
    "prevMessageId": "j2FwC8Zdq5vwX8kJ",
    "content": [
      {
        "gameIndex": 1,
        "from": 1111112,
        "messageId" : "0n4K8pkqjpWjkrUH",
        "extraData": "김하이브",
        "to": "open:10",
        "message": "안녕하세요.",
        "langCode": "ko",
        "timestamp": "2025-03-05T04:50:59.757Z",
        "timestampMillis": 1741150259757
      },
      {
        "gameIndex": 1,
        "from": 1111111,
        "messageId" : "J3N1YYimo5o7Mpb5",
        "extraData": "",
        "to": "open:10",
        "message": "하이브",
        "langCode": "ko",
        // 메시지 추가 기능을 사용하였을 경우
        "pluginData" : {
          // 좋아요
          "like": {
            "playerIds": [
              1
            ]
          },
          // 멘션
          "mentions": [
            {
              "playerId": 101
              }
          ],
          // 답글
          "reply": {
            "originalMessageId": "yIKzxKCihLVu9VR8",
            "originalMessage": "111",
            "originalExtraData": null,
            "originalTimestampMillis": 1752487464039
            }
        },
        "timestamp": "2025-03-05T04:51:01.689Z",
        "timestampMillis": 1741150261689
      },
      // 이하 동일한 형식의 객체
    ]
  }
}

공지 메시지 전송 API

특정 채널에 참여한 유저 혹은 소켓 서버에 접속한 유저에게 공지 메시지를 전송합니다.

Request 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 METHOD POST
CONTENT-TYPE application/json

Path parameters

필드명 설명 타입 필수 여부
gameIndex Hive 게임 인덱스 integer Y

Header parameters

필드명 설명 타입 필수 여부
Authorization API 호출을 위한 인증 토큰 (Bearer) string Y
Content-Type 요청 데이터의 타입 (application/json) string Y

Request body

필드명 설명 타입 필수 여부
channelId 메시지를 보낼 채널 ID string N
langCode 메시지를 보낼 사용자의 Hive 언어 코드 (없을 경우 언어 상관없이 전송) string N
message 전송할 공지 메시지 내용
(최대 200자)
string Y

Request body > channelId

  • channelId가 있으면 해당 채널에 접속한 모든 유저에게 채널 공지 메시지 를 발송합니다.
  • channelId가 없으면 소켓 서버에 접속한 모든 유저에게 사용자 공지 메시지 를 발송합니다.

Request body > langCode

  • langCode가 있으면 해당 필드값인 언어 코드에 해당되는 유저에게 메시지를 전송합니다. 예를 들어, langCodeen이면, langCodeen인 유저에게만 공지 메시지를 전송합니다.
  • langCode가 없으면 언어와 상관없이 모든 유저에게 메시지를 전송합니다.

Response body

필드명 설명 타입
code 응답 결과 코드 integer
message 설명 결과 메시지 string

Request sample

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": "서버 점검이 있습니다. 잠시 후 다시 접속해 주세요."
}'

Response sample

{
    "code": 0,
    "message": "Success."
}

사용자 공지 메시지 전송 API

특정 player ID에 해당하는 유저에게 사용자 공지 메시지를 전송합니다.

Request 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 METHOD POST
CONTENT-TYPE application/json

Path parameters

필드명 설명 타입 필수 여부
gameIndex Hive 게임 인덱스 integer Y
playerId Hive 플레이어 아이디 long Y

Header parameters

필드명 설명 타입 필수 여부
Authorization API 호출을 위한 인증 토큰 (Bearer) string Y
Content-Type 요청 데이터의 타입 (application/json) string Y

Request body

필드명 설명 타입 필수 여부
langCode 메시지를 보낼 사용자의 Hive 언어 코드 (없을 경우 언어 상관없이 전송) string N
message 전송할 공지 메시지 내용
(최대 200자)
string Y

Request body > langCode

  • langCode가 있으면, 해당 API 요청 시 포함하는 langCode와 게임 클라이언트 접속 시 설정된 langCode가 일치하는 유저에게만 사용자 공지 메시지를 전송합니다. 예를 들어, playerId=1111인 유저가 langCode=en로 게임 클라이언트에 접속한 상태에서, 본 API를 호출 시 playerId=1111, langCode=ja로 포함하면 유저에게 공지 메시지를 전송하지 않습니다.

  • langCode가 없으면 언어와 상관없이 playerId 에 해당하는 유저에게 메시지를 사용자 공지 메시지를 전송합니다.

Response body

필드명 설명 타입
code 응답 결과 코드 integer
message 설명 결과 메시지 string

Request sample

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 님에게 보내는 공지 메시지입니다."
}'

Response sample

{
    "code": 0,
    "message": "Success."
}

채널 커스텀 메시지 전송 API

특정 채널에 참여한 모든 유저에게 커스텀 메시지를 전송합니다.

Request 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

Path parameters

필드명 설명 타입 필수 여부
gameIndex Hive 게임 인덱스 integer Y
channelId 메시지를 받을 채널 ID string Y

Header parameters

필드명 설명 타입 필수 여부
Authorization API 호출을 위한 인증 토큰 (Bearer) string Y
Content-Type 요청 데이터의 타입 (application/json) string Y

Request body

필드명 설명 타입 필수 여부
message 전송할 커스텀 메시지 내용 (UTF-8 기준)
(최대 8,000 Byte)
string Y

Response body

필드명 설명 타입
code 응답 결과 코드 integer
message 설명 결과 메시지 string

Request sample

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": "커스텀 메시지입니다."
}'

Response sample

{
    "code": 0,
    "message": "Success."
}

사용자 커스텀 메시지 전송 API

최대 10명의 특정 유저에게 커스텀 메시지를 전송합니다.

Request 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 METHOD POST
CONTENT-TYPE application/json

Path parameters

필드명 설명 타입 필수 여부
gameIndex Hive 게임 인덱스 integer Y

Header parameters

필드명 설명 타입 필수 여부
Authorization API 호출을 위한 인증 토큰 (Bearer) string Y
Content-Type 요청 데이터의 타입 (application/json) string Y

Request body

필드명 설명 타입 필수 여부
playerIds 메시지를 받을 계정 식별자 모음
Player ID 리스트
(최대 10명)
long array Y
message 전송할 커스텀 메시지 내용 (UTF-8 기준)
(최대 8,000 Byte)
string Y

Response body

필드명 설명 타입
code 응답 결과 코드 integer
message 설명 결과 메시지 string

Request sample

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": "커스텀 메시지입니다."
}'

Response sample

{
    "code": 0,
    "message": "Success."
}

AI 메시지 번역 API

메시지로 입력된 텍스트를 지정된 언어로 번역합니다.

Request URL

서버 URL
LIVE https://api-chat.withhive.com/api/v1/games/{gameIndex}/translate
SANDBOX https://sandbox-api-chat.withhive.com/api/v1/games/{gameIndex}/translate
HTTP METHOD POST
CONTENT-TYPE application/json

Path parameters

필드명 설명 타입 필수 여부
gameIndex Hive 게임 인덱스 integer Y

Header parameters

필드명 설명 타입 필수 여부
Authorization API 호출을 위한 인증 토큰 (Bearer) string Y
Content-Type 요청 데이터의 타입 (application/json) string Y

Request body

필드명 설명 타입 필수 여부
text 원본 메시지 string Y
from 원본 메시지의 Hive 언어 코드
auto 입력 시, 자동 감지
string Y
to 번역하려는 Hive 언어 코드
복수 지정 가능 (e.g. ko, en, ja)
string Y

Response body

필드명 설명 타입
code 응답 결과 코드 integer
message 설명 결과 메시지 string
data 응답 데이터 object

Response body > data

필드명 설명 타입
translations 번역 결과 객체 object

Response body > data > translation

필드명 설명 타입
{lang} 번역된 메시지 string

※ 번역 API 요청시, 지정된 Hive 언어 코드(예: en, ja, ar)가 {lang} 필드명으로 사용됩니다.

Request sample

curl --request POST 'https://sandbox-api-chat.withhive.com/api/v1/games/1/translate' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ysjs' \
--header 'Content-Type: application/json' \
--data'{
    "text": "안녕하세요. 반갑습니다.",
    "from": "ko",
    "to": "en, ja, ar"
}'

Response sample

{
    "code": 0,
    "message": "Success.",
    "data": {     
        "translations": {
            "ar": "مرحبا. تشرفنا.",
            "ja": "こんにちは。はじめまして。",
            "en": "Hello. Nice to meet you."
        }
    }
}