尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

在 Airbyte 中使用 smsmode SMS 连接器:基于 DeclarativeSource 的短信日志与用量同步实战

发布时间:2026/9/24 6:43:07

资讯中心
01
ARTICLE

在 Airbyte 中使用 smsmode SMS 连接器:基于 DeclarativeSource 的短信日志与用量同步实战

在 Airbyte 中使用 smsmode SMS 连接器:基于 DeclarativeSource 的短信日志与用量同步实战
数据工程数据集成ETL后端大数据【免费下载链接】airbyteOpen-source data movement for ELT pipelines and AI agents — from APIs, databases files to warehouses, lakes, and AI applications. Both self-hosted and Cloud.项目地址https://gitcode.com/gh_mirrors/ai/airbyte点击查看免费下载smsmode SMS 是 Airbyte 仓库中一个典型的 manifest-only纯声明式Source 连接器它以 YAML 清单manifest驱动通过 smsmode 官方 REST API 同步标准短信服务的历史消息日志messages与账户整体消费数据consumptions。本文以 source-smsmode-sms/README.md 为骨架结合仓库内 manifest.yaml、metadata.yaml 与 单元测试 的源码证据完整讲解该连接器的数据流结构、API Key 认证、分页同步机制、三种接入方式以及本地构建与测试流程。读完后你可以在 Airbyte 平台、pyairbyte 或 Connector Builder 中直接使用该连接器并理解其底层声明式实现原理。一、连接器概览从 API 到 Airbyte 数据流的映射smsmode SMS 连接器定位于「标准 SMS 服务的源连接器」负责同步两类数据消息日志messages通过 smsmode 短信接口拉取已发送/接收的短信记录一般消费数据consumptions通过 smsmode 公共接口拉取账户在不同渠道、时间段内的短信用量与费用明细。在 Airbyte 的连接器分类体系中它属于connectorType: source、connectorSubtype: api的 REST API 型源以cdk:low-code、language:manifest-only为技术标签见 metadata.yaml。这意味着它不包含任何手写 Python/Java 业务代码全部同步逻辑——包括请求 URL、HTTP 方法、认证、分页、记录提取与 JSON Schema——都声明在 manifest.yaml 这一个文件里由 Airbyte CDK 的YamlDeclarativeSource在运行时解析执行单元测试中正是通过YamlDeclarativeSource(path_to_yaml.../manifest.yaml)实例化该连接器见 test_streams.py。相关发布元数据一览来源metadata.yaml元数据项值连接器名称smsmode SMSdefinitionId58bf5021-0dc4-46d3-b834-bf576ee27748Docker 镜像airbyte/source-smsmode-sms:0.0.3基础镜像airbyte/source-declarative-manifest:7.28.4声明式连接器运行时发布阶段 / 支持级别alpha/community许可证ELv2允许的主机rest.smsmode.com值得注意allowedHosts配置metadata.yaml连接器网络访问被严格限定在rest.smsmode.com这是 Airbyte 对连接器出站流量的白名单约束有助于在企业内网/托管环境中实施安全策略。二、数据流Streams详解messages 与 consumptions连接器声明了两个数据流每个流都由DeclarativeStream类型驱动。下面分别解析其端点、提取路径与返回字段结构。2.1 messages短信消息日志请求端点GET https://rest.smsmode.com/sms/v1/messages见 manifest.yaml记录提取路径DpathExtractor从响应 JSON 的items字段中提取记录数组manifest.yaml每条消息记录的 JSON Schema 字段如下manifest.yaml字段类型语义typestring/null消息类型bodyobject/null消息体含text正文、length长度、encoding编码、messagePartCount拆分后的短信条数fromstring/null发送方号码hrefstring/null该消息的资源链接priceobject/null费用信息含amount金额、currency币种statusobject/null状态信息含value、lookup按 MCC/MNC 解析出的mcc、mnc、mccMnc、country、network、countryPrefix、isoCountryCode、deliveryDate送达时间channelobject/null渠道信息含type、flow、name、channelIdsentDatestring/null发送时间directionstring/null方向如 MO/MTmessageIdstring/null消息唯一标识recipientobject/null收件人含to收件号码acceptedAtstring/null被 API 受理的时间同时 Schema 声明了additionalProperties: true即 smsmode API 未来新增的字段也会原样透传进目标数据仓库保证向前兼容。2.2 consumptions账户消费数据请求端点GET https://rest.smsmode.com/commons/v1/consumptionsmanifest.yaml主键consumptionId该流显式声明了primary_key: consumptionIdmanifest.yaml记录提取路径同样从响应 JSON 的items字段提取消费记录字段结构manifest.yaml字段类型语义typestring/null消费类型consumptionIdstringrequired消费记录唯一 ID用作主键channelobject/null渠道信息含type、channelId、name、flowperiodTypestring/null统计周期类型如月度等startDatestring/null周期起始日期quantitynumber/null消费数量短信条数priceobject/null费用含amount、currencyhrefstring/null资源链接注意messages流未显式声明主键而consumptions流的主键为consumptionId。从源码结构可以推断messages流虽在 Schema 中暴露了messageId字段但声明式配置没有将其标记为主键去重能力上consumptions流更完整——单元测试也验证了两个流的主键唯一性测试均通过primaryKeysAreUnique: true见 manifest.yaml。2.3 流级联通性检查Checkcheck阶段使用CheckStream类型指定以messages流作为连通性探针manifest.yaml。当你在 Airbyte 中创建 Source 并保存连接配置时系统会向GET https://rest.smsmode.com/sms/v1/messages发起一次带认证的请求根据是否能取回消息记录判断 API Key 是否有效。三、认证机制X-Api-Key 请求头注入smsmode API 采用 API Key 认证。连接器的两个流都通过ApiKeyAuthenticator完成鉴权但写法略有不同messages流使用显式的inject_into配置manifest.yamlauthenticator: type: ApiKeyAuthenticator api_token: {{ config[\api_key\] }} inject_into: type: RequestOption field_name: X-Api-Key inject_into: headerconsumptions流使用header快捷参数manifest.yamlauthenticator: type: ApiKeyAuthenticator header: X-Api-Key api_token: {{ config[api_key] }}两种写法最终效果一致将配置项api_key的值写入每个请求的X-Api-Key请求头。单元测试对此有明确断言——对分页期间发出的所有请求逐一校验request.headers[X-Api-Key] _CONFIG[api_key]test_streams.py。同时所有流统一设置了Accept: application/json请求头manifest.yaml确保服务端返回 JSON 格式响应配合JsonDecoder与DpathExtractor完成解析。四、分页策略PageIncrement 逐页递增smsmode API 使用page/pageSize查询参数实现分页。连接器在两个流上配置了完全一致的DefaultPaginatormanifest.yamlpaginator: type: DefaultPaginator page_size_option: type: RequestOption field_name: pageSize inject_into: request_parameter page_token_option: type: RequestOption field_name: page inject_into: request_parameter pagination_strategy: type: PageIncrement page_size: 100 start_from_page: 1其运行机制为起始页从第 1 页start_from_page: 1开始请求页大小每页请求pageSize100条记录page_size: 100翻页PageIncrement策略在当前页取满记录后将page参数依次递增1 → 2 → 3 …直到某页返回的记录数不足一页为止。单元测试精确验证了这一行为test_streams.py模拟第一页返回 100 条、第二页返回 1 条不足 100的响应序列断言连接器恰好发出2 次HTTP 请求len(requests_mock.request_history) 2断言第一次请求查询参数含pageSize100且不含page参数第二次请求查询参数为pageSize100page2断言两次请求的X-Api-Key请求头均正确携带 API Key断言输出的记录顺序与两页数据的拼接顺序完全一致去重与保序均正确。这个测试同时覆盖了认证、分页、记录提取三个关键链路是理解该连接器数据流行为的最佳入口。五、连接配置Spec仅需一个 API Key连接器的spec部分manifest.yaml只要求一个必填参数参数类型必填说明api_keystring是你的 smsmode API Key。可在 smsmode 控制台Credentials区域生成与管理请确保 Key 处于激活状态且具备所需权限。该字段在 UI 表单中的标题为API Key并标记为airbyte_secret: true——Airbyte 会以密文形式存储、加密传输并在日志中脱敏配置完成后不会在界面上明文回显。六、三种使用方式按 README 的说明该连接器可以像其他 Airbyte 连接器一样通过三种途径使用Airbyte Marketplace / 平台内置在 Airbyte 的 Source 列表中找到 smsmode SMS填入 API Key 即可配置数据流与使用任何官方连接器无异pyairbyte 编程接入通过 Python 生态的pyairbyte库调用get_source获取该连接器便于在脚本或数据管道中以代码方式驱动同步import airbyte as ab source ab.get_source( source-smsmode-sms, config{api_key: your-smsmode-api-key}, ) source.check() result source.read()Connector Builder 二次编辑在 Airbyte 的 Connector Builder 中打开该连接器基于可视化界面调整流定义、分页或认证配置修改后可直接发布到你的 Workspace。七、本地开发构建与测试官方建议优先使用 Connector Builder 编辑该连接器若需在本地开发仓库提供了基于airbyte-ci的标准流程README。7.1 环境准备先按照仓库的 本地连接器开发指南 安装依赖工具poe统一任务入口、uvPython 工具安装、docker构建与运行连接器镜像以及 Airbyte CDK 工具链。对于 manifest-only 连接器核心运行时由airbyte/source-declarative-manifest基础镜像提供本地不需要独立的语言 SDK 工程。7.2 构建airbyte-ci connectors --namesource-smsmode-sms build该命令会构建出本地开发镜像source-smsmode-sms:dev供后续测试与调试使用。7.3 测试airbyte-ci connectors --namesource-smsmode-sms test该命令会运行该连接器的验收测试acceptance tests与单元测试。验收测试定义在 acceptance-test-config.ymlspec测试将 manifest.yaml 作为 spec 输出源进行校验connection/discovery/basic_read/incremental/full_refresh当前以bypass_reason跳过原因是 This is a builder contribution, and we do not have secrets at this time——即该连接器由 Connector Builder 贡献仓库暂未托管 smsmode 测试凭据因此需要真实 API Key 的端到端用例被显式跳过。这属于社区连接器的常见状态不影响 spec 校验与本地单元测试。单元测试位于 unit_tests/依赖由 pyproject.toml 管理airbyte-cdk、pytest、requests-mock。测试通过requests_mock模拟 smsmode 响应无需真实网络与凭据即可验证认证头、分页参数与记录输出适合作为本地快速回归手段。八、从源码结构看该连接器的定位综合以上证据可以得出几点结论该连接器是纯声明式manifest-only实现的低代码连接器的完整范例从端点、认证、分页、Schema 到 Spec全部收敛在 manifest.yaml 单文件内无手写传输层代码这与tags: language:manifest-only, cdk:low-codemetadata.yaml完全吻合其数据面只包含全量同步语义两个流均未配置增量游标cursor字段acceptance-test-config.yml中也没有针对 incremental 的启用的测试配置因此当前版本以全量刷新full refresh方式同步数据适合对短信日志与用量进行周期性整体拉取它体现了社区贡献连接器的一种典型状态发布阶段为 alpha、支持级别为 community测试凭据未托管、部分验收用例跳过但核心同步链路认证 分页 提取已有单元测试覆盖可直接在本地或云端使用。如果你需要将 smsmode 的短信发送记录与账户消费明细纳入 ELT 管道这个连接器提供了一条无需编写代码、配置即用的同步路径理解其 manifest 结构与测试方式也能帮助你快速上手 Airbyte 声明式连接器的开发与二次定制。赞分享数据工程数据集成ETL后端大数据【免费下载链接】airbyteOpen-source data movement for ELT pipelines and AI agents — from APIs, databases files to warehouses, lakes, and AI applications. Both self-hosted and Cloud.项目地址https://gitcode.com/gh_mirrors/ai/airbyte点击查看免费下载相关推荐Airbyte smsmode RCS 连接器深度解析基于声明式 Manifest 同步 RCS 消息日志与月度消费数据Airbyte smsmode RCS 连接器深度解析基于声明式 Manifest 同步 RCS 消息日志与月度消费数据 本指南以开源仓库中的 source数据工程数据集成ETL后端大数据Airbyte 中的 Adjust Source 连接器基于 Report Service API 的指标同步实战指南Airbyte 中的 Adjust Source 连接器基于 Report Service API 的指标同步实战指南 本指南以 Airbyte 开源仓库中的数据工程数据集成ETL后端大数据基于 Airbyte Declarative Source 的 Goldcast 连接器实战从 Manifest 配置到数据同步基于 Airbyte Declarative Source 的 Goldcast 连接器实战从 Manifest 配置到数据同步 本文围绕 Airbyte 仓数据工程数据集成ETL后端大数据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。