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

# Uso de acciones de CloudScript con PlayStream

> Explica los datos de contexto disponibles dentro de un controlador de CloudScript desencadenado por una acción de PlayStream y cómo usarlos para impulsar la lógica de servidor de PlayFab.

Cuando un controlador de CloudScript se inicia desde una acción de PlayStream, ese controlador tiene acceso a más datos sobre por qué se está ejecutando (el *contexto*), que puede usar para impulsar su lógica del lado servidor.

Este tutorial le guía por todo lo que está disponible en el contexto y cómo usarlo en sus controladores de CloudScript.

## Aspectos básicos de CloudScript

La clave para sacar el máximo partido a CloudScript es saber cómo trabajar con las entradas que tiene disponibles, es decir, los args y el contexto de su controlador.

Por ejemplo, este es el ejemplo `helloWorld` del CloudScript inicial, cargado como revisión 1 en todos los títulos recién creados (también disponible en nuestro GitHub, [que se muestra a continuación](https://github.com/PlayFab/CloudScriptSamples/tree/master/BasicSample)).

```javascript theme={null}
// This is a CloudScript function.
// "args" is set to the value of the "FunctionParameter" parameter of the ExecuteCloudScript API.
// "context" contains additional information when the CloudScript function is called from a PlayStream action.
handlers.helloWorld = function (args, context) {

    // The pre-defined "currentPlayerId" variable is initialized to the PlayFab ID of the player logged-in on the game client.
    // CloudScript handles authenticating the player automatically.
    var message = "Hello " + currentPlayerId + "!";

    // You can use the "log" object to write out debugging statements. It has
    // three functions corresponding to logging level: debug, info, and error. These functions
    // take a message string and an optional object.
    log.info(message);
    var inputValue = null;
    if (args != null && args != undefined)
    {
        inputValue = args.inputValue;
    }
    log.debug("helloWorld:", { input: inputValue });

    // The value you return from a CloudScript function is passed back
    // to the game client in the ExecuteCloudScript API response, along with any log statements
    // and additional diagnostic information, such as any errors returned by API calls or external HTTP
    // requests. They are also included in the optional player_executed_cloudscript PlayStream event
    // generated by the function execution.
    return { messageValue: message };
}
```

Este ejemplo demuestra el caso de uso común de llamar a CloudScript desde un cliente, mediante [ExecuteCloudScript](xref:titleid.playfabapi.com.client.server-sidecloudscript.executecloudscript). Comprueba si hay un argumento pasado con la clave `inputValue` y usa el valor de esa clave como parte del texto devuelto en la información del registro de depuración de la ejecución.

## El parámetro de entrada context

Sin embargo, también es posible llamar a un CloudScript como resultado de un evento en PlayStream, mediante una regla (**Automation**->**Rules**), una acción de entrada/salida de segmento (**Players**->**Segments**) o el servicio de tareas (**Automation**->**Tasks**).

Cuando lo hace, el contexto pasado a la función proporciona toda la información que necesitará para realizar la acción adecuada.

Para leer sobre los aspectos básicos del funcionamiento de los eventos de PlayStream, consulte nuestro blog [Introducing PlayStream](https://blog.playfab.com/blog/introducing-playstream/) y, para obtener una lista de los tipos de eventos de PlayStream y sus propiedades, consulte nuestra [referencia de API de PlayFab](/services/playfab/api-references).

Para ver esta acción, eche un vistazo al controlador `handlePlayStreamEventAndProfile` del mismo CloudScript de ejemplo.

```javascript theme={null}
// This is a simple example of a function that is called from a
handlers.handlePlayStreamEventAndProfile = function (args, context) {

    // The event that triggered the action.
    // For a list of event types, see our PlayFab API documentation.
    var psEvent = context.playStreamEvent;

    // The profile data of the player associated with the event
    var profile = context.playerProfile;

    // Post data about the event to an external API
    var content = JSON.stringify({user: profile.PlayerId, event: psEvent.EventName});
    var response = http.request('https://httpbin.org/status/200', 'post', content, 'application/json', null, true);

    return { externalAPIResponse: response };
}
```

En el caso de una llamada de CloudScript desencadenada por PlayStream, el contexto contiene 3 elementos que se pueden usar para impulsar la lógica de su controlador con autoridad del servidor.

1. Está el `playStreamEvent`, que puede ver en el código de ejemplo anterior. El `playStreamEvent` contiene el evento completo que desencadenó el controlador como un objeto JSON, con todos los parámetros que ve en la [documentación de eventos de PlayStream](/services/playfab/api-references/events). Así, por ejemplo, si configura una regla en su título que llame a `handlePlayStreamEventAndProfile` en cualquier evento `player_logged_in`, `playStreamEvent.EventName` sería `player_logged_in`, etc. ([aquí está el conjunto completo de parámetros para ese evento](/services/playfab/api-references/events/PlayerIdentity/player-logged-in)).

2. A continuación, está el `playerProfile`, que también se muestra en el ejemplo anterior. Contiene información sobre el jugador que desencadenó el evento. Puede encontrar todos los detalles de los parámetros del perfil aquí, pero, entre otras cosas, contiene el conjunto completo de estadísticas del jugador en su título y las etiquetas personalizadas que haya asignado al jugador, para que pueda usar esos datos para una toma de decisiones enriquecida.

3. El último elemento del contexto es `triggeredByTask`. A diferencia de los dos primeros, que se establecen al usar reglas y desencadenadores de entrada/salida de segmento, `triggeredByTask` solo es aplicable cuando el controlador se ejecuta como resultado de una tarea, ya sea manual o con temporizador. Contiene solo dos parámetros:

* **Name**: el nombre único que le dio a su tarea cuando la creó.

* **ID**: el identificador único generado automáticamente por PlayFab para su tarea.

Para una tarea ejecutada en un segmento de usuarios, también tendrá el `playerProfile`, pero no tendrá un `playStreamEvent`.

Y para una tarea que simplemente se ejecuta en su juego pero *sin* ningún segmento, no habrá un `playerProfile`, ya que la intención es ejecutar algo más general, como establecer algunos datos del título para un evento.

Por lo tanto, el *nombre* es el elemento que le conviene usar en el flujo de código de su controlador para determinar la acción adecuada que se debe realizar.

## PlayStream más CloudScript

En muchos sentidos, los controladores de CloudScript desencadenados por acciones de PlayStream tienen incluso más funcionalidad potencial que los desencadenados directamente mediante llamadas a `ExecuteCloudScript`, ya que hay un conjunto enriquecido de datos disponible a través del contexto.

Esto le brinda la posibilidad de actualizar sus controladores después del lanzamiento con *más* lógica que use elementos del evento o del perfil del jugador que no había previsto originalmente, *sin* necesidad de actualizar el código del cliente de ninguna manera.

Además, seguiremos realizando incorporaciones al perfil del jugador en futuras actualizaciones del servicio de PlayFab, lo que proporcionará incluso *más* opciones para la lógica del lado servidor.


## Related topics

- [Tablas de clasificación con PlayStream y telemetría](/es/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry.md)
- [Inicio rápido de acciones y reglas](/es/services/playfab/data-analytics/acting-data/action-rules-quickstart.md)
- [Estadísticas con PlayStream y telemetría](/es/services/playfab/player-progression/statistics/statistics-with-playstream-and-telemetry.md)
- [Configuración de segmentos de jugadores](/es/services/playfab/player-progression/player-data/player-segment-configuration.md)
- [Guía de inicio rápido de CloudScript de PlayFab con Azure Functions](/es/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/quickstart.md)
