

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

# 廣告後回應
<a name="monetization-functions-hooks-post-ads"></a>

## 當它觸發時
<a name="monetization-functions-hooks-post-ads-when"></a>

MediaTailor 會在接收並剖析來自 ADS 的回應`POST_ADS_RESPONSE`後執行映射至 的函數，包括 VAST 包裝函式重新導向的解析。函數會在 MediaTailor 選取要插入的廣告之前看到剖析的廣告，因此在此所做的變更會影響哪些廣告填滿廣告休息時間。

所有串流通訊協定 (HLS 和 DASH) 和所有播放模式 （即時、VOD 和預轉） 的掛鉤都會觸發。每個廣告休息時間通常會觸發一次。對於一次涵蓋多個廣告休息時間的 ADS 回應 （例如 VMAP 回應），以及預先擷取的廣告回應，勾點會在 MediaTailor 處理回應時觸發，而`avail`輸入命名空間不存在。使用 在存取時段欄位之前`$exists(avail)`進行檢查。

## Input
<a name="monetization-functions-hooks-post-ads-input"></a>

`event.*`、`adsRequest.*`、 `session.*`和 `adsResponse.*`，加上當回應套用至單一廣告休息時間`avail.*`時。如需所有可用的欄位，請參閱 [輸入欄位參考](monetization-functions-hooks.md#monetization-functions-hooks-input-ref)。

## 允許輸出命名空間
<a name="monetization-functions-hooks-post-ads-output"></a>


| 命名空間 | 接受的類型 | 如何使用輸出 | 
| --- | --- | --- | 
| adsResponse.ads | 廣告物件陣列 | 取代此回應的剖析廣告清單。MediaTailor 會將每個傳回的廣告與原始廣告進行比對，adId並使用傳回的清單繼續進行廣告選擇。 | 
| temp.\* | 任何 | 用於在執行器中的步驟之間傳遞值的暫時資料。未保留。 | 

將修改後的廣告清單寫回 `adsResponse.ads`。您可以：
+ **Filter** - 傳回原始廣告的子集。您省略的廣告不會考慮插入，而且它們佔用的持續時間可供其他廣告填滿。
+ **重新排序** — 以不同的順序傳回廣告。順序會影響哪些廣告會先填滿廣告休息時間。
+ **修改** — 在廣告`trackingEvents`上變更 `durationSeconds`、`mediaFiles`、、 `adSystem` `adTitle`或 。傳回的廣告保持不變，保留其所有原始 VAST 中繼資料。
+ **注入** — 新增不在原始回應中的廣告。新的項目必須包含 `adId`、 `durationSeconds`和 `mediaFiles`。使用相同勾點叫用中的`VAST_REQUEST`函數擷取的廣告是例外狀況：透過其附加這類廣告`adId`就夠了，因為 MediaTailor 會還原廣告的完整剖析 VAST 資料。如需詳細資訊，請參閱[VAST 請求](monetization-functions-types-vast-request.md)。

**重要**  
篩選時，一律使用 JSONata 陣列建構函數或陣列強制。當只有一個廣告相符時， 等篩選條件表達式`adsResponse.ads[adSystem != 'BLOCKED']`會產生單一物件。當零廣告相符時，它完全不會產生任何值。在這種情況下，會省略輸出金鑰，而且篩選條件沒有效果。以括號或附加 括住表達式`[]`：  

```
{
    "Output": {
        "adsResponse.ads": "{%adsResponse.ads[adSystem != 'BLOCKED'][]%}"
    }
}
```

下列規則適用於傳回的廣告清單：
+ 如果兩個項目共用 `adId`，則第一次出現會獲勝。
+ 無效項目會個別拒絕。相同輸出中的有效項目仍然適用。
+ 如果插入項目的 `adId` 與來自 ADS 回應的廣告碰撞，則會使用原始廣告做為基礎，並在其上套用您的欄位變更。

## 此勾點看不到的內容
<a name="monetization-functions-hooks-post-ads-scope"></a>

此勾點會在廣告選擇之前執行，因此不會看到其他 MediaTailor 功能稍後貢獻的廣告，也無法判斷最終插入哪些廣告，因為轉碼狀態和填入決策會在之後發生。對於預先擷取的廣告，當 MediaTailor 處理預先擷取回應本身時，勾點會觸發。在稍後的廣告休息時間，這些先前預先擷取的廣告會在此掛鉤執行後合併，因此掛鉤不會在那裡看到它們。若要對最終廣告集採取行動，請使用 `PRE_MANIFEST_INSERTION`。

## 典型使用案例
<a name="monetization-functions-hooks-post-ads-use-cases"></a>
+ 依中繼資料篩選廣告，例如從競爭廣告系統移除廣告，使其不會出現在相同的廣告休息時間 （競爭區隔）。
+ 當主要回應很短時，從具有 `VAST_REQUEST`函數的次要廣告伺服器擷取額外的廣告，並將其附加到廣告清單。
+ 重新排序廣告，讓偏好的廣告先填滿廣告休息時間。
+ 在插入之前修改追蹤事件或廣告中繼資料。

## 失敗行為
<a name="monetization-functions-hooks-post-ads-failure"></a>

如果連接至 的函數因任何原因`POST_ADS_RESPONSE`失敗，例如逾時、表達式錯誤或無效的輸出，MediaTailor 會捨棄函數的輸出。請求會繼續進行原始 ADS 回應，就像未連接任何 函數一樣。如果序列化輸入超過輸入大小限制，MediaTailor 會完全略過勾點調用。如需適用的限制，請參閱 [限制](monetization-functions-limits.md)。