dify工作流异常时需立即触发飞书报警:配置feishu_webhook_url环境变量,编写send_feishu_alert函数并注入workflow执行链路,在except分支中调用该函数且必须保留raise语句。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当Dify工作流因API超时、LLM响应异常或数据库连接中断导致任务失败时,需要在任意节点抛出异常后立即触发飞书机器人报警,确保运维人员5分钟内收到含错误堆栈和上下文的群消息。
配置飞书机器人Webhook地址
登录飞书管理后台→「机器人」→「自定义机器人」→创建新机器人→勾选「发送消息」权限→复制Webhook URL。
将复制的URL粘贴到Dify「Settings」→「Environment Variables」中,键名设为 【FEISHU_WEBHOOK_URL】,值为完整URL(含https://开头)。漏填或格式错误会导致后续所有报警静默失败。
编写全局异常捕获中间件
进入Dify项目根目录,在 app/exceptions/handler.py 文件末尾追加以下代码:
import requests<br>import json<br>import traceback<br>from app.exceptions import AppException<br><br>def send_feishu_alert(error_msg, stack_trace, node_id=None):<br> url = os.getenv("FEISHU_WEBHOOK_URL")<br> if not url:<br> return<br> payload = {<br> "msg_type": "post",<br> "content": {<br> "post": {<br> "zh_cn": {<br> "title": "? Dify工作流异常报警",<br> "content": [<br> [{ "tag": "text", "text": "错误信息:" }],<br> [{ "tag": "text", "text": error_msg }],<br> [{ "tag": "text", "text": "\n调用栈:" }],<br> [{ "tag": "text", "text": stack_trace[:2000] + "..." if len(stack_trace) > 2000 else stack_trace }]<br> ]<br> }<br> }<br> }<br> }<br> requests.post(url, json=payload, timeout=5)
这一步必须放在 handler.py 的最底部,否则Dify启动时无法加载该函数。注意不要删除原有异常处理逻辑,只追加不覆盖。
注入异常捕获到工作流执行链路
打开 app/services/workflow/run.py,定位到 async def run_workflow 函数内部。
在 try: 块起始处插入:
① 在 for node in nodes: 循环前添加 try:;
② 将原循环体整体缩进并包裹进该 try 块;
③ 在对应 except Exception as e: 分支中写入:
send_feishu_alert(str(e), traceback.format_exc(), node.id)<br>raise。
【关键点】必须保留 raise 语句,否则异常被吞掉,前端仍显示“运行成功”,但飞书已发报警——这种状态错配会让排查者误判故障是否真实发生。
验证报警是否生效
方法一:在任意工作流节点的Python代码块中写 raise Exception("测试报警") → 运行工作流 → 查看飞书群是否收到带堆栈的消息。
方法二:临时注释掉数据库连接配置 → 触发SQLAlchemy连接异常 → 等待3秒后检查飞书消息时间戳是否与Dify报错时间一致。










