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

Zoho Deluge实现Splynx与Zoho CRM列表匹配及ID同步

需求可行性确认

该需求完全可实现,不需要重新导入已有的Splynx联系人数据,直接通过Deluge脚本完成双系统数据匹配后,批量更新Accounts模块的自定义字段即可。

现有代码的核心问题

你当前的实现逻辑无法支撑最终的字段更新目标,存在以下缺陷:

  • 重复三次调用response.toJSONList()拆分出三个独立平行列表,后续匹配到相同名称时,无法关联到对应的Splynx Customer ID值,根本拿不到要更新的目标数据
  • 直接用==对比两个列表完全无效:列表是顺序敏感结构,只要两边条目顺序不一致、存在部分匹配/重名情况,就会直接判定为不匹配,无法识别出单条符合要求的匹配记录
  • 拉取数据的模块选错:你最终要更新的是Accounts模块的记录,但当前代码只从Contacts模块拿关联的账户名,没有获取Accounts记录的唯一ID,根本无法执行更新操作
  • 没有做分页处理:Splynx客户接口、Zoho CRM的getRecords接口默认都有返回条数限制,数据量超过上限时会拿不全全量数据
  • 没有做名称归一化处理:两边的客户名称如果存在大小写差异、首尾多余空格、特殊字符不一致的情况,会直接漏匹配
最优实现方案

不需要重复遍历三次接口返回值,核心逻辑是先把Splynx数据处理成「标准化客户名称:客户ID」的键值对映射,再直接拉取Zoho Accounts模块数据做匹配更新,具体步骤:

  1. 拉取Splynx全量客户数据,单次遍历返回结果,构建以标准化客户名为key、Splynx ID为value的Map,解决多列表无法关联数据的问题
  2. 直接拉取Accounts模块全量记录(不需要绕路从Contacts拿关联账户名,减少一层关联逻辑),对账户名做和Splynx侧一致的标准化处理
  3. 遍历Zoho Accounts记录,匹配到对应名称的条目,直接调用CRM批量更新接口把Splynx ID写入自定义字段
  4. 增加分页逻辑,避免数据量过大时拉取不全
  5. 名称匹配前统一做转小写、去首尾空格处理,减少无意义的漏匹配
修正后可直接运行的参考代码
// 拉取Splynx全量客户数据,构建名称-ID映射表
headersmap = Map();
headersmap.put("Authorization","Basic 替换为你的实际鉴权信息");
splynxCustomerMap = Map();
// Splynx接口分页配置,默认每页拉100条
page = 1;
limit = 100;
while(true)
{
    response = invokeurl
    [
        url :"https://selfcare.dotmac.ng/api/2.0/admin/customers/customer?page=" + page + "&limit=" + limit
        type :GET
        headers:headersmap
    ];
    rows = response.toJSONList();
    if(rows.size() == 0)
    {
        break;
    }
    for each row in rows
    {
        // 名称标准化:转小写、去首尾空格
        customerName = row.get("name").toString().trim().toLowerCase();
        customerId = row.get("id");
        splynxCustomerMap.put(customerName, customerId);
    }
    page = page + 1;
}

// 拉取Zoho Accounts全量记录,匹配后批量更新
crmPage = 1;
crmPerPage = 200;
matchedCount = 0;
while(true)
{
    accounts = zoho.crm.getRecords("Accounts", crmPage, crmPerPage);
    if(accounts.size() == 0)
    {
        break;
    }
    updateList = List();
    for each acc in accounts
    {
        accName = ifnull(acc.get("Account_Name"), "").toString().trim().toLowerCase();
        if(splynxCustomerMap.containsKey(accName))
        {
            // 构建更新参数,注意将Splynx_ID替换为你自定义字段的实际API名
            updatePayload = Map();
            updatePayload.put("id", acc.get("id"));
            updatePayload.put("Splynx_ID", splynxCustomerMap.get(accName));
            updateList.add(updatePayload);
        }
    }
    // 批量更新当前页匹配到的账户
    if(updateList.size() > 0)
    {
        zoho.crm.updateRecords("Accounts", updateList);
        matchedCount = matchedCount + updateList.size();
        info "本页更新完成,累计更新匹配记录" + matchedCount + "条";
    }
    crmPage = crmPage + 1;
}

info "全量匹配更新完成,共关联更新" + matchedCount + "条账户记录";
落地注意事项
  • 代码中的Splynx_ID需要替换为你在Zoho Accounts模块创建的「Splynx ID」自定义字段的实际API名称,可在CRM设置-模块与字段-对应字段详情页查看
  • 跑完脚本后可导出两边未匹配的记录做人工核对映射,不需要重跑全量联系人导入
  • 你之前已经导入的联系人如果已经正确关联对应Accounts,不需要做任何调整,关联的联系人可直接通过账户关联关系读取到对应的Splynx ID

内容的提问来源于stack exchange,提问作者Promise Okoli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:42:21