You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 15:57:01