test_send_with_sheet_simple.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. """
  2. 测试发送消息和表格到投放审批群聊(简化版)
  3. """
  4. import sys
  5. from pathlib import Path
  6. sys.path.insert(0, str(Path(__file__).parent.parent.parent))
  7. from dotenv import load_dotenv
  8. load_dotenv()
  9. from agent.tools.builtin.feishu.feishu_client import FeishuClient
  10. from config import FEISHU_APP_ID, FEISHU_APP_SECRET, FEISHU_OPERATOR_CHAT_ID
  11. # 添加 tools 目录到路径
  12. tools_dir = Path(__file__).parent / "tools"
  13. if str(tools_dir) not in sys.path:
  14. sys.path.insert(0, str(tools_dir))
  15. from feishu_doc import (
  16. _get_tenant_token,
  17. _upload_media,
  18. _create_import_task,
  19. _wait_import_result,
  20. _set_permission,
  21. _send_link_message,
  22. )
  23. print("=" * 60)
  24. print("测试发送消息和表格到投放审批群聊")
  25. print("=" * 60)
  26. print()
  27. print(f"飞书应用 ID: {FEISHU_APP_ID}")
  28. print(f"投放审批群聊 ID: {FEISHU_OPERATOR_CHAT_ID}")
  29. print()
  30. # 创建飞书客户端
  31. client = FeishuClient(
  32. app_id=FEISHU_APP_ID,
  33. app_secret=FEISHU_APP_SECRET
  34. )
  35. # 步骤1:发送测试消息
  36. print("🚀 步骤1:发送测试消息...")
  37. test_message = """📊 **广告调控测试消息**
  38. 这是一条测试消息,验证以下功能:
  39. ✅ 消息发送到投放审批群聊
  40. ✅ 在线表格导入和分享
  41. ✅ 外部访问权限设置
  42. 接下来会发送在线表格链接...
  43. ---
  44. 测试时间: 2026-04-17 21:45
  45. """
  46. try:
  47. result = client.send_message(to=FEISHU_OPERATOR_CHAT_ID, text=test_message)
  48. print(f"✅ 测试消息发送成功")
  49. print(f" 消息 ID: {result.message_id}")
  50. print()
  51. except Exception as e:
  52. print(f"❌ 测试消息发送失败: {e}")
  53. sys.exit(1)
  54. # 步骤2:查找测试表格
  55. print("🚀 步骤2:准备测试表格...")
  56. reports_dir = Path("outputs/reports")
  57. # 查找已有的 xlsx 文件
  58. xlsx_files = sorted(list(reports_dir.glob("*.xlsx")), reverse=True)
  59. if not xlsx_files:
  60. print("⚠️ 未找到现有表格文件,创建测试表格...")
  61. # 创建简单的测试 Excel
  62. import pandas as pd
  63. test_data = pd.DataFrame({
  64. "广告ID": [12345, 67890, 11111],
  65. "广告名称": ["测试广告1", "测试广告2", "测试广告3"],
  66. "ROI": [1.5, 2.3, 0.8],
  67. "日均消耗(元)": [500, 800, 300],
  68. "决策": ["保持", "提价5%", "降价10%"],
  69. "原因": ["ROI正常", "高ROI低消耗", "ROI过低"],
  70. })
  71. reports_dir.mkdir(parents=True, exist_ok=True)
  72. test_xlsx = reports_dir / "test_decision_20260417.xlsx"
  73. test_data.to_excel(test_xlsx, index=False, engine='openpyxl')
  74. print(f"✅ 测试表格已创建: {test_xlsx.name}")
  75. xlsx_path = test_xlsx
  76. else:
  77. xlsx_path = xlsx_files[0]
  78. print(f"✅ 使用现有表格: {xlsx_path.name}")
  79. print()
  80. # 步骤3:导入为飞书在线表格并发送到群聊
  81. print("🚀 步骤3:导入飞书在线表格...")
  82. try:
  83. # 3.1 获取 token
  84. print(" 3.1 获取飞书 token...")
  85. token = _get_tenant_token()
  86. # 3.2 上传素材
  87. print(" 3.2 上传 Excel 文件...")
  88. file_token = _upload_media(token, xlsx_path)
  89. # 3.3 创建导入任务
  90. print(" 3.3 创建导入任务...")
  91. ticket = _create_import_task(token, file_token, xlsx_path.name)
  92. # 3.4 等待导入完成
  93. print(" 3.4 等待导入完成...")
  94. result = _wait_import_result(token, ticket)
  95. url = result.get("url", "")
  96. sheet_token = result.get("token", "")
  97. file_type = result.get("type", "sheet")
  98. if not url:
  99. print("❌ 导入失败:未获取到表格 URL")
  100. sys.exit(1)
  101. print(f" ✅ 导入成功")
  102. # 3.5 设置权限
  103. print(" 3.5 设置访问权限...")
  104. _set_permission(token, sheet_token, file_type)
  105. # 3.6 发送链接到群聊
  106. print(" 3.6 发送表格链接到群聊...")
  107. title = xlsx_path.stem
  108. _send_link_message(FEISHU_OPERATOR_CHAT_ID, url, title)
  109. print()
  110. print("=" * 60)
  111. print("✅ 测试完成")
  112. print("=" * 60)
  113. print()
  114. print(f"📊 在线表格 URL:")
  115. print(f" {url}")
  116. print()
  117. print("📱 请在飞书群聊中确认:")
  118. print(" 1. ✓ 收到测试消息")
  119. print(" 2. ✓ 收到表格链接消息(应该显示为卡片)")
  120. print(" 3. ✓ 点击链接能打开表格")
  121. print()
  122. print("🧪 测试外部访问(重要):")
  123. print(" 1. 复制上面的表格 URL")
  124. print(" 2. 退出飞书账号(或使用隐私模式浏览器)")
  125. print(" 3. 访问 URL")
  126. print(" 4. 如果能直接查看 → 外部访问配置成功 ✅")
  127. print(" 5. 如果提示需要登录 → 需要配置 drive:permission:manage 权限 ⚠️")
  128. print()
  129. except Exception as e:
  130. print()
  131. print(f"❌ 导入失败: {e}")
  132. import traceback
  133. traceback.print_exc()
  134. sys.exit(1)