다음을 통해 공유


사용자 생성 콘텐츠의 중재

이 가이드에서는 게임 콘텐츠에 대한 조정 흐름을 만드는 데 사용할 수 있는 API 호출을 살펴봅니다.

항목 보고

플레이어는 클라이언트에서 ReportItem API를 호출하여 항목을 보고할 수 있습니다. Id 또는 AlernateId 항목을 제공해야 합니다. 선택적 매개 변수를 더 추가할 수 있습니다. 다음 범위가 포함됩니다.

  • ConcernCategory: 보고의 관심 범주
  • Reason: 보고의 자유로운 텍스트 입력

다음은 샘플 요청 본문입니다.

{
  "Id": "3f5dd8d4-4ee1-4748-8855-56a8a0277bf9"
  "ConcernCategory": "Profanity",
  "Reason": "There was swearing in the description."
}

지정하지 않으면 ConcernCategory에서 None을(를) 기본값으로 지정합니다. 유효한 ConcernCategory 값은 다음과 같습니다.

  • None
  • OffensiveContent
  • ChildExploitation
  • MalwareOrVirus
  • PrivacyConcerns
  • MisleadingApp
  • PoorPerformance
  • ReviewResponse
  • SpamAdvertising
  • Profanity

ReportItem API를 호출하면 이벤트 이름 item_reported 아래 PlayStream 이벤트 발생합니다. 게임 관리자의 데이터 탐색기를 사용하여 이 정보를 쿼리할 수 있습니다. 예제 쿼리는 아래에서 볼 수 있습니다.

다음 쿼리는 지난 3일 동안 ItemId당 ConcernCategory의 총 보고 수를 반환합니다.

['events.all']
| where Timestamp > ago (3d)
| where FullName_Name == "item_reported"
| project ItemId = tostring(EventData.Payload.ItemId), ConcernCategory = tostring(EventData.Payload.ConcernCategory)
| summarize TotalReportCount = count() by ItemId, ConcernCategory
| sort by TotalReportCount desc
| render columnchart kind=stacked

다음 쿼리는 지난 3일 동안 특정 ItemId에서 제출된 모든 보고를 반환합니다.

['events.all']
| where Timestamp > ago (3d)
| where FullName_Name == "item_reported"
| where EventData.Payload.ItemId == "3f5dd8d4-4ee1-4748-8855-56a8a0277bf9"
| project Timestamp, ItemId = tostring(EventData.Payload.ItemId), ConcernCategory = tostring(EventData.Payload.ConcernCategory), Reason = tostring(EventData.Payload.Reason), ReportingPlayer = Entity_Id
| sort by Timestamp

항목의 중재 상태 변경

SetItemModerationState API를 사용하여 게시된 항목의 조정 상태를 변경할 수 있습니다. Approved 외 다른 상태를 가진 모든 항목은 모든 플레이어의 공개 카탈로그에서 액세스할 수 없습니다. 항목 작성자는 GetItemGetDraftItems API를 사용하여 항목에 계속 액세스할 수 있습니다. 타이틀 엔터티관리자SearchItems, GetDraftItemsGetItem을(를) 통해 비승인 항목을 볼 수 있습니다.

이 API는 타이틀 엔터티에서만 호출할 수 있습니다. Id 또는 AlernateId, 및 Status 항목을 제공해야 합니다. 선택적Reason 자유 텍스트 매개 변수를 추가할 수도 있습니다. 서비스 호출로서의 단계 설명:

{
  "Status": "AwaitingModeration",
  "Reason": "User reports over threshold",
  "Id": "3f5dd8d4-4ee1-4748-8855-56a8a0277bf9"
}

기본적으로 게시된 항목에는 중재 상태가 없습니다. 임시보관함 항목을 다시 게시해도 조정 상태는 변경되지 않습니다. 유효한 Status 값은 다음과 같습니다.

  • AwaitingModeration
  • Approved
  • Rejected

다음 쿼리는 지난 3일 동안 현재 AwaitingModeration 상태인 모든 항목을 반환합니다.

let TimeRange = ago(3d);
['events.all']
| where Timestamp > TimeRange
| where FullName_Name == "item_moderation_state_changed"
| project Timestamp, ItemId = tostring(EventData.Payload.ItemId)
| summarize MaxTimestamp = max(Timestamp) by ItemId
| extend TimeAndId = strcat(MaxTimestamp, "|", ItemId)
| join kind = leftouter (
    ['events.all']
    | where Timestamp > TimeRange
    | where FullName_Name == "item_moderation_state_changed"
    | project Timestamp, ItemId = tostring(EventData.Payload.ItemId), TargetStatus = tostring(EventData.Payload.TargetStatus), Reason = tostring(EventData.Payload.Reason)
    | extend TimeAndId = strcat(Timestamp, "|", ItemId)) on TimeAndId
| project Timestamp, ItemId, TargetStatus, Reason
| where TargetStatus == "AwaitingModeration"

항목 삭제

DeleteItem API를 호출하여 항목을 삭제할 수 있습니다. 이 호출은 임시보관함 카탈로그에서 항목을 제거하고, 해당 항목이 게시된 경우 공개 카탈로그에서 해당 항목을 제거합니다. Id 또는 AlernateId 항목을 제공해야 합니다.

{
  "Id": "852a2d2b-7754-427e-9ad4-fce2b24a4cef"
}