Documentation index for AI agents

GS2-Idle 트랜잭션 액션

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

액션의 조합과 동시 실행

모든 서비스에 공통되는 전제는 트랜잭션 액션의 조합에 정리되어 있습니다. 먼저 그쪽을 읽어 주십시오. 이 절의 나머지는 GS2-Idle 고유의 내용입니다.

GS2-Idle의 트랜잭션 액션은 네임스페이스·사용자·카테고리의 조합으로 결정되는 하나의 스테이터스를 대상으로 합니다. 스테이터스는 최대 방치 시간과 방치의 진행 상황을 보관하며, 각 액션은 자신이 변경하는 값만 기록합니다.

조작같은 행을 겹쳤을 때중첩 너머다른 대상이 되는 경계
최대 방치 시간의 가산·감산
IncreaseMaximumIdleMinutesByUserId DecreaseMaximumIdleMinutesByUserId
혼재해도 된다. 통합되어 값이 합산된다합산된다네임스페이스·사용자·카테고리·최대 방치 시간
최대 방치 시간의 설정
SetMaximumIdleMinutesByUserId
같은 값이면 통합. 값이 다르면 발행 시에 오류실패한다네임스페이스·사용자·카테고리·최대 방치 시간
보상의 수령
ReceiveByUserId
실패한다실패한다네임스페이스·사용자·카테고리·방치의 진행 상황

최대 방치 시간은 통합 후의 합계에 대해 판정되며 카테고리에서 허용된 범위에 들어가야 하므로, 단독으로는 들어가는 가산이라도 다른 가산과 합쳐지면 거부될 수 있습니다.

하나의 트랜잭션에서 보상을 두 번 수령하는 것은 의도적으로 거부됩니다. 보상은 트랜잭션 시작 시점의 상태에서 산출되므로, 두 번째는 같은 방치 시간분을 다시 배분하게 되기 때문입니다. 꼭 두 번 필요한 경우에는 트랜잭션을 나누어 주십시오. 다만 두 번째는 방치 시간이 거의 쌓이지 않은 상태에서의 산출이 됩니다.

최대 방치 시간의 변경과 보상의 수령은 변경하는 값이 다르므로 함께 두어도 됩니다.

중첩된 트랜잭션에 주의

최대 방치 시간의 변경은 중첩 너머에서도 안전합니다. 어느 경로로 도착하든 한 번의 업데이트로 묶입니다.

보상의 수령은 다릅니다. 수령이 안쪽에서 도착하고 다른 수령이 바깥쪽에 지정되어 있는 경우에는 트랜잭션이 실패합니다.

제한을 회피하고 싶은 경우

보상의 수령과 최대 방치 시간의 가산·설정은 획득 액션, 최대 방치 시간의 감산은 소비 액션입니다. 수령끼리의 충돌은 acquireActionUseJobQueue를 활성화하면 해소되지만, 수령이 하나씩 실행되게 될 뿐이므로 두 번째는 방치 시간이 거의 쌓이지 않은 상태에서 산출됩니다.

동시 실행과 재시도

최대 방치 시간의 변경은 결과가 범위에 들어가는 한, 동시 실행 요청이 몇 개 겹쳐도 충돌하지 않습니다.

보상의 수령은 산출의 근거로 삼은 상태를 대조하여 기록하므로, 같은 스테이터스에 대한 다른 업데이트와 겹치면 충돌(409)이 됩니다. 요청 내용에 문제가 있는 것은 아니므로, 재시도하면 성공합니다.


Consume Action

소비 액션

Gs2Idle:DecreaseMaximumIdleMinutesByUserId

사용자 ID를 지정하여 최대 방치 시간을 감산

지정된 카테고리에서 사용자의 최대 방치 시간에서 지정된 분(分) 수를 감산합니다.
최대 방치 시간은 0 미만으로 내려갈 수 없습니다.
스테이터스가 아직 존재하지 않는 경우, 감산을 적용하기 전에 자동으로 생성됩니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
categoryNamestring
~ 128자카테고리 모델 이름
이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다.
decreaseMinutesint1 ~ 2147483646최대 방치 시간 감소량(분)
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Idle:DecreaseMaximumIdleMinutesByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "categoryName": "[string]카테고리 모델 이름",
        "decreaseMinutes": "[int]최대 방치 시간 감소량(분)",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Idle:DecreaseMaximumIdleMinutesByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  categoryName: "[string]카테고리 모델 이름"
  decreaseMinutes: "[int]최대 방치 시간 감소량(분)"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("idle").consume.decrease_maximum_idle_minutes_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    categoryName="[string]카테고리 모델 이름",
    decreaseMinutes="[int]최대 방치 시간 감소량(분)",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Acquire Action

입수 액션

Gs2Idle:IncreaseMaximumIdleMinutesByUserId

사용자 ID를 지정하여 최대 방치 시간을 가산

지정된 카테고리에서 사용자의 최대 방치 시간에 지정된 분(分) 수를 가산합니다.
최대 방치 시간은 방치 보상이 누적될 수 있는 시간의 상한을 결정합니다.
스테이터스가 아직 존재하지 않는 경우, 가산을 적용하기 전에 자동으로 생성됩니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
categoryNamestring
~ 128자카테고리 모델 이름
이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다.
increaseMinutesint1 ~ 2147483646최대 방치 시간 증가량(분)
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Idle:IncreaseMaximumIdleMinutesByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "categoryName": "[string]카테고리 모델 이름",
        "increaseMinutes": "[int]최대 방치 시간 증가량(분)",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Idle:IncreaseMaximumIdleMinutesByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  categoryName: "[string]카테고리 모델 이름"
  increaseMinutes: "[int]최대 방치 시간 증가량(분)"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("idle").acquire.increase_maximum_idle_minutes_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    categoryName="[string]카테고리 모델 이름",
    increaseMinutes="[int]최대 방치 시간 증가량(분)",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Idle:SetMaximumIdleMinutesByUserId

사용자 ID를 지정하여 최대 방치 시간을 설정

지정된 카테고리에서 사용자의 최대 방치 시간을 지정된 절대값으로 설정합니다.
가산/감산 조작과 달리, 현재 최대 방치 시간을 직접 대체합니다.
갱신 후 스테이터스와 갱신 전 스테이터스를 모두 반환하므로, 호출한 측에서 변경 내용을 확인할 수 있습니다.
스테이터스가 아직 존재하지 않는 경우, 값을 적용하기 전에 자동으로 생성됩니다.

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

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
categoryNamestring
~ 128자카테고리 모델 이름
이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다.
maximumIdleMinutesint1 ~ 2147483646설정할 최대 방치 시간 (분)
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Idle:SetMaximumIdleMinutesByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "categoryName": "[string]카테고리 모델 이름",
        "maximumIdleMinutes": "[int]설정할 최대 방치 시간 (분)",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Idle:SetMaximumIdleMinutesByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  categoryName: "[string]카테고리 모델 이름"
  maximumIdleMinutes: "[int]설정할 최대 방치 시간 (분)"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("idle").acquire.set_maximum_idle_minutes_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    categoryName="[string]카테고리 모델 이름",
    maximumIdleMinutes="[int]설정할 최대 방치 시간 (분)",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Idle:ReceiveByUserId

사용자 ID를 지정하여 보상 수령

지정된 사용자와 카테고리의 누적된 방치 시간을 기준으로 방치 보상을 수령합니다.
보상량은 경과한 방치 시간을 rewardIntervalMinutes로 나눈 값으로 계산되며, maximumIdleMinutes로 상한이 설정됩니다.
receiveScript가 설정되어 있는 경우, 보상 지급 전에 실행되어 수령 조작을 변경하거나 거부할 수 있습니다.
overrideAcquireActionsScriptId를 통해 입수 액션(배율 보정 적용 등)을 변경하는 것도 가능합니다.
수령 후, 방치 타이머는 현재 시각으로 리셋됩니다.
계산된 보상의 입수 액션을 포함하는 트랜잭션을 반환합니다.

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

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
categoryNamestring
~ 128자카테고리 모델 이름
이 스테이터스가 속한 카테고리 모델의 이름입니다. 방치 보상 계산에 사용되는 보상 간격, 최대 방치 시간, 입수 액션, 스케줄 설정을 포함하는 카테고리 모델 정의를 참조합니다.
configList<Config>[]0 ~ 32 items트랜잭션 변수에 적용할 설정값
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Idle:ReceiveByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "categoryName": "[string]카테고리 모델 이름",
        "config": [
            {
                "key": "[string]이름",
                "value": "[string]값"
            }
        ],
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Idle:ReceiveByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  categoryName: "[string]카테고리 모델 이름"
  config: 
    - key: "[string]이름"
      value: "[string]값"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("idle").acquire.receive_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    categoryName="[string]카테고리 모델 이름",
    config={
        {
            key="[string]이름",
            value="[string]값"
        }
    },
    timeOffsetToken="[string]타임 오프셋 토큰",
})