63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
"""企微 Webhook 通知服务:同步失败告警、Token 超限通知等。"""
|
||
import requests
|
||
from flask import current_app
|
||
|
||
|
||
def send_wecom_webhook(title: str, content: str):
|
||
"""通过企微群机器人 Webhook 发送通知。
|
||
|
||
Args:
|
||
title: 消息标题
|
||
content: 消息内容(支持 Markdown)
|
||
"""
|
||
webhook_url = current_app.config.get("WECOM_WEBHOOK_URL", "")
|
||
if not webhook_url:
|
||
current_app.logger.warning("WECOM_WEBHOOK_URL 未配置,跳过通知")
|
||
return
|
||
|
||
payload = {
|
||
"msgtype": "markdown",
|
||
"markdown": {
|
||
"content": f"## {title}\n\n{content}",
|
||
},
|
||
}
|
||
|
||
try:
|
||
resp = requests.post(webhook_url, json=payload, timeout=10)
|
||
result = resp.json()
|
||
if result.get("errcode") != 0:
|
||
current_app.logger.error(f"企微 Webhook 发送失败: {result}")
|
||
except Exception as e:
|
||
current_app.logger.error(f"企微 Webhook 请求异常: {e}")
|
||
|
||
|
||
def notify_sync_failure(datasource_name: str, error_msg: str):
|
||
"""数据源同步失败通知。"""
|
||
send_wecom_webhook(
|
||
"⚠️ 数据源同步失败",
|
||
f"**数据源**: {datasource_name}\n"
|
||
f"**错误**: {error_msg}\n"
|
||
f"**时间**: 请检查数据源配置并重试",
|
||
)
|
||
|
||
|
||
def notify_token_limit_reached(username: str, token_usage: int, limit: int):
|
||
"""Token 超限通知。"""
|
||
send_wecom_webhook(
|
||
"⚠️ Token 消耗超限",
|
||
f"**用户**: {username}\n"
|
||
f"**已用**: {token_usage:,} tokens\n"
|
||
f"**限额**: {limit:,} tokens\n"
|
||
f"**建议**: 联系管理员调整配额",
|
||
)
|
||
|
||
|
||
def notify_proposal_generated(username: str, customer_name: str):
|
||
"""方案生成完成通知。"""
|
||
send_wecom_webhook(
|
||
"✅ 推荐方案已生成",
|
||
f"**操作人**: {username}\n"
|
||
f"**客户**: {customer_name}\n"
|
||
f"**状态**: 方案已就绪,请查看",
|
||
)
|