Skip to content

系统通知 API 指南

通知 API 让租户外部业务系统主动向知办AI用户发送一条即时通知。通知不会写入聊天记录;桌面端收到后弹出标题和描述,用户点击通知进入对应知办数字员工对话。

适用场景

  • CRM 工单、审批、BI 告警等外部系统需要把“需要处理”的消息推给某个用户。
  • 租户自建业务服务已完成一次判断,需要提醒目标知办用户回到知办AI中的指定知办数字员工对话继续处理。
  • 通知只需要提醒用户回到指定数字员工对话,不应该污染聊天上下文。

如果外部 Agent 需要把结果、图表、表单、审批卡片等内容发到聊天框,通常只需要调用 主动发送聊天消息 API。主动聊天消息会写入聊天记录、更新会话预览,并在非当前会话时按普通聊天消息触发未读和客户端通知;不要为了同一条聊天内容再额外调用系统通知,避免用户收到重复提醒。

不适合的场景:

  • 群聊广播或全员公告。当前 API 只支持“目标知办用户 × 知办数字员工”的直聊通知。
  • 跳转任意外部 URL。点击通知固定进入知办AI内的知办数字员工对话,避免外部系统把客户端导航带出边界。
  • 需要向聊天记录写入图表、表单、审批卡片等结构化内容。请使用 主动发送聊天消息 API

调用权限

通知 API 使用租户 API Key(ek_)调用,需要 tenant.notification.write scope。

管理员 JWT 不可直接调用该接口。

调用时知办AI会校验:

  1. 凭证属于当前调用租户,租户只从 API Key 解析,不能由 body 覆盖。
  2. agent_id 对应的知办数字员工属于当前调用租户,且对目标知办用户可见。
  3. user_id 对应的目标知办用户账号是当前调用租户的有效成员。
  4. 目标知办用户与知办数字员工的直聊会话存在;不存在时自动创建,仅作为点击通知后的跳转目标,不写入聊天消息。

字段从哪里来

如果调用方已经接入自定义 Agent Runtime,通常不需要额外查询:

通知字段来源说明
user_idZAP /zap/v1/instances/zap/v1/sessions 的用户上下文;或组织与人员 API GET /org/members 返回的 account_id目标知办用户账号 ID,按 opaque string 使用。
agent_idZAP /zap/v1/agents 同步的知办数字员工配置,或 /zap/v1/instances 里的 digital_employee_uuid知办数字员工 ID,值为知办平台稳定 UUID。
third_notification_id外部系统自己的消息、工单或事件 ID仅用于排查、审计关联和调用方侧幂等记录。

历史草稿里曾出现 account_uuid / agent_uuid / user_uuid / external_id。这些字段已在开发期删除,请统一使用 user_id / agent_id / third_notification_id;传入旧字段会返回 HTTP 400

发送知办数字员工对话通知

POST /api/external/v1/notifications/agent-conversation

请求体:

json
{
  "user_id": "0b7f0d64-0a0c-4f8a-9d2d-9e14f4b20e22",
  "agent_id": "a1e718c7-0b93-4b64-9eb7-b05c2d9e731d",
  "title": "审批待处理",
  "description": "客户工单 #INC-1024 等待你确认处理方案",
  "third_notification_id": "crm-ticket-INC-1024"
}

字段说明:

字段必填说明
user_id目标知办用户账号 ID,值为知办平台稳定 UUID;必须是当前租户有效成员。
agent_id知办数字员工 ID,值为知办平台稳定 UUID;点击通知后进入该数字员工对话,且必须对目标知办用户可见。
title桌面通知标题,建议 80 字以内。
description桌面通知描述,服务端限制 1000 字以内;不会写入会话消息正文。
third_notification_id外部系统消息 ID,用于排查和审计关联;当前不做幂等覆盖。

成功响应:

json
{
  "success": true,
  "code": 200,
  "message": "ok",
  "data": {
    "notification_id": "9ac84468-712f-4d71-b165-8b56da5351fe",
    "conversation_id": "b8970d57-4e62-47b5-a5c9-d944c3a9633f",
    "room_id": "d1b6508c-1a78-468a-86fb-062750d4a648"
  }
}

响应字段:

字段说明
notification_id通知事件 ID,用于排查和审计关联。
conversation_id目标用户与该数字员工的直聊会话 ID。
room_id会话房间稳定 ID。

示例

使用 API Key 发送通知

bash
curl -X POST "https://zhiban.creditease.corp/api/external/v1/notifications/agent-conversation" \
  -H "Authorization: Bearer ek_..." \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "0b7f0d64-0a0c-4f8a-9d2d-9e14f4b20e22",
    "agent_id": "a1e718c7-0b93-4b64-9eb7-b05c2d9e731d",
    "title": "审批待处理",
    "description": "客户工单 #INC-1024 等待你确认处理方案",
    "third_notification_id": "crm-ticket-INC-1024"
  }'

行业最佳实践与 EasyO 适配性

  • Microsoft Graph Teams activity notifications 支持按用户 / 聊天目标发送活动通知,并用 activity type 与 target 约束落点;EasyO 采用“目标知办用户账号 + 知办数字员工对话”的固定目标,避免任意跳转和跨租户误投。
  • Slack chat.postMessage 强调 per-channel 和 workspace 级限流;EasyO 本轮先保留服务端统一限流扩展点,接口契约不承诺无限吞吐。
  • Firebase Cloud Messaging 区分 notification/data payload,并用 click action/data 驱动客户端导航;EasyO 采用账号级事件推送通知 payload,点击动作固定映射到会话。

参考资料:Microsoft Graph Teams activity notificationsTeams activity feed best practicesSlack Web API rate limitsFirebase Cloud Messaging

跳转到哪条对话

user_id + agent_id 对应目标知办用户与知办数字员工的一条直聊会话。调用通知接口时,知办AI会先准备或复用这条会话,并返回 conversation_id。客户端收到账号级通知事件后弹出系统通知;用户点击系统通知时进入该对话。

已接入系统需要同步字段切换,见 API 资源标识字段切换通知

错误排查

HTTP场景建议
401API Key 缺失、格式错、过期或已撤销在租户后台重新创建或启用 API Key。
403缺少 tenant.notification.write,或 agent_id 不属于当前调用租户 / 对目标知办用户不可见给 API Key 增加通知写入 scope;确认数字员工属于当前租户且对目标用户可见。
404目标知办用户不是当前调用租户的有效成员用组织与人员 API 回查目标账号;确认调用方使用的是目标用户所在租户下的 API Key。
502账号级通知推送链路暂不可用稍后重试;若持续失败,带 request_id 联系运维排查。

© 知办AI Team — 开发者公开文档. 平台运维 / 内部架构文档见内部 wiki.