Poco 使用手册
快速开始

API 与 WebHook

通过 API 创建会话,并用 WebHook 把执行结果推送到外部系统。

Poco 支持把 Agent 能力接入外部系统。常见方式有两种:外部系统通过 API 发起任务,Poco 通过 WebHook 把事件推回外部系统。

如果你只是想在业务系统里“发起一个任务并拿到结果”,先看 API;如果你希望 Poco 在任务完成、失败、请求人工输入或发布页面时主动通知系统,配置 WebHook。

API 访问

在“API 访问”页面创建密钥后,可通过兼容接口发起对话任务。

创建密钥时建议配置:

配置建议
名称写清楚用途,例如“飞书机器人测试”
生效范围普通对话选“对话”范围
过期时间临时测试不要设置永久有效
能力配置按需绑定 MCP、Skills、Subagents、插件
浏览器只有网页任务才开启

API Key 应按业务系统拆分,不要多个系统共用同一个 Key。生产 Key 建议设置明确用途、合理过期时间和最小能力范围。

调用示例:

curl -X POST http://localhost:8000/openapi/v1/chat/completions \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "poco-agent",
    "stream": false,
    "messages": [
      {
        "role": "user",
        "content": "请生成一份今日工作总结模板。"
      }
    ]
  }'

更多协议细节见 API 文档

会话复用

外部系统可以通过 metadata.session_id 继续同一个会话。适合:

  • 在同一个工单里连续追问。
  • 基于上一次产物继续补充。
  • 让业务系统保留一次任务的上下文。

不适合复用的场景:

  • 用户已经换了完全不同的问题。
  • 需要新的仓库、能力或权限。
  • 上一轮上下文明显错误。

如果不传 session_id,Poco 会创建新会话。

附件和文件

API 支持文本、图片和文件输入。文件更适合提供材料,不适合直接作为最终产物。需要交付文件时,请在提示词里明确要求 Poco Agent 写入工作区文件,例如:

请读取附件中的需求文档,并生成 `delivery-plan.md`。

WebHook

WebHook 用于订阅事件,并把事件推送到你的 HTTP 地址。适合:

  • 会话完成后通知业务系统。
  • 定时任务失败后触发告警。
  • 发布页生成后同步到内容平台。
  • 用户输入请求出现时通知人工处理。

常见事件:

事件说明
session.completed会话成功完成
session.failed会话失败
session.stopped会话被停止
scheduled_task.run_status_changed定时任务运行状态变化
user_input.requestedAgent 请求用户输入
publish_page.published发布页成功发布
workspace_export.completed工作区文件导出完成

配置 WebHook

建议按下面顺序配置:

  1. 填写名称和推送地址。
  2. 选择订阅事件。
  3. 选择生效范围:全局或指定项目。
  4. 如只关心某类会话,配置会话类型过滤。
  5. 配置签名密钥。
  6. 设置超时、重试次数和退避时间。
  7. 使用测试推送验证接收端。

签名密钥建议始终配置。接收端应校验 X-Poco-Signature,避免伪造请求。

事件过滤建议:

  • 只关心某个项目时,使用项目范围。
  • 只关心定时任务时,选择 scheduled 会话类型。
  • 需要拿到文件清单或归档信息时,订阅 workspace_export.completed,不要只订阅 session.completed
  • 需要处理人工输入时,同时订阅 user_input.requesteduser_input.answered

接收端示例

from fastapi import FastAPI, Request

app = FastAPI()


@app.post("/poco/webhook")
async def poco_webhook(request: Request) -> dict[str, str]:
    event_type = request.headers.get("X-Poco-Event")
    payload = await request.json()

    if event_type == "session.completed":
        session = payload.get("session", {})
        print("session completed:", session.get("title"))

    return {"status": "ok"}

生产环境必须补充签名校验、幂等处理和错误日志。

Webhook 接收端要快速返回。建议收到事件后先校验签名、记录 event_id,再把耗时业务放入自己的异步队列。不要在 WebHook 请求里直接执行长任务。

使用技巧

  • API Key 只在创建时完整展示,创建后立即保存到安全位置。
  • 测试用 Key 设置短过期时间,生产 Key 按系统拆分用途。
  • WebHook 接收端要快速返回,耗时处理放到异步队列。
  • 外部系统收到失败事件后,不要盲目无限重试,应结合事件 ID 做幂等。
  • 详细事件结构见 WebHook 文档
  • 需要文件结果时,等 workspace_export.completed 后再读取工作区文件。
  • 需要公开页面结果时,订阅 publish_page.published,它比会话完成事件更贴近发布结果。

On this page