2025-07-10 19:05:38 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<div class="app-container">
|
|
|
|
|
|
<!-- 聊天组件 -->
|
2025-07-11 14:40:19 +08:00
|
|
|
|
<div id="coze-chat-container"></div>
|
2025-07-10 19:05:38 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
|
|
import { ref, onMounted } from 'vue';
|
2025-07-11 14:40:19 +08:00
|
|
|
|
import { getChatAgent } from '@/api/all/agent';
|
2025-07-10 19:05:38 +08:00
|
|
|
|
|
2025-07-11 14:40:19 +08:00
|
|
|
|
const cozeConfig = ref({
|
|
|
|
|
|
botId: '7522056630889381923',
|
|
|
|
|
|
title: 'AI客服',
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// 存储认证令牌
|
|
|
|
|
|
const authToken = ref('pat_tuIM7jubM1hLXaIWzbWg1U15lBe66AlYwu9BkXMQXInh8VdPszRFTwlTPmdziHwg');
|
2025-07-10 19:05:38 +08:00
|
|
|
|
|
2025-07-11 14:40:19 +08:00
|
|
|
|
// 模拟从API获取token
|
|
|
|
|
|
const fetchToken = async () => {
|
|
|
|
|
|
// 实际开发中应替换为真实的 API 请求
|
|
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
resolve('pat_' + Math.random().toString(36).substring(2, 15));
|
|
|
|
|
|
}, 500);
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 刷新token
|
|
|
|
|
|
const refreshToken = async () => {
|
|
|
|
|
|
authToken.value = await fetchToken();
|
|
|
|
|
|
};
|
2025-07-10 19:05:38 +08:00
|
|
|
|
|
2025-07-11 14:40:19 +08:00
|
|
|
|
// 动态加载脚本函数
|
|
|
|
|
|
const loadScript = (src) =>
|
|
|
|
|
|
new Promise((resolve, reject) => {
|
|
|
|
|
|
const script = document.createElement('script');
|
|
|
|
|
|
script.src = src;
|
|
|
|
|
|
script.onload = resolve;
|
|
|
|
|
|
script.onerror = reject;
|
|
|
|
|
|
document.head.appendChild(script);
|
|
|
|
|
|
});
|
2025-07-10 19:05:38 +08:00
|
|
|
|
|
2025-07-11 14:40:19 +08:00
|
|
|
|
const query = reactive({
|
|
|
|
|
|
id: 0,
|
|
|
|
|
|
});
|
2025-07-10 19:05:38 +08:00
|
|
|
|
|
2025-07-11 14:40:19 +08:00
|
|
|
|
let cozeWebSDKConfig = reactive({
|
|
|
|
|
|
config: {},
|
|
|
|
|
|
auth: {},
|
|
|
|
|
|
userInfo: {},
|
|
|
|
|
|
ui: {},
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
const initChat = async () => {
|
|
|
|
|
|
try {
|
|
|
|
|
|
await getChat();
|
|
|
|
|
|
await loadScript('https://lf-cdn.coze.cn/obj/unpkg/flow-platform/chat-app-sdk/1.2.0-beta.10/libs/cn/index.js');
|
|
|
|
|
|
const cozeWebSDK = new CozeWebSDK.WebChatClient({
|
|
|
|
|
|
config: {
|
|
|
|
|
|
bot_id: cozeConfig.value.botId,
|
|
|
|
|
|
},
|
|
|
|
|
|
componentProps: {
|
|
|
|
|
|
container: document.getElementById('coze-chat-container'),
|
|
|
|
|
|
},
|
|
|
|
|
|
auth: {
|
|
|
|
|
|
type: 'token',
|
|
|
|
|
|
token: authToken.value,
|
|
|
|
|
|
onRefreshToken: async () => {
|
|
|
|
|
|
const newToken = await fetchToken();
|
|
|
|
|
|
authToken.value = newToken;
|
|
|
|
|
|
return newToken;
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
ui: {
|
|
|
|
|
|
base: {
|
|
|
|
|
|
icon: 'https://lf-coze-web-cdn.coze.cn/obj/coze-web-cn/obric/coze/favicon.1970.png',
|
|
|
|
|
|
layout: 'pc',
|
|
|
|
|
|
zIndex: 1000,
|
|
|
|
|
|
},
|
|
|
|
|
|
asstBtn: {
|
|
|
|
|
|
isNeed: false,
|
|
|
|
|
|
},
|
|
|
|
|
|
footer: {
|
|
|
|
|
|
isShow: true,
|
|
|
|
|
|
expressionText: '内容由AI生成,无法确保真实准确,仅供参考。',
|
|
|
|
|
|
},
|
|
|
|
|
|
chatBot: {
|
|
|
|
|
|
title: '智能体聊天室',
|
|
|
|
|
|
uploadable: true,
|
|
|
|
|
|
width: 800,
|
|
|
|
|
|
el: document.getElementById('coze-chat-container'),
|
|
|
|
|
|
onHide: () => {
|
|
|
|
|
|
// todo...
|
|
|
|
|
|
},
|
|
|
|
|
|
onShow: () => {
|
|
|
|
|
|
// todo...
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
feedback: {
|
|
|
|
|
|
isNeedFeedback: true,
|
|
|
|
|
|
feedbackPanel: {
|
|
|
|
|
|
title: '您对这个回答有什么看法?请告诉我们',
|
|
|
|
|
|
placeholder: '请详细描述您的问题...',
|
|
|
|
|
|
tags: [
|
|
|
|
|
|
{
|
|
|
|
|
|
label: '信息不正确',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
label: '涉及敏感信息',
|
|
|
|
|
|
isNeedDetail: true,
|
|
|
|
|
|
},
|
|
|
|
|
|
],
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
feedback: {
|
|
|
|
|
|
isNeedFeedback: true,
|
|
|
|
|
|
feedbackPanel: {
|
|
|
|
|
|
title: '您对这个回答有什么看法?请告诉我们',
|
|
|
|
|
|
placeholder: '请详细描述您的问题...',
|
|
|
|
|
|
tags: [
|
|
|
|
|
|
{
|
|
|
|
|
|
label: '信息不正确',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
label: '涉及敏感信息',
|
|
|
|
|
|
isNeedDetail: true,
|
|
|
|
|
|
},
|
|
|
|
|
|
],
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
2025-07-10 19:05:38 +08:00
|
|
|
|
});
|
2025-07-11 14:40:19 +08:00
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error('加载 Coze SDK 失败:', error);
|
|
|
|
|
|
}
|
|
|
|
|
|
showChatPage();
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const getChat = async () => {
|
|
|
|
|
|
const { code, data } = await getChatAgent(query.id);
|
|
|
|
|
|
if (code == 200) {
|
|
|
|
|
|
console.log(data, 'data');
|
|
|
|
|
|
Object.assign(cozeWebSDKConfig, data);
|
|
|
|
|
|
console.log(data, 'data');
|
|
|
|
|
|
} else {
|
|
|
|
|
|
console.log('获取机器人配置失败');
|
|
|
|
|
|
}
|
2025-07-10 19:05:38 +08:00
|
|
|
|
};
|
2025-07-11 14:40:19 +08:00
|
|
|
|
|
|
|
|
|
|
const showChatPage = () => {
|
|
|
|
|
|
// 显示聊天页面
|
|
|
|
|
|
console.log(cozeWebSDK, 'chatClient');
|
|
|
|
|
|
cozeWebSDK.showChatBot();
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
|
initChat();
|
|
|
|
|
|
});
|
2025-07-10 19:05:38 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
2025-07-11 14:40:19 +08:00
|
|
|
|
<style scoped>
|
2025-07-10 19:05:38 +08:00
|
|
|
|
.app-container {
|
|
|
|
|
|
max-width: 800px;
|
|
|
|
|
|
margin: 0 auto;
|
|
|
|
|
|
padding: 20px;
|
|
|
|
|
|
font-family: Arial, sans-serif;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.refresh-btn {
|
|
|
|
|
|
margin-top: 20px;
|
|
|
|
|
|
padding: 10px 20px;
|
|
|
|
|
|
background: #2ecc71;
|
|
|
|
|
|
color: white;
|
|
|
|
|
|
border: none;
|
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
transition: background 0.3s;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.refresh-btn:hover {
|
|
|
|
|
|
background: #27ae60;
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|