diff --git a/api/core/app/apps/workflow/app_runner.py b/api/core/app/apps/workflow/app_runner.py index 07aeb57fa3..7c67a72589 100644 --- a/api/core/app/apps/workflow/app_runner.py +++ b/api/core/app/apps/workflow/app_runner.py @@ -16,8 +16,8 @@ from core.workflow.variable_loader import VariableLoader from core.workflow.workflow_entry import WorkflowEntry from extensions.ext_database import db from models.enums import UserFrom -from models.model import App, EndUser -from models.workflow import WorkflowType +from models.model import Account, App, EndUser +from models.workflow import Workflow, WorkflowType logger = logging.getLogger(__name__) @@ -54,6 +54,7 @@ class WorkflowAppRunner(WorkflowBasedAppRunner): app_config = cast(WorkflowAppConfig, app_config) user_id = None + user_email = None if self.application_generate_entity.invoke_from in {InvokeFrom.WEB_APP, InvokeFrom.SERVICE_API}: end_user = db.session.query(EndUser).filter(EndUser.id == self.application_generate_entity.user_id).first() if end_user: @@ -61,6 +62,13 @@ class WorkflowAppRunner(WorkflowBasedAppRunner): else: user_id = self.application_generate_entity.user_id + # 获取 workflow 创建者邮箱 + workflow_obj = db.session.query(Workflow).filter(Workflow.id == app_config.workflow_id).first() + if workflow_obj: + creator_account = db.session.query(Account).filter(Account.id == workflow_obj.created_by).first() + if creator_account: + user_email = creator_account.email + app_record = db.session.query(App).filter(App.id == app_config.app_id).first() if not app_record: raise ValueError("App not found") @@ -98,10 +106,12 @@ class WorkflowAppRunner(WorkflowBasedAppRunner): system_inputs = { SystemVariableKey.FILES: files, SystemVariableKey.USER_ID: user_id, + SystemVariableKey.USER_EMAIL: user_email, SystemVariableKey.APP_ID: app_config.app_id, SystemVariableKey.WORKFLOW_ID: app_config.workflow_id, SystemVariableKey.WORKFLOW_EXECUTION_ID: self.application_generate_entity.workflow_execution_id, } + logger.info(f"[sys.user_email debug] system_inputs={system_inputs}") variable_pool = VariablePool( system_variables=system_inputs, diff --git a/api/core/app/apps/workflow/generate_task_pipeline.py b/api/core/app/apps/workflow/generate_task_pipeline.py index 1734dbb598..07655416ff 100644 --- a/api/core/app/apps/workflow/generate_task_pipeline.py +++ b/api/core/app/apps/workflow/generate_task_pipeline.py @@ -98,10 +98,12 @@ class WorkflowAppGenerateTaskPipeline: self._user_id = user.id user_session_id = user.session_id self._created_by_role = CreatorUserRole.END_USER + user_email = user.email if hasattr(user, 'email') else None elif isinstance(user, Account): self._user_id = user.id user_session_id = user.id self._created_by_role = CreatorUserRole.ACCOUNT + user_email = user.email else: raise ValueError(f"Invalid user type: {type(user)}") @@ -110,6 +112,7 @@ class WorkflowAppGenerateTaskPipeline: workflow_system_variables={ SystemVariableKey.FILES: application_generate_entity.files, SystemVariableKey.USER_ID: user_session_id, + SystemVariableKey.USER_EMAIL: user_email, SystemVariableKey.APP_ID: application_generate_entity.app_config.app_id, SystemVariableKey.WORKFLOW_ID: workflow.id, SystemVariableKey.WORKFLOW_EXECUTION_ID: application_generate_entity.workflow_execution_id, diff --git a/api/core/app/entities/app_invoke_entities.py b/api/core/app/entities/app_invoke_entities.py index 65ed267959..abe8212a30 100644 --- a/api/core/app/entities/app_invoke_entities.py +++ b/api/core/app/entities/app_invoke_entities.py @@ -220,6 +220,7 @@ class WorkflowAppGenerateEntity(AppGenerateEntity): # app config app_config: WorkflowUIBasedAppConfig workflow_execution_id: str + user_email: Optional[str] = None class SingleIterationRunEntity(BaseModel): """ diff --git a/api/core/workflow/enums.py b/api/core/workflow/enums.py index b52a2b0e6e..c40d3c60e5 100644 --- a/api/core/workflow/enums.py +++ b/api/core/workflow/enums.py @@ -1,7 +1,7 @@ -from enum import StrEnum +from enum import Enum -class SystemVariableKey(StrEnum): +class SystemVariableKey(str, Enum): """ System Variables. """ @@ -10,6 +10,7 @@ class SystemVariableKey(StrEnum): FILES = "files" CONVERSATION_ID = "conversation_id" USER_ID = "user_id" + USER_EMAIL = "user_email" DIALOGUE_COUNT = "dialogue_count" APP_ID = "app_id" WORKFLOW_ID = "workflow_id" diff --git a/api/proxy.py b/api/proxy.py new file mode 100644 index 0000000000..1e7eca2d76 --- /dev/null +++ b/api/proxy.py @@ -0,0 +1,24 @@ +import logging + +from flask import Flask, request + +app = Flask(__name__) + +# 配置日志 +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + +@app.route('/hello', methods=['GET', 'POST']) +def hello(): + # 获取所有请求参数(包括GET和POST) + params = request.args.to_dict() + if request.method == 'POST': + params.update(request.form.to_dict()) + # 也可以处理JSON body + if request.is_json: + params.update(request.get_json() or {}) + logger.info(f"Request params: {params}") + return {'message': 'Hello, world!', 'params': params} + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5010) diff --git a/web/app/components/workflow/nodes/_base/components/variable/utils.ts b/web/app/components/workflow/nodes/_base/components/variable/utils.ts index 428c204dd3..4857cbf3ba 100644 --- a/web/app/components/workflow/nodes/_base/components/variable/utils.ts +++ b/web/app/components/workflow/nodes/_base/components/variable/utils.ts @@ -209,6 +209,10 @@ const formatItem = ( variable: 'sys.user_id', type: VarType.string, }) + res.vars.push({ + variable: 'sys.user_email', + type: VarType.string, + }) res.vars.push({ variable: 'sys.files', type: VarType.arrayFile, diff --git a/web/app/components/workflow/nodes/start/panel.tsx b/web/app/components/workflow/nodes/start/panel.tsx index eb04ecb360..ee052abc2b 100644 --- a/web/app/components/workflow/nodes/start/panel.tsx +++ b/web/app/components/workflow/nodes/start/panel.tsx @@ -122,6 +122,17 @@ const Panel: FC> = ({ } /> + + String + + } + />