@tencentcloud/sdk-mcp 1.3.7 → 1.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/resource/doc/chatuikit/android/integration.md +466 -484
- package/resource/doc/chatuikit/android/workflow.md +713 -0
- package/resource/doc/livekit/live/flutter/live-integration.md +208 -167
- package/resource/doc/livekit/voice/android/voice-audience-list.md +335 -0
- package/resource/doc/livekit/voice/android/voice-audio-effect.md +384 -0
- package/resource/doc/livekit/voice/android/voice-barrage.md +569 -0
- package/resource/doc/livekit/voice/android/voice-co-guest-interaction.md +748 -0
- package/resource/doc/livekit/voice/android/voice-gift.md +833 -0
- package/resource/doc/livekit/voice/android/voice-host-interaction.md +728 -0
- package/resource/doc/livekit/voice/android/voice-integration.md +886 -0
- package/resource/doc/livekit/voice/android/voice-room-list.md +493 -0
- package/resource/doc/livekit/voice/android/workflow.md +333 -0
- package/resource/doc/livekit/voice/flutter/voice-audience-list.md +337 -0
- package/resource/doc/livekit/voice/flutter/voice-audio-effect.md +739 -0
- package/resource/doc/livekit/voice/flutter/voice-barrage.md +578 -0
- package/resource/doc/livekit/voice/flutter/voice-co-guest-interaction.md +673 -0
- package/resource/doc/livekit/voice/flutter/voice-gift.md +812 -0
- package/resource/doc/livekit/voice/flutter/voice-integration.md +925 -0
- package/resource/doc/livekit/voice/flutter/voice-room-list.md +842 -0
- package/resource/doc/livekit/voice/flutter/workflow.md +359 -0
- package/resource/doc/livekit/voice/ios/voice-audience-list.md +335 -0
- package/resource/doc/livekit/voice/ios/voice-audio-effect.md +373 -0
- package/resource/doc/livekit/voice/ios/voice-barrage.md +529 -0
- package/resource/doc/livekit/voice/ios/voice-co-guest-interaction.md +701 -0
- package/resource/doc/livekit/voice/ios/voice-gift.md +785 -0
- package/resource/doc/livekit/voice/ios/voice-host-interaction.md +820 -0
- package/resource/doc/livekit/voice/ios/voice-integration.md +853 -0
- package/resource/doc/livekit/voice/ios/voice-room-list.md +467 -0
- package/resource/doc/livekit/voice/ios/workflow.md +358 -0
- package/resource/doc/livekit/voice/uni-app/voice-audience-list.md +264 -0
- package/resource/doc/livekit/voice/uni-app/voice-audio-effect.md +332 -0
- package/resource/doc/livekit/voice/uni-app/voice-barrage.md +482 -0
- package/resource/doc/livekit/voice/uni-app/voice-co-guest-interaction.md +944 -0
- package/resource/doc/livekit/voice/uni-app/voice-gift.md +716 -0
- package/resource/doc/livekit/voice/uni-app/voice-integration.md +613 -0
- package/resource/doc/livekit/voice/uni-app/voice-room-list.md +562 -0
- package/resource/doc/livekit/voice/uni-app/workflow.md +369 -0
- package/resource/doc/roomkit/vue/integration.md +119 -224
- package/resource/doc/roomkit/vue/workflow.md +472 -226
- package/resource/doc/tuicallkit/android/integration.md +675 -90
- package/resource/doc/tuicallkit/android/workflow.md +432 -0
- package/tools/common/present-scenario-choice.js +16 -0
- package/tools/common/present-scenario-choice.js.map +1 -0
- package/tools/common/record-prompt.js +31 -0
- package/tools/common/record-prompt.js.map +1 -1
- package/tools/common/record-result.js +32 -0
- package/tools/common/record-result.js.map +1 -1
- package/tools/definitions/get_native_call_uikit_integration_def.js +18 -2
- package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_native_chat_uikit_integration_def.js +29 -7
- package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_native_live_uikit_integration_def.js +65 -40
- package/tools/definitions/get_native_live_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_native_live_uikit_interaction_def.js +42 -94
- package/tools/definitions/get_native_live_uikit_interaction_def.js.map +1 -1
- package/tools/definitions/get_web_room_feature_detail_def.js +29 -32
- package/tools/definitions/get_web_room_feature_detail_def.js.map +1 -1
- package/tools/definitions/get_web_room_uikit_integration_def.js +25 -9
- package/tools/definitions/get_web_room_uikit_integration_def.js.map +1 -1
- package/tools/definitions/present_scenario_choice_def.js +53 -0
- package/tools/definitions/present_scenario_choice_def.js.map +1 -0
- package/tools/definitions/record_prompt_def.js +6 -1
- package/tools/definitions/record_prompt_def.js.map +1 -1
- package/tools/definitions/record_result_def.js +34 -10
- package/tools/definitions/record_result_def.js.map +1 -1
- package/tools/index.js +2 -0
- package/tools/index.js.map +1 -1
- package/tools/live/get-native-live-uikit-integration.js +110 -34
- package/tools/live/get-native-live-uikit-integration.js.map +1 -1
- package/tools/live/get_native_live_uikit_interaction.js +128 -35
- package/tools/live/get_native_live_uikit_interaction.js.map +1 -1
- package/utils/get-device-identifier.js +58 -0
- package/utils/get-device-identifier.js.map +1 -0
- package/utils/report-cls-client.js +4 -2
- package/utils/report-cls-client.js.map +1 -1
- package/utils/report-es-client.js +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 📋 指令目的
|
|
4
4
|
|
|
5
|
-
为 Agent 提供实现 Vue TUIRoomKit (Atomicx 版本) **核心功能的代码生成蓝图**,并指导 Agent
|
|
5
|
+
为 Agent 提供实现 Vue TUIRoomKit (Atomicx 版本) **核心功能的代码生成蓝图**,并指导 Agent **优先使用工具实时获取的最新文档内容**,支持 PC 端和 H5 移动端 Vue3 音视频会议应用场景。
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -15,10 +15,10 @@ Agent 在生成代码时必须严格遵守以下指令:
|
|
|
15
15
|
- **必须严格按照集成文档中的示例代码生成代码**,不得擅自修改代码结构和实现方式
|
|
16
16
|
- 代码生成时应完全遵循集成文档提供的最佳实践和示例,确保代码的正确性和可运行性
|
|
17
17
|
|
|
18
|
-
### 2.
|
|
19
|
-
- TUIRoomKit (Atomicx 版本) 采用
|
|
20
|
-
-
|
|
21
|
-
-
|
|
18
|
+
### 2. npm 包接入方式(推荐)
|
|
19
|
+
- TUIRoomKit (Atomicx 版本) 采用 **npm 包直接安装方式**,无需克隆 GitHub 仓库
|
|
20
|
+
- 通过 npm/pnpm/yarn 安装依赖包即可快速集成
|
|
21
|
+
- 如需深度定制 UI,可使用源码导出功能
|
|
22
22
|
|
|
23
23
|
### 3. 静默执行集成
|
|
24
24
|
- 所有代码编写完成后,在最后一步自动安装依赖并启动项目
|
|
@@ -26,24 +26,34 @@ Agent 在生成代码时必须严格遵守以下指令:
|
|
|
26
26
|
|
|
27
27
|
### 4. 零外部配置(测试阶段)
|
|
28
28
|
- 禁止自动创建任何 `.env` 文件用于生产环境配置
|
|
29
|
-
- SDKAppID 和
|
|
29
|
+
- SDKAppID 和 UserSig 等关键凭证必须从 MCP 工具获取或让用户手动配置
|
|
30
30
|
|
|
31
31
|
### 5. 鉴权凭据配置
|
|
32
|
-
-
|
|
33
|
-
- UserID 生成应保持简洁(可使用随机数生成,如 `user_${Math.ceil(Math.random()*999)}`)
|
|
32
|
+
- 使用 `get_usersig` MCP 工具获取 `SDKAppID`、`userId` 和 `userSig`
|
|
34
33
|
- **⚠️ 重要安全提示**:必须告知用户,客户端生成 UserSig 仅适合本地测试,正式生产环境必须在服务端生成 UserSig
|
|
35
34
|
|
|
36
35
|
### 6. Vue 3 组合式 API
|
|
37
36
|
- 优先使用 `<script setup lang="ts">` 语法(注意启用 TypeScript)
|
|
38
37
|
- 使用 Vue 3 Composition API(ref、reactive、computed、onMounted 等)
|
|
39
|
-
- 正确引入和使用 TUIRoomKit
|
|
38
|
+
- 正确引入和使用 TUIRoomKit 组件
|
|
40
39
|
|
|
41
|
-
### 7.
|
|
42
|
-
-
|
|
43
|
-
-
|
|
40
|
+
### 7. 平台适配
|
|
41
|
+
- 使用 `getPlatform()` 检测当前平台,PC 端使用 `ConferenceMainView`,H5 移动端使用 `ConferenceMainViewH5`
|
|
42
|
+
- 两套组件已分别针对 PC 和 H5 进行 UI 适配,开箱即用
|
|
44
43
|
|
|
45
|
-
### 8.
|
|
46
|
-
-
|
|
44
|
+
### 8. 会议组件加载前置要求(⚠️ 关键约束)
|
|
45
|
+
- **调用 `conference.start()` 或 `conference.join()` 的页面,必须确保会议主视图组件已在模板中加载**
|
|
46
|
+
- 在调用发起/加入会议 API 前,页面模板中必须包含以下组件结构:
|
|
47
|
+
|
|
48
|
+
```vue
|
|
49
|
+
<template>
|
|
50
|
+
<ConferenceMainView v-if="isPC"></ConferenceMainView>
|
|
51
|
+
<ConferenceMainViewH5 v-else></ConferenceMainViewH5>
|
|
52
|
+
</template>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
- 如果缺少会议主视图组件,`conference.start()` 和 `conference.join()` 将无法正常渲染会议界面
|
|
56
|
+
- Agent 生成会议室页面代码时,必须先引入并渲染上述组件,再执行发起/加入会议的逻辑
|
|
47
57
|
|
|
48
58
|
---
|
|
49
59
|
|
|
@@ -55,35 +65,34 @@ Agent 生成代码后,必须自动执行以下依赖链:
|
|
|
55
65
|
|
|
56
66
|
```json
|
|
57
67
|
{
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"@tencentcloud/
|
|
61
|
-
"
|
|
68
|
+
"@tencentcloud/roomkit-web-vue3": "latest", // TUIRoomKit 主组件包(包含 ConferenceMainView、ConferenceMainViewH5、conference 等)
|
|
69
|
+
"tuikit-atomicx-vue3": "latest", // TUIRoomKit 原子化组件库(包含所有 Hooks 和原子化 UI 组件)
|
|
70
|
+
"@tencentcloud/uikit-base-component-vue3": "latest", // 基础 UI 组件库(UIKitProvider 等)
|
|
71
|
+
"@tencentcloud/universal-api": "latest" // 跨平台 API 工具库(getPlatform 等)
|
|
62
72
|
}
|
|
63
73
|
```
|
|
64
74
|
|
|
65
75
|
**依赖说明**:
|
|
66
76
|
|
|
67
|
-
| 依赖包 | 作用 |
|
|
68
|
-
|
|
69
|
-
|
|
|
70
|
-
|
|
|
71
|
-
| **@tencentcloud/
|
|
72
|
-
|
|
|
77
|
+
| 依赖包 | 作用 | 是否必需 | 说明 |
|
|
78
|
+
|-------|------|---------|------|
|
|
79
|
+
| **@tencentcloud/roomkit-web-vue3** | TUIRoomKit 主组件包 | ✅ 必须 | 提供 `ConferenceMainView`(PC 端)、`ConferenceMainViewH5`(H5 端)和 `conference` 对象(发起/加入会议) |
|
|
80
|
+
| **tuikit-atomicx-vue3** | 原子化组件库 | ✅ 必须 | 提供 `useLoginState`、`useRoomState` 等 Hooks,以及 `RoomLayoutTemplate` 等枚举类型 |
|
|
81
|
+
| **@tencentcloud/uikit-base-component-vue3** | 基础 UI 组件库 | ✅ 必须 | 提供 `UIKitProvider` 组件,用于配置全局主题和语言 |
|
|
82
|
+
| **@tencentcloud/universal-api** | 跨平台 API 工具库 | ✅ 必须 | 提供 `getPlatform()` 方法,用于检测当前运行平台(pc/mobile) |
|
|
73
83
|
|
|
74
|
-
|
|
75
|
-
```
|
|
76
|
-
用户项目
|
|
77
|
-
├── tuikit-atomicx-vue3(手动安装)
|
|
78
|
-
│ └── @tencentcloud/tuiroom-engine-js(自动安装)
|
|
79
|
-
├── @tencentcloud/uikit-base-component-vue3(手动安装)
|
|
80
|
-
└── vue-router(手动安装)
|
|
81
|
-
```
|
|
84
|
+
**安装命令**:
|
|
82
85
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
-
|
|
86
|
-
|
|
86
|
+
```bash
|
|
87
|
+
# npm
|
|
88
|
+
npm install @tencentcloud/roomkit-web-vue3@latest tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 @tencentcloud/universal-api
|
|
89
|
+
|
|
90
|
+
# pnpm
|
|
91
|
+
pnpm install @tencentcloud/roomkit-web-vue3@latest tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 @tencentcloud/universal-api
|
|
92
|
+
|
|
93
|
+
# yarn
|
|
94
|
+
yarn add @tencentcloud/roomkit-web-vue3@latest tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 @tencentcloud/universal-api
|
|
95
|
+
```
|
|
87
96
|
|
|
88
97
|
### 2. 开发环境依赖(TypeScript 和 SCSS)
|
|
89
98
|
|
|
@@ -91,15 +100,11 @@ Agent 生成代码后,必须自动执行以下依赖链:
|
|
|
91
100
|
|
|
92
101
|
```json
|
|
93
102
|
{
|
|
94
|
-
"typescript": "latest", // TypeScript
|
|
95
|
-
"sass": "latest" // SCSS
|
|
103
|
+
"typescript": "latest", // TypeScript 编译器
|
|
104
|
+
"sass": "latest" // SCSS 预处理器
|
|
96
105
|
}
|
|
97
106
|
```
|
|
98
107
|
|
|
99
|
-
**依赖说明**:
|
|
100
|
-
- **typescript**: TUIRoomKit 源码使用 TypeScript 编写,需要 TypeScript 编译器支持
|
|
101
|
-
- **sass**: TUIRoomKit 样式文件使用 SCSS 编写,需要 sass 预处理器进行编译
|
|
102
|
-
|
|
103
108
|
### 3. 构建环境补丁 (Vite/esbuild)
|
|
104
109
|
|
|
105
110
|
若检测到 Vite 项目,Agent 必须在 `package.json` 自动增加补丁配置以兼容 esbuild-wasm:
|
|
@@ -107,196 +112,370 @@ Agent 生成代码后,必须自动执行以下依赖链:
|
|
|
107
112
|
```json
|
|
108
113
|
{
|
|
109
114
|
"overrides": {
|
|
110
|
-
"esbuild": "npm:esbuild-wasm@latest"
|
|
115
|
+
"esbuild": "npm:esbuild-wasm@latest"
|
|
111
116
|
},
|
|
112
117
|
"resolutions": {
|
|
113
|
-
"esbuild": "npm:esbuild-wasm@latest"
|
|
118
|
+
"esbuild": "npm:esbuild-wasm@latest"
|
|
114
119
|
}
|
|
115
120
|
}
|
|
116
121
|
```
|
|
117
122
|
|
|
118
|
-
|
|
119
|
-
- **为什么需要**:部分环境下 esbuild 原生二进制可能无法正常运行,使用 esbuild-wasm(WebAssembly 版本)可以提供更好的跨平台兼容性
|
|
120
|
-
- **适用场景**:主要针对 Vite 构建工具的项目
|
|
121
|
-
- **作用**:强制将项目中所有依赖的 esbuild 版本替换为 esbuild-wasm 版本
|
|
122
|
-
|
|
123
|
-
**安装命令示例**:
|
|
123
|
+
---
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
# npm
|
|
127
|
-
npm install tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 @tencentcloud/tuiroom-engine-js vue-router
|
|
128
|
-
npm install typescript sass -D
|
|
125
|
+
## 🎯 TUIRoomKit (Atomicx 版本) 核心组件说明
|
|
129
126
|
|
|
130
|
-
|
|
131
|
-
pnpm install tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 @tencentcloud/tuiroom-engine-js vue-router
|
|
132
|
-
pnpm install typescript sass -D
|
|
127
|
+
### 主要组件
|
|
133
128
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
129
|
+
| 组件名称 | 说明 | 使用场景 |
|
|
130
|
+
|---------|------|---------|
|
|
131
|
+
| `ConferenceMainView` | PC 端会议主界面组件 | 桌面端多人会议 |
|
|
132
|
+
| `ConferenceMainViewH5` | H5 移动端会议主界面组件 | 移动端多人会议 |
|
|
133
|
+
| `conference` | 会议控制对象 | 发起会议(start)和加入会议(join) |
|
|
134
|
+
| `UIKitProvider` | 全局 UI 配置组件 | 配置主题和语言 |
|
|
138
135
|
|
|
139
|
-
|
|
136
|
+
### 核心 Hooks
|
|
140
137
|
|
|
141
|
-
|
|
138
|
+
| Hook 名称 | 来源 | 说明 |
|
|
139
|
+
|---------|------|------|
|
|
140
|
+
| `useLoginState` | `tuikit-atomicx-vue3/room` | 提供 `login`、`setSelfInfo` 等登录方法 |
|
|
141
|
+
| `useRoomState` | `tuikit-atomicx-vue3/room` | 提供房间状态管理 |
|
|
142
|
+
| `useDeviceState` | `tuikit-atomicx-vue3/room` | 提供设备状态管理 |
|
|
143
|
+
| `useRoomEngine` | `tuikit-atomicx-vue3/room` | 获取 roomEngine 实例 |
|
|
142
144
|
|
|
143
|
-
|
|
145
|
+
### 平台检测
|
|
144
146
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
| `src/assets/` | `src/assets/` | 包含背景图、图标等静态资源 |
|
|
148
|
-
| `src/components/` | `src/components/` | 包含 TUIRoomKit 所有原子 UI 组件 |
|
|
149
|
-
| `src/hooks/` | `src/hooks/` | 包含 TUIRoomKit 业务逻辑处理 |
|
|
150
|
-
| `src/i18n/` | `src/i18n/` | 包含多语言配置文件 |
|
|
151
|
-
| `src/utils/` | `src/utils/` | 包含通用工具函数 |
|
|
152
|
-
| `src/config/` | `src/config/` | 包含 `basic-info-config.js` 等应用配置信息(首次接入请重点关注此文件) |
|
|
153
|
-
| `src/views/home.vue` | `src/views/home.vue` | 该页面包含了设备检测、房间创建/加入的入口功能 |
|
|
154
|
-
| `src/views/room.vue` | `src/views/room.vue` | 该页面是 TUIRoomKit 的核心会议界面,集成了完整的头部、视频布局、控制栏和侧边面板 |
|
|
147
|
+
```typescript
|
|
148
|
+
import { getPlatform } from '@tencentcloud/universal-api';
|
|
155
149
|
|
|
156
|
-
|
|
150
|
+
const isPC = getPlatform() === 'pc';
|
|
151
|
+
// isPC === true → 使用 ConferenceMainView
|
|
152
|
+
// isPC === false → 使用 ConferenceMainViewH5
|
|
153
|
+
```
|
|
157
154
|
|
|
158
155
|
---
|
|
159
156
|
|
|
160
|
-
##
|
|
157
|
+
## 👥 默认测试用户说明
|
|
161
158
|
|
|
162
|
-
Agent
|
|
159
|
+
为方便开发调试,Agent 生成的代码**默认提供 3 个测试用户**:
|
|
163
160
|
|
|
164
|
-
|
|
161
|
+
| 用户 ID | 用户名称 | 说明 |
|
|
162
|
+
|---------|---------|------|
|
|
163
|
+
| `user001` | 用户 001 | 测试用户 1(可作为主持人) |
|
|
164
|
+
| `user002` | 用户 002 | 测试用户 2(可作为参会者) |
|
|
165
|
+
| `user003` | 用户 003 | 测试用户 3(可作为参会者) |
|
|
165
166
|
|
|
166
|
-
|
|
167
|
+
### 应用登录流程
|
|
167
168
|
|
|
168
|
-
|
|
169
|
+
Agent 生成的完整应用包含以下页面和流程:
|
|
169
170
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
```mermaid
|
|
172
|
+
graph LR
|
|
173
|
+
A[首页 - 用户选择登录] --> B{选择用户}
|
|
174
|
+
B --> C[user001 登录]
|
|
175
|
+
B --> D[user002 登录]
|
|
176
|
+
B --> E[user003 登录]
|
|
177
|
+
C --> F[会议入口页面]
|
|
178
|
+
D --> F
|
|
179
|
+
E --> F
|
|
180
|
+
F --> G[创建会议]
|
|
181
|
+
F --> H[加入会议]
|
|
182
|
+
G --> I[进入会议室]
|
|
183
|
+
H --> I
|
|
184
|
+
```
|
|
174
185
|
|
|
175
|
-
###
|
|
186
|
+
### 首页功能要求
|
|
176
187
|
|
|
177
|
-
|
|
178
|
-
|---------|------|---------|
|
|
179
|
-
| `useLoginState` | 登录状态管理 | 提供 login、setSelfInfo 等方法 |
|
|
180
|
-
| `useRoomModal` | 房间弹窗管理 | 提供 handleErrorWithModal 错误处理方法 |
|
|
181
|
-
| `useRoomEngine` | 房间引擎管理 | 获取 roomEngine 实例 |
|
|
188
|
+
Agent 生成的首页(Home 页面)必须包含以下功能:
|
|
182
189
|
|
|
183
|
-
|
|
190
|
+
1. **用户选择界面**:
|
|
191
|
+
- 提供下拉框或按钮组,让用户选择要登录的测试用户(user001/user002/user003)
|
|
192
|
+
- 显示当前选中用户的 ID 和名称
|
|
184
193
|
|
|
185
|
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
194
|
+
2. **登录按钮**:
|
|
195
|
+
- 点击登录按钮后,调用 `login()` 和 `setSelfInfo()` 完成用户登录
|
|
196
|
+
- 登录过程中显示加载状态
|
|
188
197
|
|
|
189
|
-
|
|
198
|
+
3. **登录成功后跳转**:
|
|
199
|
+
- 登录成功后自动跳转到会议入口页面
|
|
200
|
+
- 会议入口页面提供「创建会议」和「加入会议」两个入口
|
|
190
201
|
|
|
191
|
-
|
|
202
|
+
### 会议入口页面功能要求
|
|
192
203
|
|
|
193
|
-
|
|
204
|
+
登录成功后的会议入口页面必须包含:
|
|
194
205
|
|
|
195
|
-
|
|
206
|
+
1. **显示当前登录用户信息**:展示已登录的用户 ID 和名称
|
|
207
|
+
2. **创建会议功能**:
|
|
208
|
+
- 输入会议 ID(可选,不输入则自动生成)
|
|
209
|
+
- 输入会议名称(可选)
|
|
210
|
+
- 点击「创建会议」按钮调用 `conference.start()`
|
|
211
|
+
3. **加入会议功能**:
|
|
212
|
+
- 输入要加入的会议 ID(必填)
|
|
213
|
+
- 点击「加入会议」按钮调用 `conference.join()`
|
|
196
214
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
215
|
+
### 代码实现示例
|
|
216
|
+
|
|
217
|
+
#### 测试用户配置
|
|
200
218
|
|
|
201
|
-
|
|
202
|
-
cd TUIRoomKit/Web/example/atomicx-vite-vue3-ts
|
|
219
|
+
Agent 在生成代码时,需要为每个测试用户调用 `get_usersig` MCP 工具获取对应的 userSig,并**预先填入**代码中:
|
|
203
220
|
|
|
204
|
-
|
|
205
|
-
|
|
221
|
+
```typescript
|
|
222
|
+
// ⚠️ Agent 生成代码时,需要调用 get_usersig 工具 3 次,分别为 user001、user002、user003 获取 userSig
|
|
223
|
+
// 然后将获取到的 SDKAppID 和每个用户的 userSig 填入下方配置
|
|
224
|
+
|
|
225
|
+
const SDKAppID = 0; // Agent 填入从 get_usersig 获取的 SDKAppID
|
|
226
|
+
|
|
227
|
+
// 测试用户列表(包含预生成的 userSig)
|
|
228
|
+
const TEST_USERS = [
|
|
229
|
+
{ userId: 'user001', userName: '用户 001', userSig: '' }, // Agent 填入 user001 的 userSig
|
|
230
|
+
{ userId: 'user002', userName: '用户 002', userSig: '' }, // Agent 填入 user002 的 userSig
|
|
231
|
+
{ userId: 'user003', userName: '用户 003', userSig: '' }, // Agent 填入 user003 的 userSig
|
|
232
|
+
];
|
|
206
233
|
```
|
|
207
234
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
235
|
+
#### 首页用户选择组件示例
|
|
236
|
+
|
|
237
|
+
```vue
|
|
238
|
+
<template>
|
|
239
|
+
<div class="login-container">
|
|
240
|
+
<h1>TUIRoomKit 音视频会议</h1>
|
|
241
|
+
<div class="user-select">
|
|
242
|
+
<label>选择测试用户:</label>
|
|
243
|
+
<select v-model="selectedUserId">
|
|
244
|
+
<option v-for="user in TEST_USERS" :key="user.userId" :value="user.userId">
|
|
245
|
+
{{ user.userName }} ({{ user.userId }})
|
|
246
|
+
</option>
|
|
247
|
+
</select>
|
|
248
|
+
</div>
|
|
249
|
+
<button @click="handleLogin" :disabled="isLogging">
|
|
250
|
+
{{ isLogging ? '登录中...' : '登录' }}
|
|
251
|
+
</button>
|
|
252
|
+
</div>
|
|
253
|
+
</template>
|
|
254
|
+
|
|
255
|
+
<script setup lang="ts">
|
|
256
|
+
import { ref } from 'vue';
|
|
257
|
+
import { useRouter } from 'vue-router';
|
|
258
|
+
import { useLoginState } from 'tuikit-atomicx-vue3/room';
|
|
259
|
+
|
|
260
|
+
// ⚠️ 以下凭证由 Agent 在代码生成时调用 get_usersig 工具获取并填入
|
|
261
|
+
const SDKAppID = 0; // Agent 填入实际的 SDKAppID
|
|
262
|
+
|
|
263
|
+
const TEST_USERS = [
|
|
264
|
+
{ userId: 'user001', userName: '用户 001', userSig: '' }, // Agent 填入 user001 的 userSig
|
|
265
|
+
{ userId: 'user002', userName: '用户 002', userSig: '' }, // Agent 填入 user002 的 userSig
|
|
266
|
+
{ userId: 'user003', userName: '用户 003', userSig: '' }, // Agent 填入 user003 的 userSig
|
|
267
|
+
];
|
|
268
|
+
|
|
269
|
+
const router = useRouter();
|
|
270
|
+
const { login, setSelfInfo } = useLoginState();
|
|
271
|
+
|
|
272
|
+
const selectedUserId = ref('user001');
|
|
273
|
+
const isLogging = ref(false);
|
|
274
|
+
|
|
275
|
+
const handleLogin = async () => {
|
|
276
|
+
const user = TEST_USERS.find(u => u.userId === selectedUserId.value);
|
|
277
|
+
if (!user) return;
|
|
278
|
+
|
|
279
|
+
isLogging.value = true;
|
|
280
|
+
try {
|
|
281
|
+
await login({
|
|
282
|
+
userId: user.userId,
|
|
283
|
+
userSig: user.userSig, // 使用预填入的 userSig
|
|
284
|
+
sdkAppId: SDKAppID,
|
|
285
|
+
});
|
|
286
|
+
await setSelfInfo({
|
|
287
|
+
userName: user.userName,
|
|
288
|
+
avatarUrl: '',
|
|
289
|
+
});
|
|
290
|
+
// 登录成功,跳转到会议入口页面
|
|
291
|
+
router.push('/conference-entry');
|
|
292
|
+
} catch (error) {
|
|
293
|
+
console.error('登录失败:', error);
|
|
294
|
+
} finally {
|
|
295
|
+
isLogging.value = false;
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
</script>
|
|
299
|
+
```
|
|
211
300
|
|
|
212
301
|
---
|
|
213
302
|
|
|
214
|
-
|
|
303
|
+
## 🛠️ 集成步骤详解
|
|
304
|
+
|
|
305
|
+
### 步骤 1:安装项目依赖
|
|
215
306
|
|
|
216
307
|
```bash
|
|
217
|
-
#
|
|
218
|
-
npm install tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 @tencentcloud/
|
|
308
|
+
# npm
|
|
309
|
+
npm install @tencentcloud/roomkit-web-vue3@latest tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 @tencentcloud/universal-api
|
|
310
|
+
|
|
311
|
+
# pnpm
|
|
312
|
+
pnpm install @tencentcloud/roomkit-web-vue3@latest tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 @tencentcloud/universal-api
|
|
219
313
|
|
|
220
|
-
#
|
|
221
|
-
|
|
314
|
+
# yarn
|
|
315
|
+
yarn add @tencentcloud/roomkit-web-vue3@latest tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 @tencentcloud/universal-api
|
|
222
316
|
```
|
|
223
317
|
|
|
224
318
|
---
|
|
225
319
|
|
|
226
|
-
### 步骤
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
-
|
|
320
|
+
### 步骤 2:创建会议页面组件(⚠️ 关键步骤)
|
|
321
|
+
|
|
322
|
+
创建会议页面组件,**必须在模板中先加载会议主视图组件**,然后再调用 `conference.start()` 或 `conference.join()`:
|
|
323
|
+
|
|
324
|
+
```vue
|
|
325
|
+
<template>
|
|
326
|
+
<!-- ⚠️ 关键:必须先在模板中加载会议主视图组件 -->
|
|
327
|
+
<ConferenceMainView v-if="isPC"></ConferenceMainView>
|
|
328
|
+
<ConferenceMainViewH5 v-else></ConferenceMainViewH5>
|
|
329
|
+
</template>
|
|
330
|
+
|
|
331
|
+
<script setup lang="ts">
|
|
332
|
+
import { ref, onMounted } from 'vue';
|
|
333
|
+
import { useRoute } from 'vue-router';
|
|
334
|
+
import { ConferenceMainView, ConferenceMainViewH5, conference } from '@tencentcloud/roomkit-web-vue3';
|
|
335
|
+
import { getPlatform } from '@tencentcloud/universal-api';
|
|
336
|
+
|
|
337
|
+
const route = useRoute();
|
|
338
|
+
const isPC = ref(getPlatform() === 'pc');
|
|
339
|
+
|
|
340
|
+
// 从路由参数获取会议信息
|
|
341
|
+
const roomId = route.query.roomId as string;
|
|
342
|
+
const roomName = route.query.roomName as string;
|
|
343
|
+
const action = route.query.action as 'start' | 'join'; // 'start' 或 'join'
|
|
344
|
+
|
|
345
|
+
onMounted(async () => {
|
|
346
|
+
// ⚠️ 确保组件已挂载(模板已渲染)后再调用 conference API
|
|
347
|
+
if (action === 'start') {
|
|
348
|
+
// 发起新会议
|
|
349
|
+
await conference.start({
|
|
350
|
+
roomId: roomId,
|
|
351
|
+
options: {
|
|
352
|
+
roomName: roomName || '我的会议',
|
|
353
|
+
},
|
|
354
|
+
});
|
|
355
|
+
} else if (action === 'join') {
|
|
356
|
+
// 加入已有会议
|
|
357
|
+
await conference.join({
|
|
358
|
+
roomId: roomId,
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
</script>
|
|
363
|
+
```
|
|
234
364
|
|
|
235
|
-
|
|
236
|
-
-
|
|
237
|
-
-
|
|
238
|
-
-
|
|
365
|
+
**⚠️ 强制约束说明**:
|
|
366
|
+
- `conference.start()` 和 `conference.join()` **必须在会议主视图组件加载后调用**
|
|
367
|
+
- 模板中必须包含 `<ConferenceMainView>` 和 `<ConferenceMainViewH5>` 组件
|
|
368
|
+
- 建议在 `onMounted` 生命周期中调用,确保组件已挂载完成
|
|
369
|
+
- 如果模板中缺少会议主视图组件,调用 API 后会议界面将无法正常渲染
|
|
239
370
|
|
|
240
371
|
---
|
|
241
372
|
|
|
242
|
-
### 步骤
|
|
373
|
+
### 步骤 3:配置 App.vue 文件
|
|
243
374
|
|
|
244
|
-
|
|
375
|
+
将以下内容合并到项目的 `App.vue` 文件中:
|
|
245
376
|
|
|
246
377
|
**关键配置要点**:
|
|
247
378
|
- 配置全局 `UIKitProvider` 组件(设置主题和语言)
|
|
248
|
-
- 引入页面路由 `<router-view />`
|
|
249
|
-
- 在 `onMounted` 钩子中执行用户登录逻辑(`login` 和 `setSelfInfo`)
|
|
250
379
|
- 配置全局样式,确保会议界面全屏显示
|
|
380
|
+
- **注意**:用户登录逻辑在首页组件中实现(见「默认测试用户说明」章节)
|
|
381
|
+
|
|
382
|
+
```vue
|
|
383
|
+
<template>
|
|
384
|
+
<!-- Step 1: 配置全局 UIKitProvider -->
|
|
385
|
+
<UIKitProvider theme="light" language="zh-CN">
|
|
386
|
+
<!-- 您的业务组件(首页 → 会议入口 → 会议室) -->
|
|
387
|
+
<router-view />
|
|
388
|
+
</UIKitProvider>
|
|
389
|
+
</template>
|
|
390
|
+
|
|
391
|
+
<script setup lang="ts">
|
|
392
|
+
import { UIKitProvider } from '@tencentcloud/uikit-base-component-vue3';
|
|
393
|
+
</script>
|
|
394
|
+
|
|
395
|
+
<!-- Step 2: 配置全局样式 -->
|
|
396
|
+
<style>
|
|
397
|
+
html, body {
|
|
398
|
+
padding: 0 !important;
|
|
399
|
+
margin: 0 !important;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
#app {
|
|
403
|
+
width: 100% !important;
|
|
404
|
+
height: 100% !important;
|
|
405
|
+
padding: 0 !important;
|
|
406
|
+
margin: 0 !important;
|
|
407
|
+
max-width: 100% !important;
|
|
408
|
+
max-height: 100% !important;
|
|
409
|
+
text-align: left !important;
|
|
410
|
+
overflow: hidden;
|
|
411
|
+
}
|
|
412
|
+
</style>
|
|
413
|
+
```
|
|
251
414
|
|
|
252
415
|
**Agent 执行要求**:
|
|
253
|
-
- ⚠️
|
|
254
|
-
-
|
|
416
|
+
- ⚠️ 用户登录逻辑在首页组件中实现,而非 App.vue
|
|
417
|
+
- 必须调用 `get_usersig` MCP 工具为每个测试用户获取 SDKAppID、userId、userSig
|
|
255
418
|
|
|
256
419
|
---
|
|
257
420
|
|
|
258
|
-
### 步骤
|
|
421
|
+
### 步骤 4:发起新会议(完整示例)
|
|
259
422
|
|
|
260
|
-
|
|
423
|
+
从会议入口页面跳转到会议室页面并发起会议:
|
|
261
424
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
-
|
|
265
|
-
|
|
425
|
+
```typescript
|
|
426
|
+
// 会议入口页面中的发起会议逻辑
|
|
427
|
+
import { useRouter } from 'vue-router';
|
|
428
|
+
|
|
429
|
+
const router = useRouter();
|
|
430
|
+
|
|
431
|
+
const startConference = () => {
|
|
432
|
+
// 跳转到会议室页面,传递会议参数
|
|
433
|
+
router.push({
|
|
434
|
+
path: '/room',
|
|
435
|
+
query: {
|
|
436
|
+
action: 'start',
|
|
437
|
+
roomId: '123456', // 会议 ID
|
|
438
|
+
roomName: '我的临时会议', // 会议名称
|
|
439
|
+
},
|
|
440
|
+
});
|
|
441
|
+
};
|
|
442
|
+
```
|
|
266
443
|
|
|
267
|
-
|
|
268
|
-
- ⚠️ 必须严格按照集成文档中的 `main.ts` 示例代码生成,不得擅自修改
|
|
269
|
-
- 如果用户项目中的入口文件为 `main.js`,需要修改文件后缀为 `main.ts`
|
|
270
|
-
- 如果用户项目已有路由配置,需要智能合并而非直接覆盖
|
|
444
|
+
**⚠️ 注意**:实际的 `conference.start()` 调用在会议室页面组件(步骤 2)的 `onMounted` 中执行,确保会议主视图组件已加载。
|
|
271
445
|
|
|
272
446
|
---
|
|
273
447
|
|
|
274
|
-
### 步骤
|
|
275
|
-
|
|
276
|
-
在用户项目目录中找到 `src/config/basic-info-config.js` 配置文件,并进行以下配置:
|
|
448
|
+
### 步骤 5:加入已有会议(完整示例)
|
|
277
449
|
|
|
278
|
-
|
|
279
|
-
- Agent 必须从 MCP 环境变量中读取 `SDKAppID` 和 `SDKSecretKey`
|
|
280
|
-
- 这些凭证配置在 MCP 环境中,无需通过 `get_usersig` 工具获取
|
|
281
|
-
- 直接将环境变量中的值写入 `basic-info-config.js` 文件
|
|
450
|
+
从会议入口页面跳转到会议室页面并加入会议:
|
|
282
451
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
452
|
+
```typescript
|
|
453
|
+
// 会议入口页面中的加入会议逻辑
|
|
454
|
+
import { useRouter } from 'vue-router';
|
|
455
|
+
|
|
456
|
+
const router = useRouter();
|
|
457
|
+
|
|
458
|
+
const joinConference = () => {
|
|
459
|
+
// 跳转到会议室页面,传递会议参数
|
|
460
|
+
router.push({
|
|
461
|
+
path: '/room',
|
|
462
|
+
query: {
|
|
463
|
+
action: 'join',
|
|
464
|
+
roomId: '123456', // 要加入的会议 ID
|
|
465
|
+
},
|
|
466
|
+
});
|
|
467
|
+
};
|
|
468
|
+
```
|
|
287
469
|
|
|
288
|
-
|
|
289
|
-
> "⚠️ 当前生成的代码仅适用于本地测试。在正式生产环境中,您必须在服务端生成 UserSig,详见腾讯云文档:https://cloud.tencent.com/document/product/647/17275#formal"
|
|
470
|
+
**⚠️ 注意**:实际的 `conference.join()` 调用在会议室页面组件(步骤 2)的 `onMounted` 中执行,确保会议主视图组件已加载。
|
|
290
471
|
|
|
291
472
|
---
|
|
292
473
|
|
|
293
474
|
## 🎨 UI 自定义功能
|
|
294
475
|
|
|
295
|
-
TUIRoomKit (Atomicx 版本) 支持灵活的 UI 自定义,Agent 可根据用户需求提供以下自定义方案:
|
|
296
|
-
|
|
297
476
|
### 1. 主题及语言配置
|
|
298
477
|
|
|
299
|
-
通过配置 `
|
|
478
|
+
通过配置 `UIKitProvider` 的入参修改主题及语言:
|
|
300
479
|
|
|
301
480
|
| UIKitProvider 参数 | 可选值 | 默认值 |
|
|
302
481
|
|-------------------|--------|--------|
|
|
@@ -311,17 +490,43 @@ TUIRoomKit (Atomicx 版本) 支持灵活的 UI 自定义,Agent 可根据用户
|
|
|
311
490
|
|
|
312
491
|
---
|
|
313
492
|
|
|
314
|
-
### 2.
|
|
493
|
+
### 2. 源码导出(深度定制)
|
|
494
|
+
|
|
495
|
+
如需深度定制 TUIRoomKit 界面,可使用源码导出功能:
|
|
496
|
+
|
|
497
|
+
```bash
|
|
498
|
+
# 执行源码导出脚本,默认拷贝路径为 ./src/components/RoomKit
|
|
499
|
+
node ./node_modules/@tencentcloud/roomkit-web-vue3/scripts/eject.js
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
导出后修改组件引用路径:
|
|
503
|
+
|
|
504
|
+
```typescript
|
|
505
|
+
// 修改前:从 npm 包引入
|
|
506
|
+
- import { ConferenceMainView, conference } from '@tencentcloud/roomkit-web-vue3';
|
|
507
|
+
|
|
508
|
+
// 修改后:从本地源码引入
|
|
509
|
+
+ import { ConferenceMainView, ConferenceMainViewH5, conference } from './components/RoomKit/index.ts';
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
### 3. 自定义房间流布局
|
|
315
515
|
|
|
316
|
-
TUIRoomKit
|
|
317
|
-
- **九宫格布局**(默认):`RoomLayoutTemplate.GridLayout`
|
|
318
|
-
- **侧边栏布局**:`RoomLayoutTemplate.SidebarLayout`
|
|
319
|
-
- **顶部栏布局**:`RoomLayoutTemplate.CinemaLayout`
|
|
516
|
+
TUIRoomKit 支持三种流布局:
|
|
320
517
|
|
|
321
|
-
|
|
518
|
+
| 布局类型 | 枚举值 | 说明 |
|
|
519
|
+
|---------|--------|------|
|
|
520
|
+
| 九宫格布局 | `RoomLayoutTemplate.GridLayout` | 默认布局 |
|
|
521
|
+
| 侧边栏布局 | `RoomLayoutTemplate.SidebarLayout` | 侧边栏布局 |
|
|
522
|
+
| 顶部栏布局 | `RoomLayoutTemplate.CinemaLayout` | 顶部栏布局 |
|
|
523
|
+
|
|
524
|
+
导出源码后,在 `RoomKit/views/ConferenceMainView/index.vue` 中修改:
|
|
322
525
|
|
|
323
526
|
```typescript
|
|
324
|
-
|
|
527
|
+
import { RoomLayoutTemplate } from 'tuikit-atomicx-vue3/room';
|
|
528
|
+
|
|
529
|
+
// 修改默认布局为侧边栏布局
|
|
325
530
|
const participantViewLayout = ref(RoomLayoutTemplate.SidebarLayout);
|
|
326
531
|
|
|
327
532
|
function handleLayoutUpdate(layout: RoomLayoutTemplate) {
|
|
@@ -331,23 +536,22 @@ function handleLayoutUpdate(layout: RoomLayoutTemplate) {
|
|
|
331
536
|
|
|
332
537
|
---
|
|
333
538
|
|
|
334
|
-
###
|
|
539
|
+
### 4. 自定义视频流挂件
|
|
335
540
|
|
|
336
|
-
|
|
541
|
+
导出源码后,修改以下组件自定义视频流挂件:
|
|
337
542
|
|
|
338
543
|
```
|
|
339
|
-
src/components/RoomLayoutView/ParticipantViewUI/ParticipantViewUI.vue
|
|
544
|
+
src/components/RoomKit/components/RoomLayoutView/ParticipantViewUI/ParticipantViewUI.vue
|
|
340
545
|
```
|
|
341
546
|
|
|
342
547
|
---
|
|
343
548
|
|
|
344
|
-
###
|
|
549
|
+
### 5. 配置用户联系人列表
|
|
345
550
|
|
|
346
|
-
TUIRoomKit
|
|
551
|
+
TUIRoomKit 预定会议和会中呼叫的用户选择列表默认展示用户关系链。批量导入步骤:
|
|
347
552
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
**步骤 2**:使用 [好友管理 > 导入好友](https://cloud.tencent.com/document/product/269/8301) REST API 接口批量导入用户关系链
|
|
553
|
+
1. 使用 [账号管理 > 导入多个账号](https://cloud.tencent.com/document/product/269/4919) REST API 批量导入用户账号
|
|
554
|
+
2. 使用 [好友管理 > 导入好友](https://cloud.tencent.com/document/product/269/8301) REST API 批量导入用户关系链
|
|
351
555
|
|
|
352
556
|
---
|
|
353
557
|
|
|
@@ -355,41 +559,39 @@ TUIRoomKit 预定会议用户选择列表和会中呼叫用户选择列表默认
|
|
|
355
559
|
|
|
356
560
|
```mermaid
|
|
357
561
|
graph TD
|
|
358
|
-
A[接收用户需求] --> B[
|
|
359
|
-
B --> C
|
|
360
|
-
C
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
E
|
|
364
|
-
F -->
|
|
365
|
-
G --> H
|
|
366
|
-
H --> I[
|
|
367
|
-
I --> J[
|
|
368
|
-
J --> K[
|
|
369
|
-
K --> L
|
|
370
|
-
L
|
|
371
|
-
|
|
372
|
-
M
|
|
562
|
+
A[接收用户需求] --> B[安装 npm 依赖包]
|
|
563
|
+
B --> C{检测 TypeScript 和 SCSS 支持}
|
|
564
|
+
C -->|未安装| D[安装 typescript 和 sass]
|
|
565
|
+
C -->|已安装| E[跳过]
|
|
566
|
+
D --> F[创建首页 - 用户选择登录界面]
|
|
567
|
+
E --> F
|
|
568
|
+
F --> G[配置 3 个测试用户: user001/user002/user003]
|
|
569
|
+
G --> H[调用 get_usersig 为每个用户获取凭证]
|
|
570
|
+
H --> I[创建会议入口页面 - 创建/加入会议]
|
|
571
|
+
I --> J[创建会议室页面组件]
|
|
572
|
+
J --> K[配置 App.vue: UIKitProvider + 全局样式]
|
|
573
|
+
K --> L{用户需要深度定制 UI?}
|
|
574
|
+
L -->|是| M[执行源码导出脚本]
|
|
575
|
+
L -->|否| N[使用默认配置]
|
|
576
|
+
M --> O[提供 UI 自定义方案: 主题/布局/挂件]
|
|
373
577
|
N --> P[record_result 记录集成结果]
|
|
374
578
|
O --> P
|
|
375
579
|
P --> Q[自动启动开发服务器: npm run dev]
|
|
376
|
-
Q --> R[
|
|
580
|
+
Q --> R[提示用户在浏览器中访问并选择用户登录]
|
|
377
581
|
```
|
|
378
582
|
|
|
379
583
|
---
|
|
380
584
|
|
|
381
585
|
## ✍️ Agent 代码生成示例指令 (Prompts)
|
|
382
586
|
|
|
383
|
-
当 Agent 开始编写代码时,应遵循以下语义逻辑:
|
|
384
|
-
|
|
385
587
|
**基础集成**:
|
|
386
|
-
> "按照 TUIRoomKit (Atomicx 版本)
|
|
588
|
+
> "按照 TUIRoomKit (Atomicx 版本) npm 包接入方式,为我生成一个 Vue 3 音视频会议应用。首页提供 3 个测试用户(user001/user002/user003)选择界面,用户选择后点击登录,登录成功后跳转到会议入口页面,提供创建会议和加入会议功能。使用 get_usersig 工具获取每个测试用户的鉴权凭证。启动后提示我在浏览器中访问调试地址。**请务必告知我:当前生成的代码仅适用于本地测试,正式生产环境必须在服务端生成 UserSig。**"
|
|
387
589
|
|
|
388
|
-
|
|
389
|
-
> "按照 TUIRoomKit (Atomicx 版本)
|
|
590
|
+
**H5 移动端会议**:
|
|
591
|
+
> "按照 TUIRoomKit (Atomicx 版本) 集成,生成一个同时支持 PC 端和 H5 移动端的 Vue 3 会议应用。首页提供测试用户选择和登录功能,使用 getPlatform() 检测平台,PC 端使用 ConferenceMainView,H5 端使用 ConferenceMainViewH5。"
|
|
390
592
|
|
|
391
|
-
|
|
392
|
-
> "按照 TUIRoomKit (Atomicx 版本) 集成,生成一个 Vue 3
|
|
593
|
+
**深度定制 UI**:
|
|
594
|
+
> "按照 TUIRoomKit (Atomicx 版本) 集成,生成一个 Vue 3 会议应用。包含用户选择登录流程,需要执行源码导出,自定义视频流布局为侧边栏布局,并自定义视频流挂件样式。"
|
|
393
595
|
|
|
394
596
|
---
|
|
395
597
|
|
|
@@ -397,45 +599,48 @@ graph TD
|
|
|
397
599
|
|
|
398
600
|
| 类别 | 要求 |
|
|
399
601
|
|------|------|
|
|
400
|
-
| **框架版本** |
|
|
401
|
-
|
|
|
602
|
+
| **框架版本** | Vue 3.4.21 及以上版本 |
|
|
603
|
+
| **平台支持** | PC 端 + H5 移动端(响应式适配,开箱即用) |
|
|
604
|
+
| **接入方式** | npm 包直接安装(推荐);如需深度定制可使用源码导出 |
|
|
402
605
|
| **文档优先** | 严格遵循工具返回的最新文档指令 |
|
|
403
606
|
| **静默集成** | 代码编写完成后自动安装依赖并启动开发服务器 |
|
|
404
|
-
|
|
|
607
|
+
| **凭证获取** | 调用 `get_usersig` MCP 工具获取 SDKAppID、userId、userSig |
|
|
405
608
|
| **安全提示** | ⚠️ 必须告知用户:客户端生成 UserSig 仅适合测试,生产环境必须在服务端生成 |
|
|
406
|
-
| **依赖管理** | 自动安装核心依赖和开发环境依赖(TypeScript、SCSS) |
|
|
407
|
-
| **路由配置** | 配置 `/home` 和 `/room` 两个核心路由 |
|
|
408
609
|
| **多语言** | 支持中文(zh-CN)和英文(en-US) |
|
|
409
|
-
| **UI 自定义** |
|
|
610
|
+
| **UI 自定义** | 支持主题、布局、视频流挂件等自定义(需源码导出) |
|
|
410
611
|
|
|
411
612
|
---
|
|
412
613
|
|
|
413
614
|
## 🎯 Agent 执行检查清单
|
|
414
615
|
|
|
415
|
-
在完成代码生成后,Agent 必须确认以下所有项目:
|
|
416
|
-
|
|
417
616
|
### 项目初始化
|
|
418
|
-
- [ ]
|
|
419
|
-
- [ ] 已拷贝核心源码文件到用户项目(assets、components、hooks、i18n、utils、config、views)
|
|
420
|
-
- [ ] 已安装核心依赖:`tuikit-atomicx-vue3`、`@tencentcloud/uikit-base-component-vue3`、`@tencentcloud/tuiroom-engine-js`、`vue-router`
|
|
617
|
+
- [ ] 已安装核心依赖:`@tencentcloud/roomkit-web-vue3`、`tuikit-atomicx-vue3`、`@tencentcloud/uikit-base-component-vue3`、`@tencentcloud/universal-api`
|
|
421
618
|
- [ ] 已检测并安装 TypeScript 和 SCSS 开发依赖(如果用户项目未安装)
|
|
422
619
|
|
|
423
620
|
### 代码生成
|
|
424
|
-
- [ ]
|
|
425
|
-
- [ ] 已配置 `App.vue`:UIKitProvider +
|
|
426
|
-
- [ ] 已配置 `main.ts`:路由 + 多语言资源
|
|
621
|
+
- [ ] 已创建会议页面组件,使用 `getPlatform()` 检测平台
|
|
622
|
+
- [ ] 已配置 `App.vue`:UIKitProvider + 全局样式
|
|
427
623
|
- [ ] 组件使用了 `<script setup lang="ts">` 语法
|
|
428
624
|
|
|
625
|
+
### 测试用户与登录流程
|
|
626
|
+
- [ ] 🔴 已配置 3 个默认测试用户:user001、user002、user003
|
|
627
|
+
- [ ] 已创建首页用户选择界面(下拉框或按钮组选择测试用户)
|
|
628
|
+
- [ ] 已实现登录按钮和登录加载状态
|
|
629
|
+
- [ ] 登录成功后跳转到会议入口页面
|
|
630
|
+
|
|
631
|
+
### 会议入口页面
|
|
632
|
+
- [ ] 已显示当前登录用户信息
|
|
633
|
+
- [ ] 已实现「创建会议」功能(调用 `conference.start()`)
|
|
634
|
+
- [ ] 已实现「加入会议」功能(调用 `conference.join()`)
|
|
635
|
+
|
|
429
636
|
### 凭证与登录
|
|
430
|
-
- [ ] 🔴
|
|
431
|
-
- [ ]
|
|
432
|
-
- [ ] 已在 `App.vue` 中实现 login() 和 setSelfInfo() 登录逻辑
|
|
637
|
+
- [ ] 🔴 已调用 `get_usersig` MCP 工具为每个测试用户获取 SDKAppID、userId、userSig
|
|
638
|
+
- [ ] 已在首页实现 `login()` 和 `setSelfInfo()` 登录逻辑
|
|
433
639
|
- [ ] ⚠️ **已告知用户**:当前生成的代码仅适用于本地测试,正式生产环境必须在服务端生成 UserSig
|
|
434
640
|
|
|
435
641
|
### UI 配置
|
|
436
642
|
- [ ] 已根据用户需求配置主题(light/dark)和语言(zh-CN/en-US)
|
|
437
|
-
- [ ]
|
|
438
|
-
- [ ] 如果用户需要自定义视频流挂件,已提供自定义方案
|
|
643
|
+
- [ ] 如果用户需要深度定制,已执行源码导出脚本
|
|
439
644
|
|
|
440
645
|
### 最终检查
|
|
441
646
|
- [ ] 已调用 `record_result` 记录集成结果
|
|
@@ -450,19 +655,14 @@ graph TD
|
|
|
450
655
|
|
|
451
656
|
### 必须使用的工具
|
|
452
657
|
|
|
453
|
-
####
|
|
454
|
-
**用途**:从 MCP
|
|
658
|
+
#### `get_usersig` - 获取鉴权凭证
|
|
659
|
+
**用途**:从 MCP 环境变量获取腾讯云应用凭证
|
|
455
660
|
- `SDKAppID`: 应用标识
|
|
456
|
-
- `
|
|
457
|
-
|
|
458
|
-
**使用方式**:
|
|
459
|
-
- Agent 直接从 MCP 环境变量中读取凭证
|
|
460
|
-
- 将凭证写入 `src/config/basic-info-config.js` 文件
|
|
461
|
-
- 禁止让用户手动填写或从外部工具获取
|
|
661
|
+
- `userId`: 用户 ID
|
|
662
|
+
- `userSig`: 用户签名
|
|
462
663
|
|
|
463
664
|
**使用约束**:
|
|
464
|
-
- ✅
|
|
465
|
-
- ❌ 禁止让用户手动输入
|
|
665
|
+
- ✅ 必须调用此工具获取凭证
|
|
466
666
|
- ⚠️ 必须告知用户:客户端生成 UserSig 仅适合测试,生产环境必须在服务端生成
|
|
467
667
|
|
|
468
668
|
#### `record_result` - 记录集成结果
|
|
@@ -482,6 +682,52 @@ graph TD
|
|
|
482
682
|
|
|
483
683
|
---
|
|
484
684
|
|
|
485
|
-
|
|
486
|
-
|
|
685
|
+
## ❓ 常见问题
|
|
686
|
+
|
|
687
|
+
### TUIRoomKit 在本地开发时正常,但部署到线上后无法采集摄像头/麦克风?
|
|
688
|
+
|
|
689
|
+
**原因分析**:浏览器出于安全和隐私保护考虑,对音视频设备采集有严格限制。只有在安全环境(https://、localhost、file://)下才允许采集。
|
|
690
|
+
|
|
691
|
+
**解决方案**:必须使用 HTTPS 协议部署网页,并确保具备有效的安全证书。
|
|
692
|
+
|
|
693
|
+
### TUIRoomKit 是否支持使用 iframe 集成?
|
|
694
|
+
|
|
695
|
+
支持。使用 iframe 集成时,需要配置 allow 属性授予必要权限:
|
|
696
|
+
|
|
697
|
+
```html
|
|
698
|
+
<iframe allow="microphone; camera; display-capture; display; fullscreen;">
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
### TUIRoomKit 是否支持设置内网代理?
|
|
702
|
+
|
|
703
|
+
支持。请在进房前设置内网代理参数:
|
|
704
|
+
|
|
705
|
+
```typescript
|
|
706
|
+
import TUIRoomEngine from '@tencentcloud/tuiroom-engine-js';
|
|
707
|
+
import { useRoomEngine } from 'tuikit-atomicx-vue3/room';
|
|
708
|
+
|
|
709
|
+
const { roomEngine } = useRoomEngine();
|
|
710
|
+
|
|
711
|
+
TUIRoomEngine.once('ready', () => {
|
|
712
|
+
const trtcCloud = roomEngine.instance?.getTRTCCloud();
|
|
713
|
+
trtcCloud.callExperimentalAPI(JSON.stringify({
|
|
714
|
+
api: 'setNetworkProxy',
|
|
715
|
+
params: {
|
|
716
|
+
websocketProxy: "wss://proxy.example.com/ws/",
|
|
717
|
+
turnServer: [{
|
|
718
|
+
url: '14.3.3.3:3478',
|
|
719
|
+
username: 'turn',
|
|
720
|
+
credential: 'turn',
|
|
721
|
+
}],
|
|
722
|
+
iceTransportPolicy: 'relay',
|
|
723
|
+
},
|
|
724
|
+
}));
|
|
725
|
+
});
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
---
|
|
729
|
+
|
|
730
|
+
**适用框架**: Vue 3.4.21+
|
|
731
|
+
**平台支持**: PC 端 + H5 移动端
|
|
732
|
+
**TUIRoomKit 版本**: @tencentcloud/roomkit-web-vue3 (Atomicx 版本)
|
|
487
733
|
**构建工具**: Vite (推荐)
|