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

# Fazer chamadas de webhook a partir do CloudScript

> Chame pontos de extremidade REST externos e webhooks a partir do CloudScript do PlayFab, tanto para solicitações não seguras quanto para integrações protegidas por OAuth com suas próprias APIs Web.

Um dos recursos menos conhecidos do CloudScript é que você pode fazer chamadas de webhook a partir dele para qualquer ponto de extremidade de API Web, usando chamadas REST (Representational State Transfer) padrão.

<Note>
  Recomendamos fazer chamadas de webhook usando as [CloudScript Functions](/pt-BR/services/playfab/live-service-management/service-gateway/automation/cloudscript-af) mais recentes sempre que possível.
</Note>

Isso permite que os títulos façam chamadas a serviços informativos básicos, mas *também* possibilita cenários mais complexos (como o uso de OAuth) para proteger a comunicação com um ponto de extremidade que você possui.

Este tutorial aborda como fazer chamadas de webhook a partir do CloudScript, tanto em cenários *não seguros* quanto *seguros*.

<Note>
  Você pode consultar a seção "PlayFab static IP prefixes and addresses" da página API Features no Developer Portal se precisar incluir na lista de permissões os endereços IP usados para chamadas de saída do CloudScript.
</Note>

Como uma chamada REST, a estrutura de uma chamada de webhook a partir do CloudScript é simples. Os elementos a serem especificados são:

* O ponto de extremidade da URL.
* O método REST (post, get, put ou delete).
* Todos os cabeçalhos necessários.
* O tipo de conteúdo (mais comumente application/JSON).
* O próprio conteúdo (corpo).

Por exemplo, uma chamada básica de API Web para obter o número de versão da sua lógica do lado do servidor pode ser parecida com o exemplo fornecido abaixo.

```javascript theme={null}
// CloudScript
var url = "http://api.yoursite.com/playfab_call/GetVersion";
var method = "post";
var contentBody = "";
var contentType = "application/json";
var headers = {};
var responseString =  http.request(url,method,contentBody,contentType,headers);
```

O corpo da resposta é retornado em forma de cadeia de caracteres, para que você possa usá-lo posteriormente no restante do script.

Neste caso, como estávamos consultando a versão, você poderia gravar a resposta no `log`, como no exemplo fornecido aqui.

```javascript theme={null}
// CloudScript
log.info(responseString);
```

A resposta enviada ao cliente ao final da execução do CloudScript pode ser parecida com o exemplo fornecido abaixo.

```json theme={null}
//HTTP Response
{
    "code": 200,
    "status": "OK",
    "data":
    {
        "FunctionName": "MyScript",
        "Revision": 23,
        "FunctionResult": true,
        "Logs": [
        {
            "Level": "Info",
            "Message": "{\"version\": 3}"
        }],
        "ExecutionTimeSeconds": 0.4309841,
        "MemoryConsumedBytes": 29608,
        "APIRequestsIssued": 0,
        "HttpRequestsIssued": 1
    }
}
```

No entanto, se você tiver um serviço *seguro* com o qual precisa se comunicar, *primeiro* precisará trocar credenciais com esse serviço para estabelecer a identidade.

Para uma solução OAuth, isso significa solicitar um token de acesso Bearer usando sua ID de cliente e seu segredo. Isso varia de acordo com sua implementação específica do OAuth, mas sua chamada pode ser parecida com o exemplo a seguir.

```javascript theme={null}
//CloudScript
var url = "https://api.yoursite.com/playfab_call/request_token";
var method = "post";
var contentBody = "grant_type=client_credentials";
var contentType = "application/x-www-form-urlencoded";
var headers = {};
headers["client_id"] = clientId;
headers["client_secret"] = clientSecret;

var tokenResponse =  http.request(url,method,contentBody,contentType,headers);
```

Com uma resposta válida, você poderá *então* analisar o `bearer_access_token` da resposta desta forma (novamente, isso *depende* das especificidades da sua implementação do OAuth, mas esse é um padrão bastante comum para essa forma de autenticação).

```javascript theme={null}
//CloudScript
var parsedData = JSON.parse(tokenResponse);
var bearer_access_token = parsedData["access_token"];
```

Isso permitiria chamar sua funcionalidade protegida por OAuth fornecendo o `bearer_access_token`.

```javascript theme={null}
//CloudScript
var url = "https://api.yoursite.com/playfab_call/do_action";
var method = "post";
var contentBody = customActionBody;
var contentType = "application/json";
var headers = {};
headers["authorization"] = "Bearer " + bearer_access_token;
```

Portanto, o padrão básico neste caso é usar a ID de cliente e o segredo do seu aplicativo para obter o token de acesso Bearer exclusivo para a chamada e, em seguida, usá-lo para proteger essa chamada.

Como você pode ver, todas essas chamadas seriam feitas usando SSL, para ajudar a evitar ataques man-in-the-middle.

Usando chamadas HTTP a partir do CloudScript, você pode fazer chamadas a qualquer outra API Web de que precise para o seu título. Isso permite estender a funcionalidade do seu título além até do que o PlayFab oferece diretamente, dando a você a opção de criar e usar seus próprios serviços personalizados ou de acessar outros.

Como tudo isso acontece no CloudScript, ele fornece um contexto com autoridade do servidor no qual fazer essas chamadas. Isso significa que elas terão as proteções necessárias no seu CloudScript para ajudar a impedir que os jogadores trapaceiem ou acessem recursos e dados que não deveriam.


## Related topics

- [Guia de início rápido do CloudScript do PlayFab usando Azure Functions](/pt-BR/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/quickstart.md)
- [Escrever CloudScript personalizado](/pt-BR/services/playfab/live-service-management/service-gateway/automation/cloudscript/writing-custom-cloudscript.md)
- [Modificar dados somente leitura ou internos do jogador por meio do CloudScript](/pt-BR/services/playfab/player-progression/player-data/how-to-modify-read-only-internal-player-data.md)
- [Modelos de contexto do CloudScript do PlayFab usando Azure Functions](/pt-BR/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/CloudScript-af-context.md)
- [Tratamento de erros no CloudScript](/pt-BR/services/playfab/live-service-management/service-gateway/automation/cloudscript/handling-errors-in-cloudscript.md)
