

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

# 示例 1：数据扩充
<a name="monetization-functions-examples-enrichment"></a>

## 场景
<a name="monetization-functions-examples-enrichment-scenario"></a>

流媒体服务希望在会话开始时从外部服务（在本例中为 LiveRamp）获取受众身份数据，并将其存储在玩家参数中，以便在会话后期进行广告定位。身份信封是由身份解析服务提供的加密标识符，允许广告系统在不泄露个人信息的情况下跨设备和平台识别观众。

## 配置
<a name="monetization-functions-examples-enrichment-config"></a>

**获取 LiveRamp 信封 (HTTP\_REQUEST)：**

```
{
    "FunctionId": "fetchLiveRamp",
    "FunctionType": "HTTP_REQUEST",
    "HttpRequestConfiguration": {
        "Runtime": "JSONATA",
        "MethodType": "GET",
        "Url": "{%'https://api.example-identity.com/v2/envelope?pid=12345&iv=' & player_params.hashedId%}",
        "Headers": {
            "Authorization": "{%'Bearer ramp-token-789'%}"
        },
        "RequestTimeoutMilliseconds": 2000,
        "Output": {
            "player_params.envelope_id": "{%response.body.envelopes[0].value%}"
        }
    }
}
```

**注意**  
`Bearer ramp-token-789`替换为你自己的 API 凭证。不要将敏感令牌直接存储在生产环境中的函数配置中。考虑使用代币轮换策略。

`RequestTimeoutMilliseconds`根据外部服务的预期响应时间进行设置。较低的值可以减少延迟，但会增加出现超时错误的机会。

## 函数映射
<a name="monetization-functions-examples-enrichment-mapping"></a>

```
{
    "FunctionMapping": {
        "PRE_SESSION_INITIALIZATION": "fetchLiveRamp"
    }
}
```

## 函数运行时会发生什么
<a name="monetization-functions-examples-enrichment-runtime"></a>

1. 观看者开始播放会话。

1. MediaTailor 运行`PRE_SESSION_INITIALIZATION`生命周期挂钩并运行`fetchLiveRamp`。

1. 该函数使用构建请求网址`player_params.hashedId`并调用 LiveRamp API。在网址中，`pid`是合作伙伴 ID，是经过哈希`iv`处理的查看者标识符。

1. 输出表达式从响应数组 (`response.body.envelopes[0].value`) 的第一个信封中提取值并将其写入`player_params.envelope_id`。

**提示**  
要明确处理错误，请在访问响应数据`response.statusCode`之前进行检查：`{%response.statusCode = 200 ? response.body.envelopes[0].value : ''%}`

有关更多信息，请参阅[HTTP\_REQUEST](monetization-functions-types-http-request.md)、[会话前初始化](monetization-functions-hooks-pre-session.md)、[故障排除和监控](monetization-functions-troubleshooting.md)和[限制](monetization-functions-limits.md)。