[ PROMPT_NODE_24882 ]
webhooks
[ SKILL_DOCUMENTATION ]
# Webhooks
Webhooks 允许 HeyGen 在事件发生(如视频完成)时通知你的应用程序。这比轮询状态更新更高效。
## 概述
与其反复检查视频状态,Webhooks 会在以下情况向你的服务器推送通知:
- 视频生成完成
- 视频生成失败
- 翻译完成
- 数字人训练完成
- 其他异步操作结束
## 设置 Webhook 端点
你的 Webhook 端点应该:
1. 接受 POST 请求
2. 快速返回 200 状态码
3. 异步处理事件
### Express.js 示例
typescript
import express from "express";
import crypto from "crypto";
const app = express();
app.use(express.json());
// Webhook 端点
app.post("/webhook/heygen", async (req, res) => {
// 立即确认接收
res.status(200).send("OK");
// 异步处理事件
processWebhookEvent(req.body).catch(console.error);
});
async function processWebhookEvent(event: HeyGenWebhookEvent) {
console.log(`Received event: ${event.event_type}`);
switch (event.event_type) {
case "avatar_video.success":
await handleVideoSuccess(event);
break;
case "avatar_video.fail":
await handleVideoFailure(event);
break;
case "video_translate.success":
await handleTranslationSuccess(event);
break;
default:
console.log(`Unknown event type: ${event.event_type}`);
}
}
app.listen(3000, () => {
console.log("Webhook server running on port 3000");
});
### Python Flask 示例
python
from flask import Flask, request, jsonify
import threading
app = Flask(__name__)
@app.route("/webhook/heygen", methods=["POST"])
def heygen_webhook():
event = request.json
# 立即确认接收
response = jsonify({"status": "received"})
# 异步处理
thread = threading.Thread(
target=process_webhook_event,
args=(event,)
)
thread.start()
return response, 200
def process_webhook_event(event):
event_type = event.get("event_type")
print(f"Received event: {event_type}")
if event_type == "avatar_video.success":
handle_video_success(event)
elif event_type == "avatar_video.fail":
handle_video_failure(event)
elif event_type == "video_translate.success":
handle_translation_success(event)
if __name__ == "__main__":
app.run(port=3000)
## Webhook 事件类型
| 事件类型 | 描述 |
|------------|-------------|
| `avat