选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

创建 Lambda 函数,以便 Amazon Pinpoint 为推荐器模型调用该函数

聚焦模式
创建 Lambda 函数,以便 Amazon Pinpoint 为推荐器模型调用该函数 - Amazon Pinpoint

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

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

要了解如何创建 Lambda 函数,请参阅《AWS Lambda 开发人员指南》中的入门。在设计和开发函数时,请牢记以下要求和准则。

输入事件数据

在 Amazon Pinpoint 为推荐器模型调用 Lambda 函数时,它发送一个负载,其中包含发送消息的活动或旅程的配置和其他设置。负载包含一个 Endpoints 对象,该对象是将端点 ID 与消息接收人的端点定义关联的映射。

端点定义使用由 Amazon Pinpoint API 的端点资源定义的结构。不过,它们还包含一个名为 RecommendationItems 的动态建议属性字段。RecommendationItems 字段包含从 Amazon Personalize 活动返回的一个或多个端点建议项目。该字段的值是由 1–5 个建议的项目(作为字符串)组成的有序数组。数组中的项目数取决于您配置 Amazon Pinpoint 以便为每个端点或用户检索的建议项目数。

例如:

"Endpoints": { "endpointIDexample-1":{ "ChannelType":"EMAIL", "Address":"sofiam@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.875Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"SofiaMartínez", "UserAttributes":{ "LastName":[ "Martínez" ], "FirstName":[ "Sofia" ], "Neighborhood":[ "East Bay" ] } }, "RecommendationItems":[ "1815", "2009", "1527" ], "CreationDate":"2020-02-26T18:56:24.875Z" }, "endpointIDexample-2":{ "ChannelType":"EMAIL", "Address":"alejandror@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.897Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"AlejandroRosalez", "UserAttributes":{ "LastName ":[ "Rosalez" ], "FirstName":[ "Alejandro" ], "Neighborhood":[ "West Bay" ] } }, "RecommendationItems":[ "1210", "6542", "4582" ], "CreationDate":"2020-02-26T18:56:24.897Z" } }

在前面的示例中,相关的 Amazon Pinpoint 设置为:

  • 配置推荐器模型,以便为每个端点或用户检索三个建议的项目。(RecommendationsPerMessage 属性的值设置为 3。) 在使用该设置时,Amazon Pinpoint 为每个端点或用户检索并仅添加第一、第二和第三个建议的项目。

  • 配置项目以使用自定义用户属性,这些属性存储每个用户的名字、姓氏以及他们居住的社区。(UserAttributes 对象包含这些属性的值。)

  • 配置项目以使用自定义端点属性 (AddressType),该属性指示端点是否为用户从项目中接收消息的首选地址(渠道)。(Attributes 对象包含该属性的值。)

在 Amazon Pinpoint 调用 Lambda 函数并将该负载作为事件数据发送时,AWS Lambda 将该数据传递给 Lambda 函数以进行处理。

每个负载最多可以包含 50 个端点的数据。如果分段包含超过 50 个端点,则 Amazon Pinpoint 反复调用该函数(每次最多处理 50 个端点),直到该函数处理了所有数据。

响应数据和要求

在设计和开发 Lambda 函数时,请牢记机器学习模型的限额。如果函数不满足这些限额定义的条件,则 Amazon Pinpoint 无法处理和发送消息。

还要牢记以下要求:

  • 函数必须使用输入事件数据提供的相同格式返回更新的端点定义。

  • 每个更新的端点定义可以包含端点或用户的 1–10 个自定义建议属性。这些属性的名称必须与在 Amazon Pinpoint 中配置推荐器模型时指定的属性名称匹配。

  • 必须在单个 Recommendations 对象中为每个端点或用户返回所有自定义建议属性。该要求有助于确保不会发生命名冲突。您可以将 Recommendations 对象添加到端点定义中的任何位置。

  • 每个自定义建议属性的值必须是一个字符串(单个值)或字符串数组(多个值)。如果值是字符串数组,我们建议您保持 Amazon Personalize 返回的建议项目的顺序,如 RecommendationItems 字段中所示。否则,您的内容可能无法反映模型为端点或用户提供的预测。

  • 函数不应修改事件数据中的其他元素,包括端点或用户的其他属性值。它应该只添加和返回自定义推荐属性的值。Amazon Pinpoint 不接受对函数响应中任何其他值的更新。

  • 函数必须托管在与调用函数的 Amazon Pinpoint 项目相同的 AWS 区域中。如果函数和项目不在同一个区域中,则 Amazon Pinpoint 无法将事件数据发送到函数。

如果不满足任何上述要求,则 Amazon Pinpoint 无法处理消息并将其发送到一个或多个端点。这可能会导致活动或旅程活动失败。

最后,我们建议您为函数保留 256 个并发执行。

总体而言,Lambda 函数应处理 Amazon Pinpoint 发送的事件数据,并返回修改的端点定义。它可以遍历 Endpoints 对象中的每个端点,并为每个端点创建和设置要使用的自定义建议属性值以做到这一点。以下示例处理程序(使用 Python 编写并继续前面的输入事件数据示例)说明了这一点:

import json import string def lambda_handler(event, context): print("Received event: " + json.dumps(event)) print("Received context: " + str(context)) segment_endpoints = event["Endpoints"] new_segment = dict() for endpoint_id in segment_endpoints.keys(): endpoint = segment_endpoints[endpoint_id] if supported_endpoint(endpoint): new_segment[endpoint_id] = add_recommendation(endpoint) print("Returning endpoints: " + json.dumps(new_segment)) return new_segment def supported_endpoint(endpoint): return True def add_recommendation(endpoint): endpoint["Recommendations"] = dict() customTitleList = list() customGenreList = list() for i,item in enumerate(endpoint["RecommendationItems"]): item = int(item) if item == 1210: customTitleList.insert(i, "Hanna") customGenreList.insert(i, "Action") elif item == 1527: customTitleList.insert(i, "Catastrophe") customGenreList.insert(i, "Comedy") elif item == 1815: customTitleList.insert(i, "Fleabag") customGenreList.insert(i, "Comedy") elif item == 2009: customTitleList.insert(i, "Late Night") customGenreList.insert(i, "Drama") elif item == 4582: customTitleList.insert(i, "Agatha Christie\'s The ABC Murders") customGenreList.insert(i, "Crime") elif item == 6542: customTitleList.insert(i, "Hunters") customGenreList.insert(i, "Drama") endpoint["Recommendations"]["Title"] = customTitleList endpoint["Recommendations"]["Genre"] = customGenreList return endpoint

在前面的示例中,AWS Lambda 将事件数据作为 event 参数传递给处理程序。处理程序遍历 Endpoints 对象中的每个端点,并设置名为 Recommendations.TitleRecommendations.Genre 的自定义建议属性的值。return 语句将每个更新的端点定义返回到 Amazon Pinpoint。

继续前面的输入事件数据示例,更新的端点定义为:

"Endpoints":{ "endpointIDexample-1":{ "ChannelType":"EMAIL", "Address":"sofiam@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.875Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"SofiaMartínez", "UserAttributes":{ "LastName":[ "Martínez" ], "FirstName":[ "Sofia" ], "Neighborhood":[ "East Bay" ] } }, "RecommendationItems":[ "1815", "2009", "1527" ], "CreationDate":"2020-02-26T18:56:24.875Z", "Recommendations":{ "Title":[ "Fleabag", "Late Night", "Catastrophe" ], "Genre":[ "Comedy", "Comedy", "Comedy" ] } }, "endpointIDexample-2":{ "ChannelType":"EMAIL", "Address":"alejandror@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.897Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"AlejandroRosalez", "UserAttributes":{ "LastName ":[ "Rosalez" ], "FirstName":[ "Alejandro" ], "Neighborhood":[ "West Bay" ] } }, "RecommendationItems":[ "1210", "6542", "4582" ], "CreationDate":"2020-02-26T18:56:24.897Z", "Recommendations":{ "Title":[ "Hanna", "Hunters", "Agatha Christie\'s The ABC Murders" ], "Genre":[ "Action", "Drama", "Crime" ] } } }

在前面的示例中,函数修改了它收到的 Endpoints 对象并返回了结果。现在,每个端点的 Endpoint 对象包含一个新 Recommendations 对象,其中包含 TitleGenre 字段。其中的每个字段存储由三个值(作为字符串)组成的有序数组,其中的每个值为 RecommendationItems 字段中的相应建议项目提供改进的内容。

本页内容

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。