对于异步任务(Midjourney 绘图、视频生成、音乐生成等),Crazyrouter 支持通过 Webhook 回调通知任务状态变更。
回调 URL 配置
在提交任务时,通过 notifyHook 参数指定回调地址:
{
"prompt": "a beautiful sunset",
"notifyHook": "https://your-server.com/api/callback"
}
回调请求格式
Crazyrouter 会向你的回调 URL 发送 POST 请求:
POST https://your-server.com/api/callback
Content-Type: application/json
Midjourney 回调
{
"id": "task_abc123",
"action": "IMAGINE",
"status": "SUCCESS",
"prompt": "a beautiful sunset",
"imageUrl": "https://cdn.example.com/image.png",
"progress": "100%",
"failReason": "",
"submitTime": 1706000000000,
"startTime": 1706000010000,
"finishTime": 1706000060000
}
视频生成回调(Kling/Luma/Runway)
{
"id": "task_xyz789",
"status": "succeed",
"type": "video",
"output": {
"video_url": "https://cdn.example.com/video.mp4",
"cover_url": "https://cdn.example.com/cover.jpg",
"duration": 5.0
},
"created_at": 1706000000,
"updated_at": 1706000120
}
Suno 音乐回调
{
"id": "task_music456",
"status": "complete",
"output": {
"audio_url": "https://cdn.example.com/song.mp3",
"title": "My Song",
"duration": 180
}
}
回调状态流转
提交 → NOT_START → IN_PROGRESS → SUCCESS / FAILURE
每次状态变更都会触发一次回调。
回调服务端示例
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/api/callback", methods=["POST"])
def callback():
data = request.json
task_id = data["id"]
status = data["status"]
print(f"任务 {task_id} 状态更新: {status}")
if status == "SUCCESS":
image_url = data.get("imageUrl")
print(f"图片地址: {image_url}")
return jsonify({"success": True})
app.run(port=8080)
回调 URL 必须是公网可访问的地址。请确保你的服务器能接收 POST 请求,并在 5 秒内返回 200 状态码。
如果回调失败,系统会重试最多 3 次,间隔分别为 10 秒、30 秒、60 秒。