Files
2025-10-12 12:43:13 +08:00

177 lines
6.5 KiB
JavaScript

// content.js - 内容脚本
// 负责处理从background.js转发过来的WebSocket消息
// 以及执行页面DOM操作(如点击用户、填写回复等)
console.log("Content script loaded.");
let sessionIdData;
getAiSessionIdViaBackground();
console.log(sessionIdData);
// ==================== 消息监听器 ====================
// 监听来自background.js的消息
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
// 检查消息类型是否为WebSocket消息
if (message.type === "WEBSOCKET_MESSAGE") {
console.log("收到WebSocket消息:", message.data);
// 解析消息内容
const messageData = JSON.parse(message.data);
if (messageData.type === 4) {
console.log("心跳消息,跳过处理");
return;
}
if (messageData.type === 2) {
console.log("文本消息,开始处理...");
if (messageData.data) {
const data = messageData.data;
if (data.type == 'PUSH_SIXINTONG_MSG') {
const payload = data.payload;
console.log("私信通消息:", payload);
if (payload.is_new_push && !payload.is_replied) {
console.log("新的未回复消息,开始处理...");
// ==================== 数据提取 ====================
// 从payload中提取各种有用的信息
// 基础信息
const trace_id = payload.trace_id; // 追踪ID,用于消息追踪
const is_show_reminder_tips = payload.is_show_reminder_tips; // 是否显示提醒提示
const visitor_id = payload.visitor_id; // 访客ID
// 私信用户信息(从sixin_chat对象中提取)
const {
user_id, // 用户ID
nickname, // 用户昵称
avatar, // 用户头像URL
last_msg_ts: last_msg_ts_sixin_chat, // 最后消息时间戳
last_msg_store_id // 最后消息店铺ID
} = payload.sixin_chat;
// 私信消息内容(从sixin_message对象中提取)
const {
id, // 消息ID
store_id, // 店铺ID
message_type, // 消息类型
message_source, // 消息来源
content, // 消息内容(这是我们需要回复的文本)
receiver_id, // 接收人ID
sender_id, // 发送人ID
created_at // 消息创建时间
} = payload.sixin_message;
// 私信会话消息扩展信息(从message_extension对象中提取)
const {
cas_account_no, // 客服编号
csa_name, // 客服名称
customer_user_id, // 客户用户ID
last_msg_ts: last_msg_ts_message_extension, // 最后消息时间戳
preview, // 消息预览
sender_type // 发送类型
} = payload.message_extension;
// 长聊天展示信息(从long_chat_view对象中提取)
const {
active, // 窗口是否激活
favorite // 是否收藏
} = payload.long_chat_view;
console.log("提取的用户信息:", {
nickname,
user_id,
content,
created_at
});
// 选择用户并生成回复
selectUserInChatList(nickname);
console.log(sessionIdData);
generateReply(sessionIdData.data, content);
// 将信息放入textarea输入框
// document.getElementById("jarvis-reply-textarea").focus();
// // 输入回复信息
// simulateKeyPress(reply)
}
}
}
}
}
});
// AI回复生成(示例,实际应调用AI接口)
function generateReply(sessionId, message) {
chrome.runtime.sendMessage({
type: 'POST_AI_CHAT_MESSAGE',
data: {
sessionId: sessionId,
message: message,
csrfToken: 'bguiLwpjOdXAlW7zWmWN27bsa74FOj8WhbTKZbdoFnD0Go2BMX23myr7H2L1A7Cx'
}
}, (response) => {
if (response && response.success) {
console.log('AI回复:', response.data);
const textarea = document.querySelector('#jarvis-reply-textarea');
textarea.value = response.data.data.content;
// 触发input事件让监听器响应
textarea.dispatchEvent(new Event('input', { bubbles: true }));
// 等待2秒,点击发送
setTimeout(() => {
// 获取按钮元素
const sendBtn = document.querySelector('button.send_btn');
// 执行点击
if (sendBtn) {
sendBtn.click();
} else {
console.error('未找到发送按钮');
}
}, 2000);
} else {
console.error('请求失败:', response && response.error);
}
});
}
// 在聊天列表中找到并点击指定用户
function selectUserInChatList(userName) {
const userElements = document.querySelectorAll(".sx-contact-item");
userElements.forEach(el => {
if (el.textContent.includes(userName)) {
el.click();
}
});
}
// 将AI生成的回复发送到background.js
function sendMessageToBackground(replyText) {
chrome.runtime.sendMessage({
type: "AI_REPLY_GENERATED",
data: { reply: replyText }
});
}
// 模仿键盘输入
function simulateKeyPress(char) {
// 创建一个键盘事件
const event = new KeyboardEvent('keydown', {
key: char,
code: char.toLowerCase(),
keyCode: char.charCodeAt(0),
which: char.charCodeAt(0)
});
// 触发键盘事件
document.dispatchEvent(event);
}
/*
{{ AURA-X: Add - 新增通过chrome.runtime.sendMessage请求后台代理获取AI会话ID的示例. Approval: 寸止(ID:20240608-content-cors-proxy) }}
*/
function getAiSessionIdViaBackground() {
chrome.runtime.sendMessage({ type: 'FETCH_AI_SESSION_ID' }, (response) => {
if (response && response.success) {
console.log('通过background代理获取的AI会话信息:', response.data);
sessionIdData = response.data
} else {
console.error('代理获取AI会话ID失败:', response && response.error);
}
});
}
// 调用示例:getAiSessionIdViaBackground();