Spaces:
Running
Running
import json | |
import logging | |
import requests | |
from open_webui.config import WEBUI_FAVICON_URL, WEBUI_NAME | |
from open_webui.env import SRC_LOG_LEVELS, VERSION | |
log = logging.getLogger(__name__) | |
log.setLevel(SRC_LOG_LEVELS["WEBHOOK"]) | |
def post_webhook(url: str, message: str, event_data: dict) -> bool: | |
try: | |
payload = {} | |
# Slack and Google Chat Webhooks | |
if "https://hooks.slack.com" in url or "https://chat.googleapis.com" in url: | |
payload["text"] = message | |
# Discord Webhooks | |
elif "https://discord.com/api/webhooks" in url: | |
payload["content"] = message | |
# Microsoft Teams Webhooks | |
elif "webhook.office.com" in url: | |
action = event_data.get("action", "undefined") | |
facts = [ | |
{"name": name, "value": value} | |
for name, value in json.loads(event_data.get("user", {})).items() | |
] | |
payload = { | |
"@type": "MessageCard", | |
"@context": "http://schema.org/extensions", | |
"themeColor": "0076D7", | |
"summary": message, | |
"sections": [ | |
{ | |
"activityTitle": message, | |
"activitySubtitle": f"{WEBUI_NAME} ({VERSION}) - {action}", | |
"activityImage": WEBUI_FAVICON_URL, | |
"facts": facts, | |
"markdown": True, | |
} | |
], | |
} | |
# Default Payload | |
else: | |
payload = {**event_data} | |
log.debug(f"payload: {payload}") | |
r = requests.post(url, json=payload) | |
r.raise_for_status() | |
log.debug(f"r.text: {r.text}") | |
return True | |
except Exception as e: | |
log.exception(e) | |
return False | |