Documentation menu

数据源与合并标签

合并标签让你可以用真实数据个性化每一封邮件。在文本模块的任意位置写下 {{field}} —— 例如 Hi {{first_name}}, your {{plan}} renews soon —— 每位收件人看到的都会是自己的值。一个项目可以同时连接多个数据源:每个数据源都有一个简短的别名,非受众数据源的字段会写成 {{alias.field}}(例如 {{products.name}})。

数据源的类型

数据源在仪表盘的数据源部分管理(联系人列表位于联系人下)。数据源有两种类型:

托管表格

存储在 MailInApp 中的表格。定义列、在仪表盘中添加行,每一列都会成为一个合并字段。当你的数据目前存放在电子表格中时最合适。联系人列表就是带有固定 email 列的托管表格。

API 连接

将 MailInApp 指向你自己返回 JSON 的 HTTP 端点。行数据在服务器端获取 —— 来自我们的服务器,而不是收件人的收件箱或访问者的浏览器。

配置连接时,可从身份验证下拉菜单中选择三种认证方式之一:

  • 静态请求头 —— 添加带有固定值的请求头(例如一个 Authorization 请求头)。这是最简单的选项,也是在令牌会过期这件事出现之前唯一有意义的方式。
  • OAuth2 客户端凭据 —— 一个令牌 URL 加上客户端 ID 和密钥。MailInApp 会在服务器端将它们交换为访问令牌,进行缓存,并在过期前自动刷新 —— 这是大多数使用 API 密钥和密钥对的企业集成的通用模式。
  • OAuth2 JWT Bearer —— 一个令牌 URL、签发者、主体、受众,以及一个 RSA 私钥(PEM)。MailInApp 会签发一个新的 JWT 断言并将其交换为访问令牌,无需交互式登录,也无需照看刷新令牌 —— Salesforce 的服务器到服务器集成正是以这种方式进行身份验证的(参见 Salesforce 集成指南),对 Google 服务账号或任何其他支持该流程的身份提供方也同样适用。

无论你选择哪种模式,得到的持有者令牌都会自动作为 Authorization 请求头注入 —— 你额外添加的任何请求头仍会随之一同发送,合并在一起(此时如果你添加了一个字面名为 Authorization 的请求头,它会被忽略,因为生成的令牌始终优先)。所有凭据字段 —— 请求头值、客户端密钥、私钥 —— 都遵循同一条规则:

  • 仅存储在服务器端,
  • 永远不会发送到浏览器,
  • 保存后在每一次 API 响应中都会被遮蔽。

编辑一个密钥已显示为遮蔽状态的连接并点击测试这些设置时,需要先重新输入真实值;而测试已保存的连接则会直接按凭据在存储中的原样运行检查,不会把它发回你的浏览器。

连接数据源:数据面板

工作室的数据面板是项目声明自己使用哪些数据源的地方。**+ 添加数据源…**用于连接一个数据源(每个项目最多 10 个);每个连接由三部分组成:

  • 别名 —— 其合并标签所使用的简短标识:小写字母、数字和下划线,以字母开头(例如 contactsproductsopen_invoices)。重命名别名会自动更新绑定到它的任何重复模块。
  • 数据源 —— 其背后的托管表格、联系人列表或 API 连接。
  • 角色 —— 邮件如何使用它:
    • 受众 —— 邮件发送到的联系人列表。每个项目最多一个,且必须是联系人列表。它的字段是标签 —— {{first_name}}{{email}} —— 在发送时按收件人从其自身的行中解析。受众还驱动着"预览为"选择器以及按收件人的响应归因。
    • 合并字段 —— 在别名下可读取的字段:{{alias.field}},邮件渲染时从数据源的第一行解析得出。适合用于共享内容 —— 精选商品、本周统计数据 —— 而非按收件人区分的数据。
    • 重复行 —— 供绑定到该别名的重复模块使用的行。在重复之外不提供任何合并字段。同样的 collection 角色也为 KPI/柱状图/折线图/饼图模块提供数据 —— 参见将图表绑定到真实数据

每个已连接的数据源都会将其字段列为可点击的芯片 —— 点击一个即可复制精确的合并标签,粘贴到任意文本属性中。显示条件编辑器对其字段下拉菜单的分组方式相同:收件人(受众)字段加上每个合并数据源各一组。

内置标签

有一小部分标签是由平台本身提供的,而非来自某个数据源 —— 工作室左侧栏的"变量"面板会将它们与你定义的任何变量一起列出;点击其中一个即可复制其标签。

  • {{recipient_email}} —— 邮件发送到的地址。
  • {{today}} / {{now}} —— 邮件被打开的日期(或日期和时间)。
  • {{unsubscribe_url}} —— 按收件人生成的一键取消订阅链接。页脚预设已经包含它 —— 参见发送给你的联系人

按收件人生成的一次性商店折扣码并不是合并标签 —— 请改为在邮件中放入电商折扣模块(仅限已连接 Shopify/WooCommerce 的受众),它会自动生成并显示自己的折扣码。参见折扣优惠

内置标签只在真实发送(手动、定时,或"Backfill"式的测试发送)中解析 —— 工作室的预览和画布会将它们显示为空或占位符,与任何没有示例值的字段一样。

重复内容

重复模块会为你绑定的数据源的每一行渲染一次其子模块 —— 商品网格、文章摘要、未结发票列表。在检查器中按别名选择数据源;在重复内部,标签会针对每次重复自身的行进行解析。

使用真实数据预览

工作室的预览数据选择器会用受众列表中的任意一行渲染画布,这样你可以在发送前确认 {{first_name}} 确实显示为Amina,而不是 {{first_name}}。其他数据源的字段同样可以设置预览值。

须知

  • 对某个收件人缺失的字段会渲染为空字符串 —— 设计时应确保空值也能自然呈现。
  • 托管页面(实时预览、托管表单)会在渲染时按收件人解析合并标签,因此个性化内容在收件人离开收件箱之后依然有效。
  • 在支持多数据源之前构建的项目会不受影响地继续正常运作:其唯一已连接的数据源会自动出现在数据面板中,裸 {{field}} 标签也始终针对受众解析。