|
|
@@ -819,22 +819,66 @@ async def send_approval_request(
|
|
|
"ad_ids": tier2_ad_ids,
|
|
|
})
|
|
|
logger.info("HTTP 轮询收到运营回复: %s", text[:200])
|
|
|
+
|
|
|
+ # 解析审批结果
|
|
|
+ text_lower = text.lower()
|
|
|
+ is_approved = any(kw in text_lower for kw in ["同意", "批准", "通过", "执行", "ok", "确认"])
|
|
|
+ is_rejected = any(kw in text_lower for kw in ["拒绝", "驳回", "不同意", "不批准"])
|
|
|
+
|
|
|
+ # 解析具体批准/拒绝的广告ID(如果有)
|
|
|
+ import re
|
|
|
+ mentioned_ids = []
|
|
|
+ for match in re.finditer(r'\b(\d{11})\b', text): # 腾讯广告ID通常11位
|
|
|
+ ad_id = int(match.group(1))
|
|
|
+ if ad_id in tier2_ad_ids:
|
|
|
+ mentioned_ids.append(ad_id)
|
|
|
+
|
|
|
+ # 确定最终状态和ID列表
|
|
|
+ if is_approved and not is_rejected:
|
|
|
+ # 全部批准或部分批准
|
|
|
+ status = "approved"
|
|
|
+ approved_ids = mentioned_ids if mentioned_ids else tier2_ad_ids
|
|
|
+ rejected_ids = []
|
|
|
+ elif is_rejected and not is_approved:
|
|
|
+ # 全部拒绝
|
|
|
+ status = "rejected"
|
|
|
+ approved_ids = []
|
|
|
+ rejected_ids = tier2_ad_ids
|
|
|
+ elif mentioned_ids:
|
|
|
+ # 提到具体ID:只批准/拒绝这些ID
|
|
|
+ if is_approved:
|
|
|
+ status = "partial_approved"
|
|
|
+ approved_ids = mentioned_ids
|
|
|
+ rejected_ids = [x for x in tier2_ad_ids if x not in mentioned_ids]
|
|
|
+ else:
|
|
|
+ status = "partial_rejected"
|
|
|
+ approved_ids = [x for x in tier2_ad_ids if x not in mentioned_ids]
|
|
|
+ rejected_ids = mentioned_ids
|
|
|
+ else:
|
|
|
+ # 无法判断,需要Agent处理
|
|
|
+ status = "unclear"
|
|
|
+ approved_ids = []
|
|
|
+ rejected_ids = []
|
|
|
+
|
|
|
ad_ids_str = ", ".join(str(x) for x in tier2_ad_ids[:10])
|
|
|
if len(tier2_ad_ids) > 10:
|
|
|
ad_ids_str += f"...共{len(tier2_ad_ids)}个"
|
|
|
+
|
|
|
return ToolResult(
|
|
|
- title="运营已回复",
|
|
|
+ title=f"运营已回复({status})",
|
|
|
output=(
|
|
|
f"运营飞书回复原文: {text}\n"
|
|
|
f"等待审批的广告ID: {ad_ids_str}\n"
|
|
|
- f"等待时间: {poll_count * poll_interval_seconds} 秒\n\n"
|
|
|
- f"请根据运营的自然语言回复判断后续操作:\n"
|
|
|
- f"- 运营同意/批准/通过 → 调用 execute_decisions 执行\n"
|
|
|
- f"- 运营拒绝/驳回 → 停止执行,告知原因\n"
|
|
|
- f"- 运营要求修改(如\"广告X不要暂停\"/\"降价的去掉\")→ modify_decisions → validate → 重新审批(等待再次明确'同意')"
|
|
|
+ f"解析结果: {status}\n"
|
|
|
+ f" - 批准: {len(approved_ids)} 个\n"
|
|
|
+ f" - 拒绝: {len(rejected_ids)} 个\n"
|
|
|
+ f"等待时间: {poll_count * poll_interval_seconds} 秒"
|
|
|
),
|
|
|
metadata={
|
|
|
"request_id": request_id,
|
|
|
+ "status": status,
|
|
|
+ "approved_ids": approved_ids,
|
|
|
+ "rejected_ids": rejected_ids,
|
|
|
"feishu_sent": feishu_sent,
|
|
|
"msg_path": str(msg_path),
|
|
|
"poll_count": poll_count,
|