3

image

今时今日,「流量」意味着一切……只要你能引来足够大的流量,无论是产品推广或是直播带货,这种事情做起来简直就是小菜一碟。然而对于企业营销人员来说,最惨的事情莫过于辛辛苦苦规划并举办的营销活动,到最后无人问津,所有努力都打了水漂……

毕竟如今的营销服务商掌握多种客户交流渠道,而此时的重点在于:如何在正确的时间,以正确的渠道,向正确的客户,发出正确的信息!

在数字化技术的帮助下,这个问题其实很好解决。本文将介绍如何将Braze(一套以亚马逊云科技 (Amazon Web Services)为基础,面向即时需求且强调持续联系的客户参与平台)与Amazon Personalize结合,尝试解决营销活动参与度难题,进而为客户提供充满惊喜的使用体验。

Braze能够帮助营销人员轻松将客户组织为受众,并根据其行为及个人资料特征进行实时更新,进而创建消息交付宣传,通过电子邮件、短信及推送通知等渠道定位目标受众。我们也可以使用Braze Canvas设计出多步骤、多渠道参与流程。Campaign与Canvas可根据计划,甚至是客户的实际操作手动触发。当然,向客户发送个性化消息的实际效果,直接取决于客户个人资料中透露出的倾向性内容。大家需要根据每位客户在Web与移动端应用互动时表现出的偏好,据此组织产品与内容推荐,从而真正在每一条宣传消息中引入个性化元素。

Amazon Personalize 是一项亚马逊云科技服务,使用机器学习算法根据客户的行为数据创建推荐系统。这款推荐器为亚马逊云科技账户专有,且仅根据所提供的数据进行内容生成。配合Braze Connected Content功能,我们可以将Braze接入用于在Web及移动端应用中提供推荐消息的同一套Amazon Personalize推荐器,借此通过Braze发送的消息准确反映受众的当前偏好与意图。

解决方案概述

在本文中,我们将介绍两套架构:其一使用Braze加Amazon Personalize进行实时推荐,其二则是牺牲一部分实时建议新鲜度以换取为更具成本效益的批处理方法。我们对于方法的具体选择,应该与受众宣传策略的目标以及消息传递的规模需求相适应。幸运的是,Braze与Amazon Personalize提供了丰富的功能与集成选项,能够满足我们对于运营灵活性的各种实际需求。

实时集成

首先从实时集成架构开始。下图所示,为电子商务应用程序中的各相关组件,大家将在其中使用Amazon Personalize提供的机器学习(ML)支持型推荐器,即本文中的解决方案。在构建这套解决方案时,主要涉及的数据为用户与各商品条目的交互历史。在电子商务应用程序中,还应包含具体事件,例如客户查看商品、将商品添加至购物车以及实际购买商品的行为。在拥有丰富的事件、条目与用户元数据可供使用时,大家即可对这些元数据加以合并,从而进一步提高推荐系统与推荐内容的相关性水平。

元数据的具体内容可以涵盖多个层面,包括客户使用的设备类型、所在位置以及事件发生的时间(购物季)等;商品的类别、类型与价格区间;以及用户的年龄、性别与订阅倾向。在创建解决方案之后,只需单击几下,即可创建出被称为campaigns的自动扩展API端点,借此检索个性化推荐内容。

后文还将介绍如何在亚马逊云科技账户中部署这款应用程序。此应用程序还附带自助式研讨课程,我们可以借此了解如何使用Braze向客户发送个性化宣传邮件。

image

我们的示例电子商务应用程序将从Recommendations微服务中检索个性化建议,由此建议将Amazon Personalize提供的推荐商品ID附加至Products微服务当中以丰富产品信息。当用户与应用程序交互,并通过查看商品、将商品添加至购物车乃至购买商品以表达自己的兴趣时,与这些操作相关的事件将通过Amazon Amplify JavaScript客户端库被流式传输至Amazon Personalize,再由后者自动根据用户的实时活动做出推荐调整。

通过在应用程序当中内置个性化设置,我们可以将Amazon Personalize与Braze对接起来,通过电子邮件、短信以及推送通知等出向推广渠道为客户提供个性化推荐结果。

大家还可以通过Braze创建消息模板。此类模板通过Liquid模板语言,使用客户个人资料乃至其他外部资源中的值以替换模板中的原始占位符。在实时架构中,我们使用的示例应用程序将Recommendations微服务作为外部资源,并使用Braze Connected Content功能检索个性化推荐,而后将适用的推荐内容包含在消息模板当中。在以下Connected Content Liquid标签(位于电子邮件开头部分)中,我们可以看到如何从Braze处调用Recommendations服务以为当前用户检索推荐信息。

{% connected_content http://<RecommendationsServiceHostName>/recommendations?userID={{${user_id}}}&fullyQualifyImageUrls=1&numResults=4 :save result %}

标签当中包含以下元素:

  • Liquid标签位于{%与%}当中,我们可以借此向消息模板中添加标签、表达式,甚至是文本或HTML。
  • 标签类型将在标签开始之后立即声明。在本用例中,标签类型为connected_content。关于所支持标签的完整列表,请参阅使用Liquid标签实现个性化设置
  • 接下来,我们需要为各用户定义一条由Connected Content进行调用的、指向对应HTTP资源的标准URL。请将其中的<RecommendationsServiceHostName>部分替换为Elastic Load Balancer的主机名称,用于在示例应用程序部署当中实现Recommendations服务。
  • Recommendations服务将为不同的个性化功能提供相应资源。我们可以通过/recommendations路径访问用户推荐资源。
  • 接下来是查询字符串参数。用户通过userID参数进行身份验证,而{{${user_id}}}表达式则用于指示Braze在每次服务调用中插入用户ID。
  • 最后两项查询字符串参数为fullyQualifyImageUrls=1与numResults=4,用于告知Recommendations服务必须保证商品图像URL正确可用,从而顺利显示在用户的电子邮件客户端当中。另外在本示例中,应仅返回前四条推荐商品。
  • :save result表达式用于告知Braze将来自Recommendations服务的JSON响应分配至名为result的模板变量。在响应保存完成后,我们可以使用模板中其余部分的Liquid标签访问该响应中的各项元素。

以下代码所示,为来自Recommendations服务的响应格式:

[
 {
 "product": {
 "id": "2",
 "url": "http://recs.cloudfront.net/#/product/2",
 "sk": "",
 "name": "Striped Shirt",
 "category": "apparel",
 "style": "shirt",
 "description": "A classic look for the summer season.",
 "price": 9.99,
 "image": "http://recs.cloudfront.net/images/apparel/1.jpg",
 "featured": "true"
 }
 },
 {
 "product": {
 "id": "1",
 "url": "http://recs.cloudfront.net/#/product/1",
 "sk": "",
 "name": "Black Leather Backpack",
 "category": "accessories",
 "style": "bag",
 "description": "Our handmade leather backpack will look great at the office or out on the town.",
 "price": 109.99,
 "image": "http://recs.cloudfront.net/images/accessories/1.jpg",
 "featured": "true"
 }
 },
 ...
]

为了简便起见,以上代码仅显示前两款推荐商品。我们可以在Braze消息模板中使用多条商品属性以代表各项建议。要访问其中的数组或列表中的特定元素,则可在Liquid标签中使用数组下标符号。例如,以下标签会在响应当中插入第一款推荐商品的产品名称。对应之前的示例响应,标签解析后对应“Striped Shirt”:

{{result[0].product.name}}

在将来自Recommendations服务的个性化推荐响应信息与Liquid标签相结合之后,我们即可根据需求设计出无数种消息构建方式。以下代码所示,为在HTML电子邮件模板当中显示推荐商品。

<table>
 <tr>
 <td>
 <a href="{{result[0].product.url}}" target="_blank">
 <img src="{{result[0].product.image}}" width="200" alt="{{result[0].product.name}}" />
 </a>
 </td>
 <td>
 <h2>{{result[0].product.name}}</h2>
 <p>{{result[0].product.description}}</p>
 <p>Only <strong>$ {{result[0].product.price}}</strong>!</p>
 <a class="button" href="{{result[0].product.url}}">Buy Now</a>
 </td>
 </tr>
</table>

批量集成

批量集成架构使用Amazon Personalize批量推荐作业代替Braze Connected Content功能,专门负责将属性更新推送至Braze。批量推荐需要在Amazon Simple Storage Service (Amazon S3)存储桶内创建文件,其中包含作为推荐对象的用户。接下来,引用此文件以将作业提交至Amazon Personalize,由后者为文件内的各用户生成推荐,并将结果输出至选定的另一个Amazon S3文件处。我们可以使用批量推荐作业的输出结果,将个性化推荐与Braze中的用户个人资料共同关联为自定义属性。如此一来,我们在前一种架构的消息模板中看到的Liquid标签,将在这种架构内调整为通过用户个人资料(而非Connected Content响应)访问作为自定义属性的推荐结果。

如前所述,大家在使用批处理方法时需要做出权衡,即通过牺牲实时推荐的新鲜度,以换取更具成本效益的解决方案。由于批量推荐不需要Amazon Personalize中的campaign作为支持,也就消除了各用户由Connected Content发往campaign的额外请求。对于体量庞大且包含众多细分受众类型的Braze campaign,这种方式能够大大减少请求总量。此外,如果不需要针对其他用途使用Amazon Personalize campaigns,或者打算创建专门用于邮件个性化的Amazon Personalize解决方案,也可以完全不创建任何campaign。

下图所示,为设计这套批处理架构的一种可行方法。我们仍然可以在这里使用实时架构中的某些Web应用程序组件;但为了简洁起见,我们排除掉了所有与实时架构相重复的组件。

image

我们可以使用Amazon CloudWatch Events定期触发Amazon Lambda函数,由此函数为Amazon Personalize批量推荐作业构建输入文件。批量推荐作业完成之后,将由另一项Lambda函数处理输出文件,使用丰富的商品信息进一步充实推荐条目,并在Amazon Kinesis Data Streams当中建立用户更新事件队列。最后,通过另一项新的Lambda函数使用流事件,并使用Braze User API更新用户个人资料。

使用Kinesis数据流将带来一系列重要助益,包括将批处理作业与事务性Braze用户更新流程解耦开来,同时提供对用户更新事件的暂停、重新启动与重放等功能。

实时集成演练

大家可以通过Retail Demo Store示例电子商务应用体验如何实现实时集成。在本文中,我们将分步引导大家完成在亚马逊云科技账户部署此项目的具体流程,并阐述如何启动应用程序当中绑定的自助式Braze研习课程。

具体操作步骤如下:

  • 使用其中提供的Amazon CloudFormation模板,将Retail Demo Store项目部署至亚马逊云科技的账户(需要25到30分钟)。
  • 构建Amazon Personalize解决方案,以及用于提供个性化推荐的campaigns(需要2小时)。
  • 将用户导入Braze,并使用Connected Content构建一项Braze campaign,借此从Amazon Personalize中检索个性化推荐内容(需要1小时)。
  • 清理资源。

先决条件

在本演练中,大家需要满足以下先决条件:

  • 一个亚马逊云科技的账户
  • 亚马逊云科技的账户中须包含一个用户,且具备部署项目所需要的各项权限
  • 一个Braze账户

如果还没有Braze账户,请联系Braze客户代表。此外,大家还至少需要完成Braze LAB的入门课程

步骤1:将Retail Demo Store部署至亚马逊云科技账户

通过下表,我们应在选定的区域当中选择Launch Stack。这里提供的区域列表并不代表一定能够在其中部署项目,仅代表示例部署中对应的各个区域。

区域启动
美国东部(北弗吉尼亚州)Launch Stack
美国西部(俄勒冈州)Launch Stack
欧洲(爱尔兰)Launch Stack

接受模板中的各项默认参数值,而后启动模板。项目的资源部署大约需要25到30分钟。

步骤2:构建Amazon Personalize campaigns

在提供个性化产品推荐之前,首先需要训练ML模型并在Amazon Personalize中配置推荐内容检索所需要的推理端点。步骤1中部署的CloudFormation模板中包含一个Amazon SageMaker notebook实例,该实例为Jupyter notebook提供了详尽的分步操作说明。Notebook的构建大约需要2个小时才能完成。

  • 登录至在步骤1中用于部署CloudFormation模板的亚马逊云科技账户。
  • 在Amazon SageMaker控制台上,选择Notebook instances
  • 如果还没有看到RetailDemoStore Notebook实例,请保证确实处于项目部署所在的同一区域内。
  • 要访问该Notebook实例,请选择Open Jupyter或者Open JupyterLab。
  • 在为Notebook实例加载Jupyter Web界面后,选择workshop/1-Personalization/1.1-Personalize.ipynb。

各Notebooks将以目录的形式进行结构组织,因此可能需要选择Workshop文件夹才能查看Notebook中的各子目录。

  • 在打开1.1-Personalize Notebook后,阅读并运行各个单元以爱步完成研习流程。

我们也可以从Jupyter工具栏中选择Run,以依次运行各单元中的代码。

image

步骤3:由Braze发出个性化消息

通过使用Amazon Personalize解决方案与campaigns生成个性化推荐。现在,我们可以将各用户导入自己的Braze账户,构建使用Braze Connected Content对Amazon Personalize推荐内容进行检索的消息传递模板,而后构建一项Braze campaign以将目标电子邮件发送给用户。

与步骤1中的个性化研习课程类似,Braze消息传递研习课程也将逐步引导您完成整个流程。此Notebook大约需要1个小时才能运行完成。

  • 如有必要,请重复步骤1中的操作,通过Retail Demo Store部署中的Amazon SageMaker Notebook实例打开Jupyter或者JupyterLab浏览器窗口。
  • 在Notebook实例加载Jupyter Web界面后,选择workshop/4-Messaging/4.2-Braze.ipynb Notebook。
    与之前一样,我们可能需要选择Workshop文件夹以查看Notebook下的各子目录。
  • 打开4.2-Braze Notebook后,通过阅读并运行各个单元以分步完成研习流程。

image

步骤4:资源清理

为避免产生不必要的费用,请删除Retail Demo Store项目中的各类资源,具体方法为删除我们在部署期间使用的CloudFormation模板。关于本文中所使用的源代码以及完整Retail Demo Store项目的更多详细信息,请参阅GitHub repo

总结

时至今日,营销人员正通过各类消息力争吸引到客户的注意力,这也意味着大家必须能够在正确的时间、以正确的渠道将正确的消息传递给明确定位的正确用户。Braze为前三项难题提供解决方案,而大家也可以将Braze Connected Content与Amazon Personalize集成起来以攻克最后一个挑战,真正整理出能够反映每一位客户当前偏好、具有高度个性化的产品与内容建议。

image


亚马逊云开发者
2.9k 声望9.6k 粉丝

亚马逊云开发者社区是面向开发者交流与互动的平台。在这里,你可以分享和获取有关云计算、人工智能、IoT、区块链等相关技术和前沿知识,也可以与同行或爱好者们交流探讨,共同成长。