太好了 👍
下面给你的是一篇完整的、成体系的技术文档,内容融合了前面所有讲解:包括整体架构、家长端与教师端 IM 登录逻辑、消息收发机制、小程序代码模板。
这份文章可以直接用作项目文档或团队交接说明。
🧩 教育沟通场景下:基于腾讯云 IM 实现家长端小程序与教师端 PC 端双向聊天功能
一、项目背景
在教育场景中,家长需要通过微信小程序与教师在 PC 网页端进行实时沟通,比如作业提醒、学生反馈、家校联系等。
传统方案(如 WebSocket 自建服务)虽然灵活,但维护成本高、稳定性差。
腾讯云 IM 提供了完善的 SDK 与云端服务,可以快速实现跨端、稳定、双向同步的即时通信系统。
二、整体架构设计
架构组成:
| 模块 | 职责 |
|---|---|
| 家长端(微信小程序) | 展示消息列表、发送与接收教师消息 |
| 教师端(PC 网页端) | 接收家长消息、实时回复 |
| 业务服务器 | 用户体系、生成 userSig、管理家长教师关系 |
| 腾讯云 IM | 提供即时通信通道、消息同步、存储与回调机制 |
架构流程图
[家长端小程序] ←→ [腾讯云 IM] ←→ [教师端 PC 网页]
↑ ↑
│ │
[业务后台签发 userSig] ←→ [用户账号体系]
三、账号与 userSig 签发逻辑
1️⃣ 用户标识规范
为了在腾讯云 IM 中区分不同角色,建议统一 userID 规则:
| 角色 | userID 规则 | 示例 |
|---|---|---|
| 家长 | p_${parentId} |
p_1024 |
| 教师 | t_${teacherId} |
t_2001 |
后台维护一张绑定关系表,例如:
parent_id | teacher_id | class_id
用于控制允许发起聊天的双方。
2️⃣ userSig 获取流程
- 家长/教师登录业务系统;
- 业务后台通过腾讯云 Server SDK 生成 userSig;
- 返回前端登录参数:
{
"sdkAppID": 1400000000,
"userID": "p_1024",
"userSig": "xxxxx"
}
四、前端(小程序 & PC)登录 IM
小程序端(家长)
import TIM from 'tim-wx-sdk';
const tim = TIM.create({ SDKAppID: 1400000000 });
tim.login({
userID: "p_1024",
userSig: "xxxxx"
});
网页端(教师)
import TIM from 'tim-js-sdk';
const tim = TIM.create({ SDKAppID: 1400000000 });
tim.login({
userID: "t_2001",
userSig: "xxxxx"
});
五、消息收发逻辑
1️⃣ 家长端发送消息(小程序)
const message = tim.createTextMessage({
to: "t_2001", // 教师IM账号
conversationType: TIM.TYPES.CONV_C2C,
payload: { text: "老师您好,请问今天有作业吗?" }
});
tim.sendMessage(message).then(() => {
console.log("发送成功");
}).catch(console.error);
SDK 会自动在本地生成会话,无需显式创建。
2️⃣ 教师端接收消息(PC 端)
tim.on(TIM.EVENT.MESSAGE_RECEIVED, event => {
event.data.forEach(msg => {
console.log("收到家长消息:", msg.payload.text);
});
});
3️⃣ 教师端回复消息
const reply = tim.createTextMessage({
to: "p_1024",
conversationType: TIM.TYPES.CONV_C2C,
payload: { text: "您好家长,今天没有布置新作业哦~" }
});
tim.sendMessage(reply);
4️⃣ 家长端接收教师消息
tim.on(TIM.EVENT.MESSAGE_RECEIVED, event => {
event.data.forEach(msg => {
console.log("收到教师消息:", msg.payload.text);
// 更新聊天 UI 或写入本地缓存
});
});
六、家长端小程序聊天组件模板(可直接使用)
// chat.js
import TIM from 'tim-wx-sdk';
const tim = TIM.create({ SDKAppID: 1400000000 });
Page({
data: {
teacherIMID: '',
messages: [],
inputValue: ''
},
onLoad(options) {
this.setData({ teacherIMID: options.teacherIMID });
this.initIM();
},
async initIM() {
const { userID, userSig } = await this.fetchUserSig(); // 从你的后台获取
await tim.login({ userID, userSig });
tim.on(TIM.EVENT.MESSAGE_RECEIVED, this.handleMessage);
this.loadHistory();
},
handleMessage(event) {
const msgs = event.data.map(m => ({
from: m.from,
text: m.payload.text
}));
this.setData({ messages: this.data.messages.concat(msgs) });
},
sendMessage() {
const text = this.data.inputValue.trim();
if (!text) return;
const message = tim.createTextMessage({
to: this.data.teacherIMID,
conversationType: TIM.TYPES.CONV_C2C,
payload: { text }
});
tim.sendMessage(message).then(() => {
this.setData({
messages: this.data.messages.concat({ from: 'me', text }),
inputValue: ''
});
});
},
loadHistory() {
tim.getMessageList({
conversationID: `C2C_${this.data.teacherIMID}`,
count: 20
}).then(({ data }) => {
const history = data.messageList.map(m => ({
from: m.from,
text: m.payload.text
}));
this.setData({ messages: history.reverse() });
});
},
async fetchUserSig() {
const res = await wx.request({
url: 'https://your-api.com/im/usersig',
method: 'GET',
data: { role: 'parent' }
});
return res.data;
}
});
七、关键点与注意事项
| 要点 | 说明 |
|---|---|
| 自动会话 | SDK 自动创建会话,无需 createConversation() |
| 登录状态 | 小程序唤醒后检查 tim.getLoginStatus(),必要时重新登录 |
| 离线消息 | 腾讯云 IM 登录后会自动同步离线消息 |
| 消息存档 | 可在腾讯云后台开启「消息回调」,将消息推送到你服务器保存 |
| 安全 | userSig 只能由服务器签发,不可在前端生成 |
| 多端同步 | 家长或教师可多设备同时登录,IM 自动同步会话状态 |
八、消息流总结
教师端(PC)
↓ sendMessage()
腾讯云 IM
↓ MESSAGE_RECEIVED
家长端(小程序)
↓ sendMessage()
腾讯云 IM
↓ MESSAGE_RECEIVED
教师端(PC)
双方消息均经过腾讯云 IM 云转发,实现实时双向通信与离线消息补发。
九、可扩展方向
| 功能 | 实现方式 |
|---|---|
| 图片消息 | createImageMessage() |
| 音频消息 | createAudioMessage() |
| 未读数红点 | 会话对象 unreadCount |
| 撤回消息 | tim.revokeMessage() |
| 已读回执 | sendMessageReadReceipt() |
| 群聊(班级群) | 使用 createGroup() + sendGroupMessage() |
🏁 十、总结
实现小程序家长端与 PC 教师端的聊天功能,核心是三步:
- 统一账号体系(userID 规则)
- 后端签发 userSig 并安全登录腾讯云 IM
- 通过
sendMessage()与MESSAGE_RECEIVED实现双向收发
腾讯云 IM 会自动完成:
- 会话管理;
- 多端同步;
- 离线补发;
- 消息存储。
最终实现「家长端实时接收教师消息并可立即回复」,形成完整的家校沟通通道。
是否希望我帮你补一份教师端(PC)Vue 页面聊天模块的代码模板?可以直接与你这个家长端对接通信。