如何订阅Salesforce Connected App的Webhook事件?
Salesforce 实体变更动态订阅+Webhook推送实现方案
你需要的「仅通过OAuth令牌+传入webhook端点即可完成实体变更订阅」的能力,Salesforce没有提供原生的一站式API,Zapier的同类能力是在其服务侧封装了中间适配层实现的,以下是两种可落地的实现方案:
方案1:Change Data Capture(CDC) + 服务侧转发(推荐,适配绝大多数场景)
这是和Zapier实现逻辑一致的方案,无需在用户的Salesforce实例中部署任何自定义代码:
- 首先给你的已连接应用配置
cdc_api、api、chatter_api三个OAuth授权范围 - 拿到用户的OAuth访问令牌后,调用Salesforce REST API的
sobjects/ChangeEventHeader/describe接口,获取你需要监听的实体对应的变更事件名,例如商机的变更事件为OpportunityChangeEvent - 在你自己的服务侧维护通用的CometD客户端,订阅对应实例的CDC事件流,收到匹配条件的变更事件后,直接转发到用户传入的webhook端点即可
- 注意事项:需要自行处理CometD连接断连重连、事件去重(每个CDC事件携带唯一
eventUuid)、事件重放逻辑,单个CometD连接最多支持订阅5种实体的变更事件,超出数量可以拆分多个连接处理
方案2:动态注入Apex Trigger + 直接外呼(无需维护长连接)
如果你不想自己维护CDC订阅的长连接层,可以用该方案,但是需要申请更高的OAuth权限:
- 给你的已连接应用追加元数据读写的OAuth权限,拿到授权后通过元数据API在用户的Salesforce实例中动态创建对应实体的Apex Trigger,触发规则匹配你需要的变更条件(例如商机阶段更新为已关闭)
- 同步创建远程站点配置、Named Credential存储用户传入的webhook端点,Trigger逻辑中直接发起Apex Callout调用webhook即可
- 注意事项:该方案需要用户授予第三方应用修改Apex代码的权限,部分对合规性要求高的企业Salesforce实例会限制该权限,适用场景有一定局限性
已排查方案的不适用原因说明
- Streaming API:需要额外创建PushTopic才能订阅实体变更,且不支持标准的变更事件结构,维护成本比CDC更高
- Outbound Message:必须在用户侧手动配置工作流/流程触发规则,无法完全通过API动态创建订阅
- 纯Apex Callout:无法独立实现变更监听,必须搭配Trigger/流程规则才能触发
内容的提问来源于stack exchange,提问作者radix
相关产品推荐
相关产品推荐

