@tencentcloud/sdk-mcp 1.6.8 → 1.7.0

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 (98) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +54 -35
  3. package/knowledge/build-index.js +28 -4
  4. package/knowledge/chunker.js +82 -14
  5. package/knowledge/chunking-policy.js +100 -0
  6. package/knowledge/frontmatter-meta.js +167 -0
  7. package/knowledge/path-meta.js +28 -6
  8. package/knowledge/search/exact-lookup.js +26 -123
  9. package/knowledge/search/filter-pool.js +12 -29
  10. package/knowledge/search/framework-fallback.js +22 -0
  11. package/knowledge/search/intent-router.js +13 -0
  12. package/knowledge/search/query-normalizer.js +56 -3
  13. package/knowledge/search/search-core.js +391 -0
  14. package/knowledge/search/search-knowledge.js +290 -361
  15. package/knowledge/search/search-message.js +87 -0
  16. package/knowledge/search/search-pass.js +428 -0
  17. package/knowledge/search/search-types.js +1 -0
  18. package/knowledge/search/url-row-scorer.js +258 -0
  19. package/package.json +1 -1
  20. package/resource/index/manifest.json +1 -1
  21. package/resource/integration/callkit/preset/ios/integration.md +1 -0
  22. package/resource/integration/chat/preset/flutter/integration.md +1 -0
  23. package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +11 -9
  24. package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +11 -11
  25. package/resource/knowledge/callkit/best-practice/callkit-miniprogram/uniapp-shrink.md +64 -0
  26. package/resource/knowledge/callkit/best-practice/common/call-autoplay-blocked.md +81 -0
  27. package/resource/knowledge/callkit/best-practice/common/call-message-in-chat.md +84 -0
  28. package/resource/knowledge/callkit/best-practice/common/call-vs-calls.md +114 -0
  29. package/resource/knowledge/callkit/best-practice/common/callengine-call-flow.md +128 -0
  30. package/resource/knowledge/callkit/best-practice/common/callengine-log-level.md +72 -0
  31. package/resource/knowledge/callkit/best-practice/common/callkit-get-engine-instance.md +87 -0
  32. package/resource/knowledge/callkit/best-practice/common/callkit-get-roomid.md +83 -0
  33. package/resource/knowledge/callkit/best-practice/common/callkit-limitations.md +37 -0
  34. package/resource/knowledge/callkit/best-practice/common/callkit-user-register-and-kicked.md +103 -0
  35. package/resource/knowledge/callkit/preset/react/api.md +1 -150
  36. package/resource/knowledge/callkit/preset/vue/api.md +1 -38
  37. package/resource/knowledge/chat/best-practice/common/avchatroom-message-loss-diagnosis.md +71 -0
  38. package/resource/knowledge/chat/best-practice/common/group-conversation-cleanup-on-system-notice.md +67 -0
  39. package/resource/knowledge/chat/best-practice/common/image-message-url-lifecycle.md +63 -0
  40. package/resource/knowledge/chat/best-practice/common/login-repeat-2025-diagnosis.md +65 -0
  41. package/resource/knowledge/chat/best-practice/common/message-read-report-and-receipt.md +72 -0
  42. package/resource/knowledge/chat/best-practice/common/message-receive-event.md +70 -0
  43. package/resource/knowledge/chat/best-practice/common/message-risk-error-and-render.md +69 -0
  44. package/resource/knowledge/chat/best-practice/common/message-unread-count.md +71 -0
  45. package/resource/knowledge/chat/best-practice/miniprogram/audio-message-send.md +118 -0
  46. package/resource/knowledge/chat/best-practice/miniprogram/login-timeout-2801-diagnosis.md +67 -0
  47. package/resource/knowledge/chat/best-practice/miniprogram/media-upload-fail-diagnosis.md +68 -0
  48. package/resource/knowledge/chat/best-practice/web/audio-message-send.md +123 -0
  49. package/resource/knowledge/chat/preset/android/features/conversation-list.md +1 -0
  50. package/resource/knowledge/chat/preset/android/features/language.md +1 -0
  51. package/resource/knowledge/chat/preset/android/features/message-input.md +1 -0
  52. package/resource/knowledge/chat/preset/android/features/message-list.md +1 -0
  53. package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +1 -0
  54. package/resource/knowledge/chat/preset/flutter/features/message-input.md +1 -0
  55. package/resource/knowledge/chat/preset/flutter/features/message-list.md +1 -0
  56. package/resource/knowledge/chat/preset/ios/features/conversation-list.md +1 -0
  57. package/resource/knowledge/chat/preset/ios/features/message-input.md +1 -0
  58. package/resource/knowledge/chat/preset/ios/features/message-list.md +1 -0
  59. package/resource/knowledge/chat/preset/react/features/conversation-preview.md +1 -0
  60. package/resource/knowledge/chat/urls/sdk/web.md +1 -1
  61. package/resource/knowledge/livekit/best-practice/android/voice-room-anchor-start.md +124 -0
  62. package/resource/knowledge/livekit/best-practice/common/admin-take-seat.md +73 -0
  63. package/resource/knowledge/livekit/best-practice/common/audience-leave-live.md +81 -0
  64. package/resource/knowledge/livekit/best-practice/common/voice-room-no-audio-troubleshoot.md +100 -0
  65. package/resource/knowledge/livekit/best-practice/common/voice-room-seat-list-change.md +65 -0
  66. package/resource/knowledge/livekit/best-practice/flutter/voice-room-anchor-start.md +126 -0
  67. package/resource/knowledge/livekit/best-practice/ios/voice-room-anchor-start.md +130 -0
  68. package/resource/knowledge/push/config/react-native.md +1 -0
  69. package/resource/knowledge/push/config/unity.md +1 -0
  70. package/resource/knowledge/push/config/unreal-engine.md +1 -0
  71. package/resource/knowledge/push/integration/android.md +16 -16
  72. package/resource/knowledge/push/integration/flutter.md +3 -3
  73. package/resource/knowledge/push/integration/ios.md +3 -3
  74. package/resource/knowledge/push/integration/react-native.md +1 -1
  75. package/resource/knowledge/roomkit/best-practice/common/room-ghost-member.md +75 -0
  76. package/resource/knowledge/roomkit/best-practice/common/room-limit-and-multi.md +88 -0
  77. package/resource/knowledge/roomkit/best-practice/common/room-screen-share-preview.md +87 -0
  78. package/resource/knowledge/roomkit/best-practice/common/room-status-after-all-leave.md +73 -0
  79. package/resource/knowledge/roomkit/best-practice/vue/room-uikit-vs-atomicx.md +115 -0
  80. package/resource/knowledge/rtcengine/web/plugin/30-advanced-cross-room-link.md +2 -0
  81. package/resource/knowledge/rtcengine/web/plugin/39-advanced-video-decoder.md +2 -0
  82. package/server.js +8 -3
  83. package/tools/common/finalize_answer.js +9 -1
  84. package/tools/common/search_trtc_knowledge.js +1 -1
  85. package/tools/definitions/finalize_answer_def.js +2 -2
  86. package/tools/definitions/integration-boundary.js +2 -1
  87. package/tools/definitions/search_trtc_knowledge_def.js +1 -1
  88. package/utils/report-cls-client.js +1 -1
  89. package/utils/report-es-client.js +1 -1
  90. package/cursor-setting.png +0 -0
  91. package/mcp-server-prompt.png +0 -0
  92. package/resource/knowledge/callkit/best-practice/web/callengine-invitation.md +0 -80
  93. package/resource/knowledge/callkit/best-practice/web/callengine-log-control.md +0 -20
  94. package/resource/knowledge/callkit/best-practice/web/callkit-call-vs-calls.md +0 -116
  95. package/resource/knowledge/callkit/preset/react/uikit-api-reference.md +0 -469
  96. package/resource/knowledge/callkit/preset/vue/uikit-api-reference.md +0 -581
  97. package/resource/knowledge/callkit/preset/web/api.md +0 -79
  98. package/resource/knowledge/chat/best-practice/web/image-message-url-handling.md +0 -16
@@ -393,3 +393,4 @@ TUICallKit.createInstance().enableMuteMode(enable: true)
393
393
  ### Xcode 出现 **Sandbox: rsync** 编译报错?
394
394
 
395
395
  可以在 **Build Settings** 中把 **User Script Sandboxing** 设置为 **NO:**
396
+
@@ -2,6 +2,7 @@ TUIKit Flutter 是基于腾讯云 IM SDK 的一套 Flutter UI 组件库,提供
2
2
 
3
3
  ## 问卷反馈
4
4
 
5
+ > **说明:**
5
6
  > **花 30 秒,帮 Flutter TUIKit 变得更好用!**
6
7
  >
7
8
  > 正在接入、已经跑通、还是卡住了?都欢迎你填写 [Flutter TUIKit 接入体验问卷](https://wj.qq.com/s2/27299252/ff84/)**。**
@@ -12,11 +12,11 @@
12
12
 
13
13
  ### 前提条件
14
14
 
15
- 请您先阅读准备工作,请确保集成对应组件并实现登录。
15
+ 请您先阅读 准备工作,请确保集成对应组件并实现登录。
16
16
 
17
17
  ### 集成观众观看页面
18
18
 
19
- 新建`live-player.vue`,作为观看页面的入口,负责播放直播画面、切换分辨率、画中画等,您根据指引按需引入观看端的各功能模块。将以下代码复制到该文件即可:
19
+ 新建 `live-player.vue`,作为观看页面的入口,负责播放直播画面、切换分辨率、画中画等,您根据指引按需引入观看端的各功能模块。将以下代码复制到该文件即可:
20
20
  ``` typescript
21
21
  <template>
22
22
  <UIKitProvider language="zh-CN" theme="dark">
@@ -92,18 +92,20 @@ onMounted(async () => {
92
92
 
93
93
  ### 启动并运行示例
94
94
 
95
- 执行 `npm run dev` 成功后,在浏览器地址栏输入本地访问地址(例如`https://localhost:5173/live-player`,具体端口号可能因项目配置不同而有所差异),即可看到观看页面,输入对应的房间号(**liveId**),即可观看对应的直播间画面。
95
+ 执行 `npm run dev` 成功后,在浏览器地址栏输入本地访问地址(例如 `https://localhost:5173/live-player`,具体端口号可能因项目配置不同而有所差异),即可看到观看页面,输入对应的房间号(**liveId**),即可观看对应的直播间画面。
96
96
  ``` bash
97
97
  npm run dev
98
98
  ```
99
99
 
100
- > **开启直播的两种方式**
100
+ > **开启直播的两种方式:**
101
101
  >
102
- > 集成观看页面成功后,可通过以下任一方式开播效果:
102
+ > 集成观看页面成功后,可通过以下任一方式体验开播效果:
103
103
  >
104
104
  > - 在线开播网站:打开[在线开播网站](https://web.sdk.qcloud.com/trtc/livekit/pusher/index.html#/),输入对应 **sdkAppId** 等信息,点击直播列表右上角的**开始直播**按钮进入开播页面,开始一场直播。
105
105
  > - 集成开播页面:在您的项目中接入 主播开播(Web 桌面浏览器)组件进行开播。
106
- > ⚠️ 观看请使用与开播端不同的用户 ID,否则先登录的设备会被强制下线。
106
+
107
+ > **注意:**
108
+ > 观看请使用与开播端不同的用户 ID,否则先登录的设备会被强制下线。
107
109
  >
108
110
 
109
111
  ## UI 自由定制
@@ -130,8 +132,8 @@ import { UIKitProvider } from '@tencentcloud/uikit-base-component-vue3';
130
132
  | <strong>类别</strong> | <strong>功能</strong> | <strong>描述</strong> | <strong>组件详细定制指引</strong> |
131
133
  | --- | --- | --- | --- |
132
134
  | <strong>素材管理</strong> | 自定义素材管理区域展示 | <strong>支持:</strong><br>- <strong>调整展示 Icon 的大小、颜色或对 Icon 进行替换。</strong> | <a href="https://cloud.tencent.com/document/product/647/123838">媒体源配置面板</a> |
133
- | <strong>在线观众</strong> | 自定义观众信息展示 | <strong>支持:</strong><br>- <strong>展示/隐藏观众等级。</strong><br>- <strong>观众信息字体、颜色 UI 自定义设置。</strong><br>- <strong>替换为您需要的 Icon 风格。</strong> | <a href="https://cloud.tencent.com/document/product/647/123834">视频源编辑画板</a> |
134
- | <strong>消息列表</strong> | 自定义消息弹幕区域展示 | <strong>支持:</strong><br>- <strong>展示/隐藏聊天输入区域。</strong><br>- <strong>支持 UI 定制聊天气泡风格、定制观众等级等内容。</strong> | <a href="https://cloud.tencent.com/document/product/647/123836">聊天弹幕组件</a> |
135
+ | <strong>在线观众</strong> | 自定义观众信息展示 | <strong>支持:</strong><br>- <strong>展示或隐藏观众等级。</strong><br>- <strong>观众信息字体、颜色 UI 自定义设置。</strong><br>- <strong>替换为您需要的 Icon 风格。</strong> | <a href="https://cloud.tencent.com/document/product/647/123834">视频源编辑画板</a> |
136
+ | <strong>消息列表</strong> | 自定义消息弹幕区域展示 | <strong>支持:</strong><br>- <strong>展示或隐藏聊天输入区域。</strong><br>- <strong>支持 UI 定制聊天气泡风格、定制观众等级等内容。</strong> | <a href="https://cloud.tencent.com/document/product/647/123836">聊天弹幕组件</a> |
135
137
 
136
138
  ## 常见问题
137
139
 
@@ -141,7 +143,7 @@ import { UIKitProvider } from '@tencentcloud/uikit-base-component-vue3';
141
143
 
142
144
  #### 自动播放失败表现
143
145
 
144
- 当用户对该站点的媒体互动指数 (MEI, Media Engagement Index) 未达到阈值时,企图自动播放有声视频会失败。在 SDK 默认情况下,当检测到自动播放失败时,会弹窗引导用户与页面产生交互(如点击**确认**按钮)。产生交互后,浏览器策略即被满足,有声视频即可正常播放。
146
+ 当用户对该站点的媒体互动指数 (MEI, Media Engagement Index) 未达到阈值时,企图自动播放有声视频会失败。在 SDK 默认情况下,当检测到自动播放失败时,会弹窗引导用户与页面产生交互(例如点击**确认**按钮)。产生交互后,浏览器策略即被满足,有声视频即可正常播放。
145
147
 
146
148
  #### 解决方案:自定义处理自动播放失败
147
149
 
@@ -12,11 +12,11 @@
12
12
 
13
13
  ### 前提条件
14
14
 
15
- 请您先阅读准备工作,请确保集成对应组件并实现登录。
15
+ 请您先阅读 准备工作,请确保集成对应组件并实现登录。
16
16
 
17
17
  ### 集成主播开播页面
18
18
 
19
- 新建`live-pusher.vue`,作为开播页面的入口,负责**整体布局**、**开播 / 停播**、**登录初始化**,并按需引入底部控制栏的各功能模块。将以下代码复制到该文件即可:
19
+ 新建 `live-pusher.vue`,作为开播页面的入口,负责**整体布局**、**开播 / 停播**、**登录初始化**,并按需引入底部控制栏的各功能模块。将以下代码复制到该文件即可:
20
20
  ``` typescript
21
21
  <template>
22
22
  <UIKitProvider language="zh-CN" theme="dark">
@@ -44,10 +44,10 @@
44
44
  </div>
45
45
  <div class="live-controls">
46
46
  <div class="bottom-panel">
47
- <!-- <MediaDeviceSetting />// 媒体设置能力请参考本文高级功能集成部分
48
- <CoGuestButton /> // 连麦观众能力请参考本文高级功能集成部分
49
- <OrientationSwitch /> // 布局设置请参考本文高级功能集成部分
50
- <LayoutSwitch /> // 横竖屏推流能力请参考本文高级功能集成部分 -->
47
+ <!-- <MediaDeviceSetting />// 媒体设置能力请参考本文功能模块集成部分
48
+ <CoGuestButton /> // 连麦观众能力请参考本文功能模块集成部分
49
+ <OrientationSwitch /> // 布局设置请参考本文功能模块集成部分
50
+ <LayoutSwitch /> // 横竖屏推流能力请参考本文功能模块集成部分 -->
51
51
  </div>
52
52
  <TUIButton type="primary" v-if="!currentLive?.liveId" @click="handleStartLive">开始直播</TUIButton>
53
53
  <TUIButton color="red" v-else @click="handleStopLive">停止直播</TUIButton>
@@ -128,7 +128,7 @@ onMounted(async () => {
128
128
 
129
129
  ### 启动并运行示例
130
130
 
131
- 执行 `npm run dev` 成功后,在浏览器地址栏输入本地访问地址(例如`https://localhost:5173/live-pusher`,具体端口号可能因项目配置不同而有所差异),即可看到开播页面,添加媒体源素材点击开始直播即可开启您的直播。
131
+ 执行 `npm run dev` 成功后,在浏览器地址栏输入本地访问地址(例如 `https://localhost:5173/live-pusher`,具体端口号可能因项目配置不同而有所差异),即可看到开播页面,添加媒体源素材点击开始直播即可开启您的直播。
132
132
  ``` bash
133
133
  npm run dev
134
134
  ```
@@ -139,12 +139,14 @@ npm run dev
139
139
  >
140
140
  > - 在线观看网站:打开[在线观看网站](https://web.sdk.qcloud.com/trtc/livekit/player/index.html#/),输入对应 **sdkAppId** 等信息,在直播列表中找到并进入你的直播间。
141
141
  > - 集成观看页面:在您的项目中接入 观众观看(Web 桌面浏览器)或者 观众观看(H5 移动端浏览器)组件观看。
142
- > ⚠️ 观看请使用与开播端不同的用户 ID,否则先登录的设备会被强制下线。
142
+
143
+ > **注意:**
144
+ > 观看请使用与开播端不同的用户 ID,否则先登录的设备会被强制下线。
143
145
  >
144
146
 
145
147
  ## 功能模块
146
148
 
147
- 以下模块均为可独立复制的组件,需要先通过集成主播开播页面,然后根据您的业务需求将下列各个模块的代码直接粘贴进对应的注释部分去即可。
149
+ 以下模块均为可独立复制的组件,需要先通过 集成主播开播页面,然后根据您的业务需求将下列各个模块的代码直接粘贴进对应的注释部分去即可。
148
150
 
149
151
  ### 支持媒体设置能力
150
152
 
@@ -669,5 +671,3 @@ import { UIKitProvider } from '@tencentcloud/uikit-base-component-vue3';
669
671
  | --- | --- | --- |
670
672
  | <strong>观众观看</strong> | 实现观众进入主播的直播间后观看直播,实现观众连麦 、直播间信息、在线观众、弹幕显示等功能。 | 观众观看 |
671
673
  | <strong>直播列表</strong> | 展示直播列表界面和功能,包含直播列表,房间信息展示功能。 | 直播列表 |
672
-
673
- ###
@@ -0,0 +1,64 @@
1
+ ---
2
+ title: uniapp 打包微信小程序 TUICallKit 体积裁剪方案
3
+ product: call
4
+ frameworks: [miniprogram]
5
+ scope: platform_specific
6
+ tags: [TUICallKit, uniapp, 小程序, 体积裁剪, 插件裁剪, 瘦身, 移除插件, GroupCallView]
7
+ version_range: ">=4.0.0"
8
+ ---
9
+
10
+ # uniapp 打包微信小程序 TUICallKit 体积裁剪方案
11
+
12
+ ## 1. 核心结论
13
+
14
+ - TUICallKit 默认包含完整插件,核心通话引擎(375 KB)和 1v1 通话(111 KB)为必选模块,不可裁剪。
15
+ - 铃声插件(23 KB)和多人通话插件(27 KB)可按需移除,移除后不影响单人通话功能。
16
+ - 通过删除插件注册代码和对应 pages 配置实现裁剪。
17
+
18
+ ## 2. 字段语义对照
19
+
20
+ | 模块 | 大小 | 是否必选 | 移除方式 |
21
+ |---|---|---|---|
22
+ | 核心通话引擎 | 375 KB | 必选 | — |
23
+ | 1v1 单人通话 | 111 KB | 必选 | — |
24
+ | 铃声插件 | 23 KB | 可裁剪 | 删除 `this.registerPlugin(useRingPlugin())` |
25
+ | 多人通话插件 | 27 KB | 可裁剪 | 删除 `this.registerPlugin(useGroupCallPlugin())` + pages.json 中 `GroupCallView` 页面 |
26
+
27
+ ## 3. 机制/时序
28
+
29
+ TUICallKit 初始化时通过 `registerPlugin` 注册各功能插件 -> 插件被注册后打包进小程序代码 -> 删除对应注册代码后,该插件不会打包 -> 小程序包体积相应减小。
30
+
31
+ ## 4. 标准用法
32
+
33
+ 1. 在 TUICallKit 初始化代码中找到插件注册部分。
34
+ 2. 删除 `this.registerPlugin(useRingPlugin())` 移除铃声插件。
35
+ 3. 删除 `this.registerPlugin(useGroupCallPlugin())` 移除多人通话插件,同步删除 `pages.json` 中的 `GroupCallView` 页面配置。
36
+
37
+ ## 5. 结果判定
38
+
39
+ - 铃声插件移除后,通话中不再播放铃声提示,但通话功能不受影响。
40
+ - 多人通话插件移除后,无法发起和参与多人通话,单人通话正常。
41
+ - 小程序打包后体积减少约 50 KB。
42
+ - 功能正常:单人通话(发起、接听、挂断)完整可用。
43
+
44
+ ## 6. 常见误区
45
+
46
+ - 误区 1:试图移除核心通话引擎或 1v1 模块(必选,移除后无法通话)。
47
+ - 误区 2:只删除插件注册代码,忘记同步删除 `pages.json` 中的 `GroupCallView` 页面配置,导致编译报错。
48
+ - 误区 3:认为裁剪后还能使用多人通话功能(移除多人通话插件后只能使用单人通话)。
49
+
50
+ ## 7. 问题定义(检索辅助,极简)
51
+
52
+ uniapp 打包微信小程序时,TUICallKit 默认插件过多导致包体积大,希望按需移除不必要的功能模块。
53
+
54
+ ## 8. 同义问法覆盖(检索召回,极简)
55
+
56
+ - TUICallKit 小程序怎么瘦身?
57
+ - uniapp TUICallKit 如何移除铃声插件?
58
+ - TUICallKit 多人通话怎么裁剪?
59
+ - 微信小程序 TUICallKit 包太大怎么优化?
60
+ - 删除 `GroupCallView` 后多人通话还能用吗?
61
+
62
+ ## 9. 参考来源(可选)
63
+
64
+ - 微信小程序 TUICallKit(uniapp)文档:`https://cloud.tencent.com/document/product/647/78912#802b0c00-0ea7-4ca3-8892-62f47f06c92d`
@@ -0,0 +1,81 @@
1
+ ---
2
+ title: Web TUICallKit 弹出"恢复播放"弹窗的原因与处理
3
+ product: call
4
+ frameworks: [react, vue, web]
5
+ scope: platform_common
6
+ tags: [TUICallKit, 恢复播放, 自动播放, webview, autoplay, enableAutoPlayDialog, callExperimentalAPI, 无声, vue2.6, vue2.7, vue3]
7
+ version_range: ">=4.0.0"
8
+ ---
9
+
10
+ # Web TUICallKit 弹出"恢复播放"弹窗的原因与处理
11
+
12
+ ## 1. 核心结论
13
+
14
+ - 浏览器限制自动播放:在用户与网页产生交互前禁止播放带声音的媒体,Web TUICallKit 检测到播放失败后弹出"恢复播放"弹窗,需用户点击"恢复"。
15
+ - 此问题多出现在 webview 中(如 App 内嵌 H5)。
16
+ - 不推荐关闭该弹窗,关闭后可能出现无声问题。如需关闭可通过 `callExperimentalAPI` 设置 `enableAutoPlayDialog: 0`。
17
+
18
+ ## 2. 字段语义对照
19
+
20
+ | 字段/能力 | 作用 | 说明 |
21
+ |---|---|---|
22
+ | `enableAutoPlayDialog` | 自动播放弹窗开关 | `1` 开启(默认),`0` 关闭 |
23
+ | `callExperimentalAPI` | 调用实验性 API | 通过 TRTC 实例调用,用于设置 `enableAutoPlayDialog` |
24
+ | `getTUICallEngineInstance()` | 获取 TUICallEngine 实例 | 从 `TUICallKitAPI` 获取底层引擎 |
25
+ | `getTRTCCloudInstance()` | 获取 TRTC 实例 | 从 TUICallEngine 获取 TRTC 云实例 |
26
+
27
+ ## 3. 机制/时序
28
+
29
+ 用户进入通话页面 -> TUICallKit 尝试自动播放音频 -> 浏览器拦截自动播放 -> 播放失败 -> TUICallKit 弹出"恢复播放"弹窗 -> 用户点击"恢复" -> 音频正常播放。
30
+
31
+ webview 场景下,因宿主 App 对自动播放的限制更严格,此问题更容易出现。
32
+
33
+ ## 4. 标准用法
34
+
35
+ 不推荐关闭该弹窗。如业务场景确定需要关闭:
36
+
37
+ 1. 从 `TUICallKitAPI` 获取 TUICallEngine 实例。
38
+ 2. 从 TUICallEngine 获取 TRTC 云实例。
39
+ 3. 通过 TRTC 实例的 `callExperimentalAPI` 设置 `enableAutoPlayDialog: 0`。
40
+
41
+ ```javascript
42
+ // React: @trtc/calls-uikit-react
43
+ // Vue 3: @trtc/calls-uikit-vue
44
+ // Vue 2.7: @trtc/calls-uikit-vue2
45
+ // Vue 2.6: @trtc/calls-uikit-vue2.6 (API 一致,仅包名不同)
46
+ import { TUICallKitAPI } from "@trtc/calls-uikit-react";
47
+
48
+ const trtcCloudInstance = TUICallKitAPI?.getTUICallEngineInstance()?.getTRTCCloudInstance();
49
+ const params = {
50
+ api: 'enableAutoPlayDialog',
51
+ params: { enable: 0 },
52
+ };
53
+ trtcCloudInstance?.callExperimentalAPI(JSON.stringify(params));
54
+ ```
55
+
56
+ ## 5. 结果判定
57
+
58
+ - 不关闭弹窗:通话时弹出"恢复播放"提示,用户点击后音频正常播放。
59
+ - 关闭弹窗:通话时不再弹出提示,音频在浏览器允许后自动播放(若仍被拦截则无声)。
60
+
61
+ ## 6. 常见误区
62
+
63
+ - 误区 1:认为弹窗是 TUICallKit 的 bug(实际是浏览器自动播放限制策略)。
64
+ - 误区 2:直接关闭弹窗后期望所有场景都能正常播放(关闭弹窗不解除自动播放限制,无声问题仍可能发生)。
65
+ - 误区 3:在 TUICallKit 初始化前调用 `enableAutoPlayDialog`(需在获取到 TRTC 实例后调用)。
66
+
67
+ ## 7. 问题定义(检索辅助,极简)
68
+
69
+ Web TUICallKit 通话时弹出"恢复播放"弹窗,用户需点击才能听到声音,如何解决及是否可关闭弹窗。
70
+
71
+ ## 8. 同义问法覆盖(检索召回,极简)
72
+
73
+ - TUICallKit 通话没有声音怎么办?
74
+ - 为什么 TUICallKit 会弹出"恢复播放"提示?
75
+ - 如何关闭 TUICallKit 的自动播放弹窗?
76
+ - webview 中 TUICallKit 无声怎么处理?
77
+ - `enableAutoPlayDialog` 怎么设置?
78
+
79
+ ## 9. 参考来源(可选)
80
+
81
+ - TUICallKit Web 自动播放说明:`https://cloud.tencent.com/document/product/647/78769#066739b9-fb33-4f11-a21c-66edd91be64a`
@@ -0,0 +1,84 @@
1
+ ---
2
+ title: 在无 UI Chat SDK 项目中集成 TUICallKit 时如何显示音视频通话消息
3
+ product: call
4
+ frameworks: [react, vue, miniprogram, android, ios, flutter, uni-app, web]
5
+ scope: platform_common
6
+ tags: [TUICallKit, call-message, custom message, actionType, cmd, call_end, 通话消息渲染]
7
+ version_range: ">=2.0.0"
8
+ ---
9
+
10
+ # 在无 UI Chat SDK 项目中集成 TUICallKit 时如何显示音视频通话消息
11
+
12
+ ## 1. 核心结论
13
+
14
+ - 通话消息是 TUICallKit 通话过程中由后台通过 Chat REST API 补发的自定义消息,各平台可通过 Chat SDK 的消息接收事件或拉取历史消息获取。
15
+ - 通话过程中的实时状态(振铃、接听、挂断)由 TUICallKit 的事件监听处理,不依赖 Chat 消息。
16
+ - 通过 `actionType` 判断通话结果类型(挂断/取消/拒绝/超时),通过 `cmd` 区分语音/视频/忙线。
17
+ - 通话时长从 `call_end` 字段获取,单位秒。
18
+
19
+ ## 2. 字段语义对照
20
+
21
+ | 字段/能力 | 作用 | 说明 |
22
+ |---|---|---|
23
+ | `actionType` | 通话事件类型 | 1=发起/挂断,2=取消,3=接听,4=拒绝,5=超时未接听 |
24
+ | `cmd` | 通话指令细分 | `videoCall` 视频通话、`audioCall` 语音通话、`hangup` 挂断、`line_busy` 忙线 |
25
+ | `call_end` | 通话时长 | `actionType=1` 且 `cmd=hangup` 时存在,单位秒 |
26
+ | `MESSAGE_RECEIVED` | 消息接收事件 | Chat SDK 统一事件,含通话自定义消息 |
27
+ | `getMessageList` | 拉取历史消息 | 进入会话后拉取,通话消息也在返回列表中 |
28
+
29
+ ### actionType 与 cmd 对照表
30
+
31
+ | 场景 | actionType | cmd | 备注 |
32
+ |---|---|---|---|
33
+ | 发起通话 | 1 | `videoCall` 或 `audioCall` | 主叫发出 |
34
+ | 已接听 | 3 | — | 被叫接听后触发 |
35
+ | 通话已结束 | 1 | `hangup` | 有一方挂断;`call_end` 含通话时长 |
36
+ | 取消通话 | 2 | — | 主叫在接听前取消 |
37
+ | 拒绝通话 | 4 | — | 被叫主动拒绝 |
38
+ | 对端忙线 | 4 | `line_busy` | 被叫正在通话中 |
39
+ | 超时未接听 | 5 | — | 被叫在规定时间内未接听 |
40
+
41
+ ## 3. 机制/时序
42
+
43
+ 主叫发起通话 -> TUICallKit 通过信令通道(非 Chat 消息)建立通话连接 -> 通话过程中,每发生一次状态变化(取消/接听/拒绝/超时/挂断),TUICallKit 后台都会通过 REST API 向 Chat SDK 补发一条自定义消息 -> 双方通过 `MESSAGE_RECEIVED` 收到补发消息 -> 按 `actionType` 和 `cmd` 区分事件类型并更新 UI。
44
+
45
+ 通话过程本身(发起、接听、取消、拒绝、超时)不依赖 Chat 自定义消息通知;Chat 消息仅用于通话结束后在会话中展示通话记录。
46
+
47
+ ## 4. 标准用法
48
+
49
+ 1. 通过 Chat SDK 获取补发的通话自定义消息(监听消息接收事件或拉取历史消息,接口名因平台而异,但语义一致)。
50
+ 2. 读取 `message.actionType` 和 `message.cmd` 判断通话事件类型。
51
+ 3. 通话挂断消息(`actionType=1, cmd=hangup`)读取 `message.call_end` 显示通话时长。
52
+ 4. 其他 `actionType` 值用于判断通话未接通的原因(取消/拒绝/忙线/超时),更新 UI 展示。
53
+
54
+ ## 5. 结果判定
55
+
56
+ - 通话各状态变化后,能通过 Chat SDK 收到补发的通话自定义消息。
57
+ - `actionType` 与 `cmd` 能正确反映通话状态变化。
58
+ - `call_end` 值准确反映通话实际时长。
59
+ - `actionType` 与 `cmd` 能正确反映通话状态变化。
60
+ - `call_end` 值准确反映通话实际时长。
61
+
62
+ ## 6. 常见误区
63
+
64
+ - 误区 1:将通话消息当作普通自定义消息处理,没有读取 `actionType` 做状态区分。
65
+ - 误区 2:只处理 `MESSAGE_RECEIVED`,不处理 `getMessageList` 拉取的离线通话消息。
66
+ - 误区 3:通话时长从消息的 `timestamp` 差值计算(应直接从 `call_end` 字段读取)。
67
+ - 误区 4:未处理 `line_busy` 场景,导致忙线被当作普通拒绝。
68
+
69
+ ## 7. 问题定义(检索辅助,极简)
70
+
71
+ 在无 UI Chat SDK 项目中集成 TUICallKit,如何通过 Chat SDK 获取并渲染音视频通话消息(发起/接听/挂断/取消/拒绝/超时/忙线)。
72
+
73
+ ## 8. 同义问法覆盖(检索召回,极简)
74
+
75
+ - TUICallKit 通话消息怎么解析?
76
+ - `actionType` 各值代表什么意思?
77
+ - 通话结束后怎么拿到通话时长?
78
+ - `MESSAGE_RECEIVED` 收到通话消息怎么区分是发起还是挂断?
79
+ - 如何判断被叫忙线?
80
+ - 小程序中通话消息和 Web 端解析方式一样吗?
81
+
82
+ ## 9. 参考来源(可选)
83
+
84
+ - 音视频通话信令字段说明:`https://cloud.tencent.com/document/product/647/84363`
@@ -0,0 +1,114 @@
1
+ ---
2
+ title: TUICallKit React/Vue 发起音视频通话:calls 与 call/groupCall 的区别与用法
3
+ product: call
4
+ frameworks: [react, vue, web]
5
+ scope: platform_common
6
+ tags: [call, calls, groupCall, userIDList, TUICallKit, init, v4.x, calls-uikit, vue2, vue2.6, vue2.7, vue3, call和calls区别, callMediaType, 参数1和2, 数字字面量, 通话类型, 枚举常量, 发起通话]
7
+ version_range: ">=4.0.0"
8
+ ---
9
+
10
+ # TUICallKit React/Vue 发起音视频通话:calls 与 call/groupCall 的区别与用法
11
+
12
+ ## 1. 核心结论
13
+
14
+ - TUICallKit React / Vue **v4.x 必须使用 `calls`** 发起单聊/多人通话。
15
+ - `call`、`groupCall` 在 v4.0.0 起已废弃。
16
+ - 发起通话前必须先完成 `init`,否则会出现调用失败或状态异常。
17
+ - `type` 推荐使用 `CallMediaType` 枚举常量,不建议继续使用数字字面量(1/2)作为主写法。
18
+ - `userIDList` 必须传数组(单聊也是传数组);需要和 Chat 群联动时再传 `chatGroupID`。
19
+
20
+ ## 2. 字段语义对照
21
+
22
+ | 字段/能力 | 作用 | 说明 |
23
+ |---|---|---|
24
+ | `TUICallKitAPI` | v4.x 入口对象 | 从 `@trtc/calls-uikit-{react\|vue}` 引入,替代旧版 `TUICallKitServer` |
25
+ | `calls` | 发起通话(v4.x) | 单聊/多人通话统一入口,
26
+ | `call` / `groupCall` | 发起通话(旧版) | v4.0.0 前使用,v4.x 已废弃 |
27
+ | `CallMediaType` | 通话媒体类型枚举 | `AUDIO` 语音、`VIDEO` 视频 |
28
+ | `roomID` / `strRoomID` | 房间号 | 互斥,两者选一;不要混用 |
29
+
30
+ ## 3. 机制/时序
31
+
32
+ 初始化 -> 登录 -> 调用 `calls` 发起通话 -> 等待被叫接听 -> 通话建立 -> 通话结束。
33
+
34
+ v4.x 新项目直接从 `calls` 开始;旧项目迁移时需将 `call`/`groupCall` 替换为 `calls`,并将 `TUICallKitServer` 替换为 `TUICallKitAPI`。
35
+
36
+ ## 4. 标准用法
37
+
38
+ 1. 从对应平台的包引入 `TUICallKitAPI`。
39
+ 2. 调用 `TUICallKitAPI.init({ SDKAppID, userID, userSig })` 完成初始化。
40
+ 3. 调用 `TUICallKitAPI.calls({ userIDList, type })` 发起通话。
41
+ 4. 在 `catch` 分支处理通话发起失败的情况。
42
+
43
+ ```javascript
44
+ // React: @trtc/calls-uikit-react
45
+ // Vue 3: @trtc/calls-uikit-vue
46
+ // Vue 2.7: @trtc/calls-uikit-vue2
47
+ // Vue 2.6: @trtc/calls-uikit-vue2.6 (API 一致,仅包名不同)
48
+ import { TUICallKitAPI } from "@trtc/calls-uikit-react";
49
+
50
+ // 1. 初始化
51
+ TUICallKitAPI.init({ SDKAppID, userID, userSig });
52
+
53
+ // 2. 发起通话(单聊或多人)
54
+ try {
55
+ await TUICallKitAPI.calls({
56
+ userIDList: ['jack', 'tom'],
57
+ type: CallMediaType.VIDEO_CALL
58
+ });
59
+ } catch (error: any) {
60
+ console.error(`[TUICallKit] Failed to call. Reason:${error}`);
61
+ }
62
+ ```
63
+
64
+ `calls` 参数说明:
65
+
66
+ | 参数 | 类型 | 是否必填 | 含义 |
67
+ |---|---|---|---|
68
+ | userIDList | Array\<String\> | 是 | 被呼叫的用户列表 |
69
+ | type | CallMediaType | 是 | 通话的媒体类型(`AUDIO`/`VIDEO`) |
70
+ | chatGroupID | String | 否 | Chat 群组 ID |
71
+ | roomID | Number | 否 | 数字房间号,范围 [1, 2147483647] |
72
+ | strRoomID | String | 否 | 字符串房间号。与 roomID 互斥,两者都填时优先 roomID |
73
+ | timeout | Number | 否 | 通话超时时间,默认 30s,范围 10s-600s |
74
+ | userData | String | 否 | 自定义扩展字段,被叫可在 `ON_CALL_RECEIVED` 中获取 |
75
+ | offlinePushInfo | Object | 否 | 自定义离线消息推送参数 |
76
+
77
+ CallMediaType 取值:
78
+
79
+ | CallMediaType 类型 | 常量值 | 描述 |
80
+ |---|---|---|
81
+ | `CallMediaType.AUDIO` | 1 | 语音通话 |
82
+ | `CallMediaType.VIDEO` | 2 | 视频通话 |
83
+
84
+ ## 5. 结果判定
85
+
86
+ - `TUICallKitAPI.calls` 调用成功后,被叫用户能收到通话邀请。
87
+ - 被叫接听后通话建立,双方可正常音视频通话。
88
+ - 通话超时或被叫拒绝时,`catch` 分支能收到明确错误信息。
89
+
90
+ ## 6. 常见误区
91
+
92
+ - 误区 1:在 v4.x 里继续调用 `call` / `groupCall`(已废弃,不会报错但功能不完整)。
93
+ - 误区 2:把单聊写成 `userID` 字段而不是 `userIDList`(v4.x 不再支持单字符串传参)。
94
+ - 误区 3:`roomID` 与 `strRoomID` 混用(两者互斥且不互通)。
95
+ - 误区 4:`type` 长期使用数字字面量(1/2)而非 `CallMediaType` 枚举常量。
96
+
97
+ ## 7. 问题定义(检索辅助,极简)
98
+
99
+ TUICallKit React/Vue v4.x 用户询问如何发起音视频通话,以及 `calls` 与旧版 `call`/`groupCall` 的区别与迁移方式。
100
+
101
+ ## 8. 同义问法覆盖(检索召回,极简)
102
+
103
+ - TUICallKit React/Vue 怎么发起通话?
104
+ - `calls` 和 `call` 有什么区别?
105
+ - v4.x 的 `userIDList` 参数怎么传?
106
+ - `CallMediaType` 和数字 1/2 可以混用吗?
107
+ - 旧项目从 `TUICallKitServer.call` 迁移到 `TUICallKitAPI.calls` 要注意什么?
108
+ - `call` 传入的 `type` 参数 1 和 2 分别代表什么?
109
+ - `callMediaType` 参数 1 和 2 代表语音还是视频?
110
+ - TUICallKit 通话类型数字 1 和 2 是什么意思?
111
+
112
+ ## 9. 参考来源(可选)
113
+
114
+ - TUICallKit React/Vue:`https://cloud.tencent.com/document/product/647/81015`
@@ -0,0 +1,128 @@
1
+ ---
2
+ title: TUICallEngine 通话邀请接收与发起流程
3
+ product: call
4
+ frameworks: [web, miniprogram]
5
+ scope: platform_common
6
+ tags: [TUICallEngine, ON_CALL_RECEIVED, calls, accept, reject, 通话邀请, call-engine-lite, userData, callMediaType]
7
+ version_range: ">=4.0.0"
8
+ ---
9
+
10
+ # TUICallEngine 通话邀请接收与发起流程
11
+
12
+ ## 1. 核心结论
13
+
14
+ - 接收通话邀请只监听 `TUICallEvent.ON_CALL_RECEIVED`,**不要监听 Chat SDK 的 `MESSAGE_RECEIVED` 自行解析通话邀请**。
15
+ - 发起通话使用 `TUICallEngine.calls()`,参数中 `userIDList` 传数组、`type` 传媒体类型。
16
+ - 收到邀请后用 `accept()` 接听或 `reject()` 拒绝,扩展信息通过 `userData` 字符串传递。
17
+ - Web 与小程序接口一致,仅包名不同(Web: `@trtc/call-engine-lite-js`,小程序: `@trtc/call-engine-lite-wx`)。
18
+
19
+ ## 2. 字段语义对照
20
+
21
+ | 字段/能力 | 作用 | 说明 |
22
+ |---|---|---|
23
+ | `TUICallEvent.ON_CALL_RECEIVED` | 接收通话邀请事件 | 被叫收到来电时触发,不要从 Chat 自定义消息解析 |
24
+ | `calls({userIDList, type, ...})` | 发起通话 | 主叫调用,单聊/多人通话统一入口 |
25
+ | `accept()` | 接听通话 | 被叫在收到邀请后调用 |
26
+ | `reject()` | 拒绝通话 | 被叫在收到邀请后调用 |
27
+ | `userData` | 自定义扩展信息 | 主叫传入的字符串,被叫从 `ON_CALL_RECEIVED` 事件中读取 |
28
+ | `callMediaType` | 通话媒体类型 | `ON_CALL_RECEIVED` 事件中携带,1=语音、2=视频 |
29
+ | `inviteID` | 邀请 ID | 标识一次通话邀请,用于关联后续事件 |
30
+ | `callId` | 通话 ID | 本次通话的唯一标识 |
31
+ | `callRole` | 角色 | 主叫(`call`)/ 被叫(`called`) |
32
+
33
+ ### ON_CALL_RECEIVED 事件字段
34
+
35
+ | 参数 | 类型 | 含义 |
36
+ |---|---|---|
37
+ | callerId | String | 邀请者 |
38
+ | calleeIdList | Array\<String\> | 同时还被邀请的人 |
39
+ | isFromGroup | Boolean | 是否是群组通话 |
40
+ | inviteData | Object | 呼叫数据 |
41
+ | inviteID | String | 邀请 ID |
42
+ | userData | String | 扩展字段,主叫传入的自定义信息 |
43
+ | callId | String | 本次通话的唯一 ID |
44
+ | roomID | Number | 音视频房间 ID |
45
+ | callMediaType | Number | 通话媒体类型(1=语音,2=视频) |
46
+ | callRole | String | 角色:主叫/被叫 |
47
+
48
+ ### calls 参数说明
49
+
50
+ | 参数 | 类型 | 是否必填 | 含义 |
51
+ |---|---|---|---|
52
+ | userIDList | Array\<String\> | 是 | 被呼叫的用户列表 |
53
+ | type | Number | 是 | 1=语音,2=视频(`CallMediaType`) |
54
+ | userData | String | 否 | 自定义扩展信息,被叫可从 `ON_CALL_RECEIVED` 读取 |
55
+ | timeout | Number | 否 | 超时时间(秒),默认 30 |
56
+ | roomID | Number | 否 | 数字房间号,范围 [1, 2147483647] |
57
+ | strRoomID | String | 否 | 字符串房间号,与 roomID 互斥 |
58
+ | chatGroupID | String | 否 | Chat 群组 ID,群聊中多人通话时填写 |
59
+ | offlinePushInfo | Object | 否 | 自定义离线消息推送参数 |
60
+
61
+ ## 3. 机制/时序
62
+
63
+ 主叫调用 `calls()` 发起邀请 -> SDK 通过信令通道发送邀请 -> 被叫触发 `ON_CALL_RECEIVED` -> 被叫调用 `accept()` 接听或 `reject()` 拒绝 -> 通话建立/结束。
64
+
65
+ 通话过程中的实时状态变化通过 TUICallEngine 的事件监听处理,不依赖 Chat 消息。
66
+
67
+ ## 4. 标准用法
68
+
69
+ 1. 创建 `TUICallEngine` 实例并登录。
70
+ 2. 主叫调用 `calls()` 发起通话邀请。
71
+ 3. 被叫监听 `ON_CALL_RECEIVED` 事件,收到后调用 `accept()` 或 `reject()`。
72
+ 4. 扩展信息通过 `userData` 字符串传递,被叫从事件中读取。
73
+
74
+ ```javascript
75
+ // Web: @trtc/call-engine-lite-js
76
+ // 小程序: @trtc/call-engine-lite-wx (API 一致,仅包名不同)
77
+ import { TUICallEngine, TUICallEvent } from '@trtc/call-engine-lite-js';
78
+
79
+ // 创建实例并登录
80
+ const tuiCallEngine = TUICallEngine.createInstance({ SDKAppID: xxx, tim: timInstance });
81
+ await tuiCallEngine.login({ userID, userSig });
82
+
83
+ // 主叫:发起通话邀请
84
+ await tuiCallEngine.calls({
85
+ userIDList: ['user_bob'],
86
+ type: 2, // 1=语音 2=视频
87
+ userData: '{"ext":"info"}',
88
+ timeout: 30,
89
+ });
90
+
91
+ // 被叫:监听通话邀请
92
+ tuiCallEngine.on(TUICallEvent.ON_CALL_RECEIVED, (event) => {
93
+ console.log('来电', event);
94
+ // 展示接听 UI,随后调用 accept() 或 reject()
95
+ tuiCallEngine.accept({ inviteID: event.inviteID, roomID: event.roomID });
96
+ });
97
+ ```
98
+
99
+ ## 5. 结果判定
100
+
101
+ - 主叫调用 `calls()` 后,被叫能收到 `ON_CALL_RECEIVED` 事件。
102
+ - 被叫调用 `accept()` 后通话建立,`reject()` 后通话被拒绝。
103
+ - `userData` 在主叫传入后,被叫能从事件中正确读取。
104
+ - 通话过程中的其他事件(接听、挂断、超时等)通过 TUICallEngine 的事件机制正常触发。
105
+
106
+ ## 6. 常见误区
107
+
108
+ - 误区 1:监听 `MESSAGE_RECEIVED` 自行解析通话邀请(应使用 `ON_CALL_RECEIVED`)。
109
+ - 误区 2:使用 `businessID` / 底层 payload 格式等 SDK 内部字段(无官方公开文档,不要编造)。
110
+ - 误区 3:认为 `customData` 字段存在(v4.x 使用 `userData` 字符串传递自定义信息)。
111
+
112
+ ## 7. 问题定义(检索辅助,极简)
113
+
114
+ TUICallEngine Web/小程序用户需要了解如何接收通话邀请、发起通话以及传递自定义扩展信息。
115
+
116
+ ## 8. 同义问法覆盖(检索召回,极简)
117
+
118
+ - TUICallEngine 怎么接收通话邀请?
119
+ - TUICallEngine 怎么发起通话?
120
+ - `ON_CALL_RECEIVED` 各字段含义是什么?
121
+ - `calls` API 参数怎么填?
122
+ - TUICallEngine 如何传递自定义扩展信息?
123
+ - 小程序 TUICallEngine 通话邀请处理和 Web 端一样吗?
124
+
125
+ ## 9. 参考来源(可选)
126
+
127
+ - Web TUICallEngine:`https://cloud.tencent.com/document/product/647/78757`
128
+ - 小程序 TUICallEngine:`https://cloud.tencent.com/document/product/647/78761`