feat(消息通知): 添加对markdown格式消息的支持
新增send_markdown函数用于发送富文本格式消息,替换原有send_text调用以支持代码块、标题等格式内容显示。自动分割长消息为多个卡片发送,提升消息展示效果。
This commit is contained in:
parent
28e0fe7c27
commit
c6e38026ec
@ -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.
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -96,10 +96,10 @@ async def handle_task_complete(msg: TaskComplete) -> None:
|
||||
"""Handle a task completion notification from a host client."""
|
||||
logger.info("Task %s completed for user %s", msg.task_id, msg.user_id)
|
||||
|
||||
from bot.feishu import send_text
|
||||
from bot.feishu import send_markdown
|
||||
|
||||
try:
|
||||
await send_text(msg.chat_id, "chat_id", msg.result)
|
||||
await send_markdown(msg.chat_id, "chat_id", msg.result)
|
||||
except Exception as e:
|
||||
logger.error("Failed to send task completion notification: %s", e)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user