RTA Integration Guide
RTA 实时决策对接指南
RTA(Real-Time API)让广告主在竞价瞬间完成流量过滤:元气智广在每次广告请求时实时询问您的参竞意向, 由您基于人群与策略返回参竞计划。本指南覆盖从接口开发到上线的完整流程。
一个高并发、低延迟的 HTTPS 查询接口:接收元气智广发来的设备信息与候选计划列表(rtaIds), 查询您的人群与策略数据,60ms 内返回允许参竞的计划列表。 整个对接通常可在 1–2 周内完成(含压测)。
工作原理
RTA 的核心是竞价前置过滤:广告请求到达元气智广后,元气智广不会直接投放, 而是先实时调用您的 RTA 接口,把本次请求对应的候选计划(rtaIds)和用户设备信息发给您; 您根据自己的定向策略筛选出允许参竞的计划返回,元气智广据此决定本次流量是否投放您的广告。
- 广告请求到达元气智广 携带候选计划 ID 列表(rtaIds,由您的 RTA 服务分配,用于区分调用的 DMP 库)与用户设备信息。
- 元气智广实时调用您的 RTA 接口 以 HTTP POST + JSON 将设备信息与 rtaIds 发给您,要求 60ms 内返回结果。
- 您返回参竞决策 查询人群包、频控、预算等策略数据,返回允许参竞的计划列表(code=0)。
- 元气智广执行投放决策 返回结果命中则继续投放流程;异常情况(超时、解析失败、必填缺失)本次请求将被跳过,无法参竞。
RTA 解决「竞价前过滤」,转化跟踪解决「转化后回传」,两者独立、可并存。若您尚未完成转化跟踪对接,请先阅读转化跟踪对接指南。
接入前提
开始开发前,请确认具备以下条件:
- HTTP 服务:可公网访问的接口,支持 POST + JSON(
Content-Type: application/json),建议配置 IP 白名单 - 策略数据源:人群包、频控、预算等决策数据的毫秒级查询能力(本地缓存 / 内存索引)
- 容量评估:与元气智广确认预估峰值 QPS,并预留冗余
- rtaIds 分配:rtaIds 由您的 RTA 服务分配,用于区分调用的 DMP 库——开发前先与元气智广确认分配给元气智广的 rtaId 列表
- 技术联系人:用于联调排障对接
请求说明
元气智广在每次竞价时调用您提供的接口:
- 网络协议:HTTP POST,序列协议采用 JSON,Header:
"Content-Type": "application/json" - HTTP 状态码:
200为正常,其余状态码默认按异常处理 - 响应时长:广告主侧需在 60ms 内返回结果(包括网络传输时间 + 内部处理时间)
- 调用频率:与广告请求量同级,需按确认的峰值 QPS 承载
RTA 处于竞价关键路径上。请务必将策略数据放在内存或本地缓存中,避免在 RTA 链路里做远程查询;一旦超时,本次请求将无法参竞。
请求字段
顶层字段
| 字段 | 类型 | 是否必填 | 含义 | 示例 |
|---|---|---|---|---|
| reqId | string | 是 | 单次请求唯一标识 ID | 2abd9780-511a-4549-b982-072dd9b5e198 |
| rtaIds | int64[] | 是 | 本次请求对应的 rta_id 列表。由您的 RTA 服务分配,用于区分调用的 DMP 库 | [0, 1, 2] |
| device | struct | 有则必填 | 设备号结构体,见下表 | — |
device 结构体
| 字段 | 类型 | 是否必填 | 含义 | 示例 |
|---|---|---|---|---|
| os | int64 | 是 | 操作系统:0 未知设备 / 1 安卓设备 / 2 苹果设备 | 1 |
| osVersion | int64 | 否 | 操作系统版本 | 13 |
| model | string | 否 | 机型 | Pixel 7 |
| imeiMd5 | string | 否 | 安卓设备 ID 的 MD5 加密,32 位小写 | 6a347365d63ff0069082753748b8a825 |
| oaid | string | 否 | oaid 原值,Android Q 及更高版本的设备号 | 77CE527B70CB45AD… |
| oaidMd5 | string | 否 | oaid 的 MD5 加密,32 位小写 | — |
| androidId | string | 否 | Android ID 原值 | 864162033703542 |
| idfa | string | 否 | idfa 原值,iOS 6+ 的设备 ID 字段,32 位 | 76B17F93-F503-4CF4-A05E-7A9FUECDA144 |
| ip | string | 否 | 设备 IP 地址 | 112.224.33.246 |
| userAgent | string | 否 | 客户端 UA | Mozilla/5.0 (Linux; Android 13)… |
| caid | string | 否 | 中广协 caid,主要用于识别 iOS 设备,最新版本值 | cb8dbf140e893a9ca30eb68981576a3b |
| caid2 | string | 否 | 中广协 caid,主要用于识别 iOS 设备,上一个版本值 | 0ba891db03cb7db0a826050f315cc3f4 |
- 安卓设备传:
imeiMd5、oaid、androidId - iOS 设备传:
idfa、caid、caid2 - 有值都需要传,无值请设置为空字符串,具体以联调结果为准
响应格式
请以 HTTP 200 + JSON 响应:
响应字段定义
| 字段 | 类型 | 是否必填 | 含义 | 示例 |
|---|---|---|---|---|
| reqId | string | 是 | 单次请求唯一标识 ID,和请求中的 reqId 相同 | 2abd9780-511a-4549-b982-072dd9b5e198 |
| code | int32 | 是 | 状态码:0 表示请求成功,其他表示错误 | 0 |
| rtaIds | int64[] | 是 | 指定允许参竞的 rtaId 列表 | [1] |
不同返回结果的处理逻辑
| 您的返回 | 处理结果 |
|---|---|
| code=0,rtaIds 命中 | 允许参竞,进入投放流程 |
| code=0,rtaIds 为空 / 未命中 | 本次不参竞 |
| code≠0 | 本次请求被丢弃,无法参竞 |
| 超时 / 数据格式无法解析 / 必填字段缺失 / 非 200 状态码 | 本次请求被丢弃,无法参竞 |
设备号加密规则
- 加密规则:
imei原值进行 MD5 加密(imeiMd5);oaid/idfa/androidId/caid原值发送 - 加密方法(Java 示例):
imeiMd5 = DigestUtils.md5Hex(imei).toLowerCase(); - 注意:当设备信息为空值时,直接不做填充
imei:860264037477800
imeiMd5:27f356d483b2799e7fcb59255bf1cb99(32 位小写)
请求与返回示例
请求示例
{
"reqId": "2abd9780-511a-4549-b982-072dd9b5e198",
"rtaIds": [0, 1, 2],
"device": {
"os": 1,
"osVersion": 13,
"model": "Pixel 7",
"imeiMd5": "6a347365d63ff0069082753748b8a825",
"oaid": "77CE527B70CB45AD991D8535BF94388914436004019A9D5BC74C30E80BE184F1",
"androidId": "864162033703542",
"idfa": "",
"ip": "112.224.33.246",
"userAgent": "ting_8.3.18(V1941A,Android29)",
"caid": "",
"caid2": ""
}
}
返回示例
{
"reqId": "2abd9780-511a-4549-b982-072dd9b5e198",
"code": 0, // 0:成功,其他表示错误
"rtaIds": [1] // 指定允许参竞的 rta_id 列表
}
步骤 1:开发 RTA 接口
按接口规范实现查询服务,重点满足以下要求:
-
协议与格式
HTTP POST + JSON,按上文字段表解析,缺省字段做容错;响应固定为
{reqId, code, rtaIds},且 reqId 与请求保持一致 - 毫秒级决策 人群包、频控、预算等策略数据全部预载到内存 / 本地缓存,接口内部不做远程调用,确保 60ms 内(含网络传输)返回
- 无状态、可水平扩展 接口不依赖会话,相同输入返回一致结果,便于按 QPS 扩容
-
快速失败
内部异常时立即返回
code=0, rtaIds=[],不要等待或重试上游依赖——快速返回空结果的影响远小于超时丢弃 -
日志与排障
记录
reqId/ 收到的 rtaIds / 返回的 rtaIds,便于联调与线上对齐
步骤 2:登记接口信息
将以下信息提供给元气智广对接人:
- 接口 URL:生产与测试环境各一套(建议)
- 预估 QPS 承诺:可承载的峰值 QPS(元气智广侧将据此配置)
- IP 白名单:如您的接口有访问限制,提供需放行的元气智广出口 IP
- rtaIds 确认:确认分配给您用于区分 DMP 库的 rtaId 列表
- 技术联系人:联调与故障升级通道
步骤 3:联调测试
-
模拟请求验证
元气智广发送样例请求,核对您的解析结果与响应格式;提供
reqId便于双向对齐日志 - 延迟压测 按预估峰值 QPS 压测,确认 60ms 内返回且无错误率抬升
- 异常演练 验证:服务重启、依赖超时、返回 code≠0 等场景下,您的接口将被跳过,不会参与本次投放,符合预期
- 端到端验证 在测试链路发起真实广告请求,确认「参竞 → 投放 → 转化回传」全链路数据一致
步骤 4:上线与监控
- 灰度放量 先切小比例流量观察参竞率、延迟与错误率,稳定后逐步放量到全量
- 参竞效果监控 双方各自监控参竞率与错误率,异常时按时间点与 reqId 对齐日志
- 例行变更 接口 URL、扩缩容、证书更换等变更请提前 1 个工作日通知我们
异常处理
| 场景 | 处理结果 |
|---|---|
| 响应超时(超过 60ms) | 本次请求被丢弃,无法参竞 |
| 返回数据格式无法解析(非 JSON / 非 200) | 本次请求被丢弃,无法参竞 |
| 必填字段缺失(reqId / code / rtaIds) | 本次请求被丢弃,无法参竞 |
| code≠0 | 本次请求被丢弃,无法参竞 |
异常情况下一律丢弃不重试,因此请确保您的接口具备降级能力——任何内部异常都应立即返回 code=0, rtaIds=[],由您的策略侧决定最终参竞行为,而非交给网络超时。
FAQ
响应时长 60ms 包含什么?
包含网络传输时间 + 您的内部处理时间。因此请把内部处理预算控制得更紧(建议 50ms 以内),给网络往返留余量。
超时后会重试吗?
不会。请确保您的接口在 60ms 内稳定返回,超时将导致本次请求无法参竞。
rtaIds 是什么?从哪里获取?
rtaIds 由您的 RTA 服务分配,用于区分调用的 DMP 库。开发前请与元气智广对接人确认您分配给元气智广的 rtaId 列表,并在返回中只使用这些 ID。
如何排障?
每次请求携带唯一 reqId。排障时提供 reqId 及大致时间点,双方即可对齐日志。
恭喜!完成以上步骤后,您的 RTA 接口即进入正式服务状态。如有问题,请联系您的商务经理或技术支持。