

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

## 案例
<a name="monetization-functions-examples-ab-scenario"></a>

串流服務想要使用 CUSTOM\_OUTPUT 函數，在 A/B 測試的兩個廣告決策伺服器 (ADS) URLs 之間隨機分割廣告請求流量。一半的廣告請求會移至 v1 端點，一半則會移至 v2 端點。

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

**A/B 流量分割 (CUSTOM\_OUTPUT)：**

```
{
    "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` — `CUSTOM_OUTPUT`評估表達式而不進行 HTTP 呼叫。
+ `Output` — 映射`adsRequest.url`到會隨機選取兩個 ADS URLs 之一的表達式。

## 函數映射
<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 URL 設定為 v1 端點。否則，它會將 URL 設定為 v2 端點。

每個廣告休息時間都會評估 `$random()`函數，因此分割是每個廣告請求，而不是每個工作階段。

**提示**  
若要調整流量分割比率，請變更閾值。例如， `$random() < 0.8`會將 80% 的流量傳送至第一個 URL，並將 20% 傳送至第二個 URL。

**注意**  
寫入 可`adsRequest.url`覆寫目前廣告休息時間播放組態中設定的預設 ADS URL。

如需詳細資訊，請參閱[CUSTOM\_OUTPUT](monetization-functions-types-custom-output.md)、[PRE\_ADS\_REQUEST](monetization-functions-hooks-pre-ads.md)及[JSONata 表達式參考](monetization-functions-jsonata.md)。