@tencentcloud/sdk-mcp 1.7.2 → 1.7.4

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.
Files changed (135) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +25 -17
  3. package/knowledge/bm25.js +20 -11
  4. package/knowledge/path-meta.js +23 -1
  5. package/knowledge/search/generic-rerank.js +123 -0
  6. package/knowledge/search/search-pass.js +8 -1
  7. package/package.json +1 -1
  8. package/resource/_schema/query-normalization.yaml +6 -0
  9. package/resource/index/manifest.json +1 -1
  10. package/resource/integration/callkit/preset/android/integration.md +4 -0
  11. package/resource/integration/callkit/preset/flutter/integration.md +4 -0
  12. package/resource/integration/callkit/preset/ios/integration.md +14 -13
  13. package/resource/integration/callkit/preset/vue/integration.md +0 -3
  14. package/resource/integration/chat/preset/android/integration.md +35 -173
  15. package/resource/integration/chat/preset/flutter/integration.md +113 -220
  16. package/resource/integration/chat/preset/ios/integration.md +2 -269
  17. package/resource/integration/chat/preset/react/integration.md +27 -1
  18. package/resource/integration/chat/preset/uni-app/integration.md +5 -1
  19. package/resource/integration/chat/preset/vue/integration.md +21 -31
  20. package/resource/integration/livekit/preset/live/android/live-host-integration.md +4 -0
  21. package/resource/integration/livekit/preset/live/ios/live-host-integration.md +4 -0
  22. package/resource/integration/livekit/preset/live/vue/live-list-integration.md +3 -4
  23. package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +0 -1
  24. package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +0 -1
  25. package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +4 -9
  26. package/resource/integration/roomkit/preset/vue/integration.md +0 -213
  27. package/resource/knowledge/callkit/best-practice/android/video-chat-dating.md +490 -0
  28. package/resource/knowledge/callkit/best-practice/flutter/android-keep-call-alive-background.md +79 -0
  29. package/resource/knowledge/callkit/best-practice/flutter/background-incoming-call-no-notification.md +99 -0
  30. package/resource/knowledge/callkit/best-practice/flutter/ios-keep-call-alive-background.md +93 -0
  31. package/resource/knowledge/callkit/best-practice/flutter/ios-startup-crash-version-voip.md +68 -0
  32. package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +1 -1
  33. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +9 -7
  34. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +10 -7
  35. package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +1 -1
  36. package/resource/knowledge/callkit/core-sdk/miniprogram/call-engine.md +19 -19
  37. package/resource/knowledge/callkit/core-sdk/miniprogram/call-event.md +16 -16
  38. package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +0 -84
  39. package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +0 -102
  40. package/resource/knowledge/callkit/core-sdk/web/call-event.md +2 -2
  41. package/resource/knowledge/callkit/faq/error-code.md +62 -36
  42. package/resource/knowledge/callkit/faq/uniapp-miniprogram.md +1 -1
  43. package/resource/knowledge/callkit/preset/android/api.md +10 -10
  44. package/resource/knowledge/callkit/preset/harmonyos/api.md +362 -0
  45. package/resource/knowledge/callkit/preset/harmonyos/integration.md +322 -0
  46. package/resource/knowledge/callkit/preset/ios/api.md +9 -9
  47. package/resource/knowledge/callkit/preset/miniprogram/api-uniapp.md +293 -0
  48. package/resource/knowledge/callkit/preset/miniprogram/api.md +19 -19
  49. package/resource/knowledge/callkit/preset/miniprogram/integration.md +292 -0
  50. package/resource/knowledge/callkit/preset/miniprogram/uniapp-integration.md +521 -0
  51. package/resource/knowledge/callkit/preset/uni-app/api.md +49 -0
  52. package/resource/knowledge/callkit/preset/uni-app/integration.md +353 -0
  53. package/resource/knowledge/chat/best-practice/common/web-sdk-log-level.md +76 -0
  54. package/resource/knowledge/chat/best-practice/miniprogram/desktop-wechat-miniprogram-error.md +79 -0
  55. package/resource/knowledge/chat/best-practice/miniprogram/login-timeout-2801-diagnosis.md +1 -1
  56. package/resource/knowledge/chat/preset/android-view/integration.md +84 -124
  57. package/resource/knowledge/chat/preset/ios/features/language.md +5 -5
  58. package/resource/knowledge/chat/preset/ios-uikit/integration.md +184 -923
  59. package/resource/knowledge/chat/preset/react/features/search.md +9 -214
  60. package/resource/knowledge/chat/preset/react/h5/integration.md +965 -0
  61. package/resource/knowledge/chat/preset/vue/features/chat-header.md +0 -36
  62. package/resource/knowledge/chat/preset/vue/features/contact-list.md +0 -34
  63. package/resource/knowledge/chat/preset/vue/features/conversation-list.md +0 -39
  64. package/resource/knowledge/chat/preset/vue/features/conversation-preview.md +0 -74
  65. package/resource/knowledge/chat/preset/vue/features/search.md +9 -790
  66. package/resource/knowledge/chat/preset/vue/h5/integration.md +724 -0
  67. package/resource/knowledge/livekit/core-sdk/features/uni-app/live-list.md +0 -167
  68. package/resource/knowledge/livekit/core-sdk/live/android/co-guest-interaction.md +1 -1
  69. package/resource/knowledge/livekit/core-sdk/live/android/host-interaction.md +1 -1
  70. package/resource/knowledge/livekit/core-sdk/live/flutter/co-guest-interaction.md +1 -1
  71. package/resource/knowledge/livekit/core-sdk/live/flutter/host-interaction.md +1 -1
  72. package/resource/knowledge/livekit/core-sdk/live/flutter/integration.md +1 -1
  73. package/resource/knowledge/livekit/core-sdk/live/ios/co-guest-interaction.md +1 -1
  74. package/resource/knowledge/livekit/core-sdk/live/ios/host-interaction.md +1 -1
  75. package/resource/knowledge/livekit/core-sdk/live/ios/integration.md +2 -2
  76. package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +1 -66
  77. package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +1 -66
  78. package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +1 -1
  79. package/resource/knowledge/livekit/core-sdk/voice/android/co-guest-interaction.md +1 -1
  80. package/resource/knowledge/livekit/core-sdk/voice/android/host-interaction.md +2 -2
  81. package/resource/knowledge/livekit/core-sdk/voice/flutter/co-guest-interaction.md +1 -1
  82. package/resource/knowledge/livekit/core-sdk/voice/ios/co-guest-interaction.md +1 -1
  83. package/resource/knowledge/livekit/core-sdk/voice/ios/host-interaction.md +2 -2
  84. package/resource/knowledge/livekit/core-sdk/voice/uni-app/integration.md +2 -2
  85. package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +1 -24
  86. package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +0 -3
  87. package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +0 -5
  88. package/resource/knowledge/push/api-reference/harmonyos.md +9 -9
  89. package/resource/knowledge/push/api-reference/unity.md +10 -10
  90. package/resource/knowledge/push/api-reference/unreal-engine.md +11 -11
  91. package/resource/knowledge/push/config/android/fcm.md +2 -6
  92. package/resource/knowledge/push/integration/android.md +824 -428
  93. package/resource/knowledge/push/integration/donut.md +57 -74
  94. package/resource/knowledge/push/integration/flutter.md +208 -63
  95. package/resource/knowledge/push/integration/harmonyos.md +6 -11
  96. package/resource/knowledge/push/integration/ios.md +44 -99
  97. package/resource/knowledge/push/integration/react-native.md +3 -2
  98. package/resource/knowledge/push/integration/uni-app.md +29 -107
  99. package/resource/knowledge/push/integration/unity.md +3 -2
  100. package/resource/knowledge/push/integration/unreal-engine.md +4 -3
  101. package/resource/knowledge/roomkit/best-practice/vue/screen-share-auto-stop-on-leave.md +62 -0
  102. package/resource/knowledge/roomkit/core-sdk/android/room-state.md +3 -3
  103. package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +4 -4
  104. package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +2 -2
  105. package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +4 -4
  106. package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +3 -3
  107. package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +4 -4
  108. package/resource/knowledge/roomkit/core-sdk/react/network-proxy.md +84 -0
  109. package/resource/knowledge/roomkit/core-sdk/vue/device-detection.md +0 -9
  110. package/resource/knowledge/roomkit/core-sdk/vue/free-beauty-panel.md +0 -9
  111. package/resource/knowledge/roomkit/core-sdk/vue/network-proxy.md +84 -0
  112. package/resource/knowledge/roomkit/core-sdk/vue/recording.md +245 -0
  113. package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +0 -3
  114. package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +0 -16
  115. package/resource/knowledge/roomkit/core-sdk/vue/schedule-room.md +0 -3
  116. package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +0 -3
  117. package/resource/knowledge/roomkit/core-sdk/vue/whiteboard-annotation.md +181 -0
  118. package/resource/knowledge/roomkit/faq/error-code.md +103 -0
  119. package/resource/knowledge/roomkit/preset/android/integration.md +1 -202
  120. package/resource/knowledge/roomkit/preset/flutter/integration.md +13 -13
  121. package/resource/knowledge/roomkit/preset/harmonyos/integration.md +465 -0
  122. package/resource/knowledge/roomkit/preset/ios/integration.md +0 -201
  123. package/resource/knowledge/roomkit/preset/react/features/network-proxy.md +80 -0
  124. package/resource/knowledge/roomkit/preset/react/integration.md +0 -202
  125. package/resource/knowledge/roomkit/preset/uniapp-app/integration.md +279 -0
  126. package/resource/knowledge/roomkit/preset/vue/features/ai-caption-translation.md +69 -0
  127. package/resource/knowledge/roomkit/preset/vue/features/ai-denoiser.md +67 -0
  128. package/resource/knowledge/roomkit/preset/vue/features/network-proxy.md +80 -0
  129. package/resource/knowledge/roomkit/preset/vue/features/recording.md +85 -0
  130. package/resource/knowledge/roomkit/preset/vue/features/whiteboard-annotation.md +86 -0
  131. package/resource/knowledge/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +25 -6
  132. package/server.js +1 -1
  133. package/utils/preflight-route.js +18 -6
  134. package/utils/report-cls-client.js +1 -1
  135. package/utils/report-es-client.js +1 -1
@@ -168,97 +168,7 @@ LoginStore.shared.login(sdkAppID: sdkAppID, userID: userID, userSig: userSig, co
168
168
  > 在正式的生产环境中,请在您的服务端生成 UserSig,在需要 UserSig 时由您的 App 向业务服务器发起请求获取动态 UserSig 来进行鉴权。详见 服务端生成 UserSig。
169
169
  >
170
170
 
171
- ### 步骤3:构建会话列表界面
172
-
173
- 您可以基于 TUIKit SwiftUI 中的 ConversationList 组件,构建一个会话列表页面。ConversationList 内建的功能是:
174
- - 展示用户的会话列表,包含单聊和群聊会话。
175
-
176
- - 支持用户操作单个会话:置顶、删除、清空会话消息等。
177
-
178
- 将 ConversationList 封装为会话列表页,可参考 `chat/uikit/ConversationsPage.swift` 文件里的实现,`ConversationsPage` 主要做了以下工作:
179
-
180
- 1. 在 ConversationList 上方添加了 headerView。
181
-
182
- 2. 实现点击会话列表 cell 事件。
183
-
184
- 3. 支持创建会话和群组功能:
185
-
186
- 1. 点击右上角 "+" 按钮可以创建新会话或群组。
187
-
188
- 2. 支持从联系人列表选择好友创建单聊。
189
-
190
- 3. 支持选择多个好友创建群聊。
191
-
192
- 核心示例代码如下所示:
193
-
194
- ``` swift
195
- import AtomicX
196
- import AtomicXCore
197
- import SwiftUI
198
-
199
- public struct ConversationsPage: View {
200
- ...
201
-
202
- public var body: some View {
203
- VStack(spacing: 0) {
204
- headerView
205
- ConversationList(
206
- onConversationClick: { conversation in
207
- // Customize onConversationClick event
208
- onShowMessage?(NavigationInfo(conversation: conversation))
209
- }
210
- )
211
- .environmentObject(themeState)
212
- }
213
- .onReceive(contactListStore.state.subscribe(StatePublisherSelector(keyPath: \ContactListState.friendList))) { friendList in
214
- if self.friendList != friendList {
215
- self.friendList = friendList
216
- }
217
- }
218
- .onAppear {
219
- contactListStore.fetchFriendList(completion: { _ in })
220
- }
221
- .overlay(
222
- // Click + to show this menu.
223
- ChatsMenuOverlay(
224
- showChatsMenu: $showChatsMenu,
225
- showStartConversation: $showStartConversation,
226
- showUserPicker: $showUserPicker
227
- )
228
- )
229
- ...
230
- }
231
- ...
232
- }
233
-
234
- private var headerView: some View {
235
- HStack {
236
- Text(LocalizedChatString("TabChats"))
237
- .font(.system(size: 34, weight: .semibold))
238
- .tracking(0.3)
239
- .foregroundColor(themeState.colors.textColorPrimary)
240
- .background(themeState.colors.listColorDefault)
241
- .padding(.leading, 16)
242
- Spacer()
243
- if AppBuilderConfig.shared.enableCreateConversation {
244
- Button(action: {
245
- showChatsMenu.toggle()
246
- }) {
247
- Image(systemName: "plus")
248
- .font(.system(size: 20))
249
- .foregroundColor(themeState.colors.buttonColorPrimaryDefault)
250
- .frame(width: 28, height: 28)
251
- .cornerRadius(14)
252
- }
253
- .padding(.trailing, 16)
254
- }
255
- }
256
- .padding(.top, 12)
257
- .padding(.bottom, 16)
258
- }
259
- ```
260
-
261
- ### 步骤4:构建聊天界面
171
+ ### 步骤3:构建聊天界面
262
172
 
263
173
  您可以基于 TUIKit SwiftUI 中的 MessageList、MessageInput 组件,构建一个聊天页面。
264
174
  - MessageList 内建的功能是:
@@ -373,184 +283,7 @@ LoginStore.shared.login(sdkAppID: sdkAppID, userID: userID, userSig: userSig, co
373
283
  }
374
284
  ```
375
285
 
376
- ### 步骤5:构建联系人界面
377
-
378
- 您可以基于 TUIKit SwiftUI 中的 ContactList 组件,构建一个联系人页面。ContactList 内建的功能是:
379
- - 查看好友申请列表。
380
-
381
- - 查看已加入的群列表。
382
-
383
- - 处理群组邀请和申请。
384
-
385
- - 管理黑名单列表。
386
-
387
- - 查看好友。
388
-
389
- 将 ContactList 封装为联系人列表页,可参考 `chat/uikit/ContactsPage.swift` 文件里的实现,`ContactsPage` 主要做了以下工作:
390
-
391
- 1. 在 ContactList 上方添加了 headerView。
392
-
393
- 2. 实现点击联系人列表 cell 事件。
394
-
395
- 3. 支持添加联系人和添加群组:
396
-
397
- 1. 点击右上角 "+" 按钮可以添加联系人或群组。
398
-
399
- 2. 支持根据 UserID 搜索目标联系人。
400
-
401
- 3. 支持根据 GroupID 搜索目标群组。
402
-
403
- 核心示例代码如下所示:
404
-
405
- ``` swift
406
- import AtomicX
407
- import AtomicXCore
408
- import SwiftUI
409
-
410
- public struct ContactsPage: View {
411
- ...
412
-
413
- public var body: some View {
414
- VStack(spacing: 0) {
415
- headerView
416
- ContactList(
417
- contactStore: contactStore,
418
- onShowMessage: onShowMessage,
419
- onContactClick: onContactClick,
420
- onGroupClick: onGroupClick,
421
- onNewFriendsClick: onNewFriendsClick,
422
- onGroupApplicationsClick: onGroupApplicationsClick,
423
- onGroupListClick: onGroupListClick,
424
- onBlackListClick: onBlackListClick
425
- )
426
- }
427
- .overlay(
428
- Group {
429
- if showAddContactMenu {
430
- VStack {
431
- HStack {
432
- Spacer()
433
- AddContactPopView(
434
- onDismiss: {
435
- showAddContactMenu = false
436
- },
437
- onShowAddFriend: {
438
- showAddFriend = true
439
- },
440
- onShowJoinGroup: {
441
- showJoinGroup = true
442
- }
443
- )
444
- .padding(.trailing, 16)
445
- .padding(.top, 50)
446
- }
447
- Spacer()
448
- }
449
- .background(
450
- Color.clear
451
- .contentShape(Rectangle())
452
- .onTapGesture {
453
- showAddContactMenu = false
454
- }
455
- )
456
- .animation(.easeInOut(duration: 0.2), value: showAddContactMenu)
457
- }
458
- }
459
- )
460
- .sheet(isPresented: $showAddFriend) {
461
- AddFriendView(contactStore: contactStore)
462
- }
463
- .sheet(isPresented: $showJoinGroup) {
464
- JoinGroupView(contactStore: contactStore)
465
- }
466
- }
467
-
468
- private var headerView: some View {
469
- HStack {
470
- Text(LocalizedChatString("TabContacts"))
471
- .font(.system(size: 34, weight: .semibold))
472
- .tracking(0.3)
473
- .foregroundColor(themeState.colors.textColorPrimary)
474
- .padding(.leading, 16)
475
- Spacer()
476
- Button(action: {
477
- showAddContactMenu = true
478
- }) {
479
- Image(systemName: "plus")
480
- .font(.system(size: 20))
481
- .foregroundColor(themeState.colors.buttonColorPrimaryDefault)
482
- .frame(width: 28, height: 28)
483
- .cornerRadius(14)
484
- }
485
- .padding(.trailing, 16)
486
- }
487
- .padding(.top, 12)
488
- .padding(.bottom, 16)
489
- }
490
-
491
- ...
492
- }
493
- ```
494
-
495
- ### 步骤6:完善界面间的跳转逻辑
496
-
497
- ConversationsPage、ChatPage、ContactsPage 中暴露了一些用户点击事件,您可以自定义事件来实现页面间的交互:
498
- | Page | 回调 | 建议跳转逻辑 |
499
- | --- | --- | --- |
500
- | <strong>ConversationsPage</strong> | <code>onConversationClick: ((NavigationInfo) -> Void)?</code> | 点击会话列表中的会话时触发,建议跳转到聊天页面(ChatPage)。 |
501
- | <strong>ContactPage</strong> | <code>onContactClick: ((AZOrderedListItem) -> Void)?</code> | 点击联系人 cell 时触发,建议跳转联系人详情页面(C2CChatSetting)。 |
502
- | <code>onGroupClick: ((AZOrderedListItem) -> Void)?</code> | 点击群组 cell 时触发,建议跳转群聊页面(ChatPage)。 | |
503
- | <strong>ChatPage</strong> | <code>onBack: (() -> Void)?</code> | 点击返回按钮时触发,建议返回上一级页面。 |
504
- | <code>onUserAvatarClick: ((String) -> Void)?</code> | 点击消息中的用户头像时触发,建议跳转用户信息页(C2CChatSetting)。 | |
505
- | <code>onNavigationAvatarClick: (() -> Void)?</code> | 点击导航栏中的头像时触发,建议跳转用户信息页(C2CChatSetting)或群聊信息页(GroupChatSetting)。 | |
506
-
507
- **chat/demo/ChatDemo/Pages/HomePage.swift** 作为上述 Page 的粘合层,实现了各个 Page 的回调事件,核心示例代码如下:
508
- ``` swift
509
- // 点击会话列表 cell 跳转
510
- ConversationsPage(
511
- onConversationClick: { navigationInfo in
512
- showChatPage(conversation: navigationInfo.conversation, locateMessage: navigationInfo.locateMessage)
513
- }
514
- )
515
-
516
- // 点击联系人页面跳转
517
- ContactsPage(
518
- onContactClick: { user in
519
- showContactDetail(user)
520
- },
521
- onGroupClick: { group in
522
- let conversation = createConversationFromGroup(group)
523
- showChatPage(conversation: conversation)
524
- }
525
- )
526
-
527
- // ChatNavPage 是在 ChatPage 外层封装了导航栏的页面,位于 Demo 层,用于演示跳转
528
- // 开发者可按需参考 ChatNavPage 封装 ChatPage。
529
- ChatNavPage(
530
- conversation: conversation,
531
- locateMessage: currentLocateMessage,
532
- onBack: {
533
- dismissChatPage()
534
- },
535
- onContactDelete: {
536
- dismissChatPage()
537
- },
538
- onGroupDelete: {
539
- dismissChatPage()
540
- },
541
- onNavigateToChat: { newConversation in
542
- // First dismiss current chat page, then navigate to the new chat
543
- dismissChatPage()
544
- DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
545
- showChatPage(conversation: newConversation)
546
- }
547
- }
548
- )
549
- ```
550
-
551
- 您可以参考上述回调说明及参考代码,实现 Page 之间交互逻辑。
552
-
553
- ### 步骤7:接入智能客服 Desk 用户端(可选)
286
+ ### 步骤4:接入智能客服 Desk 用户端
554
287
 
555
288
  若需同时集成智能客服 Desk 用户端,请先 [开通智能客服 Desk 服务](https://cloud.tencent.com/document/product/269/96059),并根据 [iOS 接入智能客服用户端](https://cloud.tencent.com/document/product/269/110808) 文档完成 `TencentCloudAIDeskCustomer` 包引入和配置,即可在您的应用中引入客服会话能力。
556
289
  ``` objectivec
@@ -188,13 +188,39 @@ function ChatLayout({ texts }: { texts: { emptyTitle: string; emptySub: string }
188
188
  const { theme } = useUIKit();
189
189
  const isDark = theme === 'dark';
190
190
 
191
- const { activeConversation } = useChatContext();
191
+ const { activeConversation, sendMessage } = useChatContext();
192
+
193
+ const defaultOpenConversationID = 'C2Cadministrator';
194
+
195
+ // 仅发送一次欢迎语
196
+ const sendWelcomeMessageOnce = useRef(false);
192
197
 
193
198
  useEffect(() => {
194
199
  setIsChatSettingShow(false);
195
200
  setIsSearchInChatShow(false);
196
201
  }, [activeConversation?.conversationID]);
197
202
 
203
+ // 应用创建(组件挂载)时仅发送一次欢迎语;切换会话不会重复发送。
204
+ useEffect(() => {
205
+ const timer = setTimeout(() => {
206
+ if (activeConversation?.conversationID === defaultOpenConversationID && !sendWelcomeMessageOnce.current) {
207
+ sendMessage({
208
+ type: 'textMessage',
209
+ text: `欢迎体验 Chat React 桌面端WEB应用 Demo~
210
+
211
+ 您可以按照以下顺序体验 IM 的核心功能:
212
+ 1. 在输入框内发送一条文本消息。
213
+ 2. 输入框上的工具栏支持,语音通话、视频通话、图片、视频、文件发送等扩展功能。
214
+ 3. 如果您想添加好友,可以前往联系人页面点击"添加好友/群聊"。
215
+ `,
216
+ });
217
+ sendWelcomeMessageOnce.current = true;
218
+ }
219
+ }, 1000);
220
+ return () => clearTimeout(timer);
221
+ // eslint-disable-next-line react-hooks/exhaustive-deps
222
+ }, [activeConversation?.conversationID]);
223
+
198
224
  return (
199
225
  <div className={`chat-layout ${isDark ? 'dark' : ''}`}>
200
226
  <SideTab activeTab={activeTab} onTabChange={setActiveTab} />
@@ -21,7 +21,7 @@ TUIKit 是一款基于腾讯云 IM SDK 和 UTS 原生渲染技术的 uni-app UI
21
21
  > H5 和小程序项目,如有需要请参考以下替代方案:
22
22
  >
23
23
  > - 打包 Web H5,可参考:Web H5(Vue3)。
24
- > - 打包小程序,可参考:uni-app 完整版(Vue3/Vue2)。
24
+ > - 打包小程序,可参考:uni-app 标准版(Vue3/Vue2)。
25
25
  > - 接入过程中遇到任何卡点或有改进建议,欢迎通过 [UniApp Atomicx 接入体验反馈](https://wj.qq.com/s2/26120470/621d/) 反馈,官方会及时跟进处理。
26
26
 
27
27
  ## 集成步骤
@@ -472,6 +472,10 @@ import { initCallService } from '@/uni_modules/tuikit-atomic-x/server/callServic
472
472
  initCallService();
473
473
  ```
474
474
 
475
+ ## AI 助手:知识咨询与代码集成
476
+
477
+ 在接入 IM SDK 过程中,您可以通过 MCP 使用 AI 助手,快速完成知识咨询、报错排查和 UIKit 集成代码生成。支持 Web/Android/iOS/Flutter/uni-app 等平台,答案基于官方文档。适用于查询 SDK API、UI 组件用法、服务端 API 与 IM 产品配置等场景,[立即体验,提出您的第一个问题](https://cloud.tencent.com/document/product/269/126983)。
478
+
475
479
  ## 常见问题
476
480
 
477
481
  ### 技术兼容性类
@@ -135,11 +135,6 @@ login({
135
135
  });
136
136
  </script>
137
137
 
138
- <style>
139
- body { margin: 0; padding: 0; font-family: Inter, Avenir, Helvetica, Arial, sans-serif; }
140
- #app { width: 100vw; height: 100vh; }
141
- #app > div { display: flex; align-items: center; justify-content: center; }
142
- </style>
143
138
  ```
144
139
 
145
140
  #### 2.2 搭建聊天页面
@@ -156,7 +151,7 @@ body { margin: 0; padding: 0; font-family: Inter, Avenir, Helvetica, Arial, sans
156
151
  </div>
157
152
 
158
153
  <div v-show="activeTab === 'conversations'" class="chat-panel">
159
- <Chat :PlaceholderEmpty="EmptyChatTpl">
154
+ <Chat :conversationID="defaultOpenConversationID" :PlaceholderEmpty="EmptyChatTpl">
160
155
  <ChatHeader>
161
156
  <template #ChatHeaderRight>
162
157
  <button class="icon-btn" @click="settingOpen = !settingOpen">
@@ -207,7 +202,7 @@ body { margin: 0; padding: 0; font-family: Inter, Avenir, Helvetica, Arial, sans
207
202
  </template>
208
203
 
209
204
  <script setup lang="ts">
210
- import { ref, watch } from 'vue';
205
+ import { ref, watch, onMounted } from 'vue';
211
206
  import {
212
207
  Chat, Search, ChatHeader, MessageList, MessageInput,
213
208
  ConversationList, ContactList, ContactInfo, ChatSetting,
@@ -218,11 +213,29 @@ import {
218
213
  import { IconMenu, IconSearch } from '@tencentcloud/uikit-base-component-vue3';
219
214
  import SideTab from './SideTab.vue';
220
215
 
221
- const { activeConversation } = useChatContext();
216
+ const { activeConversation, sendMessage } = useChatContext();
222
217
 
223
218
  const activeTab = ref<'conversations' | 'contacts'>('conversations');
224
219
  const settingOpen = ref(false);
225
220
  const searchOpen = ref(false);
221
+ const defaultOpenConversationID = ref('C2Cadministrator');
222
+
223
+ onMounted(() => {
224
+ setTimeout(() => {
225
+ if (activeConversation.value?.conversationID === defaultOpenConversationID.value) {
226
+ sendMessage({
227
+ type: 'textMessage',
228
+ text: `欢迎体验 Chat Vue3 桌面端WEB应用 Demo~
229
+
230
+ 您可以按照以下顺序体验 IM 的核心功能:
231
+ 1. 在输入框内发送一条文本消息。
232
+ 2. 输入框上的工具栏支持,语音通话、视频通话、快速会议、图片、视频、文件发送等扩展功能。
233
+ 3. 如果您想添加好友,可以前往联系人页面点击"添加好友/群聊"。
234
+ `
235
+ });
236
+ }
237
+ }, 1000);
238
+ });
226
239
 
227
240
  watch(() => activeConversation.value?.conversationID, () => {
228
241
  settingOpen.value = false;
@@ -243,26 +256,6 @@ const EmptyChatTpl = { template: `
243
256
  `};
244
257
  </script>
245
258
 
246
- <style scoped>
247
- .chat-layout { height: 60vh; aspect-ratio: 16/9; display: flex; border-radius: 16px; box-shadow: 0 20px 60px rgba(0,0,0,.3), 0 0 0 1px rgba(255,255,255,.1); overflow: hidden; }
248
- @media (max-width: 1920px) { .chat-layout { height: 80vh; } }
249
- .list-panel { width: 300px; display: flex; flex-direction: column; border-right: 1px solid var(--stroke-color-primary); overflow: hidden; }
250
- .detail-panel { flex: 1; }
251
- .icon-btn { padding: 4px 6px; display: flex; align-items: center; justify-content: center; border: none; background: transparent; border-radius: 4px; font-size: 20px; color: var(--text-color-primary); cursor: pointer; outline: none; }
252
- .icon-btn:hover { background-color: var(--button-color-secondary-hover); }
253
- .toolbar { display: flex; justify-content: space-between; align-items: center; }
254
- .toolbar-left { display: flex; align-items: center; gap: 4px; }
255
- .search-sidebar { border-left: 1px solid var(--stroke-color-primary); display: flex; flex-direction: column; flex: 0 0 300px; }
256
- .search-sidebar-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; border-bottom: 1px solid var(--stroke-color-primary); }
257
- .search-sidebar-title { font-size: 16px; font-weight: 500; color: var(--text-color-primary); }
258
- .chat-panel { flex: 1; position: relative; display: flex; }
259
- .float-sidebar { position: absolute; right: 0; top: 0; bottom: 0; min-width: 300px; max-width: 400px; display: flex; flex-direction: column; background-color: var(--bg-color-operate); box-shadow: -2px 0 8px rgba(0,0,0,.04), -4px 0 16px rgba(0,0,0,.06); overflow: auto; z-index: 1000; }
260
- .empty-chat { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; background-color: var(--bg-color-operate); border-left: 1px solid rgba(0,0,0,.08); }
261
- </style>
262
-
263
- <style>
264
- #app { text-align: start; }
265
- </style>
266
259
  ```
267
260
 
268
261
  #### 2.3 引入侧边导航
@@ -328,9 +321,6 @@ const handleTabChange = (tab: 'conversations' | 'contacts') => {
328
321
  };
329
322
  </script>
330
323
 
331
- <style scoped>
332
- .side-tab{width:72px;height:100vh;background:var(--bg-color-function);display:flex;flex-direction:column;align-items:center;padding:20px 0;transition:background 0.3s;}.avatar-wrapper{position:relative;margin-bottom:24px;cursor:pointer;}.avatar-wrapper:hover:deep(.avatar){transform:scale(1.05);box-shadow:0 4px 12px rgba(0,0,0,0.15);}.tooltip{position:absolute;left:60px;top:50%;transform:translateY(-50%);padding:8px 12px;background:rgba(0,0,0,0.85);color:#fff;border-radius:6px;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:all 0.3s;z-index:1000;}.tooltip::before{content:'';position:absolute;left:-6px;top:50%;transform:translateY(-50%);border:6px solid transparent;border-right-color:rgba(0,0,0,0.85);}.avatar-wrapper:hover .tooltip{opacity:1;visibility:visible;}.tooltip-name{font-size:14px;font-weight:500;margin-bottom:4px;}.tooltip-id{font-size:12px;opacity:0.8;}.tabs{display:flex;flex-direction:column;gap:16px;}.tab-item{width:48px;height:48px;display:flex;align-items:center;justify-content:center;border-radius:12px;cursor:pointer;transition:all 0.3s;color:var(--text-color-primary);}.tab-item:hover{background:rgba(0,0,0,0.05);}.tab-item.active{background:var(--button-color-primary-default);color:var(--text-color-button);}.side-tab.dark{background:#1a1a1a;}.side-tab.dark .avatar-wrapper:hover:deep(.avatar){box-shadow:0 4px 12px rgba(255,255,255,0.2);}.side-tab.dark .tooltip{background:rgba(255,255,255,0.95);color:#1a1a1a;}.side-tab.dark .tooltip::before{border-right-color:rgba(255,255,255,0.95);}.side-tab.dark .tab-item:hover{background:rgba(255,255,255,0.1);}.side-tab.dark .tab-item.active{background:#1890ff;color:#fff;}
333
- </style>
334
324
  ```
335
325
 
336
326
  ### 步骤3:获取 SDKAppID、userID 和 userSig
@@ -142,6 +142,10 @@ class AnchorActivity : AppCompatActivity() {
142
142
  }
143
143
  ```
144
144
 
145
+ ## AI 助手:知识咨询与代码集成
146
+
147
+ 您在接入直播与语聊 SDK 过程中,可以通过 MCP 使用 AI 助手,快速完成知识咨询、报错排查和集成代码生成。支持 Web/Android/iOS/Flutter/uni-app/HarmonyOS 等平台,答案基于官方文档。适用于查询 AtomicXCore SDK 和 UI 组件用法以及集成文档等场景,[立即体验,提出您的第一个问题](https://cloud.tencent.com/document/product/647/129285)。
148
+
145
149
  ## 自定义您的界面布局
146
150
 
147
151
  `TUILiveKit` 支持灵活定制开播页与直播页的功能和样式,您可根据业务需求调整布局、隐藏 / 显示功能模块。
@@ -263,6 +263,10 @@ extension YourAnchorPrepareViewController : AnchorPrepareViewDelegate {
263
263
 
264
264
  ###
265
265
 
266
+ ## AI 助手:知识咨询与代码集成
267
+
268
+ 您在接入直播与语聊 SDK 过程中,可以通过 MCP 使用 AI 助手,快速完成知识咨询、报错排查和集成代码生成。支持 Web/Android/iOS/Flutter/uni-app/HarmonyOS 等平台,答案基于官方文档。适用于查询 AtomicXCore SDK 和 UI 组件用法以及集成文档等场景,[立即体验,提出您的第一个问题](https://cloud.tencent.com/document/product/647/129285)。
269
+
266
270
  ## 自定义您的界面布局
267
271
 
268
272
  `TUILiveKit` 支持灵活定制开播页与直播页的功能和样式,您可根据业务需求调整布局、隐藏 / 显示功能模块。
@@ -77,11 +77,10 @@ onMounted(async () => {
77
77
  });
78
78
  </script>
79
79
 
80
- <style scoped>:global(*),:global(::after),:global(::before){box-sizing:border-box;margin:0}.container{display:flex;flex-direction:column;height:100vh;width:100vw;background:var(--bg-color-default)}.header{display:flex;align-items:center;flex-shrink:0}.title{margin:0;font-size:16px;font-weight:600;color:var(--text-color-primary);letter-spacing:-.5px}.main{flex:1;padding:24px;overflow-y:auto;min-height:0}</style>
81
80
  ```
82
81
 
83
82
  > **注意:**
84
- > 若您需要实现直播列表到进入直播间的跳转逻辑,可参考本文中 指定直播间 部分内容。
83
+ > 若您需要实现直播列表到进入直播间的跳转逻辑,可参考本文中 [指定直播间](#61f1bbc9-1f23-4b69-aceb-7ab3f35a0ec2) 部分内容。
85
84
  >
86
85
 
87
86
  ## 启动项目
@@ -151,7 +150,7 @@ app.mount('#app');
151
150
 
152
151
  #### 步骤3:配置 live-list 文件
153
152
 
154
- 您需要将以下内容合并到上文中的 步骤3 内容中,进行直播列表到观看页面的跳转。
153
+ 您需要将以下内容合并到上文中的 [步骤3](#c1b852bc-da02-4c9f-bb11-2a63582ce978) 内容中,进行直播列表到观看页面的跳转。
155
154
  ``` typescript
156
155
  // live-list.vue 可增量添加至您的代码中
157
156
  <template>
@@ -213,7 +212,7 @@ import { UIKitProvider } from '@tencentcloud/uikit-base-component-vue3';
213
212
 
214
213
  ### 设置昵称及头像
215
214
 
216
- 如果您需要自定义昵称或头像,可以在 步骤 3 中的示例代码中通过 [setSelfInfo](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#setSelfInfo) 进行设置,具体示例如下:
215
+ 如果您需要自定义昵称或头像,可以在 [步骤 3](#c1b852bc-da02-4c9f-bb11-2a63582ce978) 中的示例代码中通过 [setSelfInfo](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#setSelfInfo) 进行设置,具体示例如下:
217
216
  ``` typescript
218
217
  import { useLoginState } from 'tuikit-atomicx-vue3';
219
218
 
@@ -87,7 +87,6 @@ onMounted(async () => {
87
87
 
88
88
  </script>
89
89
 
90
- <style>html,body,#app{height:100%;width:100%;margin:0;padding:0;overflow:hidden}:global(body){font-size:15px;line-height:1.6;text-rendering:optimizeLegibility;}:global(*),:global(*::before),:global(*::after){box-sizing:border-box;margin:0;}.container{display:grid;grid-template-columns:1fr 320px;height:100%;width:100%;gap:16px;padding:16px;background:var(--bg-color-default);box-sizing:border-box;overflow:hidden;}.live{display:flex;flex-direction:column;background:var(--bg-color-operate);border-radius:12px;overflow:hidden;box-shadow:0 2px 8px var(--shadow-color);}.header{display:flex;align-items:center;gap:12px;padding:16px;border-bottom:1px solid var(--stroke-color-primary);}.back-btn{cursor:pointer;color:var(--text-color-tertiary);transition:color 0.2s;}.back-btn:hover{color:var(--text-color-link-hover);}.avatar{border:1px solid var(--uikit-color-white-7);}.user-name{color:var(--text-color-primary);font-weight:500;}.player{flex:1;background:var(--uikit-color-black-1);min-height:0;}.sidebar{display:flex;flex-direction:column;gap:16px;height:100%;overflow:hidden;}.audience{display:flex;flex-direction:column;background:var(--bg-color-operate);border-radius:12px;overflow:hidden;box-shadow:0 2px 8px var(--shadow-color);flex:1;min-height:0;}.barrage{display:flex;flex-direction:column;background:var(--bg-color-operate);border-radius:12px;overflow:hidden;box-shadow:0 2px 8px var(--shadow-color);flex:1;min-height:0;}.section-header{padding:16px;border-bottom:1px solid var(--stroke-color-primary);background:var(--bg-color-operate);}.section-header h3{margin:0;font-size:16px;font-weight:600;color:var(--text-color-primary);}.section-header span{font-weight:400;color:var(--text-color-secondary);font-size:14px;}.list{flex:1;min-height:0;overflow-y:auto;}.input{border-top:1px solid var(--stroke-color-primary);flex-shrink:0;height:48px;}@media (max-width:1200px){.container{grid-template-columns:1fr;grid-template-rows:60% 20% 20%;gap:12px;}.sidebar{gap:12px;}.audience,.barrage{min-height:200px;}}@media (max-width:768px){.container{padding:8px;gap:8px;grid-template-rows:50% 25% 25%;}.header,.section-header{padding:12px;}.sidebar{gap:8px;}}</style>
91
90
  ```
92
91
 
93
92
  ### 启动并运行示例
@@ -121,7 +121,6 @@ onMounted(async () => {
121
121
 
122
122
  </script>
123
123
 
124
- <style>html,body,#app{height:100%;width:100%;margin:0;padding:0;overflow:hidden}:global(body){font-size:15px;line-height:1.6;text-rendering:optimizeLegibility;}:global(*),:global(*::before),:global(*::after){box-sizing:border-box;margin:0;}.container{display:grid;grid-template-columns:1fr 320px;height:100%;width:100%;gap:16px;padding:16px;background:var(--bg-color-default);box-sizing:border-box;overflow:hidden;}.live{display:flex;flex-direction:column;background:var(--bg-color-operate);border-radius:12px;overflow:hidden;box-shadow:0 2px 8px var(--shadow-color);}.header{display:flex;align-items:center;gap:12px;padding:16px;border-bottom:1px solid var(--stroke-color-primary);}.back-btn{cursor:pointer;color:var(--text-color-tertiary);transition:color 0.2s;}.back-btn:hover{color:var(--text-color-link-hover);}.avatar{border:1px solid var(--uikit-color-white-7);}.user-name{color:var(--text-color-primary);font-weight:500;}.player{flex:1;background:var(--uikit-color-black-1);min-height:0;}.sidebar{display:flex;flex-direction:column;gap:16px;height:100%;overflow:hidden;}.audience{display:flex;flex-direction:column;background:var(--bg-color-operate);border-radius:12px;overflow:hidden;box-shadow:0 2px 8px var(--shadow-color);flex:1;min-height:0;}.barrage{display:flex;flex-direction:column;background:var(--bg-color-operate);border-radius:12px;overflow:hidden;box-shadow:0 2px 8px var(--shadow-color);flex:1;min-height:0;}.section-header{padding:16px;border-bottom:1px solid var(--stroke-color-primary);background:var(--bg-color-operate);}.section-header h3{margin:0;font-size:16px;font-weight:600;color:var(--text-color-primary);}.section-header span{font-weight:400;color:var(--text-color-secondary);font-size:14px;}.list{flex:1;min-height:0;overflow-y:auto;}.input{border-top:1px solid var(--stroke-color-primary);flex-shrink:0;height:48px;}@media (max-width:1200px){.container{grid-template-columns:1fr;grid-template-rows:60% 20% 20%;gap:12px;}.sidebar{gap:12px;}.audience,.barrage{min-height:200px;}}@media (max-width:768px){.container{padding:8px;gap:8px;grid-template-rows:50% 25% 25%;}.header,.section-header{padding:12px;}.sidebar{gap:8px;}}</style>
125
124
  ```
126
125
 
127
126
  #### 核心 API 参数说明
@@ -122,8 +122,6 @@ onMounted(async () => {
122
122
 
123
123
  </script>
124
124
 
125
- <style>html,body,#app{height:100%;width:100%;margin:0;padding:0}</style>
126
- <style scoped>.custom-live-pusher,.left-panel{flex-direction:column;display:flex}.custom-live-pusher,.live-title{color:var(--text-color-primary)}.live-controls,.tools-section,.top-controls{backdrop-filter:blur(10px)}*{box-sizing:border-box;margin:0;padding:0}:global(::before){box-sizing:border-box;margin:0;padding:0}.layout-label,.template-options{margin-bottom:16px}:global(body){line-height:1.6;color:var(--text-color-primary);background:var(--bg-color-default)}.custom-live-pusher{height:100vh;width:100vw;background:linear-gradient(135deg,var(--bg-color-default) 0,var(--bg-color-function) 100%);overflow:hidden}.top-controls{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;background:var(--bg-color-operate);border-bottom:1px solid var(--stroke-color-primary);z-index:100;min-height:60px}.live-title{font-size:18px;font-weight:600;text-shadow:0 2px 4px var(--shadow-color)}.audience-count{font-size:14px;color:var(--text-color-error);background:var(--uikit-color-red-1);padding:6px 12px;border-radius:20px;border:1px solid var(--uikit-color-red-3)}.live-controls,.tools-section{background:var(--bg-color-operate)}.main-content{display:flex;flex:1;height:calc(100vh - 60px);gap:16px;padding:16px;overflow:hidden}.left-panel{width:320px;gap:16px;flex-shrink:0}.panel-title{font-size:16px;font-weight:600;color:var(--text-color-primary);margin-bottom:12px;text-align:left}.audience-section,.message-section,.scene-section{display:flex;flex-direction:column;background:var(--bg-color-operate);border-radius:12px;border:1px solid var(--stroke-color-primary);padding:16px;overflow:hidden}.scene-section{flex:1;min-height:0}.message-section{flex:1;min-height:0}.message-section :deep(input),.message-section :deep(textarea){text-align:left}.tools-section{border-radius:12px;padding:16px;border:1px solid var(--stroke-color-primary)}.center-panel{display:flex;flex-direction:column;flex:1;gap:16px;min-width:0}.stream-section{display:flex;flex-direction:column;flex:1;min-height:0;background:var(--bg-color-operate);border-radius:12px;border:1px solid var(--stroke-color-primary);overflow:hidden}.stream-header{display:flex;justify-content:space-between;align-items:center;padding:22px;border-bottom:1px solid var(--stroke-color-primary)}.stream-title{display:flex;align-items:center;gap:8px;font-size:18px;font-weight:500;color:var(--text-color-primary)}.stream-audience{font-size:14px;color:var(--text-color-primary)}.live-controls{display:flex;justify-content:space-between;align-items:center;padding:16px;border-radius:12px;border:1px solid var(--stroke-color-primary);gap:16px}.live-controls button{padding:18px 20px}.right-panel{display:flex;flex-direction:column;width:320px;gap:16px;flex-shrink:0}.center-panel>.live-controls,.left-panel>*,.right-panel>*{background:var(--bg-color-operate);border-radius:12px;border:1px solid var(--stroke-color-primary);overflow:hidden}.left-panel>*{padding:16px}.left-panel>.panel-title,.scene-section>.panel-title,.audience-section>.panel-title,.message-section>.panel-title{padding:0;background:transparent;border:none;border-radius:0}.custom-icon-container,.device-setting{padding:8px 12px;background:var(--bg-color-function)}.stream-section :deep(>*:last-child){flex:1;min-height:300px}.bottom-panel,.device-setting{align-items:center;display:flex}.custom-icon-container:hover,.option-card:hover{border-color:var(--stroke-color-primary);background:var(--list-color-hover)}.bottom-panel{gap:16px;flex:1}.device-setting{gap:8px;border-radius:8px;border:1px solid var(--stroke-color-secondary)}.device-icon{cursor:pointer;color:var(--text-color-primary);transition:color .2s}.device-icon:hover{color:var(--text-color-link)}.device-slider{width:80px}.custom-icon-container{display:flex;align-items:center;gap:6px;border-radius:8px;border:1px solid var(--stroke-color-secondary);cursor:pointer;transition:.2s;position:relative}.custom-icon-container.disabled{opacity:.5;cursor:not-allowed}.custom-icon-container.disabled:hover{background:var(--bg-color-function);border-color:var(--stroke-color-secondary)}.custom-icon{width:16px;height:16px;display:inline-block;background-size:contain;background-repeat:no-repeat;background-position:center}.custom-text{font-size:12px;color:var(--text-color-secondary);white-space:nowrap}.unread-count{position:absolute;top:-4px;right:-4px;background:var(--text-color-error);color:var(--text-color-button);border-radius:10px;padding:2px 6px;font-size:10px;font-weight:600;min-width:16px;text-align:center;line-height:1}.layout-label,.option-info h4{color:var(--text-color-primary)}.layout-dialog{max-width:600px}.layout-label{font-size:16px;font-weight:600}.options-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px}.option-card{padding:16px;background:var(--bg-color-function);border:2px solid var(--stroke-color-secondary);border-radius:8px;cursor:pointer;transition:.2s;text-align:center}.option-card.active{border-color:var(--text-color-link);background:var(--bg-color-operate)}.option-info h4{margin:8px 0 0;font-size:12px}.option-icon{width:32px;height:32px;margin:0 auto;color:var(--text-color-secondary)}.co-guest-dialog{max-width:500px}.co-guest-panel{min-height:300px}</style>
127
125
  ```
128
126
 
129
127
  ### 启动并运行示例
@@ -144,6 +142,10 @@ npm run dev
144
142
  > 观看请使用与开播端不同的用户 ID,否则先登录的设备会被强制下线。
145
143
  >
146
144
 
145
+ ## AI 助手:知识咨询与代码集成
146
+
147
+ 您在接入直播与语聊 SDK 过程中,可以通过 MCP 使用 AI 助手,快速完成知识咨询、报错排查和集成代码生成。支持 Web/Android/iOS/Flutter/uni-app/HarmonyOS 等平台,答案基于官方文档。适用于查询 AtomicXCore SDK、UI 组件用法、集成文档等场景,[立即体验,提出您的第一个问题](https://cloud.tencent.com/document/product/647/129285)。
148
+
147
149
  ## 功能模块
148
150
 
149
151
  以下模块均为可独立复制的组件,需要先通过 集成主播开播页面,然后根据您的业务需求将下列各个模块的代码直接粘贴进对应的注释部分去即可。
@@ -228,8 +230,6 @@ watch(outputVolume, (newVal) => {
228
230
  });
229
231
  </script>
230
232
 
231
- <style scoped>.media-device-container{display:flex;align-items:center;gap:12px}.device-setting{display:flex;align-items:center;gap:8px;padding:12px 16px;background:var(--bg-color-function);border-radius:8px;border:1px solid var(--stroke-color-secondary)}.device-slider{width:100px}.device-icon{cursor:pointer;color:var(--text-color-primary);transition:color .2s}.device-icon:hover{color:var(--text-color-link)}</style>
232
-
233
233
  ```
234
234
 
235
235
  ### 支持横竖屏推流能力
@@ -303,7 +303,6 @@ const handleOrientationSwitch = () => {
303
303
  };
304
304
  </script>
305
305
 
306
- <style scoped>.custom-icon-container{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;width:56px;height:56px;cursor:pointer;color:var(--text-color-primary);border-radius:12px;position:relative}.custom-icon{width:24px;height:24px;background:transparent}.custom-text{font-size:12px}.custom-icon-container:not(.disabled):hover{box-shadow:0 0 10px 0 var(--bg-color-mask)}.custom-icon-container:not(.disabled):hover .custom-icon,.custom-icon-container:not(.disabled):hover .custom-text{color:var(--text-color-link)}.custom-icon-container.disabled{cursor:not-allowed;opacity:.5;color:var(--text-color-secondary)}.custom-icon-container.disabled .custom-icon,.custom-icon-container.disabled .custom-text{color:var(--text-color-secondary);cursor:not-allowed}</style>
307
306
  ```
308
307
 
309
308
  TUILiveKit 支持横屏和竖屏两种推流模式,您可根据直播场景选择合适的推流方向:
@@ -528,9 +527,6 @@ function handleCancel() {
528
527
  }
529
528
  </script>
530
529
 
531
- <style scoped>
532
- .custom-icon-container { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; width: 56px; height: 56px; cursor: pointer; color: var(--text-color-primary); border-radius: 12px; position: relative; } .custom-icon-container .custom-icon { display: inline-block; width: 24px; height: 24px; background: transparent; } .custom-icon-container .custom-text { font-size: 12px; font-weight: 400; } .custom-icon-container:not(.disabled):hover { box-shadow: 0 0 10px 0 var(--bg-color-mask); } .custom-icon-container:not(.disabled):hover .custom-icon { color: var(--text-color-link); } .custom-icon-container:not(.disabled):hover .custom-text { color: var(--text-color-link); } .custom-icon-container.disabled { cursor: not-allowed; opacity: 0.5; color: var(--text-color-tertiary); } .custom-icon-container.disabled .custom-icon { color: var(--text-color-tertiary); cursor: not-allowed; } .custom-icon-container.disabled .custom-text { color: var(--text-color-tertiary); } :deep(.layout-dialog) { padding: 24px; width: 480px; } :deep(.layout-dialog) .dialog-body { flex-wrap: wrap; } :deep(.layout-dialog) .dialog-footer { padding-top: 32px; } .layout-label { font-size: 14px; font-weight: 400; color: var(--text-color-primary, #ffffff); margin: 4px 0px 16px 0px; } .template-options { width: 100%; height: 100%; overflow: auto; } .template-options .options-grid { display: flex; flex-wrap: wrap; gap: 16px; justify-content: flex-start; } .template-options .options-grid .option-card { box-sizing: border-box; padding: 12px 13px; width: 208px; background: #3a3a3a; border: 2px solid transparent; border-radius: 12px; cursor: pointer; transition: all 0.2s ease; text-align: center; } .template-options .options-grid .option-card:hover { background: #4a4a4a; border-color: #5a5a5a; } .template-options .options-grid .option-card.active { border: 2px solid var(--text-color-link-hover, #2B6AD6); background: var(--list-color-focused, #243047); } .template-options .options-grid .option-card.active .option-info h4 { color: #ffffff; } .template-options .options-grid .option-card .option-info { display: flex; align-items: center; justify-content: flex-start; gap: 8px; } .template-options .options-grid .option-card .option-info .option-icon { width: 24px; height: 24px; } .template-options .options-grid .option-card .option-info h4 { margin: 0; font-size: 14px; font-weight: 600; color: #ffffff; transition: color 0.2s ease; }
533
- </style>
534
530
  ```
535
531
 
536
532
  #### 直播布局模板介绍
@@ -634,7 +630,6 @@ watch(disabled, () => {
634
630
  });
635
631
  </script>
636
632
 
637
- <style scoped>.custom-icon-container{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;width:56px;height:56px;cursor:pointer;color:var(--text-color-primary);border-radius:12px;position:relative}.unread-count{position:absolute;top:0;right:0;background-color:var(--text-color-error);border-radius:50%;width:16px;height:16px;display:flex;align-items:center;justify-content:center;font-size:12px}.custom-icon{width:24px;height:24px;background:transparent}.custom-text{font-size:12px}.custom-icon-container:not(.disabled):hover{box-shadow:0 0 10px 0 var(--bg-color-mask)}.custom-icon-container:not(.disabled):hover .custom-icon,.custom-icon-container:not(.disabled):hover .custom-text{color:var(--text-color-link)}.custom-icon-container.disabled{cursor:not-allowed;opacity:.5;color:var(--text-color-secondary)}.custom-icon-container.disabled .custom-icon{cursor:not-allowed}.custom-icon-container.disabled .custom-text{color:var(--text-color-secondary)}.co-guest-panel{height:560px}:deep(.co-guest-dialog){width:520px}</style>
638
633
  ```
639
634
 
640
635
  ## 自由定制