如何通过APEX触发器实现删除SF用户时同步调用API删除Aircall用户
实现方案
1. 编写User对象删除触发器
触发器绑定after delete事件,删除后可读取被删用户的字段值,代码如下:
trigger DeleteAircallUserTrigger on User (after delete) { // 遍历所有被删除的SF用户 for(User deletedUser : Trigger.old) { // 仅当用户有Aircall ID值时才触发删除逻辑 if(deletedUser.Aircall_ID__c != null && String.isNotBlank(deletedUser.Aircall_ID__c)) { // 调用异步处理类执行接口请求(触发器内不允许直接发起同步callout) DeleteAirCallUser.deleteUser(deletedUser.Aircall_ID__c); } } }
注意:请将代码中
Aircall_ID__c替换为你SF中该字段的实际API名称。
2. 重构deleteAirCallUser处理类
你原有的代码需要调整为可接收参数的异步方法,同时修正语法问题,最终代码如下:
public class DeleteAirCallUser { // 标注为异步future方法,允许发起callout @future(callout = true) public static void deleteUser(String aircallUserId) { Http http = new Http(); HttpRequest request = new HttpRequest(); request.setMethod('DELETE'); // 注意:此处需要替换为你自己Aircall API凭证的Base64编码值,格式为 Base64.encode(Blob.valueOf('你的API ID:你的API Key')) String encodedCredentials = '替换为你实际的Base64编码凭证'; String authorizationHeader = 'Basic ' + encodedCredentials; request.setHeader('Content-Type', 'application/json;charset=UTF-8'); request.setHeader('Authorization', authorizationHeader); // 拼接接口端点 request.setEndpoint('https://api.aircall.io/v1/users/' + aircallUserId); // Aircall删除用户接口无需传递请求体,可删除原setBody逻辑 HttpResponse response = http.send(request); if (response.getStatusCode() == 200) { Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody()); System.debug('删除成功:' + results); } else { Map<String, Object> results_2 = (Map<String, Object>) JSON.deserializeUntyped(response.getBody()); System.debug('删除失败,错误信息:' + results_2); } } }
3. 必做前置配置
- 进入SF设置→远程站点设置,添加
https://api.aircall.io为允许的远程站点,否则接口请求会被SF拦截 - 确认
encodedCredentials的凭证值正确:Aircall的Basic认证要求将<API ID>:<API Key>的字符串做Base64编码,你可以在Apex中执行System.debug(EncodingUtil.base64Encode(Blob.valueOf('你的API ID:你的API Key')));获取正确的编码值替换代码中的对应部分
内容的提问来源于stack exchange,提问作者SexyGrandpa
相关产品推荐
相关产品推荐

