> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Moderar seu conteúdo gerado pelo usuário

> Crie fluxos de moderação de UGC no PlayFab Economy v2 usando ReportItem e APIs de revisão para sinalizar, revisar e remover conteúdo gerado pelo usuário inadequado.

Este guia apresenta as chamadas de API que podem ser usadas para criar fluxos de moderação para o conteúdo do seu jogo.

## Denunciar um item

Os jogadores podem denunciar um item chamando a API `ReportItem` a partir de um cliente. É necessário fornecer um `Id` ou `AlernateId` do item. Parâmetros **opcionais** adicionais podem ser incluídos. Eles são:

* `ConcernCategory`: uma categoria de preocupação para a denúncia
* `Reason`: um campo de texto livre para a denúncia

Veja um exemplo de corpo de solicitação:

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

Se não for especificado, `ConcernCategory` terá o padrão `None`. Os valores válidos de `ConcernCategory` são os seguintes:

* `None`
* `OffensiveContent`
* `ChildExploitation`
* `MalwareOrVirus`
* `PrivacyConcerns`
* `MisleadingApp`
* `PoorPerformance`
* `ReviewResponse`
* `SpamAdvertising`
* `Profanity`

Chamar a API `ReportItem` **apenas** dispara um evento do PlayStream com o nome de evento `item_reported`. Ele pode ser consultado usando o [Data Explorer](/pt-BR/services/playfab/data-analytics/learn-data/data-explorer/getting-started-with-data-explorer-basic) no Game Manager. Veja exemplos de consultas abaixo:

A consulta a seguir retorna **O número total de denúncias por ConcernCategory por ItemId nos últimos 3 dias**

```kusto theme={null}
['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
```

A consulta a seguir retorna **Todas as denúncias enviadas contra um ItemId específico nos últimos 3 dias**

```kusto theme={null}
['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
```

## Alterar o status de moderação de um item

Você pode alterar o status de moderação de um item **publicado** usando a API `SetItemModerationState`. Um item em qualquer estado diferente de `Approved` não ficará acessível no catálogo público para nenhum jogador. O criador do item ainda pode acessá-lo usando as APIs `GetItem` e `GetDraftItems`. **Entidades de título** e **Administradores** poderão ver itens não aprovados por meio de `SearchItems`, `GetDraftItems` e `GetItem`.

Esta API só pode ser chamada pela **entidade de título**. É necessário fornecer um `Id` ou `AlernateId` do item e um `Status`. Um parâmetro de texto livre **opcional** `Reason` também pode ser adicionado. Como uma chamada de serviço, ela se parece com isto:

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

Por padrão, um item publicado não tem status de moderação. Publicar novamente o item de rascunho **não** altera o status de moderação. Os valores válidos de `Status` são os seguintes:

* `AwaitingModeration`
* `Approved`
* `Rejected`

A consulta a seguir retorna **Todos os itens atualmente no status `AwaitingModeration` nos últimos 3 dias**

```kusto theme={null}
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"
```

## Excluir um item

Um item pode ser excluído chamando a API `DeleteItem`. Essa chamada remove um item do catálogo de rascunho e o item correspondente do catálogo público (se ele tiver sido publicado). É necessário fornecer um `Id` ou `AlernateId` do item.

```json theme={null}
{
  "Id": "852a2d2b-7754-427e-9ad4-fce2b24a4cef"
}
```


## Related topics

- [XR-018: Conteúdo gerado pelo usuário](/pt-BR/publishing/certification/xr/xr-018.md)
- [Publique seu primeiro conteúdo gerado pelo usuário](/pt-BR/services/playfab/economy-monetization/economy-v2/tutorials/publish-ugc.md)
- [Requisitos XBOX testados na certificação para jogos XBOX](/pt-BR/publishing/certification/console-cert-tested-requirements.md)
- [Requisitos do XBOX para jogos do XBOX](/pt-BR/publishing/certification/xbox-requirements.md)
- [XR018 Conteúdo gerado pelo usuário](/pt-BR/publishing/certification/fma/xr-018.md)
