Files

88 lines
3.3 KiB
PHP
Raw Permalink Normal View History

<script>
// ── AI 聊天机器人 ──────────────────────────────────
let chatBotSending = false;
/**
* 发送消息给 AI 机器人
* 先在包厢窗口显示用户消息,再调用 API 获取回复
*/
2026-04-25 00:42:46 +08:00
async function sendToChatBot(content, isSecret = false) {
if (chatBotSending) {
window.chatDialog.alert('AI 正在思考中,请稍候...', '提示', '#336699');
return;
}
chatBotSending = true;
2026-04-25 00:42:46 +08:00
/**
* 将 AI 错误提示追加到包厢窗口,样式与正常 AI 回复保持一致。
*
* @param {string} text 错误提示文本
*/
function appendBotError(text) {
const msgBox = document.getElementById('chat-messages-container2');
if (!msgBox) return;
const errDiv = document.createElement('div');
errDiv.className = 'msg-line';
errDiv.innerHTML = `<span style="color: #dc2626;">🤖【AI小班长】${text}</span>`;
msgBox.appendChild(errDiv);
if (typeof autoScroll !== 'undefined' && autoScroll) {
msgBox.scrollTop = msgBox.scrollHeight;
}
}
try {
const res = await fetch(window.chatContext.chatBotUrl, {
method: 'POST',
headers: {
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute(
'content'),
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
message: content,
2026-04-25 00:42:46 +08:00
room_id: window.chatContext.roomId,
is_secret: isSecret ? 1 : 0,
})
});
const data = await res.json();
if (!res.ok || data.status !== 'success') {
2026-04-25 00:42:46 +08:00
// 接口返回的错误信息:仅显示在包厢窗口,不走公屏
appendBotError(data.message || '回复失败,请稍后重试');
}
} catch (e) {
2026-04-25 00:42:46 +08:00
// 网络层异常:同样只显示在包厢窗口
appendBotError('网络连接错误,请稍后重试');
}
chatBotSending = false;
}
/**
* 清除与 AI 小助手的对话上下文
*/
async function clearChatBotContext() {
try {
const res = await fetch(window.chatContext.chatBotClearUrl, {
method: 'POST',
headers: {
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute(
'content'),
'Accept': 'application/json'
}
});
const data = await res.json();
const sysDiv = document.createElement('div');
sysDiv.className = 'msg-line';
sysDiv.innerHTML = '<span style="color: #16a34a;">🤖【系统】' + (data.message || '对话已重置') + '</span>';
container2.appendChild(sysDiv);
if (autoScroll) container2.scrollTop = container2.scrollHeight;
} catch (e) {
window.chatDialog.alert('清除失败:' + e.message, '操作失败', '#cc4444');
}
}
</script>