| 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 |
|
|