View a markdown version of this page

CUSTOM_OUTPUT - AWS Elemental MediaTailor

CUSTOM_OUTPUT

When to use

Use CUSTOM_OUTPUT when your function logic is purely computational. Common use cases include classifying devices based on user agent strings, selecting ad decision server URLs with A/B testing logic, and reformatting player parameters before they reach the ad decision server.

CUSTOM_OUTPUT functions are the fastest type because they evaluate expressions in memory with no network calls. Choose this type whenever you can accomplish your goal without contacting an external service.

Configuration fields

A CUSTOM_OUTPUT function has two fields:

  • Runtime — The expression language. Set this to JSONATA.

  • Output — A map of key-value pairs. Each key is an output binding name (such as player_params.device_type), and each value is an expression that MediaTailor evaluates at runtime.

Note

Use {%...%} to wrap JSONata expressions in string fields. Values without these delimiters are treated as static strings. For example, "{%session.id%}" evaluates the expression, while "session.id" is the literal text.

Runtime behavior

When MediaTailor executes a CUSTOM_OUTPUT function, it evaluates every expression in the output block against the current session state. All expressions see the same input snapshot. The evaluated results become the function's outputs.

If any expression fails to evaluate, MediaTailor discards the entire function's output and proceeds as if no function were attached. The function does not partially commit results.

Example: A/B traffic split

The following function randomly assigns each ad break to one of two ad decision server URLs. It is designed for the PRE_ADS_REQUEST lifecycle hook.

{ "FunctionId": "abTestAdsUrl", "FunctionType": "CUSTOM_OUTPUT", "CustomOutputConfiguration": { "Runtime": "JSONATA", "Output": { "adsRequest.url": "{%$random() < 0.5 ? 'https://ads.example.com/v1' : 'https://ads.example.com/v2'%}" } } }

For a complete walkthrough of this example, see Function examples.