Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Ejecutor secuencial
Cuándo se debe usar
A SEQUENTIAL_EXECUTOR ejecuta una serie de funciones de una en una, en orden. Cada paso puede usar los resultados de los pasos anteriores.
Utilízalo SEQUENTIAL_EXECUTOR cuando tu lógica requiera varios pasos que dependan de los resultados de los demás. Los casos de uso habituales incluyen obtener datos de identidad y, a continuación, usarlos para recuperar segmentos de audiencia, ejecutar un paso de clasificación y, a continuación, llamar de forma condicional a diferentes servicios externos en función del resultado, y crear URL de solicitud de anuncios complejas a partir de varias fuentes de datos.
Campos de configuración
Una SEQUENTIAL_EXECUTOR función tiene los siguientes campos:
-
Tiempo de ejecución: el lenguaje de expresiones. Establézcalo en
JSONATA. -
FunctionList— Una lista ordenada de 1 a 10 pasos. Cada paso especifica
FunctionIdla función que se va a ejecutar. Si lo desea, puede agregar unaRunConditionexpresión para controlar si el paso se ejecuta o se omite. -
Salida: define los valores que se generarán una vez finalizados todos los pasos. Cada entrada asigna una clave de salida (por ejemplo
player_params.envelope) a una expresión que puede hacer referencia a los datos producidos en cualquier paso de la secuencia. Si se omite, se utilizan todos los resultados de las funciones individuales de la secuencia. -
TimeoutMilliseconds(obligatorio): el tiempo máximo para completar toda la secuencia. Si la secuencia supera este tiempo de espera, MediaTailor descarta todos los resultados de la secuencia.
Ejecución ordenada y flujo de datos
MediaTailor ejecuta cada paso de la secuencia desde el primero hasta el último. Una vez completado cada paso, los valores que produce se combinan en un conjunto continuo de resultados. Los pasos posteriores pueden acceder a los datos de la sesión original y a todos los valores producidos en los pasos anteriores.
Los datos temporales son el mecanismo principal para pasar datos entre los pasos. Cuando una función escribe en una temp.* clave, el siguiente paso puede leer ese valor. Los parámetros del reproductor y los campos de solicitud de anuncios escritos en los pasos anteriores también están visibles en los pasos posteriores.
nota
Los datos temporales aceptan cualquier tipo de datos, incluidos objetos y matrices. Los parámetros del reproductor y los campos de solicitud de anuncios solo aceptan cadenas, números, valores booleanos y valores nulos.
Per-step condiciones de ejecución
Cada paso de la secuencia tiene un RunCondition campo opcional. Este campo contiene una expresión que devuelve true ofalse. MediaTailor evalúa la RunCondition expresión inmediatamente antes de ejecutar ese paso.
Si la RunCondition expresión se evalúa comofalse, MediaTailor omite el paso por completo y pasa al siguiente. Si se omite el RunCondition campo, el paso siempre se ejecuta.
{ "FunctionId": "retryFetch", "RunCondition": "{%temp.statusCode = 500%}" }
Este mecanismo permite crear canalizaciones condicionales. Por ejemplo, puedes realizar una búsqueda de identidades en el paso 1 y, a continuación, ejecutar de forma condicional una búsqueda de segmentos en el paso 2 solo si el paso 1 arroja una identidad válida.
Cómo funciona el bloque de salida
El bloque de salida de un SEQUENTIAL_EXECUTOR controla lo que produce la secuencia una vez completados todos los pasos:
-
Bloque de salida presente: MediaTailor evalúa las expresiones del bloque de salida comparándolas con el estado final acumulado y guarda solo esas salidas. Se descartan todas las salidas generadas en pasos anteriores a las que no se haga referencia en el bloque de salida secuencial.
-
Falta el bloque de salida: MediaTailor guarda directamente todas las salidas acumuladas de todos los pasos.
sugerencia
Omita el bloque de salida cuando desee que pase la salida de todas las funciones. Agregue un bloque de salida cuando necesite filtrar, cambiar el nombre o transformar los resultados acumulados antes de guardarlos.
Configuración del tiempo de espera
El TimeoutMilliseconds campo establece una fecha límite para toda la secuencia. Este tiempo de espera cubre todos los pasos, incluidas las llamadas HTTP realizadas por las funciones. Si la secuencia supera el tiempo de espera, MediaTailor descarta todos los resultados de la secuencia y continúa como si no hubiera ninguna función adjunta.
HTTP_REQUESTLas funciones individuales siguen respetando su propia configuración. RequestTimeoutMilliseconds El tiempo de espera de la secuencia actúa como un límite exterior que limita el tiempo total de ejecución.
Ejemplo: Reintentar en caso de error en HTTP
En este ejemplo se llama a una API de identidad y se vuelve a intentar automáticamente si la primera llamada devuelve un error del servidor. Utiliza dos funciones HTTP_REQUEST orquestadas por un SEQUENTIAL_EXECUTOR.
Paso 1 — Primary fetch (): fetchIdentity
{ "FunctionId": "fetchIdentity", "FunctionType": "HTTP_REQUEST", "HttpRequestConfiguration": { "Runtime": "JSONATA", "MethodType": "GET", "Url": "{%'https://identity.example.com/v1/resolve?ip=' & session.client_ip%}", "Headers": { "Accept": "application/json" }, "RequestTimeoutMilliseconds": 1000, "Output": { "temp.statusCode": "{%response.statusCode%}", "temp.envelope": "{%response.statusCode = 200 ? response.body.envelope : null%}" } } }
Paso 2: Reintentar en caso de error ()retryIdentity:
{ "FunctionId": "retryIdentity", "FunctionType": "HTTP_REQUEST", "HttpRequestConfiguration": { "Runtime": "JSONATA", "MethodType": "GET", "Url": "{%'https://identity-fallback.example.com/v1/resolve?ip=' & session.client_ip%}", "Headers": { "Accept": "application/json" }, "RequestTimeoutMilliseconds": 1000, "Output": { "temp.statusCode": "{%response.statusCode%}", "temp.envelope": "{%response.statusCode = 200 ? response.body.envelope : null%}" } } }
Secuencia (identityWithRetry):
{ "FunctionId": "identityWithRetry", "FunctionType": "SEQUENTIAL_EXECUTOR", "SequentialExecutorConfiguration": { "Runtime": "JSONATA", "TimeoutMilliseconds": 2000, "FunctionList": [ { "FunctionId": "fetchIdentity" }, { "FunctionId": "retryIdentity", "RunCondition": "{%temp.statusCode >= 500%}" } ], "Output": { "player_params.envelope": "{%temp.envelope%}" } } }
Cómo funciona:
-
fetchIdentityllama a la API de identidad y escribe el código de estado y el sobre entemp.*. -
Si el código de estado es 500 o superior,
RunConditionel paso 2 se evalúatruey seretryIdentityejecuta. Sobrescribetemp.statusCodeytemp.envelopecon la respuesta de reintento. -
Si la primera llamada se realizó correctamente, se omite el paso 2.
-
La secuencia en la que escribe
temp.envelopeel bloque Output.player_params.envelope