

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

# 示例 2： A/B 流量分割
<a name="monetization-functions-examples-ab"></a>

## 场景
<a name="monetization-functions-examples-ab-scenario"></a>

一家流媒体服务希望使用 CUSTOM\_OUTPUT 函数在两个广告决策服务器 (ADS) 网址之间随机分配广告请求流量进行 A/B 测试。一半的广告请求发送到 v1 终端节点，一半发送到 v2 终端节点。

## 配置
<a name="monetization-functions-examples-ab-config"></a>

**A/B 流量分割（自定义输出）：**

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

在此配置中：
+ `FunctionId`— 此函数的唯一名称。
+ `FunctionType`— 在不进行 HTTP 调用的情况下`CUSTOM_OUTPUT`评估表达式。
+ `Output`— 映射`adsRequest.url`到随机选择两个 ADS 网址之一的表达式。

## 函数映射
<a name="monetization-functions-examples-ab-mapping"></a>

```
{
    "FunctionMapping": {
        "PRE_ADS_REQUEST": "abTestAdsUrl"
    }
}
```

## 函数运行时会发生什么
<a name="monetization-functions-examples-ab-runtime"></a>

1. 在播放过程中遇到广告中断。

1. MediaTailor 运行`PRE_ADS_REQUEST`生命周期挂钩并运行`abTestAdsUrl`。

1. 该`$random()`函数返回一个介于 0 和 1 之间的值。如果该值小于 0.5，则该函数将 ADS 网址设置为 v1 端点。否则，它会将 URL 设置为 v2 端点。

该`$random()`函数是在每个广告时段进行评估的，因此拆分是根据广告请求进行的，而不是按会话进行的。

**提示**  
要调整流量分割率，请更改阈值。例如，`$random() < 0.8`将 80% 的流量发送到第一个 URL，将 20% 的流量发送到第二个 URL。

**注意**  
写入`adsRequest.url`会覆盖当前广告时段的播放配置中配置的默认 ADS 网址。

有关更多信息，请参阅 [自定义输出](monetization-functions-types-custom-output.md)、[PRE\_ADS\_REQUEST](monetization-functions-hooks-pre-ads.md) 和 [jsonata 表达式参考](monetization-functions-jsonata.md)。