审查用户生成的内容
本指南将介绍可用于为游戏中的内容创建审查流的 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 只会 在事件名称下触发 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
将无法在所有玩家的公共目录上访问。 项目创建者仍然可以使用 GetItem
和 GetDraftItems
API 访问该项。
游戏实体 和 管理员 将能够通过 SearchItems
、 GetDraftItems
和 GetItem
查看未批准的项目。
此 API 只能由 title 实体调用。 必须提供项 Id
或 AlernateId
和 Status
。 还可以添加可选的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"
删除项
可以通过调用 DeleteItem
API 来删除项。 此调用将从草稿目录中删除项以及公共目录中的相应项(如果已发布)。 必须提供项 Id
或 AlernateId
。
{
"Id": "852a2d2b-7754-427e-9ad4-fce2b24a4cef"
}