Skip to main content
本页给出适配器的完整协议参考。先看 适配器总览适配器插件开发规范 获取最小落地路径。

Control 消息信封

control websocket 上的业务消息都是 JSON object。backend 和 worker 都可以发起调用。
成功响应:
失败响应:
要求:
  • 响应必须原样返回 aut_echo
  • 响应不要带 aut_action
  • aut_params 必须是对象;没有数据时返回 {}
  • 捕获 worker 内部异常,并转成 ok:false

初始化和能力声明

control 连接建立后,backend 会发送 adapter_init。你应先缓存配置、重建账号索引、重置临时状态,再发送 adapter_worker_ready adapter_init.aut_params 的关键字段: 账号配置示例:
声明能力:
supports_qr_login 有两层:
  • manifest 头注 //[supports_qr_login: true]:声明适配器提供扫码登录入口,供设置页展示。
  • adapter_worker_ready.aut_params.supports_qr_login:声明当前在线 worker 真正支持扫码动作。
backend 真正发起 adapter_login_qr_startadapter_login_qr_wait 前,只检查第二层运行时能力。

账号解析

实现 adapter_codec_resolve_account,从 headers、query 或 raw_payload 找到当前 bot 账号。 请求:
成功响应:
规范:
  • 成功时 account_id 必填,并与账号配置中的 account_id 一致。
  • meta 只放非敏感字符串,例如平台名、连接角色、短 ID。
  • 解析不到账号时返回 ok:false 和可排查的 aut_error

入站标准化

实现 adapter_codec_normalize_inbound,把平台 payload 转成 StandardMessageEvent 数组。字段名使用 Go 结构体字段名,例如 IMTypeAccountIDEventCategory
媒体项格式:

出站构造

实现 adapter_codec_build_outbound,把 autClaw 标准动作转成平台 payload。 请求:
Gateway 型返回:
Worker 自发送返回:
目标规则:
  • 群消息使用 session_type: "group" + chat_id
  • 私聊消息使用 session_type: "private" + user_id
  • 需要回执时,把 request_id 写入平台 echononce 或等价字段。

出站执行和回执

如果 build_outbound 返回 executor: "worker",backend 会调用 adapter_execute_outbound
响应:
注意两层 ok:外层 ok 表示 control RPC 是否成功;aut_params.ok 表示平台发送是否成功。 Gateway 型适配器要实现 adapter_codec_decode_receipt
如果 payload 不是回执,返回 {"matched":false},backend 会继续按普通入站事件处理。

扫码登录

支持扫码登录的适配器需要先完成核心 codec,在 manifest 中声明 //[supports_qr_login: true] 作为入口提示,并在 adapter_worker_ready 中上报 supports_qr_login: true。backend 只会向已上报运行时能力的在线 worker 调用扫码动作。 启动扫码:
返回二维码信息:
等待扫码结果:
未完成时返回当前状态:
扫码成功时返回账号配置:
字段约定: 要求:
  • 不支持扫码登录的适配器不要声明 //[supports_qr_login: true],也不要上报 supports_qr_login: true
  • 只声明 manifest 头注会显示入口,但 backend 仍不会调用扫码动作。
  • 已上报 supports_qr_login: true 时,两个 action 都必须通过 control 信封响应,并原样返回 aut_echo
  • account_config.schema_values 不要写入无关字段;日志和 message 不要泄露 token、密码、私钥、验证码或完整签名。

主动动作

主动发送示例:
账号状态示例:
扫码登录动作也使用同一 control 信封,见上方“扫码登录”。

媒体发送契约

普通插件调用 replyImagereplyVoicereplyVideoreplyFilereplyMixed 后,backend 会把媒体放进出站 payload.mediapayload.items 默认不要声明:
默认模式下,backend 会尽量把本地文件转换成临时 URL,再传给 worker:
只有 worker 与 backend 共用文件系统,且平台 SDK 必须读取本地文件时,才声明本地文件路径模式:
这时 backend 会提供 file_path
处理规则:
  • 优先读取 media.source
  • 只有声明 requires_file_path 后才读取 media.file_path
  • 支持 http://https://data:base64://、平台 file key 和临时资源 URL。
  • 文件发送要保留 name / file_namemime_type
  • 不要把本地路径发给远端平台。

最小 Node.js 框架

发布前检查

  • 收到 adapter_init 后再处理平台业务消息。
  • 所有带 aut_echo 的调用都能响应成功或失败。
  • 主动调用 backend 时维护 pending map,并设置超时。
  • control 断开时清理 pending 调用并退避重连。
  • EventDatameta 和日志不要包含敏感信息。
  • 群聊、私聊、媒体、撤回、账号离线和平台错误都要做实测。
最后修改于 2026年7月10日