泛微 e-office 即時通訊(IM)WebSocket API - 私聊、群聊、AI助手等

👤 quanruxiaohong 📦 v1.0.0 ⭐ 4.3 ⬇️ 615 下載
💻 開發程式設計 免費 🔑 需 API Key

📖 技能介紹


name: eoffice-im description: 泛微 e-office 即時通訊(IM)WebSocket API - 私聊、群聊等 version: 1.0.0 homepage: https://github.com/yourname/eoffice-im-skill metadata: emoji: "💬" requires: env: - EOFFICE_IM_BASE_URL - EOFFICE_IM_TOKEN primaryEnv: EOFFICE_IM_TOKEN


e-office 即時通訊(IM)Skill

當用戶提到以下場景時使用此 skill: - 傳送即時訊息給使用者或群組 - 查詢聊天記錄 - 管理群組成員 - 獲取使用者線上狀態 - 任何涉及即時通訊的操作

連線方式

WebSocket 連線

WebSocket URL: ws://{EOFFICE_IM_BASE_URL}/

連線引數

連線時需要在 handshake 中傳遞:

引數 說明
token 訪問令牌
connectType 連線型別:webmobileclient
loginUserId 登入使用者 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 登入獲取

傳送訊息

傳送私聊訊息

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

傳送群聊訊息

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 檔案訊息

接收訊息

監聽私聊訊息

socket.on('private message', (msg) => {
  console.log('私聊訊息:', msg);
});

監聽群聊訊息

socket.on('group message', (msg) => {
  console.log('群聊訊息:', msg);
});

訊息操作

訊息已讀 - 私聊

socket.emit('user readed', {
  chat_id: 'chat_object_id',
  toUserId: 'sender_user_id'
});

接收已讀通知

socket.on('message have read', (data) => {
  // { type: 'user', chat_id: 'xxx', read_time: timestamp, user_id: 'xxx' }
});

訊息已讀 - 群聊

socket.emit('group readed', {
  chat_id: 'room_id',
  toUserId: '群ID'
});

撤回訊息

socket.emit('withdraw msg', {
  chat_id: 'room_id',
  message_id: 'message_id',
  type: 'user',  // 或 'group'
  toUserId: 'user_id',
  at_list: []
});

刪除訊息

socket.emit('delete msg', {
  chat_id: 'room_id',
  message_id: 'message_id'
});

群組管理

建立群組

socket.emit('create group', {
  room_id: 'room_id',
  members: ['user1', 'user2']  // 不包含建立者
});

新增群成員

socket.emit('user add group', {
  room_id: 'room_id',
  members: ['user3', 'user4']
});

接收通知

socket.on('user add group', (data) => {
  // { room_id: 'xxx', members: ['user3', 'user4'] }
});

刪除群成員

socket.emit('group delete user', {
  room_id: 'room_id',
  members: ['user_id']
});

解散群組

socket.emit('delete group', {
  room_id: 'room_id',
  members: ['user1', 'user2']
});

線上狀態

獲取線上使用者

socket.emit('user onlineUsers', {}, (res) => {
  console.log(res);
  // {
  //   onlineUsers: ['user1', 'user2'],
  //   webUsers: [...],
  //   mobileUsers: [...],
  //   clientUsers: [...]
  // }
});

監聽線上狀態變化

socket.on('online user change', (data) => {
  // {
  //   online: { webUsers: [...], mobileUsers: [...], clientUsers: [...] },
  //   offline: { webUsers: [...], mobileUsers: [...], clientUsers: [...] }
  // }
});

修改工作狀態

socket.emit('change work status', {
  userId: 'user_id',
  workStatus: 1  // 0=離線, 1=線上, 2=忙碌等
});

離線訊息

獲取離線訊息

socket.emit('get offline info');

接收響應

// 私聊離線訊息
socket.on('user offline info', (messages, callback) => {
  console.log('離線私聊訊息:', messages);
  callback('success');  // 確認已接收
});

// 群聊離線訊息
socket.on('group offline info', (messages, callback) => {
  console.log('離線群聊訊息:', messages);
  callback('success');
});

訊息格式

PersonalMessage 結構

{
  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;                     // 回覆內容
}

這個技能的最新版本可以在7w4.net小蔥技能站找到。

GroupMessage 結構

{
  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;
  }>;
}

連線管理

同步聊天列表

socket.emit('sync chat list');

頁面通訊(跨端同步)

socket.emit('page communication', {
  key: 'value'  // 任意資料
});

錯誤處理

監聽錯誤事件:

socket.on('error', (error) => {
  console.error('Socket error:', error);
});

socket.on('connect_error', (error) => {
  console.error('Connection error:', error.message);
});

注意事項

  1. 訊息加密:傳送的訊息內容需要使用 AES 加密(使用連線時提供的 crypto key)
  2. 離線訊息:使用者離線時,訊息會儲存在 Redis 中,使用者上線後自動推送
  3. 多端同步:同一賬號可以在 web、mobile、client 多端同時登入
  4. Token 有效期:注意處理 token 過期的情況

完整 API 文件

詳見 references/im-api.md

🤖 AI 評測

這個即時通訊 Skill 文件質量良好,功能覆蓋全面,涵蓋了私聊、群聊、訊息管理等常用功能。配置說明清晰,環境變數設定一目瞭然。但目前僅提供文件說明,沒有實際可執行的程式碼或外掛,對於需要直接使用的使用者來說價值有限。如果你只需要瞭解功能文件,這是一個不錯的選擇;但若要實際使用,可能需要等待後續的程式碼實現。

📊 多維度評分

適應性4.2
規範性4.2
有效性4.4
可靠性3.8
可信度5

📁 包含檔案 (4 個)

📄 README.md 4.1 KB
📄 SKILL.md 8 KB
📄 _meta.json 129 B
📄 references/im-api.md 12.2 KB