

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

# VAST 請求
<a name="monetization-functions-types-vast-request"></a>

## 使用情況
<a name="monetization-functions-types-vast-request-when"></a>

當您的函數需要從影片廣告服務範本 (VAST) 端點擷取廣告`VAST_REQUEST`時，請使用 。MediaTailor 會傳送請求、剖析回應為 VAST 並解析包裝函式重新導向，以及讓已剖析的廣告可供您的輸出表達式使用。常見的使用案例包括從次要廣告伺服器擷取廣告以補充簡短的主要回應，以及擷取房屋廣告或促銷以注入不足的廣告休息時間。

`VAST_REQUEST` `POST_ADS_RESPONSE`和 `PRE_MANIFEST_INSERTION`生命週期掛鉤支援 函數，可自行或做為執行器內的步驟。由 `VAST_REQUEST`函數剖析的廣告會以完整逼真度與這些勾點的輸出整合。如需詳細資訊，請參閱[剖析的廣告如何與勾點輸出整合](#monetization-functions-types-vast-request-store)。

## 組態欄位
<a name="monetization-functions-types-vast-request-fields"></a>

`VAST_REQUEST` 函數具有下列欄位：
+ **執行時間** — 表達式語言。將此設定為 `JSONATA`。
+ **MethodType** — HTTP 方法。支援的值為 `GET`（預設值） 和 `POST`。
+ **Url** — 傳送請求的 VAST 端點。您可以使用靜態 URL 或動態建置 URL 的 JSONata 表達式。靜態 URL 必須使用 `https`機制。
+ **標頭** — 要包含在請求中的 HTTP 標頭，指定為標頭名稱和值對。使用動態標頭值的`{%...%}`表達式語法。
+ **內文** — 要傳送的請求內文。與`POST`請求搭配使用，例如傳送 OpenRTB 競價請求。您可以使用 JSONata 表達式動態建置內文。
+ **RequestTimeoutMilliseconds** （必要） — 等待回應的時間長度。
+ **輸出** — 定義呼叫完成後要產生的值。每個項目都會將輸出索引鍵映射至可以參考`response`物件的表達式，包括 `response.parsedAds`。

適用於 `HTTP_REQUEST`函數的 HTTP 請求限制也適用於此處。如需詳細資訊，請參閱[限制](monetization-functions-limits.md)。

## 如何處理請求
<a name="monetization-functions-types-vast-request-phases"></a>

1. **建置請求** — MediaTailor 會根據目前的工作階段狀態評估 `Url`、 `Headers`和 `Body`表達式，然後傳送請求。 `POST` 請求會與`application/json`內容類型一起傳送。

1. **剖析回應** — MediaTailor 會將回應內文剖析為 VAST。如果廣告是 VAST 包裝函式，MediaTailor 會遵循重新導向鏈結，並將其解析為最終內嵌廣告。根據 VAST 規格的要求`GET`，包裝函式重新導向請求一律會與 一起傳送。如果您的端點傳回包含 VAST URL 的文件，而不是 VAST 本身 （如同一些競價者），請鏈結擷取 URL `HTTP_REQUEST` 的步驟，接著是擷取 URL `VAST_REQUEST`的步驟。

1. **處理剖析的廣告** — MediaTailor 會評估輸出區塊中的表達式。這些表達式可以參考原始工作階段狀態和 `response` 物件。

## 回應欄位
<a name="monetization-functions-types-vast-request-response"></a>

呼叫完成後，您可以在輸出表達式中參考下列欄位：


| 欄位 | Type | 說明 | 
| --- | --- | --- | 
| response.parsedAds | 陣列 | 剖析的廣告，包裝函式重新導向已解析。每個廣告的形狀與POST\_ADS\_RESPONSE勾點中的adsResponse.ads項目相同：adId、durationSeconds、adSystem、adTitle、creativeId、sequence、 mediaFiles和 trackingEvents。當呼叫失敗或回應不是有效的 VAST 時，將 設定為空陣列。 | 
| response.statusCode | Integer | 端點傳回的 HTTP 狀態碼。在網路故障null時將 設定為 。 | 

由於剖析的廣告使用與 相同的形狀`adsResponse.ads`，因此您可以在兩個表面之間移動運算式，而無需重寫欄位參考。

## 剖析的廣告如何與勾點輸出整合
<a name="monetization-functions-types-vast-request-store"></a>

在勾點調用期間，MediaTailor 會在內部保留`VAST_REQUEST`每個函式剖析的廣告，並以廣告的 VAST 廣告 ID 為索引。這可在勾點輸出中提供剖析廣告的一級處理方式：
+ 在 `POST_ADS_RESPONSE`，`adsResponse.ads`透過 將剖析的廣告附加到 會`adId`還原廣告的完整剖析 VAST 資料，包括完整的媒體檔案清單和追蹤事件。
+ 在 中`PRE_MANIFEST_INSERTION`，使用只`vastAdId`允許 MediaTailor 選取最佳媒體檔案並自動處理轉碼註冊的廣告。

**重要**  
保留的廣告不會在勾點調用之間轉移。在 發出的`VAST_REQUEST`呼叫`POST_ADS_RESPONSE`不適用於稍後的`PRE_MANIFEST_INSERTION`調用。在您使用其結果的相同勾點函數鏈`VAST_REQUEST`中呼叫 。

## 失敗行為
<a name="monetization-functions-types-vast-request-failure"></a>

如果呼叫因為網路錯誤或逾時而失敗，如果端點傳回 HTTP 錯誤，或如果無法剖析為 VAST，則 `response.parsedAds`是空陣列，且函數鏈會繼續。檢查 `response.statusCode` 以區分 HTTP 失敗與真正不包含廣告的 VAST 回應。

**提示**  
保持`RequestTimeoutMilliseconds`緊密。VAST 包裝函式解析度可以涉及多個網路往返，所有往返都會計入掛鉤的逾時和共用掛鉤預算。

## 範例：從次要廣告伺服器擷取廣告
<a name="monetization-functions-types-vast-request-example"></a>

下列函數會從備份廣告伺服器擷取廣告，並將剖析的廣告存放在暫存資料中。稍後在相同序列中的`CUSTOM_OUTPUT`步驟可以將它們附加到 `adsResponse.ads`。它專為`POST_ADS_RESPONSE`生命週期掛鉤而設計。

```
{
    "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%}"
        }
    }
}
```

若要改為傳送 OpenRTB 競價請求，`MethodType`請將 設定為 ，`POST`並在 中提供競價請求`Body`。競價商必須在回應內文中傳回 VAST。

如需類似範例的完整演練，請參閱 [函數範例](monetization-functions-examples.md)。