一、设置自定义 Data 360 Playground
准备好动手实践
Data 360 将您所有的数据连接并整合到一处,包括公司网站、移动应用、终端产品等外部数据,以及 Salesforce org 中的内部数据。
但即便这些数据经过了清洗、映射和整合,如果无法对它做任何操作,它依然没有价值。幸运的是,Salesforce 的声明式自动化工具 Flow Builder 可以直接访问您的 Data 360 数据。借助这种能力,您可以创建强大的交互式或触发式自动化,甚至可以根据 Data 360 中数据的变化来触发 Flow。
在开始构建与 Data 360 交互的 Flow 之前,需要完成以下三个设置步骤:
- 注册一个包含 Data 360 的自定义 Playground;
- 从 DataCloudFlows 数据包创建数据流;
- 从数据包创建 Number of Abandoned Carts 计算洞察。
注册包含 Data 360 的自定义 Playground
要完成本模块,您需要一个包含 Data 360 和示例数据的自定义 Playground。
- 点击 Create Playground;
- 新的 org 会自动附加到您的 Trailhead 账户;
- 记下 org 的到期日期,并在此之前完成本徽章。
这个自定义 Playground 专门为本徽章的挑战而设计,可能不适用于其他徽章,请始终确认使用的是推荐的那个 Playground 或特殊 Developer Edition org。
该 Playground 已配置为模拟 Coral Cloud Resorts 的 Salesforce org 及其全新的 Data 360 安装环境。在后续练习中,您将使用模拟客户数据、预订数据和购物行为的 DMO 与 CIO。
从数据包创建数据流
自定义 Playground 已经为您完成了很多配置,但在继续之前还需要完成几个步骤。首先创建数据流及其映射:
- 启动您的 Data 360 Playground;
- 点击 App Launcher,输入
data,然后点击 Data Cloud 应用; - 点击 Data Streams 标签页;
- 点击 New;
- 点击 Salesforce CRM;
- 点击 Next;
- 点击 DataCloudFlows 自定义数据包;
- 点击 Next(默认 Data Space 已预先选中,数据包中的所有字段都已列出);
- 保持当前选择不变,点击 Next;
- 点击 Deploy。
您可能会注意到,开发 org 中所有 Data 360 数据都来自连接同一 org 的 Salesforce CRM 源。由于无法为您配置外部数据源,我们创建了一些模拟外部对象的 Salesforce 对象,并配以数据流和映射,让这些数据结构在 Data 360 中表现为数据模型对象(DMO)。这些练习步骤同样适用于真正的外部数据库数据。
如果点击 Deploy 时报错,数据流很可能其实已经成功创建了——关闭 New Data Stream 窗口并刷新页面,即可看到新的数据流。
创建计算洞察
接下来创建一个计算洞察(calculated insight),用于统计 org 中某个外部对象的记录数量。
- 点击 Calculated Insights 标签页;
- 点击 New;
- 选择 From a Data Kit,点击 Next;
- 选择 Number of Abandoned Carts,点击 Next;
- 点击 Activate;
- Schedule 选择 Not Scheduled,点击 Enable。
在新的 Number of Abandoned Carts 计算洞察页面上,点击向下箭头,然后点击 Publish Now(如果看不到该选项,刷新页面)。
如果点击 Enable 时报错,计算洞察很可能其实已经成功创建了——关闭 Select a Data Kit 窗口和 New Insight 窗口,刷新页面即可看到新的计算洞察。
您的 Data 360 专用 org 现已准备就绪!在开始构建 Flow 之前,先来回顾几个对 Flow 操作至关重要的 Data 360 概念。
Flow 如何与 Data 360 交互
下面介绍 Data 360 的几个重要组成部分、它们的作用,以及它们与 Flow 的交互方式。
概括来说,Flow 可以直接访问数据模型对象(DMO)中的数据,以及计算洞察的结果;而数据湖对象(DLO)中的原始数据则无法被 Flow 直接访问。下面逐一详细说明。
数据湖对象(DLO)
数据湖对象(Data Lake Objects,DLO)是数据流带入 Data 360 的原始数据的存储容器。在这些对象中,数据保持未经修改的原始形式,但可以被 Data 360 的其他部分引用。Flow 无法访问 DLO 中的数据。
为什么 Flow 不能访问 DLO?原始数据尚未经过映射、整合或校验。如果允许 Flow 直接访问原始数据,就会绕过 Data 360 的治理、质量和统一流程——原始数据可能包含重复、不一致或未映射的字段,从而产生不可靠的自动化结果。因此,Flow 应始终使用经过治理的数据,即数据模型经过处理后的产出,而非原始输入。
数据模型对象(DMO)
当 Data 360 对您的 DLO 数据进行映射、整合或转换后,它会通过数据模型对象(Data Model Objects,DMO)将这些数据提供出来。换句话说,DMO 中的数据已经经过了您定义的所有处理流程,使其变得有用。Flow 中可访问的大部分数据都位于 DMO 中。
DMO 可能包含以下内容:
- 来自 Salesforce org 的数据;
- 来自外部数据库的数据;
- 经过转换、过滤或聚合的数据;
- 基于源数据生成的公式字段;
- 从多个来源汇总的统一身份信息。
DMO 是治理后的数据层。当 Flow 读取一个 DMO 时,它获得的是干净、统一且标准化的数据——无论背后有多少个源系统在贡献数据。这也是为什么 DMO 是 Flow 访问数据的首要入口。
计算洞察与计算洞察对象(CIO)
计算洞察(calculated insights)由一个 SQL(结构化查询语言)查询以及该查询返回的复杂指标组成。当您激活一个计算洞察时,Data 360 会创建一个计算洞察对象(Calculated Insight Object,CIO)来存储 SQL 查询返回的值。Data 360 会按计划运行该查询,并在查询结果发生变化时更新 CIO 的记录。
在大多数 Data 360 用途中,CIO 并不显眼,它在幕后工作。但当您用 Flow Builder 访问计算洞察结果时,您会像操作其他任何对象一样与 CIO 交互:
- Get Records 元素可以查询 CIO;
- Data Cloud-Triggered Flow 可以响应 CIO 的变化。
CIO 是连接计算洞察(SQL + 指标)与 Flow Builder(声明式自动化)的桥梁。这也是本模块第三单元中「弃购物车案例自动创建」所依赖的机制。
二、从 Flow 访问 Data 360
创建从数据模型对象检索数据的 Flow
在 Flow Builder 中,您可以在任何 Flow 里使用 Get Records 元素从任意数据模型对象(DMO)检索数据。借助这种能力,您的 Flow 可以访问来自任何外部数据源的数据,例如首选身份或联系人信息、忠诚度计划状态、网页购买、移动应用活动等。
来看一个访问 DMO 数据的示例。作为 Coral Cloud Resorts Salesforce 管理团队的一员,您负责保证 Salesforce org 中的数据准确性。在该 org 中,Contacts 对象保存客户记录,但 Salesforce 之外还有一个外部客户数据库。为了让这两组数据保持一致,Contact 对象的 External ID 字段保存着同一个人在外部的唯一 ID。
目前团队需要手动更新每个联系人上的 External ID 字段——既容易出错又繁琐。因此,我们要在联系人创建时自动设置 External ID。客户的邮箱地址是 Salesforce 联系人与外部客户记录之间最稳定的一致性字段,所以用邮箱地址来对齐记录。同时,检查联系人的电话号码是否为空;如果为空,就从外部客户信息中填充。
幸运的是,邮箱地址、电话号码和唯一外部 ID 都位于 Contact Point 对象中,例如 Contact Point Phone 和 Contact Point Email。这些 Contact Point 对象没有名为 "External ID" 的字段,但 Coral Cloud 已将客户的唯一 ID 映射到 Contact Point 对象的 Party 字段。
此 Flow 从外部客户数据源中检索与新联系人邮箱地址匹配的 Contact Point Email 记录,然后根据联系人电话号码是否为空,执行相应的更新操作。
构建 Flow — 关键配置细节
按照以下步骤构建这个 Record-Triggered Flow:
配置触发器:
- 从 Setup 的 Quick Find 框输入
Flows,点击 Flows; - 点击 New Flow,在 Frequently Used 下选择 Record-Triggered Flow;
- Object 选择 Contact,Trigger 选择 A record is created;
- 添加两个条件:Email Is Null = False,以及 External Id Is Null = True;
- 确保 Optimize the Flow for 设置为 Actions and Related Records(检索 Data 360 数据时必须如此);
- 启用 Add Asynchronous Path 开关(检索 Data 360 数据必须在 Run Asynchronously 或计划路径中,而非 Run Immediately 路径)。
Get CP Email(获取 Contact Point Email):
- 在 Run Asynchronously 路径上,添加 Get Records 元素,Label 输入
Get CP Email; - Data Source 选择 Data Cloud Object,Data Space 选择 default,Object 选择 Contact Point Email;
- 条件:Email Address Equals 触发联系人(Triggering Contact)的 Email;
- 再添加条件:Data Source Object Equals
External_Guest__c(确保只检索来自外部客户源的数据)。
决策元素 Phone is Blank?:用 Decision 元素判断联系人的 Business Phone 是否为空,分成 Yes/No 两条路径。
Get CP Phone(Yes 路径):Data Source 选择 Data Cloud Object,Object 选择 Contact Point Phone,条件 Party Equals Get CP Email 的 Party。
更新联系人:用 Update Records 元素,选择触发该 Flow 的联系人记录,设置 External Id = Contact Point Email 的 Party;若走 Yes 路径,同时把 Business Phone 更新为 Contact Point Phone 的 Formatted E164 Phone Number。
点击 Activate 启用 Flow。现在每当有人创建联系人时,Salesforce 会自动填充 External ID 字段(并视情况填充电话号码),为团队节省时间和精力!External ID 字段一致填充后,也更容易构建同时使用两组数据的 Flow。
三、从 Data 360 触发 Flow
从 DMO 数据变化触发 Flow
记录触发型 Flow 可以响应 Salesforce 数据的变化。同样地,Data Cloud-Triggered Flow 可以响应数据模型对象(DMO)或计算洞察对象(CIO)的变化。也就是说,当 DMO 中的数据发生变化,或计算洞察的结果发生变化时,都可以触发 Flow。
Coral Cloud Resorts 将客户的忠诚度计划信息存储在外部数据库中,并以 External Guest Loyalty 对象的形式流式传入 Data 360。酒店团队启动了一个新的礼宾计划,在客户达到忠诚度计划新的 Diamond 等级时主动联系他们。我们来创建一个 Flow,在客户达到 Diamond 等级时向其发送邮件。
- 从 Setup 进入 Flows,点击 New Flow;
- 选择 Triggered 类别,选择 Data Cloud-Triggered Flow;
- Data Space 选择 default,Object 选择 External_Guest_Loyalty__c_Home(DMO);
- Trigger 选择 A record is updated,条件 Loyalty_Level_c__c Equals
Diamond; - When to Run 选择 Only when a record is updated to meet the condition requirements。
「仅当记录更新为满足条件时运行」这一设置至关重要:它确保邮件在客户达到 Diamond 等级的那一次触发,而不是每次客户忠诚度记录更新(且已处于 Diamond)时都重复发送。
收集数据并发送邮件
触发器配置完成后,检索客户联系人数据并发送个性化邮件。
Get Contact:
- 添加 Get Records 元素,Label 输入
Get Contact; - Data Source 选择 Salesforce Object,Object 选择 Contact;
- 条件 External Id Equals 触发 DMO 记录的 Guest ID(通过 External ID 将忠诚度 DMO 记录与 Salesforce Contact 关联起来,该字段由第二单元的 Flow 自动填充)。
Send Email to Guest:
- 在 Search 框输入
email,选择 Send Email 动作,Label 输入Send Email to Guest; - Subject 输入
Welcome to Diamond level!; - Body 字段切换为 View as Plain Text,输入:
Congratulations {!Get_Contact.Name}, you're our newest guest to reach our esteemed Diamond level! ...(使用合并字段实现个性化); - Recipient ID 选择 Contact from Get Contact 的 Contact ID。
保存并 Activate Flow。现在当任何客户的忠诚度等级更新为 Diamond 时,他们会自动收到一封个性化的欢迎邮件。这演示了端到端的模式:Data 360 DMO 变化 → Flow 触发 → Salesforce 数据检索 → 动作(发邮件)。
从 CIO 数据变化触发 Flow
接下来构建一个由计算洞察结果变化(CIO 变化)触发的 Flow。
Coral Cloud Resorts 最近上线了一个电商网站,让客户可以快速购买房间内的附加体验,但很多客户在选购后放弃了购物车。由于这个问题日益严重,电商团队跟踪客户每次让购物车弃置 24 小时的记录,并将每次事件存储在外部数据库中,该数据库在 Data 360 中以 External Abandoned Cart 对象的形式提供。
当客户在两周内三次弃置购物车时,应向酒店团队分配一个案例(case),以便团队直接跟进。您已经创建了 Number of Abandoned Carts 计算洞察来跟踪客户弃置购物车的次数。现在创建一个 Flow,在该计算洞察中的 NumberOfAbandons 值达到 3 或以上时触发。
- 创建一个 Data Cloud-Triggered Flow,Data Space 选择 default,Object 选择 Number of Abandoned Carts(CIO);
- Trigger 选择 A record is updated,条件 NumberOfAbandons__c Greater Than or Equal
3; - When to Run 选择 Only when a record is updated to meet the condition requirements。
该 Flow 响应计算洞察的 CIO 更新——当 Number of Abandoned Carts 洞察重新计算、且某客户的次数达到阈值时,就会触发。
获取记录(Get Records)
添加几个 Get Records 元素,检索客户的 Contact 记录、最近一条 Abandoned Cart 记录的信息,以及 Hospitality Upsells 队列的 ID。
Get Contact:
- Data Source 选择 Salesforce Object,Object 选择 Contact;
- 条件 External Id Equals 触发 CIO 记录的 CartGuestID。
Get External Abandoned Cart:
- Data Source 选择 Data Cloud Object(访问 DMO),Object 选择 External_Abandoned_Cart__c_Home;
- 条件 Guest ID Equals 触发 CIO 记录的 CartGuestID;
- Sort Order 选择 Descending,Sort By 选择 CreatedDate__c(确保检索到最近创建的弃购物车记录)。
Get Queue:
- Data Source 选择 Salesforce Object,Object 选择 Group(注意选择 API 名称为 "Group" 的对象,而非 "CollaborationGroup");
- 条件 Developer Name Equals
Hospitality_Upsells。
现在 Flow 已拥有:客户的联系人、最近一条弃购物车详情,以及案例分配的目标队列。接下来创建案例。
创建案例(Case)
案例需要包含最近一条弃购物车的重要详情,因此先创建一个文本模板收集这些信息,再添加一个使用前面收集到的信息创建案例的元素。
文本模板 CaseDescriptionTemplate:将 Body 切换为 View as Plain Text,输入如下内容(包含合并字段):
This guest has abandoned their add-ons shopping cart {!$Record.NumberOfAbandons__c} times in the past two weeks. Please reach out and attempt to close the sale.
Most recent abandoned cart: {!Get_External_Abandoned_Cart.CreatedDate__c} - $ {!Get_External_Abandoned_Cart.Cart_Value_c__c}
Products in cart: {!Get_External_Abandoned_Cart.Product_List_c__c}
Create Case:
- 添加 Create Records 元素,Object 选择 Case,How to set record field values 选择 Manually;
- Contact ID = Contact from Get Contact 的 Contact ID;
- Description =
CaseDescriptionTemplate; - Owner ID = Group from Get Queue 的 Group ID;
- Priority = High,Status = New;
- Subject =
Abandoned Cart Follow-Up - {!Get_Contact.External_Id__c}。
保存并 Activate Flow。现在当 Number of Abandoned Carts 计算洞察重新计算其值、且某客户达到 3 次或以上弃置时,系统会自动为酒店团队创建一个高优先级案例,并附带跟进所需的全部上下文。在计算洞察页面上,您可以点击 Publish Now 手动运行计算,或点击 Schedule 按设定时间间隔运行。

















