1. 消息推送
Adventists - API文档
  • 总览
  • 更新日志
  • 基本配置
  • 2.5 更新
  • Quick Start
  • Demos
  • Emoji 表情定制指南
  • TCP语音对话
    • TCP接入
    • MCP协议接入
    • WebSocket快速接入
    • VAD 模式接入指南
    • Emoji 模式对接指南
    • 会议系统接口文档
    • TCP获取Token
      POST
  • 配置管理
    • 模版 与 角色
    • 名词和参数说明
    • Hippo 记忆管理服务 API 接口文档
    • 设备/角色封禁管理 API 接口文档
    • 模板
      • 查询公开模板列表
      • 查询当前组织模板(包含公开和私有模板)
      • 创建角色模板
      • 查询角色模板信息
      • 修改角色模板
      • 删除角色模板
      • 提交角色模板记忆
    • 角色
      • 创建角色(通过模板创建)
      • 创建角色
      • 查询角色
      • 修改角色
      • 删除角色
      • 发送角色记忆
      • 读取角色记忆
      • 创建角色(通过现有角色创建)
    • 技能书
      • 查询技能书列表
      • 预创建任务书
      • 上传任务书内容
      • 完成上传任务书
      • 查询技能书创建进度
    • 音色
      • 获取音色列表
      • 试听音色
      • 提交音色
      • 查询音色状态
      • 批量tts接口
    • Hippo记忆管理
      • 获取指定角色的个人知识图谱
      • 获取指定角色的人物关系数据
      • 获取指定角色的日记数据
      • 更新角色的 PKG
      • 触发做梦
      • 对话记忆接口
      • 读取对话记忆
    • 设备/角色封禁管理
      • 设备/角色封禁
      • 设备/角色解除封禁
      • 查询封禁列表
      • 查询单个封禁状态
  • 聊天辅助
    • 上传画面(Base64)
    • 上传画面(File)
    • 健康检查
  • 用量统计
    • 调用次数基本统计
  • 消息推送
    • 日志 Webhook 推送接口文档
    • 设备推送 Gateway API 接口文档
    • 设备推送
      POST
    • 语音播报(兼容旧接口)
      POST
    • 查询任务状态
      GET
  1. 消息推送

日志 Webhook 推送接口文档

概述#

AnyoneAI 支持按组织(org)维度配置自定义日志推送。每轮对话结束或后台记忆任务完成后,系统会将 token 用量等日志数据通过 HTTP POST 实时推送到你指定的 Endpoint,方便接入第三方计费平台或数据分析系统。

配置管理接口#

通过以下接口可自助完成 Webhook 配置的查询、修改和清除:
URL:POST https://api.adventists.cn/v2/log_config
鉴权:请求头中携带 api-key(API 密钥)和 org-id(组织 ID)
详细用法参见 配置管理接口 章节。

三种推送模式#

根据配置不同,推送行为可分为以下模式,各模式可自由组合:
模式适用场景关键配置
原始推送自有系统对接,需要完整数据只配置 log_webhook_url
字段映射接入第三方计费平台,只需 token 用量、过滤内容字段配置 log_webhook_template
自定义鉴权下游接口需要 API Key 或 Bearer Token配置 log_webhook_headers

配置项说明#

配置项类型必填默认值说明
log_webhook_urlString是—推送目标 URL。此项为空则 Webhook 功能不启用
log_webhook_headersMap否{}自定义 HTTP 请求头,用于下游接口鉴权或来源标识
log_webhook_templateMap否null字段映射与过滤模板。不填则推送原始完整 Payload(含对话内容)
log_webhook_wrapBoolean否true是否在 Payload 外包裹 {"type": "...", "data": {...}}

配置项详解#

log_webhook_url
推送的目标接口地址,系统会向此 URL 发送 POST 请求。此字段决定 Webhook 是否启用:
有值 → Webhook 开启,每次对话或后台任务完成后推送
清空(或调用 delete_webhook)→ 推送立即停止
log_webhook_headers
随推送请求附加的自定义 HTTP 请求头,适用于下游接口有鉴权要求的场景。系统默认已携带 Content-Type: application/json,此处配置的 header 会额外追加。
常见用途:
场景示例
API Key 鉴权{"X-API-KEY": "your-secret-key"}
Bearer Token 鉴权{"Authorization": "Bearer your-token"}
标识推送来源{"X-Source": "anyone-v2.5"}
log_webhook_template
字段映射与过滤层。未配置时推送原始全量数据(包含 prompt、answer 等对话内容);配置后只有模板内声明的字段才会出现在推送中,未声明的字段全部过滤掉。
适用场景:
仅需 token 用量数据的计费平台(过滤掉对话内容,只保留 inputToken、outputToken)
需要将字段名映射为第三方平台所需格式(如 inputToken → upstream_tokens)
需要在推送中注入固定常量(如平台编号、模型标识)
支持 6 种映射规则,详见模板 DSL章节。
log_webhook_wrap
控制推送 Payload 的外层结构:
值推送格式适用场景
true(默认){"type": "llm_log", "data": {...}}推荐。通过 type 字段可区分对话日志与后台任务日志,便于在同一 Endpoint 中分类处理
false直接推送 data 内容本身(扁平 JSON)下游接口不接受嵌套结构、或已通过其他方式区分日志类型时使用

推送内容(Payload)#

推送时机#

日志类型(type)触发场景
llm_log用户每轮对话结束
dream_log后台记忆整理任务完成
flush_log短期记忆归档任务完成

对话日志(type: llm_log)#

当 log_webhook_wrap = true(默认)时,推送格式为:
{
  "type": "llm_log",
  "data": {
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "task_id": "task-abc123",
    "model_provider": "openai",
    "npcid": "4WXDQF5a9c65063e4d4c9389454c3a41812c32",
    "timestamp": "1751280000000",
    "org_id": "4WXDQF",
    "device_id": "1064820010000",
    "inputToken": 1850,
    "outputToken": 320,
    "prompt": "今天天气怎么样?",
    "answer": "今天北京天气晴朗,气温25度左右,很适合出去走走呢~",
    "thinking": {
      "logic": "用户询问天气,属于信息查询类请求...",
      "emotion": "语气平和,以轻松方式回应...",
      "memory": "暂无相关历史记忆...",
      "topic": "话题为天气,可延伸到出行建议...",
      "search": "北京天气:晴,25°C,湿度60%"
    },
    "time_log": {
      "first_sentence": {
        "function_check": 0.12,
        "function_check_token": { "input": 150, "output": 0 },
        "quick_response": { "first_token_delay": 0.45, "total_time": 1.2, "input_token": 800, "output_token": 50 },
        "function_call": { "first_token_delay": 0, "total_time": 0, "input_token": 0, "output_token": 0 }
      },
      "think": {
        "logic": { "first_token_delay": 0.3, "total_time": 0.8, "input_token": 400, "output_token": 80 },
        "emotion": { "first_token_delay": 0.2, "total_time": 0.6, "input_token": 300, "output_token": 60 },
        "memory": { "first_token_delay": 0, "total_time": 0, "input_token": 0, "output_token": 0 },
        "search": { "first_token_delay": 0, "total_time": 0, "input_token": 0, "output_token": 0 },
        "topic": { "first_token_delay": 0.1, "total_time": 0.4, "input_token": 200, "output_token": 50 }
      },
      "answer": {
        "first_token_delay": 0.5,
        "total_time": 2.1,
        "rounds": [
          { "input_token": 0, "output_token": 80 }
        ]
      },
      "intent_classifier": { "time": 0.05, "input_token": 0, "output_token": 0 },
      "function_response": { "input_token": 0, "output_token": 0 },
      "tool_call_process": { "input_token": 0, "output_token": 0 },
      "function_internal": { "input_token": 0, "output_token": 0 }
    },
    "function_calls": []
  }
}
字段说明
字段类型说明
request_idString本次请求唯一标识(UUID)
task_idString关联任务 ID
model_providerString模型提供商(如 openai、anthropic)
npcidStringNPC 唯一标识
timestampString毫秒级 Unix 时间戳
org_idString组织 ID
device_idString设备/用户 ID
inputTokenNumber本次对话全阶段输入 token 总量
outputTokenNumber本次对话全阶段输出 token 总量
promptString用户输入内容
answerStringNPC 最终回答内容
thinkingObject各思考阶段的推理内容(logic/emotion/memory/search/topic)
time_logObject各阶段耗时与 token 明细统计
function_callsArray本次调用的工具/函数列表
shortMemoryTokenNumber短期记忆 token 数(有值时才出现)
longMemoryTokenNumber长期记忆 token 数(有值时才出现)
skillMemoryTokenNumber技能记忆 token 数(有值时才出现)
relationshipTokenNumber关系记忆 token 数(有值时才出现)
当 log_webhook_wrap = false 时,直接推送 data 对象本身,不含外层 type/data 包裹。

后台任务日志(type: dream_log / flush_log)#

当 log_webhook_wrap = true(默认)时,推送格式为:
{
  "type": "dream_log",
  "data": {
    "request_id": "550e8400-e29b-41d4-a716-446655440001",
    "npcid": "4WXDQF5a9c65063e4d4c9389454c3a41812c32",
    "org_id": "4WXDQF",
    "timestamp": "1751280060000",
    "model": "gpt-4o",
    "stage": "diary",
    "inputToken": 2100,
    "outputToken": 450,
    "extra": {
      "tool_calls": 3
    }
  }
}
字段说明
字段类型说明
request_idString唯一请求 ID(UUID)
npcidStringNPC 唯一标识
org_idString组织 ID
timestampString毫秒级 Unix 时间戳
modelString实际调用的模型名称
stageString任务子阶段(如 diary、prior_merge、entity_extract)
inputTokenNumber本次调用输入 token 数
outputTokenNumber本次调用输出 token 数
extraObject附加信息,可选字段
后台任务日志字段比对话日志精简,不含 prompt、answer、thinking、time_log 等内容字段。

模板 DSL(log_webhook_template)#

模板用于将原始 Payload 中的字段映射为下游系统所需的格式。只有在模板中声明的字段,才会出现在最终推送的数据中,未声明的字段均被过滤掉。
若不配置模板,则直接推送原始完整 Payload。

规则类型#

字符串映射#

直接从原始 Payload 中取对应字段的值。
{
  "upstream_tokens": "inputToken",
  "downstream_tokens": "outputToken"
}
若源字段不存在,该目标字段会被跳过(不出现在结果中)。

const — 固定常量#

写入一个固定的字符串或数值,与原始 Payload 无关。
{
  "provider_type": { "type": "const", "value": "10" },
  "model_name": { "type": "const", "value": "anyone-v2.5" }
}
参数说明
value要写入的固定值(任意类型)

uuid — 随机 UUID#

每次推送时生成一个新的 UUID v4 字符串。
{
  "record_id": { "type": "uuid" }
}
输出示例:"550e8400-e29b-41d4-a716-446655440000"

now — 当前推送时间#

取当前北京时间,格式为 YYYY-MM-DD HH:MM:SS。
{
  "push_time": { "type": "now" }
}
输出示例:"2026-06-30 16:00:00"

datetime — 时间戳转日期字符串#

将原始 Payload 中的毫秒级 Unix 时间戳字段,转换为北京时间字符串(YYYY-MM-DD HH:MM:SS)。
{
  "send_time": { "type": "datetime", "source": "timestamp" }
}
参数说明
source原始 Payload 中的字段名,值须为毫秒级时间戳
输出示例:"2026-06-30 16:00:00"

sum — 多字段求和#

对原始 Payload 中多个数值字段求和。
{
  "used_tokens": { "type": "sum", "sources": ["inputToken", "outputToken"] }
}
参数说明
sources要求和的字段名数组,缺失的字段按 0 计算

field — 显式字段引用#

与字符串映射等价,适合在需要明确表达意图时使用。
{
  "npc": { "type": "field", "source": "npcid" }
}
参数说明
source原始 Payload 中的字段名

配置示例#

场景一:原始推送(无模板)#

直接推送原始完整 Payload,适合自有系统对接。
Webhook 配置
{
  "log_webhook_url": "https://your-system.example.com/api/log"
}
推送内容
{
  "type": "llm_log",
  "data": {
    "request_id": "550e8400-...",
    "npcid": "ABCDEF...",
    "inputToken": 1850,
    "outputToken": 320,
    "prompt": "今天天气怎么样?",
    "answer": "今天天气晴朗..."
  }
}

场景二:字段映射(第三方 token 计费上报)#

将 Payload 字段映射为计费平台所需格式,并过滤掉不需要的内容字段。
Webhook 配置
{
  "log_webhook_url": "https://api.example.com/tokenUse/",
  "log_webhook_wrap": false,
  "log_webhook_template": {
    "sno":               "device_id",
    "msisdn":            "device_id",
    "provider_type":     { "type": "const",    "value": "10" },
    "model_id":          { "type": "const",    "value": "10-anyone-v2.5" },
    "model_name":        { "type": "const",    "value": "anyone-v2.5" },
    "offering_type":     { "type": "const",    "value": "1" },
    "offering_sort":     { "type": "const",    "value": "2" },
    "upstream_tokens":   "inputToken",
    "downstream_tokens": "outputToken",
    "used_tokens":       { "type": "sum",      "sources": ["inputToken", "outputToken"] },
    "send_time":         { "type": "datetime", "source": "timestamp" },
    "push_time":         { "type": "now" }
  }
}
推送内容(wrap=false,扁平 JSON)
{
  "sno": "1064820010000",
  "msisdn": "1064820010000",
  "provider_type": "10",
  "model_id": "10-anyone-v2.5",
  "model_name": "anyone-v2.5",
  "offering_type": "1",
  "offering_sort": "2",
  "upstream_tokens": 1850,
  "downstream_tokens": 320,
  "used_tokens": 2170,
  "send_time": "2026-06-30 16:00:00",
  "push_time": "2026-06-30 16:00:01"
}
原始 Payload 中的 prompt、answer、thinking、time_log 等字段因未在模板中声明,不会出现在推送数据中。

场景三:自定义请求头鉴权#

在推送请求中附加自定义 HTTP 头,适合下游接口需要 API Key 鉴权的场景。
Webhook 配置
{
  "log_webhook_url": "https://secure-api.example.com/webhook/log",
  "log_webhook_headers": {
    "X-API-KEY": "your-secret-api-key",
    "X-Source": "anyone-v2.5"
  }
}
系统推送时,HTTP 请求头将为:
Content-Type: application/json
X-API-KEY: your-secret-api-key
X-Source: anyone-v2.5

配置管理接口#

通过以下接口可自助完成 Webhook 配置的查询、修改和清除,无需联系 AnyoneAI 团队。
URL:POST https://api.adventists.cn/v2/log_config
Content-Type:application/json

请求头#

Header类型必填说明
api-keyString是API 密钥
org-idString是组织 ID
Header 名称使用连字符(api-key、org-id),不要使用下划线。

支持的操作(action)#

action说明
query_webhook查询当前 org 的全部 Webhook 配置
update_webhook更新一个或多个 Webhook 配置字段
delete_webhook清除 Webhook 配置(禁用推送)

query_webhook — 查询配置#

请求
{
  "action": "query_webhook"
}
响应示例(200)
{
  "status": "success",
  "data": {
    "log_webhook_url": "https://your-endpoint.com/log",
    "log_webhook_headers": { "X-API-KEY": "your-key" },
    "log_webhook_template": null,
    "log_webhook_wrap": false
  }
}
字段尚未配置时值为 null。

update_webhook — 更新配置#

请求
{
  "action": "update_webhook",
  "fields": {
    "log_webhook_url": "https://your-endpoint.com/log",
    "log_webhook_wrap": false
  }
}
fields 中只需传需要修改的字段,其余字段保持不变。可修改的字段范围:
字段类型说明
log_webhook_urlString推送目标 URL。设为空字符串等同于停用推送
log_webhook_headersObject随推送附加的 HTTP 请求头,用于鉴权或来源标识。传入 {} 可清除所有自定义 header
log_webhook_templateObject字段映射模板,控制推送哪些字段及字段名格式。传入 null 可恢复为全量推送
log_webhook_wrapBoolean是否包裹推送体。true 时外层有 type/data 结构,false 时直接推送扁平数据
响应示例(200)
{
  "status": "success",
  "data": {
    "updated": ["log_webhook_url", "log_webhook_wrap"]
  }
}

delete_webhook — 清除配置#

清除 log_webhook_url,禁用 Webhook 推送。其他字段(headers、template)保留但不再生效。
请求
{
  "action": "delete_webhook"
}
响应示例(200)
{
  "status": "success",
  "data": {
    "message": "Webhook 配置已清除"
  }
}

错误响应#

状态码message原因
400非法的 actionaction 不在支持列表中
400缺少 fields 字段或格式错误update_webhook 未传 fields
400不允许修改的字段: [...]fields 中包含非白名单字段
401Invalid API KEY or ORG IDHeader 格式不正确
401ORG ID does not existorg_id 不存在
401Invalid API KEYapi_key 与记录不匹配
500服务器内部错误写库失败或异常

cURL 示例#


常见问题#

Q:不配置模板,会推送哪些敏感字段?#

原始 Payload 包含 prompt(用户输入)和 answer(NPC 回答)等内容字段。如果 Endpoint 只需要 token 用量数据,建议配置模板,仅映射所需字段(如 inputToken、outputToken),避免推送不必要的内容。

Q:wrap=false 和 wrap=true 有什么区别?#

wrap=true(默认):推送 {"type": "llm_log", "data": {...}},可通过 type 字段区分不同日志类型
wrap=false:直接推送 data 内容本身(扁平 JSON),适合下游接口不接受嵌套结构的场景

Q:后台任务日志(dream_log / flush_log)也会走 Webhook 吗?#

会。后台任务日志与对话日志共用同一套 Webhook 配置,模板和 wrap 设置同样适用。区别在于 type 字段不同,以及 data 字段更精简(无 prompt/answer/thinking/time_log)。

Q:能否为不同 type 配置不同的 Webhook URL?#

当前不支持。每个 org 只有一套 Webhook 配置,llm_log、dream_log、flush_log 均推送到同一个 URL。如需区分,建议在 Endpoint 中通过 type 字段路由处理。

错误处理#

Webhook 推送遵循非阻塞原则,失败不会影响主对话流程:
情况处理方式
HTTP 推送超时(> 5 秒)放弃本次推送,不重试
HTTP 4xx / 5xx 响应记录警告,不重试
网络异常放弃本次推送,不重试
模板转换异常跳过本次推送
修改于 2026-07-01 05:50:47
上一页
调用次数基本统计
下一页
设备推送 Gateway API 接口文档
Built with