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)
|
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:
|
async def send_card(receive_id: str, receive_id_type: str, card: dict) -> None:
|
||||||
"""
|
"""
|
||||||
Send an interactive card message.
|
Send an interactive card message.
|
||||||
|
|||||||
@ -13,7 +13,7 @@ import lark_oapi as lark
|
|||||||
from lark_oapi.api.im.v1 import P2ImMessageReceiveV1
|
from lark_oapi.api.im.v1 import P2ImMessageReceiveV1
|
||||||
|
|
||||||
from bot.commands import handle_command
|
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 config import FEISHU_APP_ID, FEISHU_APP_SECRET, is_user_allowed
|
||||||
from orchestrator.agent import agent
|
from orchestrator.agent import agent
|
||||||
from orchestrator.tools import set_current_chat
|
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:
|
try:
|
||||||
reply = await forward(node_id, user_id, chat_id, text)
|
reply = await forward(node_id, user_id, chat_id, text)
|
||||||
if reply:
|
if reply:
|
||||||
await send_text(chat_id, "chat_id", reply)
|
await send_markdown(chat_id, "chat_id", reply)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception("Failed to forward to node %s", node_id)
|
logger.exception("Failed to forward to node %s", node_id)
|
||||||
await send_text(chat_id, "chat_id", f"Error communicating with node: {e}")
|
await send_text(chat_id, "chat_id", f"Error communicating with node: {e}")
|
||||||
else:
|
else:
|
||||||
reply = await agent.run(user_id, text)
|
reply = await agent.run(user_id, text)
|
||||||
if reply:
|
if reply:
|
||||||
await send_text(chat_id, "chat_id", reply)
|
await send_markdown(chat_id, "chat_id", reply)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("Error processing message for user %s", user_id)
|
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."""
|
"""Handle a task completion notification from a host client."""
|
||||||
logger.info("Task %s completed for user %s", msg.task_id, msg.user_id)
|
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:
|
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:
|
except Exception as e:
|
||||||
logger.error("Failed to send task completion notification: %s", e)
|
logger.error("Failed to send task completion notification: %s", e)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user