

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

# 範例 4：次要廣告伺服器備用
<a name="monetization-functions-examples-backup-ads"></a>

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

您的主要 ADS 有時會傳回比廣告休息時間可以保留的廣告更少的廣告。發生這種情況時，您想要從次要廣告伺服器擷取額外的廣告，並將其附加到廣告清單，讓額外的廣告可以填滿剩餘的時間。

此範例使用 `POST_ADS_RESPONSE` lifecycle hook。`VAST_REQUEST` 函數會擷取次要廣告，並`SEQUENTIAL_EXECUTOR`協調程序。執行器的輸出區塊會將擷取的廣告附加到廣告清單，並在主要回應已有足夠廣告時完全`RunCondition`略過次要擷取。

## 函數組態
<a name="monetization-functions-examples-backup-ads-config"></a>

**擷取函數 (`fetchBackupAds`)：**

```
{
    "FunctionId": "fetchBackupAds",
    "FunctionType": "VAST_REQUEST",
    "VastRequestConfiguration": {
        "Runtime": "JSONATA",
        "MethodType": "GET",
        "Url": "{%'https://backup-ads.example.com/vast?sid=' & session.uuid%}",
        "Headers": {
            "Accept": "application/xml"
        },
        "RequestTimeoutMilliseconds": 1000,
        "Output": {
            "temp.backupAds": "{%response.parsedAds%}"
        }
    }
}
```

**序列 (`backupAdsFallback`)：**

```
{
    "FunctionId": "backupAdsFallback",
    "FunctionType": "SEQUENTIAL_EXECUTOR",
    "SequentialExecutorConfiguration": {
        "Runtime": "JSONATA",
        "TimeoutMilliseconds": 2000,
        "FunctionList": [
            { "FunctionId": "fetchBackupAds", "RunCondition": "{%$count(adsResponse.ads) < 3%}" }
        ],
        "Output": {
            "adsResponse.ads": "{%$count(adsResponse.ads) < 3 ? $append(adsResponse.ads, temp.backupAds)[] : adsResponse.ads[]%}"
        }
    }
}
```

## 函數映射
<a name="monetization-functions-examples-backup-ads-mapping"></a>

```
{
    "FunctionMapping": {
        "POST_ADS_RESPONSE": "backupAdsFallback"
    }
}
```

## 執行時間會發生什麼情況
<a name="monetization-functions-examples-backup-ads-runtime"></a>

1. MediaTailor 會接收並剖析主要 ADS 回應，然後觸發`POST_ADS_RESPONSE`生命週期掛鉤。

1. 如果主要回應包含少於 3 個廣告， 會`RunCondition`評估 `true`並`fetchBackupAds`呼叫次要廣告伺服器。MediaTailor 接著會將回應剖析為 VAST、解析包裝函式重新導向，並將剖析的廣告寫入 `temp.backupAds`。

1. 如果主要回應已有 3 個或更多廣告，則會略過擷取`temp.backupAds`且未設定。

1. 序列的輸出區塊會將合併廣告清單寫入 `adsResponse.ads`。略過擷取時，條件會採用`else`分支，並傳回原始廣告不變。由於次要廣告是由相同勾點叫用中的`VAST_REQUEST`函數剖析，MediaTailor 會在選取廣告之前還原每個附加廣告的完整 VAST 資料。

1. 廣告選擇會繼續進行合併清單。如果次要擷取失敗， `temp.backupAds` 是空陣列，且原始廣告清單保持不變。

**注意**  
輸出表達式`[]`中的結尾是必要項目。如果沒有陣列強制，則產生零或一個廣告的表達式不會產生陣列，且輸出會被捨棄或誤用。如需詳細資訊，請參閱[廣告後回應](monetization-functions-hooks-post-ads.md)。

如需此範例中使用之欄位的詳細資訊，請參閱 [VAST 請求](monetization-functions-types-vast-request.md)和 [廣告後回應](monetization-functions-hooks-post-ads.md)。