Files
wecom_it_smart_desk/backend/app/api/router.py
T
Simon 400ce3ddcb feat: OTP首次绑定 + 三端登录修复 + 管理端权限修复 (2026-07-08)
OTP首次绑定:
- 新增统一 OTP 路由 /auth/otp-* (otp.py + router.py)
- 坐席端 OTP 绑定面板 (OtpBindPanel.vue)
- 管理端 OTP 管理列表 (MfaManage.vue)
- agent_login 签发半认证 token 支持首次绑定流程

三端登录修复:
- 坐席/管理端去掉'返回扫码登录'按钮
- 管理端改为二维码始终可见+轮询扫码状态
- 员工端 /itdesk/ 改为 alias 直接服务 H5 (不再301重定向)
- docker-compose 添加 h5 volume 挂载

管理端权限修复:
- 扫码登录改用 get_user_roles() 替代写死 roles=['agent']
- get_user_roles() 增加 agents.role 回退
- 新增 GET /admin/roles/user-roles 端点
- 角色管理页加载用户角色分配数据

文档更新:
- OTP PRD + 系统设计文档
- 故障排查手册 v1.1 (新增6案例)
- nginx 生产基准配置
2026-07-08 21:54:57 +08:00

307 lines
17 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# 企微IT智能服务台 — API 路由汇总
# =============================================================================
# 说明:汇总所有 API 子路由,统一挂载到 FastAPI 应用
# T02 阶段注册所有后端核心服务路由
# =============================================================================
from fastapi import APIRouter
# 导入各子路由模块
from app.api.wecom_callback import router as wecom_router
from app.api.conversations import router as conversations_router
from app.api.messages import router as messages_router
from app.api.agents import router as agents_router
from app.api.quick_replies import router as quick_replies_router
from app.api.knowledge_base import router as knowledge_base_router
from app.api.conversation_annotation import router as annotation_router
from app.api.statistics import router as statistics_router
from app.api.h5 import router as h5_router
from app.api.agent_notes import router as agent_notes_router
from app.api.system import router as system_router
from app.api.wingman import router as wingman_router
from app.api.todo_items import router as todo_items_router
from app.api.troubleshooting_templates import router as troubleshooting_templates_router
from app.api.employees import router as employees_router
from app.api.upload import router as upload_router
from app.api.admin_api import router as admin_router
from app.api.admin_roles import router as admin_roles_router
from app.api.admin.security_comparison import router as security_comparison_router
from app.api.approval import router as approval_router
from app.api.wecom_jsapi import router as wecom_jsapi_router # v0.5.4 应急页 JS-SDK 签名
from app.api.knowledge_iteration import router as knowledge_iteration_router # Tier1 知识库自动迭代
from app.api.approval_queue import router as approval_queue_router # Tier1 独立审批队列
from app.api.vision import router as vision_router # Tier1 视觉理解
from app.api.ragflow_ingestion import router as ragflow_router # Tier1 RAGFlow文档摄入
# 创建 API 路由器
# 所有子路由都会挂载到这个路由器上
api_router = APIRouter()
# --------------------------------------------------------------------------
# 注册所有子路由
# --------------------------------------------------------------------------
# 每个子路由都有对应的 prefix 和 tags,方便 Swagger 文档分类展示
# --------------------------------------------------------------------------
# 企微回调 API
# GET /api/wecom/callback — 验证URL有效性
# POST /api/wecom/callback — 接收企微推送消息
api_router.include_router(wecom_router, tags=["企微回调"])
# 会话管理 API
# GET /api/conversations — 获取会话列表
# GET /api/conversations/{id} — 获取会话详情
# POST /api/conversations/{id}/assign — 坐席接单
# POST /api/conversations/{id}/resolve — 结单
# POST /api/conversations/{id}/pin — 置顶/取消置顶
# POST /api/conversations/{id}/todo — 代办/取消代办
# POST /api/conversations/{id}/transfer — 转接
api_router.include_router(conversations_router, tags=["会话管理"])
# 消息管理 API
# GET /api/conversations/{id}/messages — 获取消息列表
# POST /api/conversations/{id}/messages — 坐席发送消息
# GET /api/conversations/{id}/messages/poll — 轮询新消息
api_router.include_router(messages_router, tags=["消息管理"])
# 坐席管理 API
# POST /api/agents/login — 坐席登录
# GET /api/agents/me — 获取当前坐席信息
# PUT /api/agents/me/status — 更新坐席状态
# GET /api/agents — 获取坐席列表
api_router.include_router(agents_router, tags=["坐席管理"])
# 快速回复模板 API
# GET /api/quick-replies — 获取模板列表
# POST /api/quick-replies — 创建模板
# PUT /api/quick-replies/{id} — 更新模板
# DELETE /api/quick-replies/{id} — 删除模板
api_router.include_router(quick_replies_router, tags=["快速回复"])
# --------------------------------------------------------------------------
# 知识库 API
# --------------------------------------------------------------------------
# GET /api/knowledge — 获取知识库列表
# POST /api/knowledge — 创建知识条目
# PUT /api/knowledge/{id} — 更新知识条目
# DELETE /api/knowledge/{id} — 删除知识条目
api_router.include_router(knowledge_base_router, tags=["知识库"])
# --------------------------------------------------------------------------
# 会话标注 API
# --------------------------------------------------------------------------
# POST /api/annotations — 创建标注
# GET /api/annotations/{conversation_id} — 获取会话标注列表
api_router.include_router(annotation_router, tags=["会话标注"])
# --------------------------------------------------------------------------
# 数据看板统计 API
# --------------------------------------------------------------------------
# GET /api/admin/stats/overview — 整体统计概览
# GET /api/admin/stats/conversations — 会话趋势统计
# GET /api/admin/stats/agents — 坐席绩效统计
# GET /api/admin/stats/satisfaction — 满意度统计
api_router.include_router(statistics_router, tags=["数据看板"])
# H5 用户端 API
# POST /api/h5/oauth/callback — OAuth2回调
# GET /api/h5/user — 获取用户信息
# GET /api/h5/conversations/current — 获取当前会话
# POST /api/h5/conversations/current/messages — 发送消息
# GET /api/h5/conversations/current/messages/poll — 轮询新消息
# POST /api/h5/conversations/current/shake — 摇人
# GET /api/h5/approval-links — 获取审批链接
# GET /api/h5/software-downloads — 获取软件下载
api_router.include_router(h5_router, tags=["H5用户端"])
# 坐席备注 API
# GET /api/agent-notes/{employee_id} — 获取员工备注
# POST /api/agent-notes — 添加备注
# PUT /api/agent-notes/{id} — 更新备注
# DELETE /api/agent-notes/{id} — 删除备注
api_router.include_router(agent_notes_router, tags=["坐席备注"])
# 系统管理 API
# GET /api/system/emergency-mode — 查询应急模式状态
# PUT /api/system/emergency-mode — 切换应急模式开关
api_router.include_router(system_router, tags=["系统管理"])
# AI Wingman 智能副驾驶 API
# POST /api/conversations/{id}/wingman/draft — 生成 AI 草稿回复
# POST /api/conversations/{id}/wingman/summary — 生成会话自动摘要
# POST /api/conversations/{id}/wingman/tags — 生成自动标签建议
api_router.include_router(wingman_router, tags=["AI Wingman"])
# 待办事项 API
# GET /api/todo-items — 获取当前坐席待办列表
# GET /api/todo-items/{id} — 获取待办详情
# PUT /api/todo-items/{id}/status — 更新待办状态
api_router.include_router(todo_items_router, tags=["待办事项"])
# 排查模板 API
# GET /api/troubleshooting-templates — 获取排查模板列表
# GET /api/troubleshooting-templates/{id} — 获取排查模板详情
# POST /api/troubleshooting-templates — 新增模板(管理员)
# PUT /api/troubleshooting-templates/{id} — 修改模板(管理员)
# DELETE /api/troubleshooting-templates/{id} — 删除模板(管理员)
api_router.include_router(troubleshooting_templates_router, tags=["排查模板"])
# 员工管理 API
# PUT /api/employees/{employee_id}/it-level — 更新员工IT技能等级
api_router.include_router(employees_router, tags=["员工管理"])
# 文件上传 API
# POST /api/upload — 上传文件(图片/文档)
# GET /api/media/{year}/{month}/{day}/{filename} — 访问上传的文件
api_router.include_router(upload_router, tags=["文件上传"])
# 管理后台 API
# GET /api/admin/dashboard/overview — 仪表盘统计
# GET /api/admin/configs — 获取配置分组
# PUT /api/admin/configs/{key} — 更新配置项
# GET /api/admin/configs/{key}/history — 配置变更历史
# GET /api/admin/agents — 坐席列表(管理视图)
# POST /api/admin/agents — 添加坐席
# PUT /api/admin/agents/{id} — 编辑坐席
# DELETE /api/admin/agents/{id} — 移除坐席
# GET /api/admin/integrations — 集成系统列表
# PUT /api/admin/integrations/{id} — 更新集成配置
# GET /api/admin/quick-replies/pending — 待审核快速回复
# PUT /api/admin/quick-replies/{id}/review — 审核快速回复
# GET /api/admin/assignment-mode — 获取分配模式
# PUT /api/admin/assignment-mode — 切换分配模式
# GET /api/admin/monitor/sessions — 会话监控
# GET /api/admin/search — 全局搜索
api_router.include_router(admin_router, tags=["管理后台"])
# 管理后台角色管理 API
# GET /api/admin/roles — 获取所有角色
# POST /api/admin/roles/assign — 分配角色
# POST /api/admin/roles/revoke — 撤销角色
# GET /api/admin/roles/mapping-rules — 获取映射规则
# POST /api/admin/roles/mapping-rules — 创建映射规则
# DELETE /api/admin/roles/mapping-rules/{id} — 删除映射规则
api_router.include_router(admin_roles_router, tags=["角色管理"])
# 终端安全对比 API
# GET /api/admin/security/comparison/summary — 比对汇总
# GET /api/admin/security/comparison/no-huorong — 未安装火绒清单
# POST /api/admin/security/comparison/trigger — 手动触发
# GET /api/admin/security/comparison/tasks — 任务列表
# POST /api/admin/security/comparison/tasks — 创建定时任务
api_router.include_router(security_comparison_router, tags=["终端安全对比"])
# 审批流程 API
# GET /api/approval/templates — 获取审批模板列表
# GET /api/approval/templates/{id} — 获取审批模板详情
# POST /api/approval/jump — 生成跳转审批链接
# POST /api/approval/submit — API提交审批
# GET /api/approval/keywords — 获取审批关键词
api_router.include_router(approval_router, tags=["审批流程"])
# 企微 JS-SDK 签名 API (v0.5.4 应急页身份检测用)
# GET /api/wecom/jsapi-config?url=xxx — 返回 corp_id/agent_id/timestamp/nonce_str/signature
api_router.include_router(wecom_jsapi_router, tags=["企微JS-SDK"])
# 扫码登录 API (Phase 1.1 task #14)
# POST /api/auth_qrcode/create — 创建扫码登录票据
# GET /api/auth_qrcode/poll/{ticket} — 前端轮询扫码状态
# POST /api/auth_qrcode/scan — 企微 OAuth2 回调
# POST /api/auth_qrcode/confirm — 已登录坐席确认授权
from app.api.auth_qrcode import router as auth_qrcode_router
api_router.include_router(auth_qrcode_router, tags=["扫码登录"])
# 高危操作演示 API (Phase 1.3 task #19)
# POST /api/admin/high-risk/demo/{category} — 5 类高危操作演示端点
# GET /api/admin/high-risk/whitelist — 获取高危操作白名单
# GET /api/admin/high-risk/check — 检查当前管理员 OTP 状态
from app.api.high_risk_routes import router as high_risk_routes_router
api_router.include_router(high_risk_routes_router, tags=["高危操作"])
from app.api.otp import router as otp_router # 三端认证重构 AUTH-03
# 统一 OTP 二次认证 API(三端共用,取代原 /mfa/* 与 /admin/mfa/*
# GET /api/auth/otp-status — 查询绑定状态
# POST /api/auth/otp-bind — 生成 secret + 二维码
# POST /api/auth/otp-verify — 输入 OTP 通过验证(写 Redis 30 分钟)
# POST /api/auth/otp-unbind — 用户主动关闭 OTP
# POST /api/auth/otp-admin-reset/{id} — 管理员重置指定员工 OTP
# GET /api/auth/otp-admin-users — 管理员查看全部坐席 OTP 绑定状态
api_router.include_router(otp_router, tags=["OTP二次认证"])
# 企微 SSO (v0.7.1 task #85)
# GET /api/auth_wecom/sso/init — 企微浏览器 UA 检测后初始化 SSO
# GET /api/auth_wecom/sso/callback — 企微 OAuth2 回调,用 code 换 userid → 跳端点
# GET /api/auth_wecom/sso/verify — 前端用 SSO token 换用户身份(一次性)
from app.api.auth_wecom_sso import router as auth_wecom_sso_router
api_router.include_router(auth_wecom_sso_router, tags=["企微SSO"])
# 审计日志 API (v0.7.1 task #89)
# GET /api/admin/audit-logs — 分页 + 多维过滤(给 auditor / admin 角色用)
# 权限要求: audit_log:read:all (RBAC 装饰器强制)
from app.api.audit_logs import router as audit_logs_router
api_router.include_router(audit_logs_router, tags=["审计日志"])
# 阶段5 自动化闭环 API
# POST /itportal/automation/sessions — 创建自动化会话
# GET /itportal/automation/sessions — 会话列表
# GET /itportal/automation/sessions/{id} — 会话详情
# POST /itportal/automation/sessions/{id}/approve — 坐席审批
# POST /itportal/automation/sessions/{id}/takeover — 转人工接管
# POST /itportal/automation/sessions/by-employee — 员工创建会话
# POST /itportal/automation/sessions/{id}/confirm — 员工 H5 确认
# POST /itportal/automation/sessions/{id}/feedback — 员工反馈
# GET /itportal/automation/admin/scenarios — 场景配置列表
# PUT /itportal/automation/admin/scenarios/{key} — 更新场景(OTP)
# GET /itportal/automation/admin/rule-versions — 规则版本
# GET /itportal/automation/admin/metrics — 看板指标
from app.api.automation import router as automation_router
api_router.include_router(automation_router, tags=["自动化闭环"])
# 管理员用户管理 API
# GET /api/admin/users — 获取管理员列表
# POST /api/admin/users — 创建管理员
# GET /api/admin/users/{id} — 获取管理员详情
# PUT /api/admin/users/{id} — 更新管理员
# DELETE /api/admin/users/{id} — 删除管理员
# POST /api/admin/users/{id}/reset-password — 重置密码
from app.api.admin_users import router as admin_users_router
api_router.include_router(admin_users_router, tags=["管理员用户管理"])
# 满意度评价 API (P1-25)
# POST /api/conversation/{id}/evaluate — 提交评价
# GET /api/conversation/{id}/evaluation — 获取会话评价
# GET /api/evaluations/stats — 评价统计
# POST /api/conversations/{id}/send-evaluation-invite — 发送评价邀请
from app.api.evaluations import router as evaluations_router
api_router.include_router(evaluations_router, tags=["满意度评价"])
# 知识库自动迭代 API (Tier1 挂载)
# POST /api/admin/knowledge-iteration/analyze — 触发分析
# GET /api/admin/knowledge-iteration/suggestions — 获取建议列表(支持audience/confidence筛选)
# GET /api/admin/knowledge-iteration/suggestions/{id} — 获取建议详情
# POST /api/admin/knowledge-iteration/suggestions/{id}/approve — 审核通过
# POST /api/admin/knowledge-iteration/suggestions/{id}/reject — 审核拒绝
# POST /api/admin/knowledge-iteration/suggestions/{id}/rewrite — 改写提案
# POST /api/admin/knowledge-iteration/suggestions/{id}/queue — 放入队列
# POST /api/admin/knowledge-iteration/suggestions/{id}/dequeue-approve — 队列中审批
# GET /api/admin/knowledge-iteration/stats — 获取统计
api_router.include_router(knowledge_iteration_router, prefix="/admin/knowledge-iteration", tags=["知识库自动迭代"])
# 独立审批队列 API (Tier1)
# GET /api/admin/approval-queue/queued — 队列列表
# GET /api/admin/approval-queue/queued/stats — 队列统计
# POST /api/admin/approval-queue/queued/{id}/dequeue-approve — 队列中审批通过
api_router.include_router(approval_queue_router, prefix="/admin/approval-queue", tags=["独立审批队列"])
# 视觉理解 API (Tier1)
# POST /api/vision/analyze — 分析截图(multipart: image + conversation_id
# GET /api/vision/models — 可用视觉模型列表
api_router.include_router(vision_router, prefix="/api/vision", tags=["视觉理解"])
# RAGFlow 文档摄入 API (Tier1)
# POST /api/ragflow/ingest — 上传文档触发RAGFlow处理
# GET /api/ragflow/tasks/{task_id} — 查询处理状态
api_router.include_router(ragflow_router, prefix="/api/ragflow", tags=["RAGFlow文档摄入"])