Files
iSuneast-ComfyUI-WebhookNot…/webhook_notifier.py
T
2025-11-25 06:59:45 +09:00

123 lines
3.6 KiB
Python

import requests
import json
import threading
def send_webhook_request(webhook_url, payload):
"""
发送 webhook 请求的通用函数,供各个节点复用。
"""
try:
response = requests.post(
webhook_url,
json=payload,
headers={"Content-Type": "application/json"}
)
if response.status_code >= 400:
print(f"Webhook notification failed: {response.status_code} - {response.text}")
else:
print(f"Webhook notification successful: {response.status_code}")
except Exception as e:
print(f"Error sending webhook: {str(e)}")
class WebhookNotifierNode:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
# 接收图像结果,用于作为触发输入
"images": ("IMAGE",),
"webhook_url": ("STRING", {"default": "https://example.com/webhook"})
},
"optional": {
"additional_info": ("STRING", {"default": "{}", "multiline": True})
},
"hidden": {
}
}
OUTPUT_NODE = True
RETURN_TYPES = ()
RETURN_NAMES = ()
FUNCTION = "notify"
CATEGORY = "utils"
def notify(self, images, webhook_url, additional_info="{}"):
try:
# Try to parse additional information
try:
extra_info = json.loads(additional_info) if additional_info else {}
except json.JSONDecodeError:
extra_info = {}
# Construct payload
payload = {
**extra_info
}
# Start the webhook sending in a background thread
threading.Thread(
target=send_webhook_request,
args=(webhook_url, payload),
daemon=True
).start()
print("Webhook notification started in background")
except Exception as e:
print(f"Error preparing webhook: {str(e)}")
# No return value
return ()
class WebhookNotifierVHSNode:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
# 接收 VHS/VideoHelperSuite 等节点输出的文件名列表,用于作为触发输入
"vhs_filenames": ("VHS_FILENAMES",),
"webhook_url": ("STRING", {"default": "https://example.com/webhook"})
},
"optional": {
"additional_info": ("STRING", {"default": "{}", "multiline": True})
},
"hidden": {
}
}
OUTPUT_NODE = True
RETURN_TYPES = ()
RETURN_NAMES = ()
FUNCTION = "notify"
CATEGORY = "utils"
def notify(self, vhs_filenames, webhook_url, additional_info="{}"):
try:
# 解析附加信息
try:
extra_info = json.loads(additional_info) if additional_info else {}
except json.JSONDecodeError:
extra_info = {}
# 构建 payload(默认不发送具体文件名,仅作为触发)
payload = {
**extra_info
}
# 在后台线程中发送 webhook
threading.Thread(
target=send_webhook_request,
args=(webhook_url, payload),
daemon=True
).start()
print("Webhook notification (VHS) started in background")
except Exception as e:
print(f"Error preparing webhook (VHS): {str(e)}")
# 无返回值
return ()