CHAT-ACTIVATION-FIX-GUIDE.md 7.8 KB

会话激活页面 - 空白页面问题修复指南

🔍 问题分析

从截图中看到的错误:

  1. TypeError: Failed to construct 'URL': Invalid base URL
  2. ⚠️ 企微API调用失败
  3. 📄 页面显示空白

根本原因:

  • Parse数据库中没有对应的群聊记录
  • 企微API调用失败(可能是权限或网络问题)
  • 页面在等待数据加载时没有正确处理错误

✅ 已修复的问题

1. 增加API超时保护

// 设置5秒超时,避免无限等待
const timeout = new Promise((_, reject) => 
  setTimeout(() => reject(new Error('企微API调用超时')), 5000)
);

const chatInfo = await Promise.race([apiCall, timeout]);

2. 优雅降级处理

try {
  // 尝试从企微API同步
  await this.syncFromWxwork();
} catch (error) {
  console.warn('⚠️ 企微API同步失败,使用Parse缓存数据');
  // 继续使用Parse数据,不阻塞页面
}

3. 友好的错误提示

const errorMsg = `未找到群聊记录\n\n可能的原因:\n1. Parse数据库中没有该群聊记录\n2. 企微API权限不足\n3. 群聊ID不正确\n\n解决方法:\n请运行测试脚本创建群聊记录`;

🚀 快速解决方案

方法1:使用可视化测试工具(推荐)

步骤1:启动项目

cd yss-project
npm start

步骤2:打开测试工具

在浏览器中打开:

file:///E:/yinsanse/yss-project/CREATE-TEST-GROUPCHAT.html

或者双击文件:CREATE-TEST-GROUPCHAT.html

步骤3:点击按钮

  1. 🔍 查询现有记录 - 检查Parse中是否已有群聊记录
  2. 📝 创建群聊记录 - 如果没有,创建新记录
  3. 🌐 打开测试页面 - 自动打开会话激活页面

工具会自动:

  • ✅ 配置localStorage(使用你的企微密钥)
  • 🔍 查询Parse数据库
  • 📝 创建群聊记录(如果不存在)
  • 📋 复制测试URL
  • 🚀 打开测试页面

方法2:控制台脚本

如果你更喜欢用控制台,打开浏览器控制台(F12)运行:

(async () => {
  try {
    const CONFIG = {
      cid: 'cDL6R1hgSi',
      userid: 'woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg',
      wxworkChatId: 'wrgKCxBwAALwOgUC9jMwdHiVTFmyXs_A'
    };
    
    // 配置localStorage
    localStorage.setItem('company', CONFIG.cid);
    localStorage.setItem(`${CONFIG.cid}/USERINFO`, JSON.stringify({
      userid: CONFIG.userid,
      errcode: 0,
      errmsg: 'ok',
      cid: CONFIG.cid
    }));
    
    // 导入Parse
    const { FmodeParse } = await import('fmode-ng/parse');
    const Parse = FmodeParse.with('nova');
    
    // 查询现有记录
    let query = new Parse.Query('GroupChat');
    query.equalTo('chat_id', CONFIG.wxworkChatId);
    query.equalTo('company', { __type: 'Pointer', className: 'Company', objectId: CONFIG.cid });
    
    let groupChat = await query.first();
    
    // 如果不存在,创建新记录
    if (!groupChat) {
      console.log('📝 创建新的群聊记录...');
      
      const GroupChat = Parse.Object.extend('GroupChat');
      groupChat = new GroupChat();
      
      groupChat.set('chat_id', CONFIG.wxworkChatId);
      groupChat.set('name', '测试群聊 - ' + new Date().toLocaleString('zh-CN'));
      groupChat.set('company', { __type: 'Pointer', className: 'Company', objectId: CONFIG.cid });
      groupChat.set('member_list', [{
        userid: CONFIG.userid,
        type: 1,
        join_time: Math.floor(Date.now() / 1000)
      }]);
      groupChat.set('data', {
        createdFrom: 'console-script',
        createdAt: new Date()
      });
      
      groupChat = await groupChat.save();
      console.log('✅ 群聊记录已创建');
    } else {
      console.log('✅ 找到现有群聊记录');
    }
    
    // 生成URL
    const url = `http://localhost:4200/wxwork/${CONFIG.cid}/chat-activation/${groupChat.id}`;
    
    console.log('📋 测试URL:', url);
    
    // 复制到剪贴板
    await navigator.clipboard.writeText(url);
    
    // 显示提示并打开页面
    alert(`✅ 成功!\n\n群聊名称: ${groupChat.get('name')}\nParse ID: ${groupChat.id}\n\nURL已复制到剪贴板\n\n点击确定后自动打开测试页面`);
    
    window.open(url, '_blank');
    
  } catch (error) {
    console.error('❌ 错误:', error);
    alert('发生错误: ' + error.message + '\n\n请确保项目已启动且Parse Server已连接');
  }
})();

📋 你的企微信息

公司ID (cid):        cDL6R1hgSi
用户ID (userid):     woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg
群聊ID (chat_id):    wrgKCxBwAALwOgUC9jMwdHiVTFmyXs_A

🎯 测试URL格式

创建记录后,测试URL格式为:

http://localhost:4200/wxwork/cDL6R1hgSi/chat-activation/{Parse记录的objectId}

例如:

http://localhost:4200/wxwork/cDL6R1hgSi/chat-activation/abc123xyz

🔧 页面加载流程

修复后的页面加载流程:

1. 📥 初始化企微SDK
   ├─ ✅ 成功 → 继续
   └─ ❌ 失败 → 使用本地模式,继续

2. 🔍 查询Parse数据库
   ├─ 方式1: 通过 objectId 查询
   ├─ 方式2: 通过 chat_id 查询
   └─ ❌ 都没找到 → 尝试从企微API创建

3. 🔄 同步企微数据(可选)
   ├─ ✅ 成功 → 更新Parse记录
   └─ ❌ 失败 → 使用Parse缓存数据

4. 📱 显示页面
   └─ 使用Parse数据渲染界面

关键改进:

  • ✅ 每一步都有错误处理
  • ✅ 失败时不阻塞后续流程
  • ✅ 优先使用Parse缓存数据
  • ✅ 企微API作为可选增强

🐛 调试信息

打开控制台可以看到详细的日志:

✅ 初始化企微SDK, cid: cDL6R1hgSi
📥 开始加载数据...
📋 参数: { cid: 'cDL6R1hgSi', chatId: 'wrgKCxBwAALwOgUC9jMwdHiVTFmyXs_A' }
🔍 查询群聊...
✅ 找到群聊: 测试群聊
📊 群聊信息: { objectId: 'xxx', chat_id: 'wrgKCxBwAALwOgUC9jMwdHiVTFmyXs_A', ... }
🔄 尝试从企微API同步群聊信息...
⚠️ 企微API同步失败,使用Parse缓存数据
💾 继续使用Parse数据库中的缓存数据

⚠️ 常见问题

Q1: 页面还是空白怎么办?

检查清单:

  1. ✅ 项目是否已启动? npm start
  2. ✅ Parse Server是否运行?
  3. ✅ 控制台是否有错误?(F12查看)
  4. ✅ localStorage是否配置?(运行测试脚本)
  5. ✅ Parse中是否有群聊记录?(使用测试工具查询)

Q2: 企微API一直失败?

这是正常的! 页面已经优化为:

  • ⏱️ 5秒超时自动放弃
  • 💾 使用Parse缓存数据继续
  • 📱 页面正常显示

企微API失败的常见原因:

  • 🔐 应用权限不足
  • 🌐 网络连接问题
  • 🔑 access_token过期

解决方法: 不需要解决!页面会自动使用Parse数据。

Q3: 如何添加测试数据?

方法1: 使用 CREATE-TEST-GROUPCHAT.html

方法2: 在Parse Dashboard中手动创建:

  • 表名:GroupChat
  • 必填字段:
    • chat_id: wrgKCxBwAALwOgUC9jMwdHiVTFmyXs_A
    • name: 任意群聊名称
    • company: Pointer → Company → cDL6R1hgSi
    • member_list: Array (可以为空)

📚 相关文档

  • CREATE-TEST-GROUPCHAT.html - 可视化测试工具
  • TEST-WXWORK-CHAT.md - 详细测试说明
  • CHAT-ACTIVATION-COMPLETE-GUIDE.md - 完整功能文档

🎉 开始测试

推荐流程:

  1. 📂 双击打开 CREATE-TEST-GROUPCHAT.html
  2. 🔍 点击"查询现有记录"
  3. 📝 如果没有,点击"创建群聊记录"
  4. 🌐 点击"打开测试页面"
  5. ✅ 开始测试所有功能!

预期结果:

  • ✅ 页面正常显示
  • ✅ 显示群聊基本信息
  • ✅ 显示入群方式(二维码/链接/手动拉群)
  • ✅ 可以筛选消息
  • ✅ 可以生成AI回复建议
  • ⚠️ 企微API可能失败(正常,不影响使用)

如有问题,请查看控制台日志! 🔍