在 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),仅供参考

相关新闻

网络工程师必备:10个高频排障命令详解与实战技巧

网络工程师必备:10个高频排障命令详解与实战技巧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:43:38 阅读更多 →
Next.js 16 多语言 SEO 实战:用一个路由注册表同时派生 hreflang、sitemap 和语言切换器(9 种语言、132 个 URL)

Next.js 16 多语言 SEO 实战:用一个路由注册表同时派生 hreflang、sitemap 和语言切换器(9 种语言、132 个 URL)

这篇写给正在用 Next.js App Router 做多语言站点、需要每个页面正确输出 hreflang 和 sitemap 的开发者。要解决的问题只有一个:hreflang、sitemap、语言切换器三处的语言映射如何保证永远一致。 hreflang 是告诉搜索引擎「这个页面还有哪些语言版本、分别在哪个 …

2026/9/24 6:43:38 阅读更多 →
74LS160级联与任意进制计数器:从硬件到Verilog的完整设计指南

74LS160级联与任意进制计数器:从硬件到Verilog的完整设计指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:43:38 阅读更多 →

最新新闻

使用 X-CUBE-AI 将 ONNX 模型部署到 STM32全流程

使用 X-CUBE-AI 将 ONNX 模型部署到 STM32全流程

1、首先需要生成一个onnx文件,初始模型并没有经过训练。 嵌入式 AI 最耗费精力的往往不是模型训练,而是编译器版本、DFP 支持包、I2C 通信时序、内存对齐、串口重定向这些底层细节。用未经收敛的初始模型先把工程跑通,能确保在进入复杂的算法…

2026/9/24 7:24:02 阅读更多 →
Modbus RTU通讯不稳?别只查硬件,CRC与轮询时序才是隐形杀手

Modbus RTU通讯不稳?别只查硬件,CRC与轮询时序才是隐形杀手

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:24:02 阅读更多 →
ZLG USBCANFD-200U CAN FD通信调试全闭环指南

ZLG USBCANFD-200U CAN FD通信调试全闭环指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:24:02 阅读更多 →
大模型API开发实操指南:5个核心方法落地AI应用

大模型API开发实操指南:5个核心方法落地AI应用

随着大语言模型技术的成熟,调用模型API进行应用开发已经成为软件开发的标准流程。许多开发者认为大模型开发门槛极高,但实际上,只要掌握正确的工程化方法,普通开发者也能快速构建实用的应用。本文将循序渐进地介绍大模型API开发的…

2026/9/24 7:24:02 阅读更多 →
Agent 工具越多越好吗?如何让模型准确选到该用的工具

Agent 工具越多越好吗?如何让模型准确选到该用的工具

刚开始做 Agent 时,我们通常会不断给它加工具。 查天气,加一个工具;搜网页,加一个工具;查数据库,再加一个;发邮件、读文件、调用业务 API……最后一个 Agent 身上可能挂着几十个,甚…

2026/9/24 7:24:01 阅读更多 →
SG90舵机与电位器闭环控制:从PWM原理到多平台实战

SG90舵机与电位器闭环控制:从PWM原理到多平台实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:23:01 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →