> ## 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.

# Tratamento de erros no CloudScript

> Capture e inspecione erros do CloudScript do PlayFab usando blocos try/catch, extraia códigos de erro da API e monitore erros não tratados no painel do CloudScript.

Este tutorial descreve como reconhecer e tratar erros nos seus manipuladores do CloudScript.

## Identificação

A primeira etapa é identificar o erro. Embora todo erro não capturado seja registrado e fique disponível na resposta ao chamador (cliente), você pode capturar o erro antecipadamente usando um bloco `try/catch`.

Considere o seguinte trecho do CloudScript, que produz e captura o erro.

```javascript theme={null}
"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        let error = ex.apiErrorInfo.apiError.error; // In this case - "InvalidParams"
        let errorCode = ex.apiErrorInfo.apiError.errorCode; // In this case : 1000
    }
}
```

Observou como os códigos de erro foram extraídos no bloco catch? Consulte nossa [documentação de códigos de erro de métodos da API global](/pt-BR/services/playfab/api-references/global-api-method-error-codes) para obter uma lista completa de erros.

<Note>
  O código de erro, por si só, é suficiente para identificar o erro.
</Note>

## Registro em log

Qualquer erro não tratado é adicionado à resposta, permitindo que o cliente processe o problema.

Ao mesmo tempo, ele cria uma entrada de erro do CloudScript e a adiciona às estatísticas totais disponíveis no seu painel do CloudScript.

<img src="https://mintcdn.com/microsoft-4404708b/dqv53299jA1M-fNi/images/playfab/live-service-management/service-gateway/automation/cloudscript/tutorials/game-manager-cloudscript-dashboard.png?fit=max&auto=format&n=dqv53299jA1M-fNi&q=85&s=b223b50da990d93023537437490b0ed2" alt="Game Manager: painel do CloudScript mostrando um gráfico de erros de API" width="1366" height="771" data-path="images/playfab/live-service-management/service-gateway/automation/cloudscript/tutorials/game-manager-cloudscript-dashboard.png" />

Para forçar o registro da exceção na forma de uma cadeia de caracteres JSON, use o registro de erros por meio do objeto `log`.

```javascript theme={null}
"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        log.error(ex);
    }
}
```

Por fim, você pode gravar eventos de título/jogador para processamento posterior por meio de análises.

```javascript theme={null}
"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        server.WriteTitleEvent({
            EventName : 'cs_error',
            Body : ex
        });
    }
}
```

## Recuperação

Nem sempre é possível se recuperar de erros. Problemas como `InvalidArguments` não deixam outra opção a não ser relatar o problema ao jogador.

Há um subconjunto de erros em que uma estratégia de repetição pode ser aplicada. Os tipos de erro *que podem ser repetidos* estão descritos em [Códigos de erro de métodos da API global](/pt-BR/services/playfab/api-references/global-api-method-error-codes).

Pedimos que você *garanta* que atende aos seguintes requisitos ao aplicar uma estratégia de repetição:

* A cada nova tentativa, o atraso entre as tentativas deve *aumentar* exponencialmente. Isso aumenta suas chances de uma chamada bem-sucedida e impede que seu jogo sobrecarregue o servidor do PlayFab (o que resultará em *mais* chamadas rejeitadas).

* Você deve aplicar essa estratégia de repetição de forma *seletiva*, usando-a apenas para os códigos que valem a pena repetir.

## Erro de tempo limite do CloudScript

O tempo de execução das chamadas de API do CloudScript é limitado a 4 segundos.

Se o tempo de execução exceder 4 segundos, um `InternalServerError` será gerado, e o evento do PlayStream gravará um objeto Logs semelhante ao seguinte:

```
    "Logs":[
        {
        "Level":"Error",
        "Message":"PlayFab API request failure",
        "Data":{
            "request":{
                "PlayFabId":"9437A5ADDAE3012D"
            },
            "error":"Timeout",
            "api":"/Server/GetPlayerSegments"
        }
        }
    ]
```

Se você encontrar esse erro, poderá:

* dividir seu CloudScript em segmentos de código menores, que serão executados em menos de 4 segundos.
* mudar para o [CloudScript usando Azure Functions](/pt-BR/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/quickstart), que, em alguns casos, tem limites de tempo limite maiores. Você pode ver os limites no [guia de início rápido](/pt-BR/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/quickstart#execution-limits).


## Related topics

- [Documentação do gerenciamento de serviços ao vivo do PlayFab](/pt-BR/services/playfab/live-service-management/index.md)
- [Escrever CloudScript personalizado](/pt-BR/services/playfab/live-service-management/service-gateway/automation/cloudscript/writing-custom-cloudscript.md)
- [Recursos do ES6 no CloudScript](/pt-BR/services/playfab/live-service-management/service-gateway/automation/cloudscript/es6-features-in-cloudscript.md)
- [Início rápido do Photon](/pt-BR/services/playfab/live-service-management/service-gateway/add-ons/photon/quickstart.md)
- [Fazer chamadas de webhook a partir do CloudScript](/pt-BR/services/playfab/live-service-management/service-gateway/automation/cloudscript/making-webhook-calls-from-cloudscript.md)
