Files

1 line
163 KiB
JSON
Raw Permalink Normal View History

{"openapi":"3.1.0","info":{"title":"企微IT智能服务台","description":"基于企微自建应用消息API的IT服务坐席系统","version":"1.0.0"},"paths":{"/wecom/callback":{"get":{"tags":["企微回调"],"summary":"Verify Url","description":"验证企微回调URL有效性。\n\n企微管理后台配置回调URL时,会发送 GET 请求验证。\n验证流程:\n1. 验证签名 SHA1(sort(token, timestamp, nonce, echostr))\n2. 解密 echostr\n3. 返回解密后的明文\n\nArgs:\n msg_signature: 企微签名\n timestamp: 时间戳\n nonce: 随机数\n echostr: 加密的验证字符串\n\nReturns:\n str: 解密后的 echostr 明文","operationId":"verify_url_wecom_callback_get","parameters":[{"name":"msg_signature","in":"query","required":true,"schema":{"type":"string","description":"企微签名","title":"Msg Signature"},"description":"企微签名"},{"name":"timestamp","in":"query","required":true,"schema":{"type":"string","description":"时间戳","title":"Timestamp"},"description":"时间戳"},{"name":"nonce","in":"query","required":true,"schema":{"type":"string","description":"随机数","title":"Nonce"},"description":"随机数"},{"name":"echostr","in":"query","required":true,"schema":{"type":"string","description":"加密的验证字符串","title":"Echostr"},"description":"加密的验证字符串"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["企微回调"],"summary":"Receive Message","description":"接收企微推送的消息。\n\n企微将员工发送的消息通过此接口推送过来。\n处理流程:\n1. 读取 XML 请求体\n2. 解密消息(验证签名 + AES 解密)\n3. 解析消息内容\n4. 路由到 MessageRouter 处理\n5. 返回 \"success\" 字符串(企微要求)\n\n重构说明:使用 dependencies 模块提供的共享服务实例,\n不再手动创建/关闭 Redis、WecomService、AIService。\n\n企微推送的消息格式(加密后):\n<xml>\n <ToUserName><![CDATA[corp_id]]></ToUserName>\n <AgentID>1000002</AgentID>\n <Encrypt><![CDATA[加密内容]]></Encrypt>\n</xml>\n\nArgs:\n request: FastAPI 请求对象(读取 XML 请求体)\n msg_signature: 企微签名\n timestamp: 时间戳\n nonce: 随机数\n\nReturns:\n str: \"success\" 字符串(企微要求的固定响应)","operationId":"receive_message_wecom_callback_post","parameters":[{"name":"msg_signature","in":"query","required":true,"schema":{"type":"string","description":"企微签名","title":"Msg Signature"},"description":"企微签名"},{"name":"timestamp","in":"query","required":true,"schema":{"type":"string","description":"时间戳","title":"Timestamp"},"description":"时间戳"},{"name":"nonce","in":"query","required":true,"schema":{"type":"string","description":"随机数","title":"Nonce"},"description":"随机数"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/conversations":{"get":{"tags":["会话管理"],"summary":"List Conversations","description":"坐席获取会话列表(全局可见)。\n\n返回所有活跃会话,每个会话增加字段:\n- is_mine: 是否为当前坐席的会话\n- assigned_agent_name: 分配的坐席姓名(其他坐席会话显示用)\n- can_grab: 是否可以接手(其他坐席已接单的会话为 True)\n\n排序规则:紧急→举手→需介入→活跃→已结单。\n\nArgs:\n status: 按状态过滤(可选)\n agent_id: 按坐席ID过滤(可选)\n page: 页码\n page_size: 每页数量\n db: 数据库会话\n current_agent: 当前坐席(认证依赖注入)\n\nReturns:\n Dict: 统一响应格式,包含会话列表和总数","operationId":"list_conversations_conversations_get","p