本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
函数快速入门指南
本指南将引导您创建第一个函数、将其附加到播放配置以及验证它是否已运行。最后,您将拥有一个工作函数,该函数可以对每个观看者的设备类型(ctvmobile、或desktop)进行分类,并将其存储为每个广告请求中可用的播放器参数。
先决条件
在开始之前,请确保已有 MediaTailor 播放配置。如果没有,请参阅入门 MediaTailor。
步骤 1:创建 函数
在此步骤中,您将创建一个函数,该函数根据用户代理字符串对查看者的设备类型进行分类,并将结果存储在玩家参数中。该函数使用带有jsonata 表达式参考表达式的自定义输出类型(不调用外部 API)来评估用户代理。
-
打开 MediaTailor 控制台,网址为https://console.aws.amazon.com/mediatailor/
。 -
在导航窗格中,选择函数。
-
选择创建函数。
-
在创建向导模式中,选择从头开始创建,然后选择继续。
-
在 “函数类型” 下,选择 “自定义输出” 图块。
-
在函数详细信息下,输入以下内容:
-
函数 ID:
myFirstFunction -
描述:
Classify device type from user agent
-
-
在 “自定义输出配置” 下的 “输出” 部分中,添加一行:
-
键:
player_params.deviceType -
值:
{% $contains(session.user_agent, 'CTV') ? 'ctv' : $contains(session.user_agent, 'Mobile') ? 'mobile' : 'desktop' %}
-
-
选择创建函数。
成功通知确认函数已创建,您将被重定向到函数详细信息页面。
由此产生的函数配置为:
{ "FunctionId": "myFirstFunction", "FunctionType": "CUSTOM_OUTPUT", "Description": "Classify device type from user agent", "CustomOutputConfiguration": { "Runtime": "JSONATA", "Output": { "player_params.deviceType": "{% $contains(session.user_agent, 'CTV') ? 'ctv' : $contains(session.user_agent, 'Mobile') ? 'mobile' : 'desktop' %}" } } }
第 2 步:将该功能附加到播放配置
将该函数映射到播放配置上的生命周期挂钩。映射告诉 MediaTailor 何时运行该函数。
-
在导航窗格中,选择配置。
-
选择要更新的播放配置。
-
选择编辑。
-
展开 “函数配置” 部分。
-
对于会话初始化挂钩,请
myFirstFunction从下拉列表中选择。 -
选择保存。
这会附加myFirstFunction到会话前初始化生命周期挂钩上。生成的函数映射为:
{ "FunctionMapping": { "PRE_SESSION_INITIALIZATION": "myFirstFunction" } }
MediaTailor 在此播放配置下,在每个新会话开始时运行一次该函数。
步骤 3:启动会话并验证函数已运行
启动新的播放会话以触发该功能。向播放配置的会话初始化端点使用会话初始化请求。
MediaTailor 自动发布每次函数执行的 CloudWatch 指标,无需选择加入。启动会话后,检查AWS/MediaTailor命名空间中的以下指标以确认您的函数已运行:
-
PreSessionInitHook.Invocations— 确认钩子已开火。 -
PreSessionInitHook.Errors— 如果函数成功,则应为 0。 -
Function.Invocations— 确认已执行的单个函数。此指标包括FunctionIdFunctionType、和HookType维度,因此您可以进行myFirstFunction具体筛选。
如果该函数失败,则默认情况下会 MediaTailor 向 Manifest Logs 发出错误日志事件(无需配置):
-
PRE_SESSION_INIT_HOOK_ERROR— 使用errorType和时 Hook-level 失败cause。 -
PRE_SESSION_INIT_FUNCTION_ERROR— Function-level 失败,具体functionId和错误细节。
以下示例显示了函数表达式中语法错误PRE_SESSION_INIT_FUNCTION_ERROR的事件:
{ "eventTimestamp": "2024-01-01T12:00:00.076000000Z", "eventType": "PRE_SESSION_INIT_FUNCTION_ERROR", "eventDescription": "Function execution failed", "awsAccountId": "123456789012", "originId": "my-config", "sessionId": "session-123", "requestId": "req-abc", "eventId": "5dc6f040-0f72-4e8c-a64e-25eeef62708c", "functionId": "myFirstFunction", "functionType": "CUSTOM_OUTPUT", "executionTimeMs": 2, "errorType": "SYNTAX_ERROR", "cause": "Expected \")\" before end of expression", "input": {} }
使用该eventId字段将钩子和函数错误事件关联到同一执行中。该errorType字段告诉你失败的类别 — 故障排除和监控 有关错误类型和修复方法的完整列表,请参阅。
注意
如需详细的成功日志记录,请在 Manifest Log 配置中选择加入PRE_SESSION_INIT_HOOK_SUMMARY和PRE_SESSION_INIT_FUNCTION_COMPLETED事件。摘要事件显示每次执行的挂钩结果。已完成的事件显示每个函数的输入、输出和 HTTP request/response 详细信息。默认情况下,它们处于禁用状态,以最大限度地降低日志成本。有关更多信息,请参阅 故障排除和监控。
幕后会发生什么
以下是您刚刚创建的函数的完整请求流程:
-
玩家与发起会话。 MediaTailor
-
MediaTailor 触发
PRE_SESSION_INITIALIZATION生命周期挂钩并运行myFirstFunction。 -
该函数对
session.user_agent字段进行求值并写入ctvmobile、或desktop。player_params.deviceType -
MediaTailor 创建会话并将清单返回给玩家。
-
玩家在播放过程中遇到广告中断。
-
MediaTailor 触发
PRE_ADS_REQUEST生命周期挂钩,然后构造 ADS 请求。由于存储deviceType在玩家参数中,因此可以通过动态变量替换将其包含在 ADS 请求网址中。 -
ADS 使用设备类型来返回定向广告创意。
-
MediaTailor 将广告拼接到清单中,然后将其返回给玩家。
如果函数因任何原因失败,则 MediaTailor 丢弃输出并像未附加任何函数一样继续运行。观看者仍然可以看到广告,只是没有设备类型定位。
建议的主题
现在,播放配置中附带了一个可以正常运行的功能。从这里: