使用轻易云数据集成平台实现ETL转换后写入钉钉API

  • 轻易云集成顾问-卢剑航
### 集成案例分享:小满客户=>钉钉 在本次技术案例中,我们将重点探讨如何通过轻易云数据集成平台,实现小满OKKICRM的数据无缝对接到钉钉系统。这一集成方案不仅需要考虑高效的数据处理能力和实时的状态监控,还要应对API调用过程中的分页与限流问题,以及数据格式差异。 首先,我们通过调用小满OKKICRM的获取数据API `/v1/company/list`,从CRM系统中定时抓取最新的客户数据。在这个过程中,需要特别注意接口频次限制和分页处理,以确保所有数据被完整提取,而不漏单。为了实现这一点,通过自定义脚本设计了可靠的抓取机制,对每页进行循环请求,并管理API调用速率,防止触发限流。 其次,这些抓取到的数据需要经过转换才能适配到钉钉所需的格式。借助轻易云提供的数据转换功能,根据业务需求编写相应的逻辑,将原始客户信息重组为符合钉钉 `topapi/processinstance/create` 写入要求的数据结构。在此过程中,不仅要保证字段映射正确,还要考虑特殊字符及编码格式问题。 完成数据转换后,通过集成平台支持的大量快速写入特性,我们将批量处理后的客户信息推送到企业内部使用的钉钉系统。为了确保任务执行过程中能够及时发现并解决异常情况,配置了集中监控和告警功能,即可实时跟踪各个集成任务状态。一旦出现错误,例如网络故障或API响应超时等情况,可以自动触发重试机制,提高任务成功率。 在整个流程中,每一步操作都可以在轻易云的平台上进行可视化配置与管理,使复杂的数据集成变得更加直观与高效。而详细记录日志则让我们能够随时追溯每一次操作,从而提高整体检测和优化效率。本案例展示了一个全面且灵活的小满OKKICRM至钉钉系统对接解决方案,为进一步提升企业业务透明度和协作效率奠定坚实基础。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/D17.png~tplv-syqr462i7n-qeasy.image) ### 调用小满OKKICRM接口/v1/company/list获取并加工数据 在数据集成过程中,调用源系统API接口是关键的第一步。本文将详细探讨如何通过轻易云数据集成平台调用小满OKKICRM的`/v1/company/list`接口,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置API调用的元数据。以下是元数据配置的详细说明: ```json { "api": "/v1/company/list", "method": "GET", "number": "serial_id", "id": "{{基本信息客户档案名称}}{{owner.name}}{serial_id}", "idCheck": true, "request": [ {"field": "start_index", "label": "第几页", "type": "string", "describe": "第几页,默认 = 1", "value": "1"}, {"field": "count", "label": "每页记录数", "type": "string", "describe": "每页记录数,默认 = 20", "value": "100"}, {"field": "removed", "label": "是否查询已删除数据", "type":"string","describe":"默认值: 0,设置=1时查询已删除的数据列表"}, {"field":"all","label":"查询所有客户","type":"string","describe":"默认值: 1,设置=1查询所有客户,设置=0只查询私海客户"}, {"field":"group_id","label":"客户分组ID","type":"string","describe":"设置客户分组ID后,只查询对应分组的客户"}, {"field":"date","label":"日期","type":"date","describe":"查询从此日期到今天为止有更新的客户列表"}, {"field":"start_time","label":"开始日期","type":"datetime","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"end_time","label":"结束日期","type":"datetime","value":"{{CURRENT_TIME|datetime}}"} ], "otherRequest":[ {"field":"info_api","label":"详情接口","type":"string","value":"/v1/company/info"}, {"field":"info_key","label":"详情主键","type":"string","value":"company_id"} ], "autoFillResponse": true, "condition_bk":[[{"logic":"neqv2","value":"7769347527392","field":"group_id"}]], "condition":[[{"logic":"neqv2","value":"7769347527392","field":"group_id"}]] } ``` #### 请求参数解析 - `start_index` 和 `count` 用于分页控制,分别表示从第几页开始和每页返回的记录数。 - `removed` 参数决定是否包含已删除的数据。 - `all` 参数控制是否查询所有客户。 - `group_id` 用于筛选特定分组的客户。 - `date`, `start_time`, 和 `end_time` 用于时间范围过滤,确保只获取指定时间段内更新的数据。 这些参数可以灵活组合,以满足不同的数据请求需求。例如,通过设置`group_id`可以只获取特定分组的客户信息,而通过调整`start_time`和`end_time`可以实现增量同步。 #### 数据加工与处理 在成功调用API并获取数据后,需要对数据进行初步加工。这一步通常包括去重、清洗和格式转换等操作。以下是一些常见的数据处理步骤: 1. **去重**:根据唯一标识符(如`serial_id`)去除重复记录。 2. **清洗**:移除或修正异常值和空值。例如,可以检查某些关键字段是否为空,并根据业务逻辑进行填充或删除。 3. **格式转换**:将日期、时间等字段转换为标准格式,以便后续处理和存储。 #### 自动填充响应 配置中的`autoFillResponse: true`表示平台会自动填充响应数据。这意味着我们不需要手动解析API响应,而是直接使用平台提供的标准化数据结构。这大大简化了开发工作,提高了效率。 #### 条件过滤 条件过滤部分(`condition_bk` 和 `condition`)用于排除特定条件下的数据。例如,上述配置中排除了`group_id = 7769347527392`的记录。这种条件过滤机制可以灵活应用于各种复杂场景,以确保最终获取的数据符合业务需求。 #### 实践案例 假设我们需要从小满OKKICRM中获取所有未删除且更新日期在过去一周内的客户信息,可以按如下方式配置请求参数: ```json { ... { "field": "removed", "value": "0" }, { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入钉钉API接口 在数据集成生命周期的第二步中,我们将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台钉钉API接口所能够接收的格式,最终写入目标平台。以下将详细探讨如何通过轻易云数据集成平台实现这一过程。 #### 钉钉API接口元数据配置 在本案例中,我们的目标是将小满客户的数据写入钉钉审批流。根据提供的元数据配置,钉钉API接口为`topapi/processinstance/create`,请求方法为`POST`。以下是具体的字段配置: - **process_code**:审批流的唯一码,从审批流程编辑页面的URL网址中获取。 - **originator_user_id**:审批实例发起人的userid,通过MongoDB查询获取。 - **dept_id**:发起人所在部门,通过MongoDB查询获取。 - **form_component_values**:审批流表单参数,其中包含客户档案名称。 #### 数据提取与转换 1. **提取数据** 首先,从小满客户系统中提取需要的数据。假设我们已经通过轻易云平台完成了数据请求与清洗阶段,并获得了所需的数据。 2. **转换数据** 根据元数据配置,我们需要将提取到的数据转换为钉钉API能够接收的格式。以下是具体的转换步骤: - **process_code**:直接使用预定义值`PROC-28EA58F1-0785-462C-BC54-F59D1B1734F0`。 - **originator_user_id**:通过MongoDB查询来获取发起人的userid。查询语句如下: ```json { "findField": "content.userid", "where": {"content.name": {"$eq": "{{owner.0.name}}"}} } ``` 其中,`{{owner.0.name}}`是从小满客户系统中提取到的发起人姓名。 - **dept_id**:同样通过MongoDB查询来获取发起人所在部门ID。查询语句如下: ```json { "findField": "content.dept_id_list.0", "where": {"content.name": {"$eq": "{{owner.0.name}}"}} } ``` - **form_component_values**:将小满客户系统中的“基本信息客户档案名称”字段映射到钉钉API中的“客户档案名称”字段。 #### 构建请求体 根据以上转换结果,构建最终的请求体如下: ```json { "process_code": "PROC-28EA58F1-0785-462C-BC54-F59D1B1734F0", "originator_user_id": "_mongoQuery 35d9f591-a5f9-3618-aac5-22772ae92e90 findField=content.userid where={\"content.name\":{\"$eq\":\"{{owner.0.name}}\"}}", "dept_id": "_mongoQuery 35d9f591-a5f9-3618-aac5-22772ae92e90 findField=content.dept_id_list.0 where={\"content.name\":{\"$eq\":\"{{owner.0.name}}\"}}", "form_component_values": [ { "name": "客户档案名称", "value": "{{基本信息客户档案名称}}" } ] } ``` #### 写入目标平台 最后,通过轻易云平台将构建好的请求体发送至钉钉API接口,实现数据写入。由于轻易云平台支持全异步操作和多种异构系统集成,因此可以确保数据无缝对接并实时监控处理状态。 通过上述步骤,我们成功地将小满客户的数据进行了ETL转换,并写入了钉钉审批流系统。这一过程展示了如何利用轻易云数据集成平台高效地完成复杂的数据处理任务,并实现不同系统间的数据无缝对接。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T27.png~tplv-syqr462i7n-qeasy.image)