> For the complete documentation index, see [llms.txt](/llms.txt)

# GS2-Inbox 트랜잭션 액션

검증/소비/입수 각 트랜잭션 액션의 사양





## Consume Action

소비 액션

### Gs2Inbox:OpenMessageByUserId

사용자 ID를 지정하여 메시지를 개봉 완료로 표시<br>

지정된 사용자의 수신함에 있는 지정된 메시지를 읽음(개봉 완료) 상태로 표시합니다.<br>
이는 획득 액션을 실행하지 않고 isRead를 true로 설정하는 단순한 상태 전환입니다.<br>
읽음 처리와 동시에 관련된 보상을 실행하려면 대신 Read API를 사용하십시오.

**수량 지정 가능한 액션: 아니오**

**반전 가능한 액션: 아니오**

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| messageName | string |  | ✓| UUID |  ~ 36자 | 메시지 이름<br>메시지의 고유한 이름을 유지합니다.<br>이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2Inbox:OpenMessageByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "messageName": "[string]메시지 이름",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2Inbox:OpenMessageByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  messageName: "[string]메시지 이름"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("inbox").consume.open_message_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    messageName="[string]메시지 이름",
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---

### Gs2Inbox:DeleteMessageByUserId

사용자 ID를 지정하여 메시지 삭제<br>

지정된 사용자의 받은 편지함에서 메시지를 완전히 삭제합니다.<br>
읽음 상태와 관계없이 메시지 레코드가 삭제됩니다.

**수량 지정 가능한 액션: 아니오**

**반전 가능한 액션: 아니오**

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| messageName | string |  | ✓| UUID |  ~ 36자 | 메시지 이름<br>메시지의 고유한 이름을 유지합니다.<br>이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 메시지를 식별하는 데 사용됩니다. |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2Inbox:DeleteMessageByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "messageName": "[string]메시지 이름",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2Inbox:DeleteMessageByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  messageName: "[string]메시지 이름"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("inbox").consume.delete_message_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    messageName="[string]메시지 이름",
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---

## Acquire Action

입수 액션

### Gs2Inbox:SendMessageByUserId

사용자 ID를 지정하여 메시지 발신<br>

지정된 사용자의 수신함에 새로운 메시지를 생성하여 전달합니다.<br>
메시지에는 메타데이터(임의의 JSON 콘텐츠)와 readAcquireActions(메시지 개봉 시 부여되는 보상)를 포함할 수 있습니다.<br>
메시지의 유효기간은 절대 타임스탬프(expiresAt) 또는 전달 시점부터의 상대적인 기간(expiresTimeSpan)으로 설정할 수 있습니다. expiresAt가 지정된 경우 expiresTimeSpan보다 우선 적용됩니다.<br>
메시지는 읽지 않은 상태(isRead=false)로 시작됩니다.

**수량 지정 가능한 액션: 아니오**

**반전 가능한 액션: 아니오**

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| metadata | string |  | ✓|  |  ~ 4096자 | 메타데이터<br>메시지의 제목, 본문, 발신자 정보, 표시 파라미터 등을 포함하는 JSON 문자열 등, 메시지의 내용을 나타내는 임의의 데이터입니다. GS2는 이 값을 해석하지 않으며, 메시지 UI 렌더링을 위해 게임 클라이언트에 그대로 전달됩니다. 최대 4096자입니다. |
| readAcquireActions | List&lt;AcquireAction&gt; |  | | [] | 0 ~ 100 items | 개봉 시 입수 액션<br>사용자가 이 메시지를 개봉했을 때 실행되는 입수 액션 목록입니다. 아이템, 화폐, 리소스 등의 보상을 메시지에 첨부하기 위해 사용됩니다. 여러 액션을 조합하여 서로 다른 종류의 보상을 동시에 지급할 수 있습니다. 메시지당 최대 100개의 액션입니다. |
| expiresAt | long |  | |  |  | 유효기간 일시<br>UNIX 시간・밀리초 |
| expiresTimeSpan | TimeSpan |  | |  |  | 메시지를 수신한 시각(기준 시각)부터 메시지가 삭제될 때까지의 기간 |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2Inbox:SendMessageByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "metadata": "[string]메타데이터",
        "readAcquireActions": [
            {
                "action": "[string]입수 액션에서 실행할 액션의 종류",
                "request": "[string]액션 실행 시 사용되는 요청의 JSON 문자열"
            }
        ],
        "expiresAt": "[long]유효기간 일시",
        "expiresTimeSpan": {
            "days": "[int]일수",
            "hours": "[int]시간",
            "minutes": "[int]분"
        },
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2Inbox:SendMessageByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  metadata: "[string]메타데이터"
  readAcquireActions: 
    - action: "[string]입수 액션에서 실행할 액션의 종류"
      request: "[string]액션 실행 시 사용되는 요청의 JSON 문자열"
  expiresAt: "[long]유효기간 일시"
  expiresTimeSpan: 
    days: "[int]일수"
    hours: "[int]시간"
    minutes: "[int]분"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("inbox").acquire.send_message_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    metadata="[string]메타데이터",
    readAcquireActions={
        {
            action="[string]입수 액션에서 실행할 액션의 종류",
            request="[string]액션 실행 시 사용되는 요청의 JSON 문자열"
        }
    },
    expiresAt="[long]유효기간 일시",
    expiresTimeSpan={
        days="[int]일수",
        hours="[int]시간",
        minutes="[int]분"
    },
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---



