feat(消息通知): 添加对markdown格式消息的支持
新增send_markdown函数用于发送富文本格式消息,替换原有send_text调用以支持代码块、标题等格式内容显示。自动分割长消息为多个卡片发送,提升消息展示效果。
This commit is contained in:
@@ -108,6 +108,33 @@ async def send_text(receive_id: str, receive_id_type: str, text: str) -> None:
|
||||
await asyncio.sleep(0.3)
|
||||
|
||||
|
||||
async def send_markdown(receive_id: str, receive_id_type: str, content: str) -> None:
|
||||
"""
|
||||
Send a markdown card message. Used for LLM/agent replies that contain
|
||||
formatted text (code blocks, headings, bold, lists, etc.).
|
||||
|
||||
Automatically splits long content into multiple cards.
|
||||
"""
|
||||
parts = _split_message(content)
|
||||
|
||||
for i, part in enumerate(parts):
|
||||
card = {
|
||||
"schema": "2.0",
|
||||
"body": {
|
||||
"elements": [
|
||||
{
|
||||
"tag": "markdown",
|
||||
"content": part,
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
await send_card(receive_id, receive_id_type, card)
|
||||
|
||||
if len(parts) > 1 and i < len(parts) - 1:
|
||||
await asyncio.sleep(0.3)
|
||||
|
||||
|
||||
async def send_card(receive_id: str, receive_id_type: str, card: dict) -> None:
|
||||
"""
|
||||
Send an interactive card message.
|
||||
|
||||
+3
-3
@@ -13,7 +13,7 @@ import lark_oapi as lark
|
||||
from lark_oapi.api.im.v1 import P2ImMessageReceiveV1
|
||||
|
||||
from bot.commands import handle_command
|
||||
from bot.feishu import send_text
|
||||
from bot.feishu import send_text, send_markdown
|
||||
from config import FEISHU_APP_ID, FEISHU_APP_SECRET, is_user_allowed
|
||||
from orchestrator.agent import agent
|
||||
from orchestrator.tools import set_current_chat
|
||||
@@ -177,14 +177,14 @@ async def _process_message(user_id: str, chat_id: str, text: str) -> None:
|
||||
try:
|
||||
reply = await forward(node_id, user_id, chat_id, text)
|
||||
if reply:
|
||||
await send_text(chat_id, "chat_id", reply)
|
||||
await send_markdown(chat_id, "chat_id", reply)
|
||||
except Exception as e:
|
||||
logger.exception("Failed to forward to node %s", node_id)
|
||||
await send_text(chat_id, "chat_id", f"Error communicating with node: {e}")
|
||||
else:
|
||||
reply = await agent.run(user_id, text)
|
||||
if reply:
|
||||
await send_text(chat_id, "chat_id", reply)
|
||||
await send_markdown(chat_id, "chat_id", reply)
|
||||
except Exception:
|
||||
logger.exception("Error processing message for user %s", user_id)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user