功能:企微回调支持图片消息,路由到 Agent 图片分析

收到图片先回复"正在分析",异步调 VLM 分析后主动回复结果。
This commit is contained in:
2026-03-20 11:14:37 +08:00
parent f87222e6fb
commit 1753f66bd9

View File

@@ -70,11 +70,19 @@ async def wechat_agent_message(
asyncio.create_task(_process_agent_message(user_id, content))
return PlainTextResponse(content="success")
# ---- 图片消息 → Agent 图片分析 ----
if msg_type == "image":
user_id = msg.get("FromUserName", "")
media_id = msg.get("MediaId", "")
logger.info(f"收到企微图片: user={user_id}, media_id={media_id}")
asyncio.create_task(_process_agent_image(user_id, media_id))
return PlainTextResponse(content="success")
return PlainTextResponse(content="success")
async def _process_agent_message(user_id: str, content: str):
"""异步处理消息并主动回复"""
"""异步处理文字消息并主动回复"""
try:
from app.services.agent_dispatcher import get_agent_dispatcher
from app.services.wechat_service import get_wechat_service
@@ -88,6 +96,30 @@ async def _process_agent_message(user_id: str, content: str):
logger.error(f"Agent消息处理失败: user={user_id}, error={e}", exc_info=True)
async def _process_agent_image(user_id: str, media_id: str):
"""异步处理图片消息:先回复"正在分析",再调 VLM 分析"""
try:
from app.services.agent_dispatcher import get_agent_dispatcher
from app.services.wechat_service import get_wechat_service
wechat = get_wechat_service()
# 先回复提示,避免用户等太久
await wechat.send_text_message(user_id, "正在分析图片,请稍候...")
dispatcher = get_agent_dispatcher()
reply = await dispatcher.handle_image(user_id, media_id)
await wechat.send_text_message(user_id, reply)
except Exception as e:
logger.error(f"Agent图片处理失败: user={user_id}, error={e}", exc_info=True)
try:
from app.services.wechat_service import get_wechat_service
wechat = get_wechat_service()
await wechat.send_text_message(user_id, "图片处理失败,请稍后重试。")
except Exception:
pass
async def _process_card_button_click(msg: dict):
"""
处理模板卡片按钮点击事件(两步状态机)