本文档详细说明如何在 Ubuntu 服务器上通过 Python 脚本调用 Dify 工作流 API,并使用 Cron 设置定时任务以实现每日自动运行(如生成报告并发送至天讯)。以下步骤基于 Ubuntu 环境,Python 3.x。
1. 发布 Dify 工作流并创建 API
在 Dify 平台中:
- 完成工作流设计后,点击 发布。
-
创建工作流 API,获取 API 密钥。例如:
app-NI1oPCQLZ7j44Nk
API获取.png
2. 创建 Python 脚本
在服务器用户目录下创建 Python 脚本用于调用 Dify 工作流 API。
sudo nano /home/usr/test_dify_workflow.py
输入以下脚本内容:
import requests
import json
from datetime import datetime
import os
# Dify 工作流 API 配置
DIFY_API_URL = "http://IP/v1/workflows/run"
DIFY_API_KEY = os.getenv("DIFY_API_KEY", "app-NI1oPCzbpCk")
def trigger_dify_workflow():
"""调用 Dify 工作流 API"""
headers = {
"Authorization": f"Bearer {DIFY_API_KEY}",
"Content-Type": "application/json"
}
payload = {
"inputs": {}, # 根据工作流需求配置输入变量
"response_mode": "blocking", # 阻塞模式,确保结果返回
"user": "user" # 唯一用户标识
}
try:
response = requests.post(DIFY_API_URL, headers=headers, json=payload)
response.raise_for_status()
result = response.json()
print(f"工作流触发成功: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"服务器响应: {json.dumps(result, indent=2, ensure_ascii=False)}")
except requests.RequestException as e:
print(f"工作流触发失败: {str(e)}")
if e.response is not None:
print(f"服务器响应: {e.response.text}")
else:
print("无服务器响应,可能为网络问题")
if __name__ == "__main__":
trigger_dify_workflow()
保存并退出(Ctrl+X
,Y
,Enter
)。
3. 设置脚本执行权限
确保脚本可执行:
chmod +x /home/ljz/chuzhou_dify_workflow.py
4. 测试脚本
在虚拟环境中运行脚本,验证是否成功触发工作流并输出报告:
source /home/usr/dify_venv/bin/activate
python /home/ljz/test_dify_workflow.py
检查输出,确认工作流触发成功。
5. 配置 Cron 定时任务
设置 Cron 任务以每天早上 9 点自动运行脚本。
打开 Cron 配置文件
crontab -e
添加定时任务
添加以下行:
0 9 * * * /home/usr/dify_venv/bin/python /home/ljz/test_dify_workflow.py >> /home/usr/dify_workflow.log 2>&1
说明:
0 9 * * *
: 每天 9:00 执行。/home/ljz/dify_venv/bin/python
: 使用虚拟环境中的 Python。>> /home/ljz/dify_workflow.log 2>&1
: 将标准输出和错误日志追加到指定文件。DIFY_API_KEY
可通过环境变量设置,若已在脚本中硬编码,可省略。
crontab定时任务示例.png
6. 测试 Cron 任务
为快速验证,临时将 Cron 设置为每分钟运行:
crontab -e
编辑为:
* * * * * /home/usr/dify_venv/bin/python /home/usr/test_dify_workflow.py >> /home/ljz/dify_workflow.log 2>&1
等待 1-2 分钟,检查日志文件:
cat /home/usr/dify_workflow.log
确认日志中包含“工作流触发成功”记录,且天讯收到报告。
7. 恢复定时任务
测试通过后,恢复为每天 9 点运行:
crontab -e
编辑为:
0 9 * * * /home/usr/dify_venv/bin/python /home/usr/test_dify_workflow.py >> /home/usr/dify_workflow.log 2>&1
8. 确保 Cron 服务运行
检查 Cron 服务状态:
sudo systemctl status cron
若未运行,启动并启用开机自启:
sudo systemctl start cron
sudo systemctl enable cron
9. 注意事项
- 虚拟环境:确保脚本在正确的虚拟环境中运行,Cron 任务需指定虚拟环境的 Python 路径。
-
API 密钥安全:建议通过环境变量(如
export DIFY_API_KEY=xxx
)设置 API 密钥,避免硬编码。 -
日志监控:定期检查
/home/ljz/dify_workflow.log
以排查潜在问题。 -
网络稳定性:确保服务器与 Dify API 地址(
http://10.128.206.252/v1/workflows/run
)的网络连接稳定。 -
输入变量:根据工作流需求,在脚本的
payload["inputs"]
中配置必要的输入参数。