You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ELSA工作流的HTTP触发器能否在执行完成后返回响应?

解决ELSA工作流HTTP触发器同步返回执行结果的问题

默认情况下ELSA的HTTP触发器是异步启动工作流,所以会立刻返回200响应。要实现等待工作流执行完成后再返回包含输出的响应,按以下步骤操作:

  • 开启同步等待模式
    在定义HTTP触发器活动时,将WaitForCompletion属性设为true,这会让触发器阻塞请求,直到工作流执行完成。示例代码如下:

    public class MyWorkflow : IWorkflow
    {
        public void Build(IWorkflowBuilder builder)
        {
            builder
                .HttpEndpoint(activity => activity
                    .WithPath("/run-workflow")
                    .WithMethod(HttpMethod.Post)
                    .WaitForCompletion(true) // 核心配置:开启等待完成
                )
                // 后续添加你的工作流活动
                .Then<ProcessDataActivity>()
                .Then<SetHttpResponseBody>(activity => activity
                    .WithContent(context => context.GetOutput<ProcessDataResult>().OutputContent)
                    .WithContentType("application/json")
                );
        }
    }
    
  • 设置响应内容
    必须使用SetHttpResponseBody活动来指定要返回给请求方的输出内容,否则工作流完成后会返回空响应。如果需要自定义状态码,搭配SetHttpResponseStatus活动即可。

  • 配置超时时间
    若工作流执行耗时较长,建议设置合理的超时时间,避免请求因服务器超时被中断。在HTTP触发器配置中添加Timeout属性:

    .HttpEndpoint(activity => activity
        .WithPath("/run-workflow")
        .WithMethod(HttpMethod.Post)
        .WaitForCompletion(true)
        .Timeout(TimeSpan.FromMinutes(3)) // 设置3分钟超时
    )
    
  • 错误处理
    可以通过Catch活动捕获工作流执行中的异常,自定义错误响应:

    builder
        .HttpEndpoint(...)
        .Then<ProcessDataActivity>()
        .Catch<Exception>(catchBuilder => catchBuilder
            .Then<SetHttpResponseStatus>(activity => activity.WithStatusCode(HttpStatusCode.InternalServerError))
            .Then<SetHttpResponseBody>(activity => activity.WithContent("工作流执行失败:" + context.Exception.Message))
        )
        .Then<SetHttpResponseBody>(...);
    

内容的提问来源于stack exchange,提问作者Amateur_coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:02:07