

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 自定义输出
<a name="monetization-functions-types-custom-output"></a>

## 何时使用
<a name="monetization-functions-types-custom-output-when"></a>

`CUSTOM_OUTPUT`当你的函数逻辑纯粹是计算逻辑时使用。常见用例包括根据用户代理字符串对设备进行分类，使用 A/B 测试逻辑选择广告决策服务器网址，以及在玩家参数到达广告决策服务器之前对其进行重新格式化。

`CUSTOM_OUTPUT`函数是最快的类型，因为它们无需网络调用即可计算内存中的表达式。只要您无需联系外部服务即可实现目标，请选择此类型。

## 配置字段
<a name="monetization-functions-types-custom-output-fields"></a>

一个`CUSTOM_OUTPUT`函数有两个字段：
+ **运行时间**-表达式语言。将其设置为`JSONATA`。
+ **输出**-键值对的映射。每个键都是一个输出绑定名称（例如`player_params.device_type`），每个值都是一个在运行时 MediaTailor 计算的表达式。

**注意**  
用于`{%...%}`将 JSonata 表达式封装在字符串字段中。没有这些分隔符的值将被视为静态字符串。例如，`"{%session.id%}"`计算表达式，而 whil `"session.id"` e 是文字文本。

## 运行时行为
<a name="monetization-functions-types-custom-output-behavior"></a>

 MediaTailor 执行`CUSTOM_OUTPUT`函数时，它会根据当前会话状态评估输出块中的每个表达式。所有表达式都看到相同的输入快照。评估结果将成为函数的输出。

如果任何表达式无法求值，则 MediaTailor 丢弃整个函数的输出，并像未附加任何函数一样继续前进。该函数不会部分提交结果。

## 示例： A/B 流量分割
<a name="monetization-functions-types-custom-output-example"></a>

以下函数将每个广告时段随机分配给两个广告决策服务器网址之一。它是为`PRE_ADS_REQUEST`生命周期挂钩设计的。

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

有关此示例的完整演练，请参阅[函数示例](monetization-functions-examples.md)。