# ticket_staff_reply.dspy - 人工回复客户(T8: human_processing→staff_replied) # 入参: ticket_id, content, internal?(1=内部备注不迁状态), attachments?(multipart 文件字段,可多个) user_id = await get_user() if not user_id: return json.dumps({"success": False, "error": "请先登录"}, ensure_ascii=False) ticket_id = (params_kw.get('ticket_id') or '').strip() content = (params_kw.get('content') or '').strip() internal = (params_kw.get('internal') or '').strip().lower() in ('1', 'true', 'yes') if not ticket_id: return json.dumps({"success": False, "error": "缺少 ticket_id"}, ensure_ascii=False) # 附件:multipart 上传时 ahserver 已落 FileStorage,params_kw['attachments'] # 为 webpath 字符串(单文件)或 list(多文件同名字段) attachments = params_kw.get('attachments') ok, result = await ticket_staff_reply(ticket_id, user_id, content, internal=internal, attachments=attachments) if ok: return json.dumps({"success": True, "message": result.get('message', ''), "data": result}, ensure_ascii=False) code, msg = result return json.dumps({"success": False, "error": msg, "code": code}, ensure_ascii=False)