审查用户生成的内容

本指南将介绍可用于为游戏中的内容创建审查流的 API 调用。

报告项

玩家可以通过从客户端调用 ReportItemAPI 来报告项目。 必须提供项 IdAlernateId。 可以添加其他可选参数。 这些设置包括:

  • 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 只会 在事件名称下触发 PlayStream 事件, item_reported。 可以在 Game Manager 中使用 数据资源管理器查询此项。 可在下面看到示例查询:

以下查询返回过去 3 天内 ConcernCategory 每 ItemId的报告总数

['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 将无法在所有玩家的公共目录上访问。 项目创建者仍然可以使用 GetItemGetDraftItemsAPI 访问该项。 游戏实体管理员 将能够通过 SearchItemsGetDraftItemsGetItem查看未批准的项目。

此 API 只能由 title 实体调用。 必须提供项 IdAlernateIdStatus。 还可以添加可选Reason自由文本参数。 作为服务调用,它看起来如下所示:

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

默认情况下,已发布的项目将不具有审核状态。 重新发布草稿项将not更改审查状态。 有效的 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"

删除项

可以通过调用 DeleteItemAPI 来删除项。 此调用将从草稿目录中删除项以及公共目录中的相应项(如果已发布)。 必须提供项 IdAlernateId

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