Salesforce 对服务器到服务器的集成使用签名的 JWT 进行认证,而不是密码——MailInApp 的 API 数据源原生支持这套流程。只需连接一次,一个 KPI 计分卡或图表模块就能直接绑定到实时的 Opportunity、Account 或 Contact 行,不需要照看刷新令牌,也不需要在每次发送前重新导出 CSV。
大多数「每周管道」邮件都是一份报表的截图,一旦有人粘贴进去就已经过时。把图表模块直接绑定到一个由 Salesforce 支撑的数据源,意味着模块自己的数字来自一次真实的 SOQL 查询——而一次定期发送每次都会重新运行这个查询,所以周一的摘要真正反映的是周一的管道情况。
连接是如何工作的
MailInApp
用你连接应用(Connected App)的私钥签署一个 JWT
Salesforce 令牌端点
验证签名,返回一个访问令牌
Salesforce REST API
运行你的 SOQL 查询,以 Bearer 令牌认证
你的邮件
KPI 计分卡与图表模块实时绑定到这些行
每一步都在每次发送时于服务器端完成。密码从不会被发送,也没有刷新令牌——过期的令牌通过签署一个新的断言来替换。
这正是 Salesforce 自己为其服务器到服务器集成所记录的同一套 JWT Bearer 流程,接入的是 MailInApp 现有的 OAuth2 认证模式(用于 API 数据源),而不是一个专门为 Salesforce 定制的集成。
只需设置一次连接应用
在 Salesforce Setup 中,创建一个连接应用,启用 OAuth settings,并在Use digital signatures 下上传一个自签名证书——证书交给 Salesforce,配套的 RSA 私钥交给 MailInApp。将Permitted Users 设置为Admin approved users are pre-authorized,正是这一项设置让这次交换变成非交互式的:不存在需要一个脚本去点击的同意页面。记下该连接应用的Consumer Key以及你所在组织的My Domain URL——两者都会用到 MailInApp 中的这次连接里。
把它指向一次 SOQL 查询
数据源的端点是一个 REST 查询 URL,而查询字符串本身就是你得到的实际数据:
SELECT Name, Amount, StageName, CloseDate FROM Opportunity WHERE IsClosed = false
把数据路径设置为 records——Salesforce 会把查询结果包裹在一个 records 数组里。像 Owner.Email 这样的关系字段会以嵌套形式返回,并被 MailInApp 的行解析器丢弃,所以请保持查询是扁平的;如果之后需要一个所有者标识符用于筛选或合并,请改选 OwnerId。
直接绑定模块,而不是合并标签
从工作室的数据面板把这个连接添加到项目里,角色选择collection——与重复模块使用的是同一种绑定。从那里开始,KPI 计分卡、柱状图、折线图和饼图模块都可以在各自的检查器里直接绑定到它:
- 一个 KPI 计分卡设置为
Amount并采用求和聚合,就会变成一个实时的「未结总管道金额」数字。 - 一个按
StageName分组、以Amount为系列(同样是求和聚合)的柱状图,就会变成一张按阶段划分的管道分布图。
这两个模块都不需要手动输入一个合并标签——绑定本身完成了这项工作,而且随着交易变更阶段或成交,两者都会一直保持正确。
按定时发送计划发送它
一次每周一次的定期发送,每次触发时都会重新运行这条 SOQL 查询,并根据 Salesforce 的当前行数据重新渲染这两个模块——同样的摘要结构,每周一都是新的数字,不需要任何人手动重建它。一个指向每条 Opportunity 自己的 Salesforce URL 的按钮模块,能让任何读到摘要的人一键打开某个吸引了他们注意的数字背后的记录。
快速上手
为 JWT Bearer 流程创建一个带证书的 Salesforce 连接应用,在 MailInApp 的数据源标签页中,用你的 Consumer Key、集成用户名和私钥连接它,把端点指向一次以 records 为数据路径的 SOQL 查询,然后从工作室的数据面板把一个 KPI 计分卡和一个柱状图绑定到它上。完整的逐字段设置说明,请见 Salesforce 集成指南。