一个 API 连接微信服务号、邮件、短信等多渠道的消息推送平台。本文档面向开发者与 AI Agent,说明如何注册、获取令牌、调用接口完成消息推送。所有接口统一返回 {"code":200,"msg":"...","data":{...}} 结构。
在控制台首页完成注册(用户名 + 密码)。注册成功即自动生成你的第一个 API 令牌,可直接使用;也可以按下方「获取 API 令牌」方式创建专用令牌。
进入控制台 → 左侧「令牌管理」→ 新建令牌 → 复制令牌字符串。令牌是调用推送接口的唯一凭证,请妥善保管。
把下方示例中的 YOUR_API_TOKEN 替换为你的令牌,复制到终端执行:
# 发送一条微信消息(未绑定渠道时进入开发模式,消息仅打印到服务端控制台)
curl -X POST https://ddnt.com/api/push \
-H "Content-Type: application/json" \
-d '{
"token": "YOUR_API_TOKEN",
"title": "服务器告警",
"content": "CPU 使用率 99%,请及时处理!",
"channel": "wechat"
}'
返回 {"code":200,"msg":"推送成功",...} 即对接成功。
API 令牌用于调用消息推送接口(/api/push)。有两种获取方式:
登录后调用(需携带 JWT):
# 1. 登录获取 JWT
curl -X POST https://ddnt.com/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "YOUR_USERNAME", "password": "YOUR_PASSWORD"}'
# 返回: {"code":200,"data":{"token":"<JWT>","username":"..."}}
# 2. 用 JWT 创建 API 令牌
curl -X POST https://ddnt.com/api/tokens \
-H "Authorization: Bearer <JWT>" \
-H "Content-Type: application/json" \
-d '{"name": "服务器A"}'
# 返回: {"code":200,"data":{"token":"<API令牌>","name":"服务器A"}}
Base URL:https://ddnt.com(本地开发 http://localhost:3000)。所有接口默认使用 HTTPS。
| 鉴权方式 | 适用接口 | 传递方式 |
|---|---|---|
| API 令牌 | 推送接口(POST /api/push) | 请求体 JSON 字段 token,或 URL 查询参数 ?token=xxx |
| 会话 JWT | 控制台接口(消息/话题/工单/AI 等) | 请求头 Authorization: Bearer <JWT>,由注册/登录接口返回 |
POST/api/push
发送一条消息,支持单发、一对多话题群发、多渠道同时投递。这是平台最核心的接口。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
token | string | 是 | API 令牌 |
title | string | 否 | 标题,最长 200 字符 |
content | string | 是 | 正文,最长 5000 字符 |
channel | string | 否 | 渠道:wechat(默认)/ email / sms;可逗号多选,如 "wechat,email" |
topic | string | 否 | 话题名:填写后群发给该话题全部订阅者(各渠道分别投递);话题不存在返回 400 |
to | string | 否 | 指定收件人:openid / 邮箱 / 手机号;不填则使用该渠道默认绑定 |
curl -X POST https://ddnt.com/api/push \
-H "Content-Type: application/json" \
-d '{
"token": "YOUR_API_TOKEN",
"title": "版本发布通知",
"content": "v2.3.0 已上线,包含 12 项更新。",
"channel": "wechat,email",
"topic": "全体员工"
}'
curl -X POST https://ddnt.com/api/push \
-H "Content-Type: application/json" \
-d '{
"token": "YOUR_API_TOKEN",
"content": "您的验证码是 886512,5 分钟内有效。",
"channel": "sms",
"to": "13800138000"
}'
{ "code": 200, "msg": "推送成功",
"data": { "recipients": 1, "channel": "wechat", "target": "oXXXX_xxxxxxxxxx" } }
场景:一条消息推送给一群人。流程:创建话题 → 收集订阅者 → 向话题推送即群发。
| 接口 | 说明 |
|---|---|
| GET/api/topics | 我的话题列表 |
| POST/api/topics | 创建话题,body:{"name": "全体员工"} |
| DELETE/api/topics/:id | 删除话题 |
| POST/api/topics/:id/subscribe | 添加订阅者,body:{"channel":"email","target":"user@example.com"} |
| DELETE/api/topics/:id/subscribers | 移除订阅者(body 传 subscriber_id) |
以下接口需 JWT 鉴权。
| 接口 | 说明 |
|---|---|
| GET/api/tokens | 我的令牌列表 |
| POST/api/tokens | 新建令牌,body:{"name": "服务器A"},返回完整令牌(仅此一次明文返回) |
| DELETE/api/tokens/:id | 删除令牌,立即失效 |
| 接口 | 说明 |
|---|---|
| GET/api/messages | 我的投递记录,分页参数:?page=1&size=20 |
绑定自有渠道后,推送将使用你的凭证发送(自有优先,未绑定则回落平台默认渠道)。
| 接口 | 说明 |
|---|---|
| GET/api/channels | 渠道列表与绑定状态 |
| POST/api/channels | 保存渠道配置(微信 AppID/AppSecret、SMTP、短信服务商) |
| DELETE/api/channels/:type | 解绑渠道(type:wechat/email/sms) |
| 接口 | 说明 |
|---|---|
| POST/api/auth/register | 注册:{"username","password","email?"},返回 JWT 与初始 API 令牌 |
| POST/api/auth/login | 登录:{"username","password"},返回 JWT |
| 接口 | 说明 |
|---|---|
| GET/api/me | 我的总览:令牌数 / 绑定数 / 消息数 / 功能订阅 / MQTT 统计 / 套餐与配额 |
| PATCH/api/me/profile | 修改联系方式:{"email","phone"}(作为推送默认目标) |
| GET/api/announcements | 站点公告列表 |
| 接口 | 说明 |
|---|---|
| GET/api/plans | 公开:套餐列表与价格(免费/基础/专业/企业) |
| GET/api/subscription | 我的套餐与配额用量(wx/sms/email/tmEval/tmOpp/tmMonitor) |
| POST/api/subscription | 发起订购,返回支付信息(支持微信支付 / 对公转账) |
| GET/api/billing/orders | 我的订单记录 |
| GET/api/billing/transactions | 余额流水(充值 / 消费 / 返还) |
| POST/api/billing/redeem | 兑换卡充值:{"code":"16位兑换码"} |
| GET/api/billing/methods | 支持的支付方式列表 |
| 接口 | 说明 |
|---|---|
| GET/api/features | 功能列表(商标监控 / 评估 / 商机 / 网页监测 / MQTT 等) |
| GET/api/features/mine | 我的订阅列表 |
| POST/api/features/:id/subscribe | 订阅功能,body:{"config": {...}} |
| DELETE/api/features/:id/subscribe | 取消订阅 |
| POST/api/features/:id/push-now | 立即触发一次该功能巡检并推送结果 |
商标评估 / 商机查询按次扣费,结果自动推送到绑定的微信 / 邮箱 / 手机。
| 接口 | 说明 |
|---|---|
| POST/api/trademark/evaluate | 文字商标注册成功率评估:{"keyword":"商标名","class":35}(扣 1 次调用) |
| POST/api/trademark/image-evaluate | 图形商标评估(图片 base64 dataURL) |
| GET/api/trademark/evaluations | 我的评估历史 |
| POST/api/trademark/opportunity-search | 商机查询(到期续费 / 地址变更 / 主体变更) |
| GET/api/trademark/monitors | 我的商标监控列表 |
物联网场景:设备通过 MQTT 发布消息 → 平台自动推送到你绑定的渠道(不占套餐配额)。需先在「功能市场」开通 MQTT 订阅。
| 接口 | 说明 |
|---|---|
| GET/api/mqtt/info | 服务器连接信息(broker 地址 / 端口 / 是否 TLS) |
| POST/api/mqtt/devices | 新建设备,返回账号 / 密码 / 主话题(敏感信息仅此一次显示) |
| POST/api/mqtt/devices/:id/topic | 绑定自定义话题:{"topic":"jnt/自定义"} |
| POST/api/mqtt/devices/:id/password | 重置密码(旧密码立即失效) |
| DELETE/api/mqtt/devices/:id | 注销设备 |
| GET/api/mqtt/devices/:id/messages | 设备消息日志 |
# 消息体(JSON):title=标题, content=内容, channel=渠道(可逗号多选)
{ "title": "设备告警", "content": "温控器温度超限 42℃", "channel": "wechat,email" }
# 也可直接发纯文本,整段作为 content
# 客户端示例(mosquitto):
mosquitto_pub -h YOUR_BROKER_HOST -p 1883 -u YOUR_DEVICE_USER -P YOUR_DEVICE_PASS \
-t "jnt/你的主话题" -m '{"title":"设备告警","content":"温度超限","channel":"wechat"}'
平台内置 AI 对话(按 token 计费,余额兜底扣费)。
| 接口 | 说明 |
|---|---|
| GET/api/ai/usage | 用量统计:?days=7|30,返回 AI 对话 / Token / 费用 / 推送 / 余额 / MQTT |
| GET/api/ai/conversations | 会话列表 |
| POST/api/ai/conversations | 新建会话:{"model":"..."} |
| POST/api/ai/chat | 发送对话:{"conv_id","content"},返回 AI 回复 |
| DELETE/api/ai/conversations/:id | 删除会话 |
在控制台「帮助与反馈」提交问题,后台客服实时回复;支持文字与图片(单张 ≤2MB)。
| 接口 | 说明 |
|---|---|
| GET/api/tickets | 我的工单列表(含回复数 / 状态) |
| POST/api/tickets | 提交工单:{"title","content","images":[url]} |
| GET/api/tickets/:id/messages | 工单对话消息列表 |
| POST/api/tickets/:id/messages | 回复工单(回复后自动重新打开) |
| POST/api/tickets/upload | 上传图片(base64 dataURL),返回图片 URL 供工单引用 |
控制台「运维服务」内置一组开发者常用工具:Whois / DNS / SSL 证书 / TCP 拨测 / 端口扫描 / 备案查询。所有接口为登录会话鉴权(Cookie JWT),也可用 API Token 直调;目标为主域名或公网 IP(禁止内网地址,防 SSRF)。
| 接口 | 说明 |
|---|---|
| POST/api/ops/whois | Whois 原文查询:{"domain":"ddnt.com"} |
| POST/api/ops/dns | DNS 记录查询:{"domain","type":"A|AAAA|CNAME|MX|NS|TXT|SOA|CAA","resolver":"可选 223.5.5.5 等"} |
| POST/api/ops/ssl | SSL 证书详情(颁发者 / 有效期 / 剩余天数 / SAN) |
| POST/api/ops/ping/run | TCP 快速拨测:{"host","port":443,"count":4},返回 min/avg/max 与丢包 |
| POST/api/ops/ping/multi | 多线路拨测:5 个公共 DNS 并行解析逐 IP 拨测,附省份 / 运营商地图 |
| POST/api/ops/port/check | 端口扫描:{"host","ports":"80,443,3389"}(最多 20 个) |
| POST/api/ops/icp | 域名 ICP 备案查询(24h 缓存;数据源需在后台配置) |
| GET/api/ops/pricing | 即时查询计价(enabled + 各动作单价;未开启时全为 0) |
把目标加入监测任务后,平台按间隔自动拨测;「下线」「恢复」状态变化时向你选择的渠道(微信 / 邮件 / 短信)推送告警。检测过程自动采样延迟,控制台可看近 24 小时延迟曲线(保留 7 天)。SSL 到期 / 备案变更 / DNS 变更监测同在「运维服务」分区管理。
| 接口 | 说明 |
|---|---|
| GET/api/ops/ping/tasks | 监测任务列表(每用户最多 20 个) |
| POST/api/ops/ping/tasks | 创建任务:{"name","host","port":443,"interval_min":5,"alert_channel":"wechat"} |
| POST/api/ops/ping/tasks/:id/run | 立即检测一次 |
| GET/api/ops/ping/tasks/:id/history | 近 24 小时延迟采样(ts / ok / avg_ms / lost_pct,最多 300 点) |
| DELETE/api/ops/ping/tasks/:id | 删除任务 |
在你的服务器上运行零依赖 Agent(Node 18+,无需安装依赖),每 10 秒上报 CPU / 内存 / 磁盘 / 负载 / 网络流量;离线超过 3 分钟或超过自设阈值时自动推送告警。控制台可看实时占用与资源趋势图。
# 1. 控制台「运维服务 → 服务器探针」创建探针,拿到 token
# 2. 在被监控服务器上执行(命令可在控制台一键复制):
curl -sL https://ddnt.com/probe-agent.js -o probe-agent.js && node probe-agent.js https://ddnt.com/api/ops/probe/report YOUR_TOKEN
# 3. 建议用 systemd / pm2 常驻,如:
pm2 start probe-agent.js -- YOUR_REPORT_URL YOUR_TOKEN
| 接口 | 说明 |
|---|---|
| GET/api/ops/probe/servers | 探针列表(实时 CPU / 内存 / 负载 / 在线状态) |
| POST/api/ops/probe/servers | 创建探针:{"name","host","cpu_thr","mem_thr","disk_thr","alert_channel"},返回 token(仅此一次) |
| GET/api/ops/probe/servers/:id/metrics | 近 60 次上报采样(趋势图数据源) |
| GET/api/ops/probe/servers/:id/install | 取安装命令(含下载地址与 token) |
| POST/api/ops/probe/report | Agent 上报(公开接口,token 鉴权,最小间隔 5 秒):{"token","cpu","mem","disk","load1","net_in","net_out"} |
| DELETE/api/ops/probe/servers/:id | 删除探针(历史数据一并清除) |
持续监测任务与探针走「功能市场」订阅(ops-tools / ops-probe);即时查询类工具(Whois / DNS / SSL / 拨测 / 端口 / 备案)默认免费,平台开启按次计费后从平台余额扣费(单价见 /api/ops/pricing,余额不足返回 402)。监测任务本身的定时检测不扣费。
ddnt 平台 = 主控面板,服务器执行一键脚本或在线 SSH 安装后成为被控服务器。主控面板发起操作(软件商店 / 网站 / 反向代理 / Docker / Node / Java / Python / 数据库 / 计划任务 / 监控 / Web 终端 / 文件管理 / 安全审计),安装与执行脚本在被控服务器本地运行,执行日志保留在被控端,主控可随时请求分段回看。被控端零依赖、不开公网面板端口;实时能力(终端 / 文件 / 日志滚动)经 WebSocket 桥(被控出站连主控,零入站端口)。
# 方式 A · 复制脚本:主控「控制面板 → + 复制脚本接入」生成一次性命令,到新服务器执行
curl -fsSL https://ddnt.com/install-panel.sh | bash -s -- --install-token YOUR_TOKEN --name '我的服务器'
# 装完自动注册进主控面板列表,可自定义名称;install-token 一次性,注册后作废
# 方式 B · 在线 SSH:主控「+ 在线 SSH 安装」填 IP/端口/账号/密码或私钥,平台远程自动安装
# 凭据默认安装完即删(可勾选加密留存供后续直连)
主控地址自动探测:生成命令时优先取 PUBLIC_BASE_URL 环境变量,其次浏览器实际访问地址(Origin/Referer 请求头),最后才是请求 host;生成后弹窗内可手工修改「主控地址」,命令 URL 实时同步,检测到本机/内网地址会给出醒目告警。在线 SSH 安装同样使用该探测地址。生产环境建议显式配置 PUBLIC_BASE_URL(含 http(s):// 前缀)。
install-panel.sh 默认开启 --panel-port 8888(0=关闭),安装完成输出默认账号(admin)与随机密码;root 下 cat /opt/ddnt-panel/agent.json 可随时找回,登录后台可修改密码。本机后台提供:系统状态、主控绑定状态、本机执行日志查看、常用软件探测;并支持自主切断主控控制——切断后主控无法再向本机下发命令/终端/文件操作(面板状态转离线),本机面板不受影响,可随时在后台恢复或重跑接入命令重新绑定。已知限制:独立面板为纯 HTTP 无 TLS,建议仅内网/本机使用或经反向代理叠加 HTTPS;Agent 依赖 Node ≥21 提供内置 WebSocket(安装脚本自动装 Node 22,低于 21 时实时终端/文件桥自动降级跳过,命令与监控不受影响)。
install-panel.sh 默认开启 --panel-port 7856(0=关闭),安装完成输出默认账号(admin)与随机密码;root 下 cat /opt/ddnt-panel/agent.json 可随时找回,登录后台可修改密码。Dpanel 为可独立发布的产品(对标宝塔)。
套餐与授权(对标宝塔:免费全能 + 增值分层,企业 ⊇ 专业 ⊇ 免费):免费版=系统状态/执行日志/应用中心一键安装/防火墙端口管理/本机终端/SSL 证书(自签、上传、部署 nginx)/改密/自主切断主控;专业版=+网站防火墙 WAF、防篡改、监控报表、任务管理器、云备份、SSL 进阶(ACME 自动续期);企业版=+多用户、操作审计、SSH 审计、安全基线、开放 API、白标 OEM。升级:平台后台 POST /api/admin/dpanel/license/issue 签发激活码(Ed25519 离线验签,公钥随安装脚本下发到被控 dpanel-license.pub)→ Dpanel「授权管理」输入激活。已知限制:本机面板为纯 HTTP 无 TLS,建议内网使用或反代叠加 HTTPS;实时终端/文件桥(WS relay)需被控 Node ≥21(安装脚本自动装 Node 22,低版本自动降级跳过)。
Dpanel「WAF」页提供 nginx 层网站防火墙:CC 防护(limit_req 按源 IP 限速,速率/突发可调)、SQL 注入与 XSS 拦截(query_string 规则)、UA / URL / IP 黑名单(每行一条)、IP 白名单(跳过 CC 限速)、敏感路径拦截(.env/.git/wp-admin 等)与拦截日志。启用后写入 /etc/nginx/conf.d/dpanel-waf.conf 与 /opt/ddnt-panel/waf/server.conf;站点在「站点接入」列表一键接入(自动 include 并 nginx -t 校验,失败自动回滚)。规则保存即重载 nginx。
主控「软件商店」选 MySQL → 版本 5.7 → 确定 → 安装脚本在被控服务器本地执行(apt/yum)→ 命令状态变「成功」→ 点「📄 日志」从被控端实时回看安装日志 → 软件商店更新为「已安装」。命令执行日志按命令 ID 保留在被控端 $PANEL_WORKDIR/logs/cmd_<id>.log,可配置保留天数与大小轮转。
| 接口 | 说明 |
|---|---|
| POST/api/ops/panel/servers/install-script | 生成一键接入命令(含一次性 install-token) |
| POST/api/ops/panel/servers/install-register | 被控端注册:install-token 换正式运行 token(自动建记录) |
| POST/api/ops/panel/ssh-install | 在线 SSH 安装(host/port/user/password/privateKey,安装完即删凭据) |
| GET/api/ops/panel/servers | 被控服务器列表(在线/CPU/内存/磁盘/网络/主机名) |
| POST/api/ops/panel/servers/:id/commands | 下发命令:{"type","params","timeout_s"};type 见下方枚举 |
| GET/api/ops/panel/poll | 被控端拉命令(token 鉴权,Long-Poll;可选 MQTT 下发) |
| POST/api/ops/panel/report | 被控端回传执行结果(含本地日志路径) |
| POST/api/ops/panel/servers/:id/logs | 请求回看被控端本地命令日志(分段/grep/tail) |
| GET/api/ops/panel/servers/:id/ws-ticket | 签发一次性 WS 桥接票据(终端/文件/日志滚动用) |
| GET/api/ops/panel/store | 软件商店目录(nginx/mysql/php/redis/node/java/python/docker 各版本) |
| POST/api/ops/panel/servers/:id/apps | 软件商店安装(选版本,如 mysql 5.7)→ 被控本地执行 |
| POST/api/ops/panel/servers/:id/projects/:pid/:action | 项目部署/重启/停止/状态(action=deploy/restart/stop/start/status) |
| POST/api/ops/panel/servers/:id/sites | 网站/反向代理(proxy 或 static,自动生成 Nginx vhost 并 reload) |
| POST/api/ops/panel/servers/:id/databases | 数据库建库(MySQL/SQLite/Redis)+ 备份/恢复 |
| POST/api/ops/panel/servers/:id/crons | 计划任务(cron 表达式写入被控 crontab) |
| POST/api/ops/panel/servers/:id/audit | 安全审计(只读:SSH/防火墙/端口/容器暴露) |
命令类型枚举:install_runtime(软件商店)/ deploy(项目)/ site_add site_rm site_backup cert_issue(网站/SSL)/ nginx_reload / process_start|stop|restart|status / docker_compose|restart|stop|rm / cron_add|cron_del / db_create|db_backup|db_restore / fetch_log(日志回看)/ audit_report / agent_command(智能体入口)/ echo_test。执行严格走模板白名单 + 参数转义,审计全程留痕。
计费:控制面板走「功能市场」订阅(ops-panel);命令按次计费默认关闭(免费体验),后台「运维服务 → 控制面板」开启后按条扣平台余额(panel.price_cmd)。
DDNT(AI 动态能力互联网络)让 AI 智能体安全地「认识主人、按主人的规则办事」:账号所有者把画像、行为规则、长期记忆、重要私钥存进专属 AI 档案库(档案文件化+版本控制),再签发受限的 Agent Token 交给 AI 实例。AI 通过 MCP 协议读取资产、调用平台能力(推送/商标评估/运维查询),甚至经代理网关使用主人注册的外部 MCP 服务。全程审计,随时吊销。
| 凭证 | 能力 | 存放位置 |
|---|---|---|
| 主 API Token | 等同主人本人:推消息、读写资产、签发/吊销凭证 | 只存主人本机(~/.ddnt.json) |
| Agent Token(ddnt_ 前缀) | 按 scope 受限授权,可过期、可吊销、可限工具黑白名单 | 由 ddnt CLI 桥注入,绝不写进 AI 客户端配置 |
| scope | 授权内容 |
|---|---|
account:read | 账号信息 / 套餐 / 余额 / 配额(whoami) |
profile:read / rules:read / memory:read | 读取主人画像 / 行为规则 / 长期记忆(档案当前版) |
secrets:read | 读取储物柜私钥条目(服务端解密,明文不落日志) |
assets:write | 写入/更新资产档案(谨慎授权:默认不勾选;每保存即生成新版本) |
push:send | 发送消息推送(send_push) |
tm:eval | 商标注册成功率评估(tm_evaluate) |
ops:query | 运维查询工具箱(Whois / DNS / SSL / 拨测) |
mcp:proxy | 经代理网关调用主人注册的外部 MCP 服务工具 |
| 工具 | 所需 scope | 说明 |
|---|---|---|
whoami | account:read | 账号 / 套餐 / 余额 / 配额 |
asset_get | profile/rules/memory:read 任一 | 读档案(path=persona.md / memory.md / 项目名/档案名,version 可选);旧字段名 profile/rules/memory 自动映射 |
asset_set | assets:write | 写档案(覆盖式,保存即新版本,可回滚) |
asset_history | profile/rules/memory:read 任一 | 档案版本时间线 |
get_profile / get_rules / search_memory | profile:read / rules:read / memory:read | 加载主人画像 / 规则 / 检索长期记忆(search_memory 支持 project:缺省=仅全局,=项目名,="*" 全局+全部项目) |
list_secrets / get_secret | secrets:read | 私钥条目名列表 / 取值(服务端解密) |
send_push | push:send | 推送到微信 / 邮件 / 短信(支持 topic 群发) |
tm_evaluate | tm:eval | 商标注册成功率评估(平台规范报告) |
ops_whois / ops_dns / ops_ssl / ops_ping | ops:query | 域名 Whois / DNS 解析 / 证书检查 / 拨测 |
档案命名空间:全局资产 = persona.md / rules.md / memory.md + 自建档案(跨项目通用);项目资产 = <项目名>/档案名(如 my-app/devlog.md)。每次保存生成新版本(旧版不可变、可回滚=生成新版本)。
ext_<服务名>_<工具名> 命名混入 tools/list,仅 mcp:proxy 授权且在 Token 白名单(--mcp-allow)内的服务可见可用。外部服务在控制台「DDNT 网络 → 外部 MCP 服务」注册(仅接受公网地址,平台做 SSRF 防护并实时验活)。ddnt token revoke 即刻切断。mcp_deny 屏蔽指定工具(如 send_push),mcp_allow 限定可代理的外部服务白名单。X-DDNT-Depth 标记,外部工具回调 DDNT /mcp 直接拒绝(403 / -32001)。推荐:ddnt CLI 内置桥(Token 不进 AI 客户端,见下节 MCP(智能体接入))。
也支持远端直连(Token 会出现在客户端配置里,注意保管):
curl -X POST https://ddnt.com/mcp \
-H "Authorization: Bearer ddnt_xxxx" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
DDNT 能力网络走「功能市场」订阅门控(未订阅时 MCP 工具返回订阅提示);外部 MCP 代理转发可由平台开启按次计费(单价见 /api/ops/pricing 的 mcpproxy 项,默认关闭)。
| HTTP / JSON-RPC code | 含义 |
|---|---|
| 401 | 缺少 / 无效 / 已吊销 / 已过期的 Agent Token,或账号不存在 |
| 403 | Token 被风控冻结、账号封禁、工具不在授权范围(scope/黑名单/白名单)、调用回环(-32001) |
| 429 | 请求过于频繁:每 Token 每分钟限 60 次(-32002) |
| 400 / -32600 | 非 JSON-RPC 2.0 报文 |
| -32601 | 未知 method 或工具不存在 |
| isError 内容 | 「请先订阅《DDNT 能力网络》」=功能门控未开通;「权限不足:需要 xx scope」=重新签发凭证 |
DDNT 是中立、开放、包容的通用 AI 与设备调度通讯底座:不绑定任何自研组件,用户可基于下述三层开放能力完成全场景开发——完全不用平台前端、完全不用平台安全组件。
| 层 | 入口 | 适用对象 |
|---|---|---|
| CLI | ddnt(bin/ddnt.js,Node 18+,零依赖) | 运维/自动化脚本、CI、本地工作区同步(devlog「一本多版」沉淀) |
| HTTP API | /api/push、/api/agent/*(API Token 鉴权) | 任意语言程序化调用(推送/查状态/档案 CRUD/项目 CRUD) |
| MCP | /mcp(Agent Token 鉴权,Streamable HTTP / JSON-RPC 2.0) | 智能体直接对话式调用(读资产/写档案/推送/查询/代理外部工具) |
{"code":200,"msg":"...","data":{...}};判断成功只看 code===200,不依赖 HTTP 状态码(错误时 HTTP 与 code 同行,如 400/401/403/404/429/500)。tools/call 成功返回 MCP 标准 result.content[].text——文本型工具返回纯文本,数据型工具返回 JSON.stringify(obj,null,2);业务失败(权限/门控/参数/工具自身报错)统一为 result.isError=true + 提示文本(协议层仍 200);协议错误(未知 method、防回环、限流)走 JSON-RPC error(-32001 防回环 403 / -32002 限流 429 / -32601 未知工具 / -32600 报文非法)。persona.md 等单层名;项目 <项目名>/<档案名>(项目名小写字母/数字/连字符 ≤40,档案名 ≤64)。DB_TYPE=mysql + MySQL 参数;启动自动建表与迁移。SETTINGS_MASTER_KEY(≥16 位)等,未配置直接拒绝启动(防明文级泄露);JWT_SECRET / ADMIN_KEY 同理。DEV_MODE=1 放行本地外部 MCP 注册与固定密钥回退——仅限联调,生产禁止。# 默认本地(零依赖):密文经 每用户 DEK(AES-256-GCM) 信封加密后落库——自动可用
# 切换 agi.locker / 任意第三方 blob 存储(零知识:只保管密文不解密):
DDNT_LOCKER_URL=https://<服务地址> # 三件套齐备才启用,缺省 local 零风险启动
DDNT_LOCKER_KEY=<调用方 key>
DDNT_LOCKER_SECRET=<HMAC 密钥>
DDNT_ASSET_PROVIDER=locker|local
provider 适配契约(开放生态规范红线):任何能按 key 存取不透明字节的系统都能作为资产后端——只需实现 put/get/del(blobKey, 密文bytes) 语义(blobKey=u{user}/f{file}/v{version},不可变+同 key 幂等);加密永远是调用方(平台)的事,存储方不理解内容、不持密钥。
secrets:read 授权 AI 服务端读取——不要设计"回显明文"的脚本。平台统一品牌 CLI ddnt(Node 18+,零依赖),同时是推送工具、储物柜管家与 MCP 桥。源码在仓库 bin/ddnt.js,完整说明见 cli/README.md。原 jnt 指令已并入(旧配置与 JNT_* 环境变量仍兼容)。
# Linux/Mac 可直接使用;Windows 用 node 前缀,如 node bin/ddnt.js ...
npm link # 或直接 node bin/ddnt.js
ddnt config set-url https://ddnt.com
ddnt config set-token YOUR_API_TOKEN # 后台「令牌管理」创建(主 API Token)
# 环境变量优先(适合 CI):DDNT_API_BASE / DDNT_API_TOKEN(兼容 JNT_*)
| 命令 | 说明 |
|---|---|
ddnt config set-token <token> | 配置主 API Token(存 ~/.ddnt.json,兼容读取旧 ~/.junengtui.json) |
ddnt config set-agent-token <ddnt_xxx> | 配置 Agent Token(供 ddnt mcp 桥使用) |
ddnt config set-url <https://...> | 配置平台地址(默认 ddnt.com) |
ddnt whoami | 账号 / 套餐 / 余额 / 剩余配额 |
ddnt push <内容> [--title 标题] [--channel wechat|email|sms] [--to 收件人] [--topic 话题名] | 推送消息(topic 优先于 to) |
ddnt messages [--limit 10] / ddnt topics | 最近推送消息 / 我的话题列表 |
ddnt tm eval <名称> --cls 35|--all [--send email|wechat|sms] [--to 邮箱] | 商标注册成功率评估(可推送报告) |
ddnt tm send <记录ID> --channel email [--to 邮箱] | 把已生成报告按系统模板推送 |
ddnt asset get [字段|路径] [-v 版本] | 读取档案(旧字段名 profile/rules/memory/secrets 兼容;路径如 my-app/devlog.md) |
ddnt asset set <profile|rules|memory> [text] | 写入档案(text 缺省读 stdin,@path 读文件;保存=新版本)——推荐用下方工作区命令 |
ddnt init [--project 名称] | 生成本地工作区(三份模板 + .ddnt-sync.json 同步清单);--project 生成项目子文件夹 |
ddnt asset status | 本地 vs 服务器(已同步 / 待推送 / 待拉取 / 冲突) |
ddnt asset push [文件...] [-n 说明] [--force] | 上传=生成新版本;无参推全部本地改过的;路径带项目前缀自动识别项目 |
ddnt asset pull [名称...] [--force] | 拉取到工作区(冲突需 --force,覆盖前自动 .bak) |
ddnt asset diff / history / rollback <路径> <版本> | 本地对比 / 版本时间线 / 回滚(=生成新版本) |
ddnt project create <名称> [描述] / project list / project archive <名称> | 创建项目 = 服务器文件夹(预置 memory/rules 模板);列表 / 归档(只读保留) |
ddnt memory add "文本" [--project 名称] | 记忆快写:追加一行 memory.md 并自动上传(支持管道批量导入) |
ddnt token create --name X --scopes a,b [--days N] [--mcp-allow *|srv1,srv2] [--mcp-deny t1,t2] | 签发 Agent Token(明文仅显示一次) |
ddnt token list / ddnt token revoke <id> | 凭证列表(仅前缀)/ 吊销 |
ddnt mcp [--token ddnt_xxx] | MCP stdio→HTTP 桥(供 AI 客户端配置为 command) |
# 服务器告警推送到邮箱
ddnt push "服务器告警:CPU 超 90%" --title 告警 --channel email --to ops@ddnt.com
# 写入主人画像并签发只读凭证
echo "主人是全栈开发者,偏好简洁回答" | ddnt asset set profile -
ddnt token create --name claude --scopes profile:read,rules:read,memory:read --days 30
推荐用 ddnt CLI 内置桥 ddnt mcp:AI 客户端通过 stdio 与本进程对话,本进程携带 Agent Token 转发到平台 /mcp(Streamable HTTP)。Token 只存主人本机,AI 客户端配置文件里没有任何密钥,泄露或滥用一条 ddnt token revoke 即刻切断。工具清单与安全机制见 DDNT 能力网络。
ddnt token create --name my-ai --scopes profile:read,rules:read,memory:read,push:send,mcp:proxy --mcp-allow '*'
ddnt config set-agent-token <上一步输出的 ddnt_xxx> # 或环境变量 DDNT_AGENT_TOKEN
{
"mcpServers": {
"ddnt": {
"command": "node",
"args": ["/绝对路径/junengtui/bin/ddnt.js", "mcp"]
}
}
}
{
"mcpServers": {
"ddnt": {
"command": "node",
"args": ["/绝对路径/junengtui/bin/ddnt.js", "mcp"]
}
}
}
CLI 与 MCP 底层使用的查询接口,均以 API Token 鉴权(与网页会话隔离),适合程序化读取账号状态。鉴权三种方式任选:Authorization: Bearer <token>、X-Api-Token 头、或 body/query 传 token(与推送接口一致)。
| 接口 | 说明 |
|---|---|
| GET/api/agent/whoami | 账号信息 + 套餐 + 余额 + 剩余配额 + 令牌列表(API Token) |
| GET/api/agent/messages?limit=10 | 最近推送消息(content 截断 200 字,?before=id 游标翻页) |
| GET/api/agent/topics | 我的话题列表(含订阅数) |
# 查询账号余额与配额
curl https://ddnt.com/api/agent/whoami -H "Authorization: Bearer YOUR_API_TOKEN"
以下为几个典型接入场景,复制后替换令牌与参数即可直接使用。
curl -X POST https://ddnt.com/api/push \
-H "Content-Type: application/json" \
-d '{
"token": "YOUR_API_TOKEN",
"title": "服务器告警",
"content": "CPU 使用率 99%,已持续 5 分钟",
"channel": "wechat"
}'
curl -X POST https://ddnt.com/api/push \
-H "Content-Type: application/json" \
-d '{
"token": "YOUR_API_TOKEN",
"topic": "订单通知组",
"title": "新订单提醒",
"content": "订单 #20260829 已支付 ¥299.00",
"channel": "wechat,email"
}'
先在「话题订阅」中创建话题并让成员订阅,群发一次触达全部订阅人。
设备通过 MQTT 发布一条消息到已订阅的主题,平台自动将其转化为微信/邮件推送;设备数据也可以经 Webhook 回调进入业务系统。详见「MQTT 订阅」章节。
在控制台「备忘录」设置每日定时提醒,或用「监测中心」监控网页/接口/关键词变化,变化即推送——无需编写任何代码。
jnt 更名 ddnt,新增 asset / token / mcp 子命令;旧版独立 stdio MCP 脚本废弃,由 ddnt mcp 内置桥替代。未绑定微信/邮箱时调用推送接口会怎样?
接口会返回 400 提示尚未绑定;未配置渠道凭证时进入开发模式,消息仅打印到服务端控制台,便于联调。
免费配额包括哪些?
注册即赠免费调用配额,覆盖消息推送、商标评估、AI 试用与 MQTT 基础订阅;超出后按套餐配额或余额按量计费。
API 令牌泄露了怎么办?
立即到控制台「令牌管理」删除该令牌并新建;令牌删除后即刻失效,不影响账户其他数据。
支持哪些接入方式?
REST API(OpenAI 风格)、CLI 命令行工具(ddnt)、MCP 智能体协议(DDNT 能力网络)、MQTT 订阅与 Webhook 事件回调,均可完成推送与查询。
遇到问题如何反馈?
登录控制台后通过「帮助与反馈」提交工单,或发送邮件联系支持团队,工作日 24 小时内回复。
| code | HTTP | 含义 | 常见原因 |
|---|---|---|---|
| 200 | 200 | 成功 | — |
| 400 | 400 | 参数错误 | 缺参数 / 格式不正确 / 内容超长 / 话题不存在 |
| 401 | 401 | 未认证 | 令牌缺失或无效(请检查 token 是否正确) |
| 403 | 403 | 无权限 | 账号被封禁 / 未登录访问受保护接口 |
| 404 | 404 | 资源不存在 | 接口路径或资源 ID 错误 |
| 429 | 429 | 请求过于频繁 | 触发限流(推送 60 次/分钟,通用 200 次/分钟) |
| 500 | 500 | 服务器错误 | 服务端异常,请稍后重试或提交工单 |
如果你是一个 AI Agent 或自动化脚本,首选 MCP 接入(见上文,可直接对话调用);也可直接用 HTTP 接口。请遵循以下约定:
Authorization: Bearer <token>(或 X-Api-Token 头);其余控制台接口用 Authorization: Bearer <JWT>(JWT 从登录接口获取)。{"code":200,"msg":"...","data":{...}};判断成功只看 code === 200,不要依赖 HTTP 状态码。content 必填;channel 缺省为 wechat;要群发请先建话题再传 topic;未指定收件人且未绑定渠道时会返回 400 提示。