打开测试工具:
# 在浏览器中打开
yss-project/GET-CHAT-ACTIVATION-TEST-URL.html
点击按钮:
复制或打开URL:
启动项目:
cd yss-project
npm start
打开浏览器 (http://localhost:4200)
打开控制台 (F12),运行:
// 🚀 一键获取测试地址
(async()=>{
try {
// 配置
const cid='cDL6R1hgSi';
const userid='woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg';
// 设置localStorage
localStorage.setItem('company',cid);
localStorage.setItem(`${cid}/USERINFO`,JSON.stringify({
userid:userid,
errcode:0,
errmsg:'ok',
cid:cid
}));
console.log('✅ localStorage配置成功');
// 导入Parse
const{FmodeParse}=await import('fmode-ng/parse');
const Parse=FmodeParse.with('nova');
// 查询群聊
const query=new Parse.Query('GroupChat');
query.equalTo('company',{__type:'Pointer',className:'Company',objectId:cid});
query.include('project');
query.descending('createdAt');
query.limit(10);
const chats=await query.find();
if(chats.length>0){
console.log(`\n✅ 找到 ${chats.length} 个群聊:\n`);
chats.forEach((chat,i)=>{
const url=`http://localhost:4200/wxwork/${cid}/chat-activation/${chat.id}`;
const name=chat.get('name')||'未命名';
const project=chat.get('project');
const projectName=project?project.get('title'):'无项目';
console.log(`${i+1}. ${name}`);
console.log(` 项目: ${projectName}`);
console.log(` 🔗 ${url}\n`);
});
// 复制第一个
const firstUrl=`http://localhost:4200/wxwork/${cid}/chat-activation/${chats[0].id}`;
await navigator.clipboard.writeText(firstUrl);
alert(`✅ 已复制第一个群聊地址!\n\n${chats[0].get('name')}\n\n${firstUrl}\n\n点击确定后自动打开...`);
setTimeout(()=>window.open(firstUrl,'_blank'),500);
}else{
// 创建测试群聊
console.log('⚠️ 未找到群聊,正在创建测试数据...');
const GroupChat=Parse.Object.extend('GroupChat');
const testChat=new GroupChat();
testChat.set('name','测试群聊 - '+new Date().toLocaleString('zh-CN'));
testChat.set('company',{__type:'Pointer',className:'Company',objectId:cid});
testChat.set('chat_id','test_chat_'+Date.now());
testChat.set('member_list',[
{type:1,userid:'tech_001',name:'技术员-张三',avatar:''},
{type:2,userid:'customer_001',name:'客户-李四',avatar:''},
{type:2,userid:'customer_002',name:'客户-王五',avatar:''}
]);
testChat.set('messages',[
{msgid:'msg_001',from:'customer_001',msgtime:Math.floor(Date.now()/1000)-3600,msgtype:'text',text:{content:'你好,我想咨询一下项目进度'}},
{msgid:'msg_002',from:'tech_001',msgtime:Math.floor(Date.now()/1000)-3500,msgtype:'text',text:{content:'您好,项目正在进行中,预计本周完成'}},
{msgid:'msg_003',from:'customer_001',msgtime:Math.floor(Date.now()/1000)-700,msgtype:'text',text:{content:'可以帮我修改一下需求吗?'}},
{msgid:'msg_004',from:'customer_002',msgtime:Math.floor(Date.now()/1000)-300,msgtype:'text',text:{content:'设计稿什么时候能出来?'}}
]);
const saved=await testChat.save();
const url=`http://localhost:4200/wxwork/${cid}/chat-activation/${saved.id}`;
console.log(`\n✅ 测试群聊创建成功!`);
console.log(`群聊名称: ${saved.get('name')}`);
console.log(`群聊ID: ${saved.id}`);
console.log(`🔗 ${url}\n`);
await navigator.clipboard.writeText(url);
alert(`✅ 测试群聊已创建!地址已复制\n\n${url}\n\n点击确定后自动打开...`);
setTimeout(()=>window.open(url,'_blank'),500);
}
}catch(e){
console.error('❌ 错误:',e);
alert('❌ 发生错误: '+e.message+'\n\n请确保:\n1. 项目已启动\n2. Parse Server已连接');
}
})();
http://localhost:4200/wxwork/{cid}/chat-activation/{chatId}
参数说明:
{cid} - 公司ID:cDL6R1hgSi{chatId} - 群聊ID:从Parse数据库GroupChat表的objectId示例:
http://localhost:4200/wxwork/cDL6R1hgSi/chat-activation/Abc123Xyz456
{
"cid": "cDL6R1hgSi",
"userid": "woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg",
"errcode": 0,
"errmsg": "ok"
}
组件会自动配置,也可以手动设置:
localStorage.setItem('company', 'cDL6R1hgSi');
localStorage.setItem('cDL6R1hgSi/USERINFO', JSON.stringify({
userid: 'woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg',
errcode: 0,
errmsg: 'ok',
cid: 'cDL6R1hgSi'
}));
{
objectId: string; // 群聊ID(用于URL)
chat_id: string; // 企微群聊ID
name: string; // 群聊名称
company: Pointer<Company>; // 公司指针
project: Pointer<Project>; // 项目指针
member_list: Array<{
type: 1 | 2; // 1=内部成员, 2=外部联系人
userid: string; // 用户ID
name: string; // 姓名
avatar?: string; // 头像URL
}>;
messages: Array<{
msgid: string; // 消息ID
from: string; // 发送者ID
msgtime: number; // 时间戳(秒)
msgtype: string; // 消息类型
text?: { content: string };
}>;
joinUrl?: { join_url: string }; // 入群链接
joinQrcode?: { qr_code: string }; // 入群二维码
introSent?: boolean; // 是否已发送介绍
introSentAt?: Date; // 发送时间
}
// 1. 获取群聊详情
const chatInfo = await wecorp.externalContact.groupChat.get(chatId);
// 2. 获取入群方式
const config_id = await wecorp.externalContact.groupChat.addJoinWay({
scene: 1, // 1=群聊列表, 2=二维码
chat_id_list: [chatId]
});
const joinWay = await wecorp.externalContact.groupChat.getJoinWay(config_id);
// 3. 发送消息到群聊
await wecorp.message.send({
chatid: chatId,
msgtype: 'text',
text: { content: '消息内容' }
});
页面初始化
↓
从Parse加载缓存数据
↓
调用企微API同步最新信息
↓
更新成员列表和群聊名称
↓
保存到Parse数据库
↓
显示在页面
原因:
解决:
cDL6R1hgSi原因:缺少localStorage配置
解决:
localStorage.setItem('company', 'cDL6R1hgSi');
localStorage.setItem('cDL6R1hgSi/USERINFO', JSON.stringify({
userid: 'woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg',
cid: 'cDL6R1hgSi'
}));
原因:
解决:
原因:
解决:
原因:ion-content配置问题
解决:
<ion-content>包裹内容handleRefresh方法src/modules/project/pages/chat-activation/
├── chat-activation.component.ts # 组件逻辑
├── chat-activation.component.html # 模板
└── chat-activation.component.scss # 样式
src/modules/project/services/
└── chat-message-ai.service.ts # AI服务
src/app/app.routes.ts # 路由配置
{
path: 'wxwork/:cid',
children: [
{
path: 'chat-activation/:chatId',
loadComponent: () => import('./chat-activation.component').then(m => m.ChatActivationComponent),
title: '会话激活'
}
]
}
// 初始化
ngOnInit() {
this.cid = this.route.snapshot.paramMap.get('cid');
this.chatId = this.route.snapshot.paramMap.get('chatId');
await this.initializeSDK();
await this.loadData();
}
// 加载数据
async loadData() {
// 从Parse加载群聊
const gcQuery = new Parse.Query('GroupChat');
gcQuery.equalTo('objectId', this.chatId);
gcQuery.include('project');
this.groupChat = await gcQuery.first();
// 同步企微信息
if (this.wecorp && this.groupChat) {
const chatInfo = await this.wecorp.externalContact.groupChat.get(
this.groupChat.get('chat_id')
);
// 更新数据...
}
}
// AI生成回复
async generateSuggestedReplies(message: ChatMessage) {
const suggestions = await this.chatAI.generateReplySuggestions({
customerMessage: message.content,
projectContext: {...},
chatHistory: [...]
});
}
// 下拉刷新
async handleRefresh(event: any) {
await this.loadData();
event.target.complete();
}
GET-CHAT-ACTIVATION-TEST-URL.html如有问题,请提供:
所有功能已完成!现在可以开始测试了。 🎉