dlt Freshdesk 验证源实战指南:从 API 凭据到数据管道
2026/9/18 1:36:54 网站建设 项目流程

dlt Freshdesk 验证源实战指南:从 API 凭据到数据管道

【免费下载链接】dltdata load tool (dlt) is an open source Python library that makes data loading easy 🛠️项目地址: https://gitcode.com/GitHub_Trending/dl/dlt

Freshdesk 是一款基于云端的客户服务软件,帮助企业通过邮件、电话、网站、社交媒体等多个渠道统一管理客户支持。dlt 官方为其提供了开箱即用的Freshdesk 验证源(verified source),封装了agentscompaniescontactsgroupsrolestickets六类核心资源,支持分页与增量加载。本文基于 Freshdesk 验证源文档,结合 dlt 源码,完整讲解从获取 API 凭据、初始化项目、配置密钥、运行管道到自定义管道的全流程。

Freshdesk 验证源能加载哪些数据

Freshdesk 验证源通过 Freshdesk API 将数据加载到你选择的目标(destination)。它默认暴露以下 6 类资源:

序号资源名描述
1agents负责管理和解决客户咨询与支持工单的用户
2companies客户组织或群组,即 agents 服务的对象
3contacts主动发起支持请求的个人或客户
4groups基于特定标准组织的 agents 分组
5roles预定义的权限集合,决定 agent 可以执行哪些操作
6tickets客户通过邮件、聊天、电话等渠道提交的咨询或问题

这些资源均以"分页 + 增量"的方式从 Freshdesk API 抓取,写入目标库后形成各自独立的表,primary_key统一为id

Setup guide:获取凭据并初始化项目

获取 API 凭据

  1. 登录你的 Freshdesk 账号;
  2. 点击右上角头像图标进入 "Profile Settings";
  3. 复制右侧显示的 API Key。

注意:Freshdesk 界面可能随版本变化,本文描述的是常见操作路径。

初始化验证源项目

在命令行中执行:

dlt init freshdesk duckdb

该命令会做两件事:

  • Freshdesk 作为 sourceduckdb 作为 destination初始化示例管道脚本freshdesk_pipeline.py
  • 在当前目录下生成.dlt/配置目录与requirements.txt等必要文件。

如果你希望使用其他目标,只需把duckdb替换为任意 dlt 支持的 destination 名称即可,例如redshiftbigquerysnowflake

关于dlt init的底层行为,可以参考 CLI 文档:它会创建基础项目结构(.dlt/config.toml.dlt/secrets.toml.gitignore),检查 source 是否为已验证源并写入项目,同时重写管道脚本以适配你指定的 destination,并生成对应的requirements.txt

添加凭据到 secrets.toml

在生成的.dlt/secrets.toml中填写密钥:

# 在此放置你的敏感信息与凭据 [sources.freshdesk] domain = "please set me up!" # 填入你的 Freshdesk 域名 api_secret_key = "please set me up!" # 填入上面复制的 Freshdesk API Key
  • domain:你的 Freshdesk 账号域名;
  • api_secret_key:上一步从 Profile Settings 复制的 API Key。

secrets.toml用于存放访问令牌等敏感信息,请务必妥善保管、不要提交到版本库。dlt 的配置注入机制会自动把该文件中的值绑定到 source 函数的domainapi_secret_key参数上。关于凭据管理的更多细节可参考 credentials 文档。

运行管道

  1. 安装依赖:

    pip install -r requirements.txt
  2. 运行管道:

    python freshdesk_pipeline.py
  3. 验证加载结果。freshdesk_pipeline示例管道对应的 pipeline 名为freshdesk_pipeline,可用show子命令启动工作台仪表盘查看加载状态与数据集:

    dlt pipeline freshdesk_pipeline show

    也可以使用任意自定义的 pipeline 名称。关于该命令更完整的参数说明(如--edit编辑模式、需要安装marimo等前提),请参考 CLI 文档中dlt pipeline show一节。

Sources and resources:理解验证源的内部结构

dlt 基于 source 与 resource 两大抽象工作。Freshdesk 验证源由freshdesk_source源函数与若干资源组成。

源函数freshdesk_source

freshdesk_source负责从指定的 Freshdesk API endpoints 抓取数据:

from typing import Iterable from dlt.extract import DltResource @dlt.source() def freshdesk_source( endpoints: list[str] | None = None, per_page: int = 100, domain: str = dlt.secrets.value, api_secret_key: str = dlt.secrets.value, ) -> Iterable[DltResource]: ...

参数说明:

  • endpoints:要抓取的 Freshdesk API 端点列表,默认为验证源内置的settings.py中预定义的端点集合;
  • per_page:每页抓取的数据条数,最大为 100;
  • domain:从中抓取数据的 Freshdesk 域名,默认从config.toml读取;
  • api_secret_key:Freshdesk API Key,默认从secrets.toml读取。

该源支持分页与增量数据加载。若未显式指定端点,则使用settings.py中的预定义端点。

从源码层面看,dlt.source装饰器(见 dlt/extract/decorators.py)会把一个返回若干DltResource的函数转换为 dlt source,并自动将函数参数绑定到配置与密钥:默认配置布局为sources.<section>.<name>.<key_name>,其中dlt.secrets.value标记的参数从secrets.toml注入、dlt.config.value标记的参数从config.toml注入——这正是上文[sources.freshdesk]配置段能自动生效的原因。

资源生成逻辑

freshdesk_source内部会遍历端点列表,为每个端点生成一个 dlt 资源:

from typing import Iterable from dlt.extract import DltResource @dlt.source() def freshdesk_source( # 参数同上 ) -> Iterable[DltResource]: endpoints: list[str] = [] for endpoint in endpoints: yield dlt.resource( incremental_resource, name=endpoint, write_disposition="merge", primary_key="id", )(endpoint=endpoint)

关键点:

  • incremental_resource:一个抓取并产出指定 API 端点分页数据的函数;
  • name:资源(即目标表)名称,取自端点名;
  • write_disposition:写入策略,这里使用merge,配合主键对重叠数据进行去重合并;
  • primary_key:指定id作为资源主键。

dlt.resource装饰器(见 dlt/extract/decorators.py)支持write_dispositionprimary_keyincremental等提示参数:merge会基于primary_key/merge_key去重合并数据(默认写入策略为append),primary_key则指定用于去重的列名或列名列表。Freshdesk 验证源正是利用"merge+primary_key="id""的组合,确保工单等数据按id幂等更新。

增量加载原理

验证源文档明确声明该源"supports pagination and incremental data loading"。dlt 的增量机制由 dlt/extract/incremental/init.py 中的incremental类实现,核心参数包括:

  • initial_value:首次运行时last_value的初始值(无状态时默认None);
  • last_value_func:决定将哪个游标值写入状态的函数,默认max
  • primary_key:用于去重的可选主键;
  • end_value:与initial_value配合,限定只加载某个范围内的记录。

典型用法是记录每次运行游标(如工单更新时间)的last_value,下次运行时只拉取新数据,从而避免全量重拉、节省 API 配额。

自定义管道:创建你自己的 pipeline

如果默认管道不满足需求,可以直接复用验证源的 source 与 resource 方法构建自己的管道。

配置 pipeline

pipeline = dlt.pipeline( pipeline_name="freshdesk_pipeline", # 可自定义名称 destination="duckdb", # 选择合适的目标,如 duckdb、redshift、postgres 等 dataset_name="freshdesk_data" # 可自定义数据集名称 )

关于 pipeline 配置的更多参数(如dev_modefull_refreshstaging等),参考 pipeline 文档。

加载全部端点数据

load_data = freshdesk_source() # 运行管道 load_info = pipeline.run(load_data) # 打印管道运行信息 print(load_info)

该写法会加载settings.py中定义的全部端点数据。

只加载指定资源

load_data = freshdesk_source().with_resources("agents", "contacts", "tickets") # 运行管道 load_info = pipeline.run(load_data) # 打印管道运行信息 print(load_info)

with_resources允许你按需选择资源子集,例如只同步agentscontactstickets三个表,而跳过companiesgroupsroles

小结

通过 Freshdesk 验证源,你可以用三条命令(dlt init freshdesk duckdbpip install -r requirements.txtpython freshdesk_pipeline.py)快速搭建一套可持续增量更新的客户支持数据管道。在需要定制时,freshdesk_source的端点选择、per_page分页大小、merge + primary_key写入策略以及incremental_resource的增量游标,都是可以灵活调整的杠杆点。相关文档与源码入口包括:

  • Freshdesk 验证源文档
  • dlt CLI 文档
  • source 用法 与 resource 用法
  • run-a-pipeline 走查
  • 源码实现:decorators.py(source 装饰器)、decorators.py(resource 装饰器)、incremental

【免费下载链接】dltdata load tool (dlt) is an open source Python library that makes data loading easy 🛠️项目地址: https://gitcode.com/GitHub_Trending/dl/dlt

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询