

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

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

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

`VAST_REQUEST`当您的函数需要从视频广告投放模板 (VAST) 端点提取广告时使用。 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 的 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 网址而不是 VAST 本身（某些出价方会这样做），请先链接一个检索该网址的`HTTP_REQUEST`步骤，然后链接一个提取该网址的`VAST_REQUEST`步骤。

1. **处理已解析的广告 ** — MediaTailor 评估输出区块中的表达式。这些表达式可以引用原始会话状态和`response`对象。

## 响应字段
<a name="monetization-functions-types-vast-request-response"></a>

调用完成后，您可以在输出表达式中引用以下字段：


| 字段 | Type | 说明 | 
| --- | --- | --- | 
| response.parsedAds | 数组 | 解析后的广告，包装器重定向已解析。每个广告的形状都与POST\_ADS\_RESPONSE挂钩中的adsResponse.ads条目相同：adIddurationSeconds、adSystem、adTitle、creativeId、sequence、mediaFiles、和trackingEvents。当调用失败或响应无效 VAST 时，设置为空数组。 | 
| response.statusCode | 整数 | 端点返回的 HTTP 状态码。null在网络出现故障时设置为。 | 

由于解析后的广告使用与相同的形状`adsResponse.ads`，因此您可以在两个表面之间移动表达式，而无需重写字段引用。

## 解析后的广告如何与挂钩输出整合
<a name="monetization-functions-types-vast-request-store"></a>

在挂钩调用期间，`VAST_REQUEST`函数解析的每个广告都由 MediaTailor内部保留，并由广告的 VAST 广告 ID 键入。这在挂钩输出中为解析后的广告提供了一流的待遇：
+ 在`POST_ADS_RESPONSE`，将已解析的广告附加到 `adsResponse.ads` by 后，将`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)。