|
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 = {} |
|
|
|
|
|
if "https://hooks.slack.com" in url or "https://chat.googleapis.com" in url: |
|
payload["text"] = message |
|
|
|
elif "https://discord.com/api/webhooks" in url: |
|
payload["content"] = message |
|
|
|
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, |
|
} |
|
], |
|
} |
|
|
|
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 |
|
|