当用户提到以下场景时使用此 skill:
text
WebSocket URL: ws://{EOFFICE_IM_BASE_URL}/
连接时需要在 handshake 中传递:
参数说明token访问令牌connectType连接类型: web、 mobile、 clientloginUserId登录用户 ID
javascript
import { io } from 'socket.io-client';
const socket = io('http://localhost:3000', {
auth: {
token: 'your-token-here'
},
query: {
connectType: 'web',
loginUserId: 'admin'
}
});
socket.on('connect', () => {
console.log('Connected to IM server');
});
socket.on('private message', (msg) => {
console.log('Received message:', msg);
});
变量必填说明示例EOFFICE_IM_BASE_URL是IM 服务地址http://localhost:3000``EOFFICE_IM_TOKEN是访问令牌从 OA 登录获取
javascript
socket.emit('send message', {
type: 'user',
message_id: Date.now(),
message_content: '消息内容(AES加密)',
text_message_content: '消息内容(原文)',
message_type: 1, // 1=text, 2=image, 3=file
sender: 'user_id',
chat_object_id: 'room_id',
to: 'receiver_user_id',
sender_name: '发送者姓名'
});
响应:服务器返回相同的消息对象(包含 send_time)
javascript
socket.emit('send message', {
type: 'personal_group', // 或 'public_group'
message_id: Date.now(),
message_content: '消息内容(AES加密)',
text_message_content: '消息内容(原文)',
message_type: 1,
sender: 'user_id',
room_id: 'room_id',
members: ['user1', 'user2'],
group_name: '群名称',
sender_name: '发送者姓名',
at_list: [{user_id: 'xxx', user_name: 'xxx'}] // @人员
});
响应:服务器推送到 group message 事件
type 值说明user私聊消息personal_group私人群聊public_group公共群message_type 值说明1文本消息2图片消息3文件消息
javascript
socket.on('private message', (msg) => {
console.log('私聊消息:', msg);
});
javascript
socket.on('group message', (msg) => {
console.log('群聊消息:', msg);
});
javascript
socket.emit('user readed', {
chat_id: 'chat_object_id',
toUserId: 'sender_user_id'
});
接收已读通知:
javascript
socket.on('message have read', (data) => {
// { type: 'user', chat_id: 'xxx', read_time: timestamp, user_id: 'xxx' }
});
javascript
socket.emit('group readed', {
chat_id: 'room_id',
toUserId: '群ID'
});
javascript
socket.emit('withdraw msg', {
chat_id: 'room_id',
message_id: 'message_id',
type: 'user', // 或 'group'
toUserId: 'user_id',
at_list: []
});
javascript
socket.emit('delete msg', {
chat_id: 'room_id',
message_id: 'message_id'
});
javascript
socket.emit('create group', {
room_id: 'room_id',
members: ['user1', 'user2'] // 不包含创建者
});
javascript
socket.emit('user add group', {
room_id: 'room_id',
members: ['user3', 'user4']
});
接收通知:
javascript
socket.on('user add group', (data) => {
// { room_id: 'xxx', members: ['user3', 'user4'] }
});
javascript
socket.emit('group delete user', {
room_id: 'room_id',
members: ['user_id']
});
javascript
socket.emit('delete group', {
room_id: 'room_id',
members: ['user1', 'user2']
});
javascript
socket.emit('user onlineUsers', {}, (res) => {
console.log(res);
// {
// onlineUsers: ['user1', 'user2'],
// webUsers: [...],
// mobileUsers: [...],
// clientUsers: [...]
// }
});
javascript
socket.on('online user change', (data) => {
// {
// online: { webUsers: [...], mobileUsers: [...], clientUsers: [...] },
// offline: { webUsers: [...], mobileUsers: [...], clientUsers: [...] }
// }
});
javascript
socket.emit('change work status', {
userId: 'user_id',
workStatus: 1 // 0=离线, 1=在线, 2=忙碌等
});
javascript
socket.emit('get offline info');
接收响应:
javascript
// 私聊离线消息
socket.on('user offline info', (messages, callback) => {
console.log('离线私聊消息:', messages);
callback('success'); // 确认已接收
});
// 群聊离线消息
socket.on('group offline info', (messages, callback) => {
console.log('离线群聊消息:', messages);
callback('success');
});
typescript
{
message_id: string | number; // 消息ID
reply_message_id?: string; // 回复消息ID
message_content: string; // 加密后的消息内容
text_message_content: string; // 原文消息内容
message_type: number; // 消息类型
sender: string; // 发送者ID
send_time: number; // 发送时间
chat_object_id: string; // 私聊房间ID
withdraw: number; // 是否撤回
delete_user_id?: string; // 删除消息的用户ID
type: string; // 'user'
sendType?: string; // 发送状态
to: string; // 接收者ID
sender_name?: string; // 发送者姓名
reply?: any; // 回复内容
}
typescript
{
message_id: string | number; // 消息ID
reply_message_id?: string; // 回复消息ID
message_content: string; // 加密后的消息内容
text_message_content: string; // 原文消息内容
message_type: number; // 消息类型
sender: string; // 发送者ID
send_time: number; // 发送时间
withdraw: number; // 是否撤回
type: string; // 'personal_group' | 'public_group'
sendType?: string;
room_id?: string; // 群房间ID
members?: string[]; // 群成员列表
sender_name?: string; // 发送者姓名
group_name?: string; // 群名称
at_list?: Array<{ // @人员列表
user_id: string;
user_name: string;
}>;
}
javascript
socket.emit('sync chat list');
javascript
socket.emit('page communication', {
key: 'value' // 任意数据
});
监听错误事件:
javascript
socket.on('error', (error) => {
console.error('Socket error:', error);
});
socket.on('connect_error', (error) => {
console.error('Connection error:', error.message);
});
详见 references/im-api.md