@tencent-rtc/mcp 1.4.7 → 1.6.0-beta.1

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 (552) hide show
  1. package/cursor-setting.png +0 -0
  2. package/knowledge/bm25-cache.js +74 -0
  3. package/knowledge/bm25-cache.js.map +1 -0
  4. package/knowledge/bm25.js +148 -0
  5. package/knowledge/bm25.js.map +1 -0
  6. package/knowledge/build-index.js +70 -0
  7. package/knowledge/build-index.js.map +1 -0
  8. package/knowledge/chunker.js +168 -0
  9. package/knowledge/chunker.js.map +1 -0
  10. package/knowledge/content-loader.js +40 -0
  11. package/knowledge/content-loader.js.map +1 -0
  12. package/knowledge/doc-url-resolver.js +143 -0
  13. package/knowledge/doc-url-resolver.js.map +1 -0
  14. package/knowledge/extractors.js +26 -0
  15. package/knowledge/extractors.js.map +1 -0
  16. package/knowledge/path-meta.js +185 -0
  17. package/knowledge/path-meta.js.map +1 -0
  18. package/knowledge/search/exact-lookup.js +498 -0
  19. package/knowledge/search/exact-lookup.js.map +1 -0
  20. package/knowledge/search/filter-pool.js +105 -0
  21. package/knowledge/search/filter-pool.js.map +1 -0
  22. package/knowledge/search/product-scope-intent.js +41 -0
  23. package/knowledge/search/product-scope-intent.js.map +1 -0
  24. package/knowledge/search/requires-framework.js +82 -0
  25. package/knowledge/search/requires-framework.js.map +1 -0
  26. package/knowledge/search/search-knowledge.js +230 -0
  27. package/knowledge/search/search-knowledge.js.map +1 -0
  28. package/mcp-server-prompt.png +0 -0
  29. package/package.json +1 -1
  30. package/resource/_schema/feature-aliases.yaml +10 -0
  31. package/resource/_schema/goal-tags.yaml +72 -0
  32. package/resource/_schema/products.yaml +19 -0
  33. package/resource/_schema/trtc-intents.yaml +27 -0
  34. package/resource/_schema/types.yaml +43 -0
  35. package/resource/index/component-slugs.json +1 -0
  36. package/resource/index/doc-source-urls.json +1 -0
  37. package/resource/index/manifest.json +1 -0
  38. package/resource/{doc → integration}/callkit/preset/android/integration.md +34 -28
  39. package/resource/integration/callkit/preset/flutter/integration.md +346 -0
  40. package/resource/integration/callkit/preset/ios/integration.md +408 -0
  41. package/resource/integration/callkit/preset/react/integration.md +362 -0
  42. package/resource/integration/callkit/preset/vue/integration.md +356 -0
  43. package/resource/integration/chat/preset/android/integration.md +500 -0
  44. package/resource/integration/chat/preset/flutter/integration.md +370 -0
  45. package/resource/integration/chat/preset/ios/integration.md +566 -0
  46. package/resource/integration/chat/preset/react/integration.md +490 -0
  47. package/resource/integration/chat/preset/vue/integration.md +504 -0
  48. package/resource/{doc → integration}/livekit/preset/live/vue/live-list-integration.md +26 -22
  49. package/resource/{doc → integration}/livekit/preset/live/vue/live-player-desk-integration.md +22 -18
  50. package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +309 -0
  51. package/resource/{doc → integration}/livekit/preset/live/vue/live-pusher-integration.md +47 -39
  52. package/resource/integration/roomkit/preset/vue/integration.md +562 -0
  53. package/resource/knowledge/callkit/core-sdk/android/answer-call.md +828 -0
  54. package/resource/knowledge/callkit/core-sdk/android/make-call.md +897 -0
  55. package/resource/knowledge/callkit/core-sdk/android/offline-push.md +363 -0
  56. package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +1111 -0
  57. package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +1132 -0
  58. package/resource/{doc → knowledge}/callkit/core-sdk/flutter/offline-push.md +174 -151
  59. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +1084 -0
  60. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +1252 -0
  61. package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +534 -0
  62. package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +953 -0
  63. package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +1061 -0
  64. package/resource/knowledge/callkit/faq/android.md +92 -0
  65. package/resource/{doc/callkit/faq/android-faq.md → knowledge/callkit/faq/common.md} +11 -12
  66. package/resource/knowledge/callkit/faq/error-code.md +67 -0
  67. package/resource/knowledge/callkit/faq/flutter.md +52 -0
  68. package/resource/knowledge/callkit/faq/ios.md +104 -0
  69. package/resource/knowledge/callkit/faq/web.md +74 -0
  70. package/resource/knowledge/callkit/preset/android/api.md +412 -0
  71. package/resource/knowledge/callkit/preset/flutter/api.md +22 -0
  72. package/resource/knowledge/callkit/preset/ios/api.md +234 -0
  73. package/resource/knowledge/callkit/preset/web/api.md +83 -0
  74. package/resource/knowledge/chat/preset/android/features/chat-setting.md +74 -0
  75. package/resource/knowledge/chat/preset/android/features/contact-list.md +43 -0
  76. package/resource/knowledge/chat/preset/android/features/conversation-list.md +117 -0
  77. package/resource/knowledge/chat/preset/android/features/language.md +136 -0
  78. package/resource/knowledge/chat/preset/android/features/message-input.md +57 -0
  79. package/resource/knowledge/chat/preset/android/features/message-list.md +142 -0
  80. package/resource/knowledge/chat/preset/android/features/search.md +64 -0
  81. package/resource/knowledge/chat/preset/android/features/theme.md +222 -0
  82. package/resource/knowledge/chat/preset/android-view/integration.md +300 -0
  83. package/resource/knowledge/chat/preset/flutter/features/chat-setting.md +64 -0
  84. package/resource/knowledge/chat/preset/flutter/features/contact-list.md +40 -0
  85. package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +129 -0
  86. package/resource/knowledge/chat/preset/flutter/features/language.md +104 -0
  87. package/resource/knowledge/chat/preset/flutter/features/message-input.md +54 -0
  88. package/resource/knowledge/chat/preset/flutter/features/message-list.md +158 -0
  89. package/resource/knowledge/chat/preset/flutter/features/search.md +59 -0
  90. package/resource/knowledge/chat/preset/flutter/features/theme.md +261 -0
  91. package/resource/knowledge/chat/preset/ios/features/chat-setting.md +94 -0
  92. package/resource/knowledge/chat/preset/ios/features/contact-list.md +119 -0
  93. package/resource/knowledge/chat/preset/ios/features/conversation-list.md +134 -0
  94. package/resource/knowledge/chat/preset/ios/features/language.md +125 -0
  95. package/resource/knowledge/chat/preset/ios/features/message-input.md +69 -0
  96. package/resource/knowledge/chat/preset/ios/features/message-list.md +162 -0
  97. package/resource/knowledge/chat/preset/ios/features/search.md +93 -0
  98. package/resource/knowledge/chat/preset/ios/features/theme.md +270 -0
  99. package/resource/{doc/chatkit/ios → knowledge/chat/preset/ios-uikit}/integration.md +160 -158
  100. package/resource/knowledge/chat/preset/react/features/chat-setting.md +101 -0
  101. package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/contact-list.md +43 -41
  102. package/resource/knowledge/chat/preset/react/features/conversation-actions.md +215 -0
  103. package/resource/knowledge/chat/preset/react/features/conversation-list.md +339 -0
  104. package/resource/knowledge/chat/preset/react/features/conversation-preview.md +101 -0
  105. package/resource/knowledge/chat/preset/react/features/conversation-search.md +61 -0
  106. package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/message-input.md +117 -156
  107. package/resource/knowledge/chat/preset/react/features/message-list.md +297 -0
  108. package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/search.md +65 -59
  109. package/resource/knowledge/chat/preset/react/features/theme.md +93 -0
  110. package/resource/knowledge/chat/preset/vue/features/chat-header.md +331 -0
  111. package/resource/knowledge/chat/preset/vue/features/chat-setting.md +79 -0
  112. package/resource/knowledge/chat/preset/vue/features/contact-list.md +277 -0
  113. package/resource/knowledge/chat/preset/vue/features/conversation-actions.md +234 -0
  114. package/resource/knowledge/chat/preset/vue/features/conversation-list.md +331 -0
  115. package/resource/knowledge/chat/preset/vue/features/conversation-preview.md +216 -0
  116. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-search.md +13 -13
  117. package/resource/knowledge/chat/preset/vue/features/message-input.md +551 -0
  118. package/resource/knowledge/chat/preset/vue/features/message-list.md +350 -0
  119. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/search.md +79 -73
  120. package/resource/knowledge/chat/preset/vue/features/theme.md +136 -0
  121. package/resource/knowledge/chat/urls/error-code.md +17 -0
  122. package/resource/knowledge/chat/urls/product.md +43 -0
  123. package/resource/knowledge/chat/urls/restapi.md +204 -0
  124. package/resource/knowledge/chat/urls/sdk/android.md +80 -0
  125. package/resource/knowledge/chat/urls/sdk/flutter.md +71 -0
  126. package/resource/knowledge/chat/urls/sdk/ios.md +80 -0
  127. package/resource/knowledge/chat/urls/sdk/web.md +80 -0
  128. package/resource/knowledge/chat/urls/webhook.md +68 -0
  129. package/resource/knowledge/livekit/core-sdk/api-reference/android/AudioEffectStore.md +286 -0
  130. package/resource/knowledge/livekit/core-sdk/api-reference/android/BarrageStore.md +174 -0
  131. package/resource/knowledge/livekit/core-sdk/api-reference/android/BattleStore.md +329 -0
  132. package/resource/knowledge/livekit/core-sdk/api-reference/android/CameraView.md +55 -0
  133. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoGuestStore.md +434 -0
  134. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoHostStore.md +362 -0
  135. package/resource/knowledge/livekit/core-sdk/api-reference/android/DeviceStore.md +466 -0
  136. package/resource/knowledge/livekit/core-sdk/api-reference/android/GiftStore.md +173 -0
  137. package/resource/knowledge/livekit/core-sdk/api-reference/android/LikeStore.md +51 -0
  138. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveAudienceStore.md +291 -0
  139. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveCoreView.md +78 -0
  140. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveSeatStore.md +488 -0
  141. package/resource/knowledge/livekit/core-sdk/api-reference/android/LoginStore.md +219 -0
  142. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/AudioEffectStore.md +282 -0
  143. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BarrageStore.md +212 -0
  144. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BaseBeautyStore.md +153 -0
  145. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BattleStore.md +312 -0
  146. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoGuestStore.md +404 -0
  147. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoHostStore.md +334 -0
  148. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/DeviceStore.md +426 -0
  149. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/GiftStore.md +166 -0
  150. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LikeStore.md +52 -0
  151. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveAudienceStore.md +281 -0
  152. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveCoreView.md +150 -0
  153. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveSeatStore.md +438 -0
  154. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LoginStore.md +190 -0
  155. package/resource/knowledge/livekit/core-sdk/api-reference/ios/AudioEffectStore.md +291 -0
  156. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BarrageStore.md +192 -0
  157. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BaseBeautyStore.md +146 -0
  158. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BattleStore.md +309 -0
  159. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoGuestStore.md +370 -0
  160. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoHostStore.md +339 -0
  161. package/resource/knowledge/livekit/core-sdk/api-reference/ios/DeviceStore.md +503 -0
  162. package/resource/knowledge/livekit/core-sdk/api-reference/ios/GiftStore.md +188 -0
  163. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LikeStore.md +51 -0
  164. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveAudienceStore.md +289 -0
  165. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveCoreView.md +78 -0
  166. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveSeatStore.md +487 -0
  167. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LoginStore.md +183 -0
  168. package/resource/knowledge/livekit/core-sdk/api-reference/web/index.md +736 -0
  169. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-audience-list.md +53 -47
  170. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-audio-effect.md +28 -24
  171. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-barrage.md +22 -18
  172. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-base-beauty.md +17 -15
  173. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-co-guest-interaction.md +19 -18
  174. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-gift.md +102 -89
  175. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-host-interaction.md +41 -37
  176. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-integration.md +45 -43
  177. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-live-list.md +23 -20
  178. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-audience-list.md +41 -41
  179. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-audio-effect.md +70 -69
  180. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-barrage.md +68 -71
  181. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-base-beauty.md +43 -47
  182. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-co-guest-interaction.md +59 -56
  183. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-gift.md +103 -105
  184. package/resource/knowledge/livekit/core-sdk/live/flutter/live-host-interaction.md +869 -0
  185. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-integration.md +84 -87
  186. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-live-list.md +43 -40
  187. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-audience-list.md +11 -10
  188. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-audio-effect.md +28 -24
  189. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-barrage.md +22 -18
  190. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-base-beauty.md +15 -14
  191. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-co-guest-interaction.md +19 -18
  192. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-gift.md +54 -50
  193. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-host-interaction.md +41 -37
  194. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-integration.md +40 -40
  195. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-live-list.md +19 -18
  196. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-audience-list.md +53 -47
  197. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-audio-effect.md +28 -24
  198. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-barrage.md +22 -18
  199. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-co-guest-interaction.md +41 -33
  200. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-gift.md +94 -81
  201. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-host-interaction.md +35 -30
  202. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-integration.md +45 -42
  203. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-room-list.md +23 -20
  204. package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audience-list.md +260 -0
  205. package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audio-effect.md +598 -0
  206. package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-barrage.md +490 -0
  207. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-co-guest-interaction.md +65 -59
  208. package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-gift.md +424 -0
  209. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-integration.md +69 -76
  210. package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-room-list.md +726 -0
  211. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-audience-list.md +11 -10
  212. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-audio-effect.md +28 -24
  213. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-barrage.md +22 -18
  214. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-co-guest-interaction.md +41 -33
  215. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-gift.md +54 -50
  216. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-host-interaction.md +35 -30
  217. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-integration.md +49 -46
  218. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-room-list.md +19 -18
  219. package/resource/knowledge/livekit/faq/error-code.md +193 -0
  220. package/resource/{doc/livekit/preset/live/vue/components → knowledge/livekit/preset/live/vue/features}/barrage.md +56 -53
  221. package/resource/{doc/livekit/preset/live/vue/components → knowledge/livekit/preset/live/vue/features}/live-audience-list.md +22 -21
  222. package/resource/{doc/livekit/preset/live/vue/components → knowledge/livekit/preset/live/vue/features}/live-view.md +34 -32
  223. package/resource/knowledge/push/config/android.md +92 -0
  224. package/resource/knowledge/push/config/harmonyos.md +83 -0
  225. package/resource/knowledge/push/config/ios.md +254 -0
  226. package/resource/knowledge/push/config/react-native.md +254 -0
  227. package/resource/knowledge/push/config/unity.md +209 -0
  228. package/resource/knowledge/push/config/unreal-engine.md +194 -0
  229. package/resource/knowledge/push/integration/android.md +404 -0
  230. package/resource/knowledge/push/integration/flutter.md +465 -0
  231. package/resource/knowledge/push/integration/harmonyos.md +63 -0
  232. package/resource/knowledge/push/integration/ios.md +246 -0
  233. package/resource/knowledge/push/integration/react-native.md +366 -0
  234. package/resource/knowledge/push/integration/uni-app.md +208 -0
  235. package/resource/knowledge/push/integration/unity.md +389 -0
  236. package/resource/knowledge/push/integration/unreal-engine.md +390 -0
  237. package/resource/knowledge/push/overview/prepare.md +60 -0
  238. package/resource/knowledge/roomkit/core-sdk/android/call-user-to-room.md +241 -0
  239. package/resource/knowledge/roomkit/core-sdk/android/room-participant-state.md +588 -0
  240. package/resource/knowledge/roomkit/core-sdk/android/room-state.md +364 -0
  241. package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +340 -0
  242. package/resource/knowledge/roomkit/core-sdk/flutter/call-user-to-room.md +230 -0
  243. package/resource/knowledge/roomkit/core-sdk/flutter/room-participant-state.md +797 -0
  244. package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +325 -0
  245. package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +325 -0
  246. package/resource/knowledge/roomkit/core-sdk/ios/call-user-to-room.md +233 -0
  247. package/resource/knowledge/roomkit/core-sdk/ios/room-participant-state.md +569 -0
  248. package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +325 -0
  249. package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +322 -0
  250. package/resource/knowledge/roomkit/core-sdk/vue/call-user-to-room.md +221 -0
  251. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/device-detection.md +49 -48
  252. package/resource/knowledge/roomkit/core-sdk/vue/device-state.md +461 -0
  253. package/resource/knowledge/roomkit/core-sdk/vue/free-beauty-panel.md +216 -0
  254. package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +370 -0
  255. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/room-participant-state.md +61 -60
  256. package/resource/knowledge/roomkit/core-sdk/vue/room-state.md +280 -0
  257. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/room-view.md +57 -56
  258. package/resource/knowledge/roomkit/core-sdk/vue/schedule-room.md +319 -0
  259. package/resource/knowledge/roomkit/core-sdk/vue/screen-share.md +267 -0
  260. package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +261 -0
  261. package/resource/knowledge/roomkit/preset/android/integration.md +396 -0
  262. package/resource/knowledge/roomkit/preset/flutter/integration.md +404 -0
  263. package/resource/knowledge/roomkit/preset/ios/integration.md +369 -0
  264. package/resource/knowledge/roomkit/preset/react/integration.md +576 -0
  265. package/resource/knowledge/rtcengine/web/how_to_run_web_sdk_demo.md +44 -0
  266. package/resource/{doc → knowledge}/rtcengine/web/plugin/21-advanced-auto-play-policy.md +8 -2
  267. package/resource/{doc → knowledge}/rtcengine/web/plugin/22-advanced-audio-mixer.md +19 -1
  268. package/resource/{doc → knowledge}/rtcengine/web/plugin/23-advanced-support-detection.md +1 -1
  269. package/resource/{doc → knowledge}/rtcengine/web/plugin/24-advanced-network-quality.md +8 -8
  270. package/resource/{doc → knowledge}/rtcengine/web/plugin/25-advanced-device-change.md +1 -1
  271. package/resource/{doc → knowledge}/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +6 -6
  272. package/resource/{doc → knowledge}/rtcengine/web/plugin/27-advanced-small-stream.md +3 -3
  273. package/resource/{doc → knowledge}/rtcengine/web/plugin/29-advanced-water-mark.md +18 -0
  274. package/resource/{doc → knowledge}/rtcengine/web/plugin/31-advanced-plugins-overview.md +1 -1
  275. package/resource/{doc → knowledge}/rtcengine/web/plugin/34-advanced-proxy.md +2 -2
  276. package/resource/{doc → knowledge}/rtcengine/web/plugin/35-advanced-ai-denoiser.md +1 -1
  277. package/resource/knowledge/trtc/android/TRTCCloud.md +1915 -0
  278. package/resource/knowledge/trtc/android/TRTCCloudDef.md +1029 -0
  279. package/resource/knowledge/trtc/android/TRTCCloudListener.md +1095 -0
  280. package/resource/knowledge/trtc/android/TRTCStatistics.md +68 -0
  281. package/resource/knowledge/trtc/android/TXAudioEffectManager.md +502 -0
  282. package/resource/knowledge/trtc/android/TXBeautyManager.md +415 -0
  283. package/resource/knowledge/trtc/android/TXDeviceManager.md +169 -0
  284. package/resource/knowledge/trtc/android/TXLiteAVCode.md +125 -0
  285. package/resource/knowledge/trtc/c++/ITRTCCloud.md +2069 -0
  286. package/resource/knowledge/trtc/c++/ITRTCStatistics.md +73 -0
  287. package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +502 -0
  288. package/resource/knowledge/trtc/c++/ITXDeviceManager.md +391 -0
  289. package/resource/knowledge/trtc/c++/TRTCCloudCallback.md +1191 -0
  290. package/resource/knowledge/trtc/c++/TRTCTypeDef.md +931 -0
  291. package/resource/knowledge/trtc/c++/TXLiteAVCode.md +127 -0
  292. package/resource/knowledge/trtc/ios/TRTCCloud.md +2118 -0
  293. package/resource/knowledge/trtc/ios/TRTCCloudDef.md +975 -0
  294. package/resource/knowledge/trtc/ios/TRTCCloudDelegate.md +1131 -0
  295. package/resource/knowledge/trtc/ios/TRTCStatistics.md +68 -0
  296. package/resource/knowledge/trtc/ios/TXAudioEffectManager.md +423 -0
  297. package/resource/knowledge/trtc/ios/TXBeautyManager.md +416 -0
  298. package/resource/knowledge/trtc/ios/TXDeviceManager.md +387 -0
  299. package/resource/knowledge/trtc/ios/TXLiteAVCode.md +127 -0
  300. package/server.js +35 -11
  301. package/server.js.map +1 -1
  302. package/tools/call/get_native_call_uikit_integration.js +2 -3
  303. package/tools/call/get_native_call_uikit_integration.js.map +1 -1
  304. package/tools/call/get_native_callkit_core_integration.js +2 -5
  305. package/tools/call/get_native_callkit_core_integration.js.map +1 -1
  306. package/tools/call/get_web_call_uikit_integration.js +2 -3
  307. package/tools/call/get_web_call_uikit_integration.js.map +1 -1
  308. package/tools/chat/get_native_chat_uikit_integration.js +2 -3
  309. package/tools/chat/get_native_chat_uikit_integration.js.map +1 -1
  310. package/tools/chat/get_web_chat_uikit_integration.js +2 -3
  311. package/tools/chat/get_web_chat_uikit_integration.js.map +1 -1
  312. package/tools/common/present_framework_choice.js +19 -13
  313. package/tools/common/present_framework_choice.js.map +1 -1
  314. package/tools/common/record_answer.js +19 -25
  315. package/tools/common/record_answer.js.map +1 -1
  316. package/tools/common/record_feedback.js +17 -30
  317. package/tools/common/record_feedback.js.map +1 -1
  318. package/tools/common/search_trtc_knowledge.js +45 -0
  319. package/tools/common/search_trtc_knowledge.js.map +1 -0
  320. package/tools/definitions/get_native_call_uikit_integration_def.js +3 -1
  321. package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
  322. package/tools/definitions/get_native_callkit_core_integration_def.js +5 -3
  323. package/tools/definitions/get_native_callkit_core_integration_def.js.map +1 -1
  324. package/tools/definitions/get_native_chat_uikit_integration_def.js +5 -2
  325. package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
  326. package/tools/definitions/get_native_livekit_core_integration_def.js +6 -5
  327. package/tools/definitions/get_native_livekit_core_integration_def.js.map +1 -1
  328. package/tools/definitions/get_web_call_uikit_integration_def.js +4 -2
  329. package/tools/definitions/get_web_call_uikit_integration_def.js.map +1 -1
  330. package/tools/definitions/get_web_chat_uikit_integration_def.js +2 -0
  331. package/tools/definitions/get_web_chat_uikit_integration_def.js.map +1 -1
  332. package/tools/definitions/get_web_live_uikit_integration_def.js +5 -5
  333. package/tools/definitions/get_web_live_uikit_integration_def.js.map +1 -1
  334. package/tools/definitions/get_web_room_core_integration_def.js +50 -0
  335. package/tools/definitions/get_web_room_core_integration_def.js.map +1 -0
  336. package/tools/definitions/get_web_room_uikit_integration_def.js +5 -4
  337. package/tools/definitions/get_web_room_uikit_integration_def.js.map +1 -1
  338. package/tools/definitions/integration-boundary.js +6 -0
  339. package/tools/definitions/integration-boundary.js.map +1 -0
  340. package/tools/definitions/present_framework_choice_def.js +12 -10
  341. package/tools/definitions/present_framework_choice_def.js.map +1 -1
  342. package/tools/definitions/record_answer_def.js +19 -17
  343. package/tools/definitions/record_answer_def.js.map +1 -1
  344. package/tools/definitions/record_feedback_def.js +14 -13
  345. package/tools/definitions/record_feedback_def.js.map +1 -1
  346. package/tools/definitions/search_trtc_knowledge_def.js +40 -0
  347. package/tools/definitions/search_trtc_knowledge_def.js.map +1 -0
  348. package/tools/index.js +5 -36
  349. package/tools/index.js.map +1 -1
  350. package/tools/live/get_native_livekit_core_integration.js +1 -3
  351. package/tools/live/get_native_livekit_core_integration.js.map +1 -1
  352. package/tools/live/get_web_live_uikit_integration.js +2 -4
  353. package/tools/live/get_web_live_uikit_integration.js.map +1 -1
  354. package/tools/room/get_web_room_core_integration.js +48 -0
  355. package/tools/room/get_web_room_core_integration.js.map +1 -0
  356. package/tools/room/get_web_room_uikit_integration.js +2 -3
  357. package/tools/room/get_web_room_uikit_integration.js.map +1 -1
  358. package/utils/generate-structured-result.js +24 -30
  359. package/utils/generate-structured-result.js.map +1 -1
  360. package/utils/get-doc-content.js +14 -8
  361. package/utils/get-doc-content.js.map +1 -1
  362. package/utils/report-cls-client.js +18 -20
  363. package/utils/report-cls-client.js.map +1 -1
  364. package/utils/report-es-client.js +1 -1
  365. package/resource/doc/callkit/core-sdk/.gitkeep +0 -0
  366. package/resource/doc/callkit/core-sdk/android/answer-call.md +0 -852
  367. package/resource/doc/callkit/core-sdk/android/make-call.md +0 -954
  368. package/resource/doc/callkit/core-sdk/android/offline-push.md +0 -361
  369. package/resource/doc/callkit/core-sdk/flutter/answer-call.md +0 -1160
  370. package/resource/doc/callkit/core-sdk/flutter/make-call.md +0 -1205
  371. package/resource/doc/callkit/core-sdk/ios/answer-call.md +0 -1090
  372. package/resource/doc/callkit/core-sdk/ios/make-call.md +0 -1248
  373. package/resource/doc/callkit/core-sdk/ios/offline-push.md +0 -485
  374. package/resource/doc/callkit/core-sdk/uni-app/answer-call.md +0 -950
  375. package/resource/doc/callkit/core-sdk/uni-app/make-call.md +0 -1052
  376. package/resource/doc/callkit/faq/common/error-code.md +0 -47
  377. package/resource/doc/callkit/faq/flutter-faq.md +0 -115
  378. package/resource/doc/callkit/faq/ios-faq.md +0 -115
  379. package/resource/doc/callkit/faq/web-faq.md +0 -36
  380. package/resource/doc/callkit/preset/android/api.md +0 -296
  381. package/resource/doc/callkit/preset/flutter/api.md +0 -410
  382. package/resource/doc/callkit/preset/flutter/integration.md +0 -164
  383. package/resource/doc/callkit/preset/ios/api.md +0 -80
  384. package/resource/doc/callkit/preset/ios/integration.md +0 -187
  385. package/resource/doc/callkit/preset/react/api.md +0 -501
  386. package/resource/doc/callkit/preset/react/integration.md +0 -86
  387. package/resource/doc/callkit/preset/vue/api.md +0 -501
  388. package/resource/doc/callkit/preset/vue/integration.md +0 -83
  389. package/resource/doc/chatkit/android/faq.md +0 -111
  390. package/resource/doc/chatkit/android/features/theme.md +0 -219
  391. package/resource/doc/chatkit/android/integration.md +0 -490
  392. package/resource/doc/chatkit/faq/android_sdk/client-api.md +0 -281
  393. package/resource/doc/chatkit/faq/common/product.md +0 -7
  394. package/resource/doc/chatkit/faq/common/server.md +0 -44
  395. package/resource/doc/chatkit/faq/common/server_error_code.md +0 -74
  396. package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +0 -199
  397. package/resource/doc/chatkit/faq/flutter_sdk/faq.md +0 -53
  398. package/resource/doc/chatkit/faq/ios_sdk/client-api.md +0 -235
  399. package/resource/doc/chatkit/faq/web_sdk/error_code.md +0 -47
  400. package/resource/doc/chatkit/faq/web_sdk/faq.md +0 -287
  401. package/resource/doc/chatkit/flutter/faq.md +0 -23
  402. package/resource/doc/chatkit/flutter/features/theme.md +0 -235
  403. package/resource/doc/chatkit/flutter/integration.md +0 -344
  404. package/resource/doc/chatkit/ios/faq.md +0 -111
  405. package/resource/doc/chatkit/ios/features/theme.md +0 -267
  406. package/resource/doc/chatkit/react/components/avatar.md +0 -104
  407. package/resource/doc/chatkit/react/components/chat-header.md +0 -148
  408. package/resource/doc/chatkit/react/components/chat-setting.md +0 -57
  409. package/resource/doc/chatkit/react/components/chat.md +0 -38
  410. package/resource/doc/chatkit/react/components/component-list.md +0 -37
  411. package/resource/doc/chatkit/react/components/conversation-actions.md +0 -174
  412. package/resource/doc/chatkit/react/components/conversation-list.md +0 -333
  413. package/resource/doc/chatkit/react/components/conversation-preview.md +0 -118
  414. package/resource/doc/chatkit/react/components/conversation-search.md +0 -60
  415. package/resource/doc/chatkit/react/components/message-list.md +0 -293
  416. package/resource/doc/chatkit/react/components/tuikit.md +0 -34
  417. package/resource/doc/chatkit/react/faq.md +0 -26
  418. package/resource/doc/chatkit/react/integration.md +0 -416
  419. package/resource/doc/chatkit/vue/components/avatar.md +0 -104
  420. package/resource/doc/chatkit/vue/components/chat-header.md +0 -148
  421. package/resource/doc/chatkit/vue/components/chat-setting.md +0 -62
  422. package/resource/doc/chatkit/vue/components/chat.md +0 -45
  423. package/resource/doc/chatkit/vue/components/component-list.md +0 -87
  424. package/resource/doc/chatkit/vue/components/contact-list.md +0 -271
  425. package/resource/doc/chatkit/vue/components/conversation-actions.md +0 -228
  426. package/resource/doc/chatkit/vue/components/conversation-list.md +0 -320
  427. package/resource/doc/chatkit/vue/components/conversation-preview.md +0 -213
  428. package/resource/doc/chatkit/vue/components/message-input.md +0 -1054
  429. package/resource/doc/chatkit/vue/components/message-list.md +0 -433
  430. package/resource/doc/chatkit/vue/components/tuikit.md +0 -31
  431. package/resource/doc/chatkit/vue/components/userpicker.md +0 -256
  432. package/resource/doc/chatkit/vue/faq.md +0 -36
  433. package/resource/doc/chatkit/vue/integration.md +0 -428
  434. package/resource/doc/livekit/core-sdk/live/flutter/live-host-interaction.md +0 -866
  435. package/resource/doc/livekit/faq/common/error-code.md +0 -88
  436. package/resource/doc/livekit/preset/live/vue/api-reference/index.md +0 -780
  437. package/resource/doc/livekit/preset/live/vue/components/co-guest-panel.md +0 -91
  438. package/resource/doc/livekit/preset/live/vue/components/live-scene-panel.md +0 -112
  439. package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +0 -215
  440. package/resource/doc/livekit/preset/live/vue/live-player-h5-integration.md +0 -300
  441. package/resource/doc/roomkit/faq/common/error-code.md +0 -67
  442. package/resource/doc/roomkit/vue/features/call-user-to-room.md +0 -220
  443. package/resource/doc/roomkit/vue/features/device-state.md +0 -460
  444. package/resource/doc/roomkit/vue/features/free-beauty-panel.md +0 -215
  445. package/resource/doc/roomkit/vue/features/room-chat.md +0 -369
  446. package/resource/doc/roomkit/vue/features/room-state.md +0 -282
  447. package/resource/doc/roomkit/vue/features/schedule-room.md +0 -318
  448. package/resource/doc/roomkit/vue/features/screen-share.md +0 -265
  449. package/resource/doc/roomkit/vue/features/virtual-background.md +0 -271
  450. package/resource/doc/roomkit/vue/integration.md +0 -315
  451. package/resource/doc/rtcengine/faq/common/error_code.md +0 -1
  452. package/resource/doc/rtcengine/faq/web_sdk/.gitkeep +0 -0
  453. package/resource/doc/rtcengine/web/.gitkeep +0 -0
  454. package/resource/doc/rtcengine/web/how_to_run_web_sdk_demo.md +0 -59
  455. package/resource/doc/trtc/C++/ITRTCCloud.md +0 -1970
  456. package/resource/doc/trtc/C++/ITRTCStatistics.md +0 -70
  457. package/resource/doc/trtc/C++/ITXAudioEffectManager.md +0 -469
  458. package/resource/doc/trtc/C++/ITXDeviceManager.md +0 -387
  459. package/resource/doc/trtc/C++/TRTCCloudCallback.md +0 -1082
  460. package/resource/doc/trtc/C++/TRTCTypeDef.md +0 -925
  461. package/resource/doc/trtc/C++/TXLiteAVCode.md +0 -129
  462. package/resource/doc/trtc/android/TRTCCloud.md +0 -1815
  463. package/resource/doc/trtc/android/TRTCCloudDef.md +0 -992
  464. package/resource/doc/trtc/android/TRTCCloudListener.md +0 -1004
  465. package/resource/doc/trtc/android/TRTCStatistics.md +0 -65
  466. package/resource/doc/trtc/android/TXAudioEffectManager.md +0 -469
  467. package/resource/doc/trtc/android/TXBeautyManager.md +0 -402
  468. package/resource/doc/trtc/android/TXDeviceManager.md +0 -173
  469. package/resource/doc/trtc/android/TXLiteAVCode.md +0 -127
  470. package/resource/doc/trtc/iOS/TRTCCloud.md +0 -2028
  471. package/resource/doc/trtc/iOS/TRTCCloudDef.md +0 -958
  472. package/resource/doc/trtc/iOS/TRTCCloudDelegate.md +0 -1046
  473. package/resource/doc/trtc/iOS/TRTCStatistics.md +0 -65
  474. package/resource/doc/trtc/iOS/TXAudioEffectManager.md +0 -397
  475. package/resource/doc/trtc/iOS/TXBeautyManager.md +0 -403
  476. package/resource/doc/trtc/iOS/TXDeviceManager.md +0 -381
  477. package/resource/doc/trtc/iOS/TXLiteAVCode.md +0 -130
  478. package/tools/call/get_callkit_api.js +0 -33
  479. package/tools/call/get_callkit_api.js.map +0 -1
  480. package/tools/chat/get_native_chat_uikit_feature_detail.js +0 -35
  481. package/tools/chat/get_native_chat_uikit_feature_detail.js.map +0 -1
  482. package/tools/chat/get_web_chat_uikit_component_detail.js +0 -35
  483. package/tools/chat/get_web_chat_uikit_component_detail.js.map +0 -1
  484. package/tools/common/get_faq.js +0 -266
  485. package/tools/common/get_faq.js.map +0 -1
  486. package/tools/common/record_skill_session.js +0 -69
  487. package/tools/common/record_skill_session.js.map +0 -1
  488. package/tools/definitions/get_callkit_api_def.js +0 -29
  489. package/tools/definitions/get_callkit_api_def.js.map +0 -1
  490. package/tools/definitions/get_faq_def.js +0 -47
  491. package/tools/definitions/get_faq_def.js.map +0 -1
  492. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js +0 -31
  493. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js.map +0 -1
  494. package/tools/definitions/get_native_livekit_core_features_def.js +0 -34
  495. package/tools/definitions/get_native_livekit_core_features_def.js.map +0 -1
  496. package/tools/definitions/get_native_trtc_sdk_docs_def.js +0 -32
  497. package/tools/definitions/get_native_trtc_sdk_docs_def.js.map +0 -1
  498. package/tools/definitions/get_web_chat_uikit_component_detail_def.js +0 -31
  499. package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +0 -1
  500. package/tools/definitions/get_web_livekit_api_def.js +0 -30
  501. package/tools/definitions/get_web_livekit_api_def.js.map +0 -1
  502. package/tools/definitions/get_web_livekit_component_detail_def.js +0 -32
  503. package/tools/definitions/get_web_livekit_component_detail_def.js.map +0 -1
  504. package/tools/definitions/get_web_roomkit_feature_detail_def.js +0 -31
  505. package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +0 -1
  506. package/tools/definitions/get_web_trtc_sdk_api_def.js +0 -27
  507. package/tools/definitions/get_web_trtc_sdk_api_def.js.map +0 -1
  508. package/tools/definitions/get_web_trtc_sdk_integration_def.js +0 -27
  509. package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +0 -1
  510. package/tools/definitions/get_web_trtc_sdk_plugin_def.js +0 -27
  511. package/tools/definitions/get_web_trtc_sdk_plugin_def.js.map +0 -1
  512. package/tools/definitions/record_skill_session_def.js +0 -31
  513. package/tools/definitions/record_skill_session_def.js.map +0 -1
  514. package/tools/live/get_native_livekit_core_features.js +0 -68
  515. package/tools/live/get_native_livekit_core_features.js.map +0 -1
  516. package/tools/live/get_web_livekit_api.js +0 -33
  517. package/tools/live/get_web_livekit_api.js.map +0 -1
  518. package/tools/live/get_web_livekit_component_detail.js +0 -35
  519. package/tools/live/get_web_livekit_component_detail.js.map +0 -1
  520. package/tools/room/get_web_roomkit_feature_detail.js +0 -69
  521. package/tools/room/get_web_roomkit_feature_detail.js.map +0 -1
  522. package/tools/rtcengine/get_web_trtc_sdk_api.js +0 -32
  523. package/tools/rtcengine/get_web_trtc_sdk_api.js.map +0 -1
  524. package/tools/rtcengine/get_web_trtc_sdk_integration.js +0 -32
  525. package/tools/rtcengine/get_web_trtc_sdk_integration.js.map +0 -1
  526. package/tools/rtcengine/get_web_trtc_sdk_plugin.js +0 -32
  527. package/tools/rtcengine/get_web_trtc_sdk_plugin.js.map +0 -1
  528. package/tools/trtc/get_native_trtc_sdk_docs.js +0 -74
  529. package/tools/trtc/get_native_trtc_sdk_docs.js.map +0 -1
  530. package/utils/build-session-directives.js +0 -120
  531. package/utils/build-session-directives.js.map +0 -1
  532. package/utils/handle-framework.js +0 -9
  533. package/utils/handle-framework.js.map +0 -1
  534. package/utils/handle-state-name.js +0 -29
  535. package/utils/handle-state-name.js.map +0 -1
  536. package/utils/report-runtime-error-cls-client.js +0 -91
  537. package/utils/report-runtime-error-cls-client.js.map +0 -1
  538. /package/resource/{doc/livekit/preset/live/vue/faq.md → knowledge/push/config/donut.md} +0 -0
  539. /package/resource/{doc/roomkit/vue/faq.md → knowledge/push/integration/donut.md} +0 -0
  540. /package/resource/{doc → knowledge}/rtcengine/web/api.md +0 -0
  541. /package/resource/{doc/rtcengine/faq/web/web.md → knowledge/rtcengine/web/faq.md} +0 -0
  542. /package/resource/{doc → knowledge}/rtcengine/web/how_to_integrated_web_sdk.md +0 -0
  543. /package/resource/{doc → knowledge}/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +0 -0
  544. /package/resource/{doc → knowledge}/rtcengine/web/plugin/28-advanced-beauty.md +0 -0
  545. /package/resource/{doc → knowledge}/rtcengine/web/plugin/30-advanced-cross-room-link.md +0 -0
  546. /package/resource/{doc → knowledge}/rtcengine/web/plugin/36-advanced-virtual-background.md +0 -0
  547. /package/resource/{doc → knowledge}/rtcengine/web/plugin/37-advanced-voice-changer.md +0 -0
  548. /package/resource/{doc → knowledge}/rtcengine/web/plugin/39-advanced-video-decoder.md +0 -0
  549. /package/resource/{doc → knowledge}/rtcengine/web/plugin/40-advanced-video-mixer.md +0 -0
  550. /package/resource/{doc → knowledge}/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +0 -0
  551. /package/resource/{doc → knowledge}/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +0 -0
  552. /package/resource/{doc → knowledge}/rtcengine/web/plugin/43-advanced-face-detection.md +0 -0
@@ -1,1160 +0,0 @@
1
- This document will guide you through integrating the **AtomicXCore SDK** components — **DeviceStore**, **CallStore**, and the core widget **CallCoreView** — to quickly implement call answering functionality.
2
-
3
- ## Core Features
4
-
5
- To build multi-party audio/video call scenarios with **AtomicXCore**, use these three core modules:
6
-
7
- | **Module** | **Description** |
8
- | --- | --- |
9
- | [CallCoreView](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_view_call_call_core_view/CallCoreView-class.html) | Core call view widget. Automatically listens to CallStore data and renders the call UI, with automatic layout switching for 1-on-1 and group calls. |
10
- | [CallStore](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallStore-class.html) | Manages the call lifecycle, including dialing, answering, rejecting, and hanging up. Provides real-time participant audio/video status, call duration, call history, and other data. |
11
- | [DeviceStore](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_device_device_store/DeviceStore-class.html) | Controls audio/video devices: microphone (toggle/volume), camera (toggle/switch/quality), screen sharing, and real-time device status monitoring. |
12
-
13
- ## Getting Started
14
-
15
- ### Step 1: Activate the Service
16
-
17
- Follow the **Activate the Service** guide to obtain either a trial or paid version of the SDK.
18
-
19
- ### Step 2: Integrate the SDK
20
-
21
- **Install the package:** In your project root, run the following command to install the `atomic_x_core` plugin.
22
-
23
- ```bash
24
- flutter pub add atomic_x_core
25
- ```
26
-
27
- ### Step 3: Initialization and Login
28
-
29
- #### Android Configuration
30
-
31
- 1. Because the SDK uses Java reflection internally, you must add certain SDK classes to your ProGuard keep list.
32
-
33
- Edit your project's `build.gradle.kts` (or `build.gradle`) in the `android/app/` directory to enable ProGuard rules:
34
-
35
- **build.gradle.kts:**
36
-
37
- ```kotlin
38
- android {
39
- buildTypes {
40
- release {
41
- isMinifyEnabled = true
42
- proguardFiles(
43
- getDefaultProguardFile("proguard-android.txt"),
44
- "proguard-rules.pro"
45
- )
46
- }
47
- }
48
- }
49
- ```
50
-
51
- **build.gradle:**
52
-
53
- ```groovy
54
- android {
55
- buildTypes {
56
- release {
57
- minifyEnabled true
58
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
59
- }
60
- }
61
- }
62
- ```
63
-
64
- Create a `proguard-rules.pro` file in your `android/app` directory and add:
65
-
66
- ```proguard
67
- -keep class com.tencent.** { *; }
68
- ```
69
-
70
- 2. (Optional) To use CallKit's floating window feature outside the app, enable system Picture-in-Picture.
71
-
72
- In your `AndroidManifest.xml`, set `android:supportsPictureInPicture="true"` for `MainActivity`:
73
-
74
- ```xml
75
- <manifest xmlns:android="http://schemas.android.com/apk/res/android">
76
- <application>
77
- <activity
78
- android:name=".MainActivity"
79
- android:supportsPictureInPicture="true"
80
- </activity>
81
- </application>
82
- </manifest>
83
- ```
84
-
85
- #### iOS Configuration
86
-
87
- Since `tencent_rtc_sdk` uses Flutter FFI, Xcode's symbol stripping during Release builds may remove TRTC C symbols, causing `symbol not found` errors. To fix:
88
-
89
- 1. In Xcode **Build Settings**, set **Deployment Postprocessing** to **Yes**.
90
- 2. Set **Strip Style** for **Release** to **Non-Global Symbols**.
91
-
92
- #### Initialize and Log in
93
-
94
- Before you can answer calls, complete these steps in order:
95
-
96
- 1. **Create `CallStore`:** `CallStore.shared` initializes the call data layer.
97
- 2. **Log in the user:** call `LoginStore.shared.login(sdkAppId, userId, userSig)` to complete IM login.
98
- 3. **Initialize the call engine:** call `TUICallEngine.instance.init(sdkAppId, userId, userSig)` to initialize the TRTC call signaling engine (**required**; omitting this may prevent calls from being placed or received correctly).
99
-
100
- Example:
101
-
102
- ```dart
103
- import 'package:atomic_x_core/atomicxcore.dart';
104
- import 'package:rtc_room_engine/api/call/tui_call_engine.dart';
105
-
106
- Future<void> _login() async {
107
- int sdkAppId = 1400000001; // Replace with your SDKAppID
108
- String userId = 'test_001'; // Replace with your UserID
109
- String userSig = 'xxxxxxxxxxx'; // Use a temporary userSig during development; when MCP is configured with sdkAppId and sdkSecretKey, the tool can issue it for you
110
-
111
- CallStore.shared;
112
- final result = await LoginStore.shared.login(sdkAppId, userId, userSig);
113
- TUICallEngine.instance.init(sdkAppId, userId, userSig);
114
- if (result.isSuccess) {
115
- // Login successful
116
- debugPrint('login success');
117
- } else {
118
- // Login failed
119
- debugPrint('login failed, code: ${result.code}, message: ${result.message}');
120
- }
121
- }
122
- ```
123
-
124
- | **Parameter** | **Type** | **Description** |
125
- | --- | --- | --- |
126
- | `userId` | String | Unique user ID, up to **32 bytes**, with **no special characters**; use letters and digits. Avoid simple IDs like `1` or `123` to reduce multi-device conflicts. |
127
- | `sdkAppId` | int | Obtain from the console. Usually a 10-digit integer starting with `140` or `160`. |
128
- | `userSig` | String | Authentication token for TRTC. For development, generate `userSig` locally using [GenerateTestUserSig.genTestUserSig](https://github.com/Tencent-RTC/TUIKit_Flutter/blob/main/call/example/lib/debug/generate_test_user_sig.dart) for temporary use. When the **Tencent RTC MCP Server** is configured with `sdkAppId` and `sdkSecretKey`, the tool can auto-issue a `userSig` for you. For production, always generate `userSig` on your server to protect your secret key. |
129
-
130
- ## Implement Call Answering
131
-
132
- **You must be logged in before you can answer a call.** Follow these six steps to implement the call answering feature.
133
-
134
- ### Step 1: Create the Call Page
135
-
136
- Create a call page that is shown when an incoming call arrives.
137
-
138
- 1. **Create the call page:** Implement a `StatefulWidget` to host the call page and manage navigation for incoming calls.
139
-
140
- 2. **Add CallCoreView widget to the call page:** The core call UI requires a controller and automatically listens to CallStore data. It will render the UI and adapt layouts for both 1-on-1 and group calls.
141
-
142
- ```dart
143
- import 'package:flutter/material.dart';
144
- import 'package:atomic_x_core/atomicxcore.dart';
145
-
146
- // 1. Create Call Page Widget
147
- class CallPage extends StatefulWidget {
148
- const CallPage({super.key});
149
-
150
- @override
151
- State<CallPage> createState() => _CallPageState();
152
- }
153
-
154
- class _CallPageState extends State<CallPage> {
155
- late CallCoreController controller;
156
-
157
- @override
158
- void initState() {
159
- super.initState();
160
- controller = CallCoreController.create();
161
- }
162
-
163
- @override
164
- Widget build(BuildContext context) {
165
- // 2. Add CallCoreView widget to Call Page
166
- return CallCoreView(controller: controller);
167
- }
168
- }
169
- ```
170
-
171
- **CallCoreView Widget Feature Overview:**
172
-
173
- | **Feature** | **Description** | **Reference** |
174
- | --- | --- | --- |
175
- | Set layout mode | Supports flexible layout mode switching. If unset, layout automatically adapts based on participant count. | Switch Layout Mode |
176
- | Set avatar | Supports custom avatars for specific users via resource path. | Customize Default Avatar |
177
- | Set volume indicator icon | Supports custom volume indicator icons for different volume levels. | Customize Volume Indicator Icon |
178
- | Set network indicator icon | Supports real-time network quality indicator icons. | Customize Network Indicator Icon |
179
- | Set waiting animation | In group calls, supports GIF animation for users in waiting state. | Customize Loading Animation |
180
-
181
- ### Step 2: Add Answer and Reject Buttons
182
-
183
- Use the APIs from [DeviceStore](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_device_device_store/DeviceStore-class.html) and [CallStore](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallStore-class.html) to customize your buttons.
184
-
185
- - **DeviceStore overview:** Microphone (toggle/volume), camera (toggle/switch/quality), screen sharing, and real-time device monitoring. Bind method calls to button taps and listen for device state changes to update button UI dynamically.
186
- - **CallStore overview:** Core call controls (answer, hang up, reject). Bind method calls to button taps and listen for call state changes to sync button display with call status.
187
- - **Icon resource download:** Button icons are available on [GitHub](https://github.com/Tencent-RTC/TUIKit_Flutter/tree/main/atomic-x/call_assets). These icons are custom-designed for TUICallKit and are free to use.
188
-
189
- **Available Icon Resources:**
190
-
191
- | **Resource** | **Description** | **Download** |
192
- | --- | --- | --- |
193
- | `callview_ic_dialing.png` | Answer/accept call icon. | [GitHub](https://github.com/Tencent-RTC/TUIKit_Android/blob/main/atomic_x/src/main/res-callview/drawable-xxhdpi/callview_ic_dialing.png) |
194
- | `callview_ic_hangup.png` | Hang up / reject call icon. | [GitHub](https://github.com/Tencent-RTC/TUIKit_Android/blob/main/atomic_x/src/main/res-callview/drawable-xxhdpi/callview_ic_hangup.png) |
195
- | `callview_ic_handsfree_enable.png` | Hands-free enabled icon. | [GitHub](https://github.com/Tencent-RTC/TUIKit_Android/blob/main/atomic_x/src/main/res-callview/drawable-xxhdpi/callview_ic_handsfree_enable.png) |
196
- | `callview_ic_handsfree_disable.png` | Hands-free disabled icon. | [GitHub](https://github.com/Tencent-RTC/TUIKit_Android/blob/main/atomic_x/src/main/res-callview/drawable-xxhdpi/callview_ic_handsfree_disable.png) |
197
-
198
- 1. **Add Answer and Reject Buttons:** Create a button bar at the bottom and add **Answer** and **Reject** buttons. Bind their tap events to the [accept](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallStore/accept.html) and [reject](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallStore/reject.html) methods.
199
-
200
- ```dart
201
- import 'package:flutter/material.dart';
202
- import 'package:atomic_x_core/atomicxcore.dart';
203
-
204
- // Answer and Reject Buttons Widget
205
- class AcceptRejectButtons extends StatelessWidget {
206
- const AcceptRejectButtons({super.key});
207
-
208
- @override
209
- Widget build(BuildContext context) {
210
- return Row(
211
- children: [
212
- // Answer Button
213
- _buildAcceptButton(),
214
- // Reject Button
215
- _buildRejectButton(),
216
- ],
217
- );
218
- }
219
-
220
- // Answer Button
221
- Widget _buildAcceptButton() {
222
- return GestureDetector(
223
- onTap: () {
224
- // Call accept API to answer the call
225
- CallStore.shared.accept();
226
- },
227
- child: Container(
228
- width: 60,
229
- height: 60,
230
- decoration: const BoxDecoration(
231
- color: Colors.green,
232
- shape: BoxShape.circle,
233
- ),
234
- child: const Icon(
235
- Icons.call,
236
- color: Colors.white,
237
- size: 30,
238
- ),
239
- ),
240
- );
241
- }
242
-
243
- // Reject Button
244
- Widget _buildRejectButton() {
245
- return GestureDetector(
246
- onTap: () {
247
- // Call reject API to reject the call
248
- CallStore.shared.reject();
249
- },
250
- child: Container(
251
- width: 60,
252
- height: 60,
253
- decoration: const BoxDecoration(
254
- color: Colors.red,
255
- shape: BoxShape.circle,
256
- ),
257
- child: const Icon(
258
- Icons.call_end,
259
- color: Colors.white,
260
- size: 30,
261
- ),
262
- ),
263
- );
264
- }
265
- }
266
- ```
267
-
268
- 2. **Destroy the UI when the caller cancels or the callee rejects:** When the caller cancels the call or the callee rejects, the [onCallEnded](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallEventListener/onCallEnded.html) event fires. Listen for this event and close the call UI when the call ends.
269
-
270
- ```dart
271
- import 'package:atomic_x_core/atomicxcore.dart';
272
- import 'package:flutter/cupertino.dart';
273
-
274
- void addListener() {
275
- CallEventListener listener = CallEventListener(
276
- onCallEnded: (callId, mediaType, reason, userId) {
277
- Navigator.of(context).pop();
278
- }
279
- );
280
- CallStore.shared.addListener(listener);
281
- }
282
- ```
283
-
284
- **onCallEnded Event Parameter Details:**
285
-
286
- | **Parameter** | **Type** | **Description** |
287
- | --- | --- | --- |
288
- | `callId` | String | Unique identifier for this call. |
289
- | `mediaType` | CallMediaType | Type of call, either audio or video. `CallMediaType.video`: Video call. `CallMediaType.audio`: Audio call. |
290
- | `reason` | CallEndReason | Reason for call ending. Possible values: `unknown`, `hangup`, `reject`, `noResponse`, `offline`, `lineBusy`, `canceled`, `otherDeviceAccepted`, `otherDeviceReject`, `endByServer`. |
291
- | `userId` | String | User ID responsible for ending the call. |
292
-
293
- ### Step 3: Request Microphone and Camera Permissions
294
-
295
- Check audio/video permissions before answering a call. If anything is missing, guide the user to grant it at runtime.
296
-
297
- 1. **Android permission declaration:**
298
-
299
- Declare microphone and camera permissions in `AndroidManifest.xml`.
300
-
301
- ```xml
302
- <manifest xmlns:android="http://schemas.android.com/apk/res/android">
303
- <!-- Microphone permission -->
304
- <uses-permission android:name="android.permission.RECORD_AUDIO" />
305
- <!-- Camera permission -->
306
- <uses-permission android:name="android.permission.CAMERA" />
307
- </manifest>
308
- ```
309
-
310
- 2. **iOS permission declaration:**
311
-
312
- Under the root `<dict>` in your iOS app's `Info.plist`, add:
313
-
314
- ```xml
315
- <key>NSCameraUsageDescription</key>
316
- <string>CallingApp needs access to your camera to record video with visuals</string>
317
- <key>NSMicrophoneUsageDescription</key>
318
- <string>CallingApp needs access to your microphone to record video with audio</string>
319
- ```
320
-
321
- 3. **Dynamic permission requests:** We recommend the `permission_handler` plugin:
322
-
323
- ```bash
324
- flutter pub add permission_handler
325
- ```
326
-
327
- 4. **iOS Podfile configuration (required):**
328
-
329
- On iOS, `permission_handler` uses preprocessor macros per permission type; by default macros are **0** (off). You **must** enable the ones you need in `ios/Podfile` inside `post_install`, or permission requests may return **`denied`** immediately without showing the system dialog.
330
-
331
- Edit `post_install`:
332
-
333
- ```ruby
334
- post_install do |installer|
335
- installer.pods_project.targets.each do |target|
336
- flutter_additional_ios_build_settings(target)
337
- target.build_configurations.each do |config|
338
- config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
339
- '$(inherited)',
340
- 'PERMISSION_CAMERA=1',
341
- 'PERMISSION_MICROPHONE=1',
342
- ]
343
- end
344
- end
345
- end
346
- ```
347
-
348
- > **Note:** After changing `Podfile`, run `cd ios && pod install` again so the change takes effect.
349
-
350
- 5. **Request at runtime:** Before answering a call, call:
351
-
352
- ```dart
353
- import 'package:permission_handler/permission_handler.dart';
354
-
355
- // Request audio/video permissions
356
- Future<bool> requestCallPermissions() async {
357
- // Request microphone and camera permissions
358
- Map<Permission, PermissionStatus> statuses = await [
359
- Permission.microphone,
360
- Permission.camera,
361
- ].request();
362
-
363
- // Check permission status
364
- bool micGranted = statuses[Permission.microphone]?.isGranted ?? false;
365
- bool cameraGranted = statuses[Permission.camera]?.isGranted ?? false;
366
-
367
- if (micGranted && cameraGranted) {
368
- // Permissions granted
369
- return true;
370
- } else {
371
- // Some permissions denied, prompt user to enable
372
- return false;
373
- }
374
- }
375
- ```
376
-
377
- ### Step 4: Handle Incoming Call Notifications
378
-
379
- Listen to the current user's call status and play a ringtone or vibrate on incoming calls. Stop notifications after the call is answered or hung up.
380
-
381
- 1. **Data Layer Subscription:** Subscribe to `CallStore.shared.state.selfInfo` to reactively track the logged-in user's info.
382
-
383
- 2. **Play or Stop Notifications:** If `selfInfo.status` is `CallParticipantStatus.waiting`, play ringtone/vibration; if `CallParticipantStatus.accept`, stop the notification.
384
-
385
- ```dart
386
- CallStore.shared.state.selfInfo.addListener(() {
387
- CallParticipantInfo info = CallStore.shared.state.selfInfo.value;
388
- if (info.status == CallParticipantStatus.accept || info.status == CallParticipantStatus.none) {
389
- // Stop ringtone
390
- return;
391
- }
392
- if (info.status == CallParticipantStatus.waiting) {
393
- // Play ringtone
394
- }
395
- });
396
- ```
397
-
398
- ### Step 5: Open Media Devices for Incoming Calls
399
-
400
- When an incoming call arrives, get the media type from [onCallReceived](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallEventListener/onCallReceived.html). For a smoother experience, pre-open relevant media devices when showing the call UI.
401
-
402
- 1. **Listen to Incoming Call Event:** Subscribe to the `onCallReceived` event.
403
-
404
- 2. **Open Devices According to Media Type:** For audio calls, open only the microphone; for video calls, open both microphone and camera.
405
-
406
- ```dart
407
- import 'package:atomic_x_core/atomicxcore.dart';
408
-
409
- CallEventListener? callListener;
410
-
411
- void initCallListener() {
412
- // 1. Listen for incoming call event
413
- callListener = CallEventListener(
414
- onCallReceived: (callId, mediaType, userData) {
415
- // 2. Open devices based on media type
416
- openDeviceForMediaType(mediaType);
417
- },
418
- );
419
- if (callListener != null) {
420
- CallStore.shared.addListener(callListener!);
421
- }
422
- }
423
-
424
- void openDeviceForMediaType(CallMediaType? mediaType) {
425
- if (mediaType == null) return;
426
- DeviceStore.shared.openLocalMicrophone();
427
- if (mediaType == CallMediaType.video) {
428
- final isFrontCamera = DeviceStore.shared.state.isFrontCamera.value;
429
- DeviceStore.shared.openLocalCamera(isFrontCamera);
430
- }
431
- }
432
- ```
433
-
434
- **onCallReceived Event Details:**
435
-
436
- | **Parameter** | **Type** | **Description** |
437
- | --- | --- | --- |
438
- | `callId` | String | Unique identifier for this call. |
439
- | `mediaType` | CallMediaType | Call type: audio or video. `CallMediaType.video`: Video call. `CallMediaType.audio`: Audio call. |
440
-
441
- **openLocalCamera API Parameter Details:**
442
-
443
- | **Parameter** | **Type** | **Required** | **Description** |
444
- | --- | --- | --- | --- |
445
- | `isFront` | bool | Yes | Whether to open the front camera. `true`: Open front camera. `false`: Open rear camera. |
446
- | `completion` | CompletionHandler | No | Completion callback for camera open result. Returns error code and message if opening fails. |
447
-
448
- **openLocalMicrophone API Parameter Details:**
449
-
450
- | **Parameter** | **Type** | **Required** | **Description** |
451
- | --- | --- | --- | --- |
452
- | `completion` | CompletionHandler | No | Completion callback for microphone open result. Returns error code and message if opening fails. |
453
-
454
- ### Step 6: Launch Call UI on Incoming Call
455
-
456
- After subscribing to the [onCallReceived](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallEventListener/onCallReceived.html) event, launch the call page:
457
-
458
- ```dart
459
- import 'package:atomic_x_core/atomicxcore.dart';
460
- import 'package:flutter/material.dart';
461
-
462
- CallEventListener? callListener;
463
-
464
- void addListener(BuildContext context) {
465
- callListener = CallEventListener(
466
- onCallReceived: (callId, mediaType, userData) {
467
- // Launch call page (using Navigator)
468
- Navigator.push(
469
- context,
470
- MaterialPageRoute(builder: (context) => const CallPage()),
471
- );
472
- },
473
- );
474
- if (callListener != null) {
475
- CallStore.shared.addListener(callListener!);
476
- }
477
- }
478
- ```
479
-
480
- ## Integrate Offline Push
481
-
482
- To receive call invitations while the app is offline, follow the dedicated **Integration Offline Push** guide for Flutter.
483
-
484
- ## Customize the UI
485
-
486
- `CallCoreView` supports extensive UI customization. You can freely replace avatar and volume indicator icons. For fast integration, download these icons from [GitHub](https://github.com/Tencent-RTC/TUIKit_Flutter/tree/main/atomic-x/call_assets). All icons are custom-designed for TUICallKit and are copyright-free.
487
-
488
- ### Custom Volume Indicator Icons
489
-
490
- Use the [volumeIcons](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_view_call_call_core_view/CallCoreView/volumeIcons.html) parameter in `CallCoreView` to set icons for various volume levels.
491
-
492
- **Sample Code:**
493
-
494
- ```dart
495
- Widget _buildCallCoreView() {
496
- Map<VolumeLevel, Image> volumeIcons = {
497
- VolumeLevel.mute: Image.asset(''), // Icon for each volume level
498
- };
499
- return CallCoreView(
500
- controller: CallCoreController.create(),
501
- volumeIcons: volumeIcons,
502
- );
503
- }
504
- ```
505
-
506
- **volumeIcons Parameter Details:**
507
-
508
- | **Parameter** | **Type** | **Required** | **Description** |
509
- | --- | --- | --- | --- |
510
- | `volumeIcons` | Map | No | Maps volume levels to icon resources. Keys: `VolumeLevel.mute` (muted), `VolumeLevel.low` (0-25], `VolumeLevel.medium` (25-50], `VolumeLevel.high` (50-75], `VolumeLevel.peak` (75-100]. Values: icons for each level. |
511
-
512
- **Volume Indicator Icons:**
513
-
514
- | **Resource** | **Description** | **Download** |
515
- | --- | --- | --- |
516
- | `callview_ic_audio_input.png` | Volume indicator. Recommended for `VolumeLevel.low` or `VolumeLevel.medium`. Display when user volume exceeds this level. | [GitHub](https://github.com/Tencent-RTC/TUIKit_Android/blob/main/atomic_x/src/main/res-callview/drawable-xxhdpi/callview_ic_audio_input.png) |
517
- | `callview_ic_self_mute.png` | Mute icon. Recommended for `VolumeLevel.mute`. Display when user is muted. | [GitHub](https://github.com/Tencent-RTC/TUIKit_Android/blob/main/atomic_x/src/main/res-callview/drawable-xxhdpi/callview_ic_self_mute.png) |
518
-
519
- ### Custom Network Indicator Icons
520
-
521
- Use the [networkQualityIcons](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_view_call_call_core_view/CallCoreView/networkQualityIcons.html) parameter to set icons for different network states.
522
-
523
- **Sample Code:**
524
-
525
- ```dart
526
- Widget _buildCallCoreView() {
527
- Map<NetworkQuality, Image> networkQualityIcons = {
528
- NetworkQuality.bad: Image.asset(''), // Icon for each network quality level
529
- };
530
- return CallCoreView(
531
- controller: CallCoreController.create(),
532
- networkQualityIcons: networkQualityIcons,
533
- );
534
- }
535
- ```
536
-
537
- **networkQualityIcons Parameter Details:**
538
-
539
- | **Parameter** | **Type** | **Required** | **Description** |
540
- | --- | --- | --- | --- |
541
- | `networkQualityIcons` | Map | No | Maps network quality levels to icon resources. Keys: `NetworkQuality.unknown`, `NetworkQuality.excellent`, `NetworkQuality.good`, `NetworkQuality.poor`, `NetworkQuality.bad`, `NetworkQuality.veryBad`, `NetworkQuality.down`. Values: icons for each state. |
542
-
543
- **Poor Network Indicator Icon:**
544
-
545
- | **Resource** | **Description** | **Download** |
546
- | --- | --- | --- |
547
- | `callview_ic_network_bad.png` | Poor network indicator. Recommended for `NetworkQuality.bad`, `NetworkQuality.veryBad`, or `NetworkQuality.down`. Display when connection is poor. | [GitHub](https://github.com/Tencent-RTC/TUIKit_Android/blob/main/atomic_x/src/main/res-callview/drawable-xxhdpi/callview_ic_network_bad.png) |
548
-
549
- ### Custom Default Avatar
550
-
551
- Use the [defaultAvatar](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_view_call_call_core_view/CallCoreView/defaultAvatar.html) parameter to set a default avatar for users. Listen to [allParticipants](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallState/allParticipants.html) for participant avatars. If unavailable or loading fails, show the default avatar.
552
-
553
- **Sample Code:**
554
-
555
- ```dart
556
- Widget _buildCallCoreView() {
557
- Image defaultAvatarImage = Image.asset(''); // Default user avatar image
558
- return CallCoreView(
559
- controller: CallCoreController.create(),
560
- defaultAvatar: defaultAvatarImage,
561
- );
562
- }
563
- ```
564
-
565
- **defaultAvatar Parameter Details:**
566
-
567
- | **Parameter** | **Type** | **Required** | **Description** |
568
- | --- | --- | --- | --- |
569
- | `defaultAvatar` | Image | No | Default user avatar. |
570
-
571
- **Default Avatar Resource:**
572
-
573
- | **Resource** | **Description** | **Download** |
574
- | --- | --- | --- |
575
- | `callview_ic_avatar.png` | Default avatar. Recommended when loading fails or no avatar is set. | [GitHub](https://github.com/Tencent-RTC/TUIKit_Android/blob/main/atomic_x/src/main/res-callview/drawable-xxhdpi/callview_ic_avatar.png) |
576
-
577
- ### Custom Loading Animation
578
-
579
- Use the [loadingAnimation](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_view_call_call_core_view/CallCoreView/loadingAnimation.html) parameter to set a waiting animation for users in pending state.
580
-
581
- **Sample Code:**
582
-
583
- ```dart
584
- Widget _buildCallCoreView() {
585
- Image loading = Image.asset(''); // Default loading animation resource
586
- return CallCoreView(
587
- controller: CallCoreController.create(),
588
- loadingAnimation: loading,
589
- );
590
- }
591
- ```
592
-
593
- **loadingAnimation Parameter Details:**
594
-
595
- | **Parameter** | **Type** | **Required** | **Description** |
596
- | --- | --- | --- | --- |
597
- | `loadingAnimation` | Image | No | GIF image resource. |
598
-
599
- **Waiting Animation:**
600
-
601
- | **Resource** | **Description** | **Download** |
602
- | --- | --- | --- |
603
- | `callview_ic_loading.gif` | Waiting animation for users. Recommended for group calls; display when user status is `waiting`. | [GitHub](https://github.com/Tencent-RTC/TUIKit_Android/blob/main/atomic_x/src/main/res-callview/drawable-xxhdpi/callview_ic_loading.gif) |
604
-
605
- ### Add Call Duration Indicator
606
-
607
- Call duration updates in real time via [activeCall](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallState/activeCall.html) `duration`. To display call duration:
608
-
609
- 1. **Subscribe to Data:** Listen to `CallStore.shared.state.activeCall` for the current active call.
610
- 2. **Bind Call Duration:** Bind the `activeCall.duration` field to a UI widget. This is reactive and auto-updates the UI — no manual timer needed.
611
-
612
- ```dart
613
- import 'package:atomic_x_core/atomicxcore.dart';
614
- import 'package:flutter/material.dart';
615
-
616
- class TimerWidget extends StatelessWidget {
617
- final double? fontSize;
618
- final FontWeight? fontWeight;
619
-
620
- const TimerWidget({
621
- super.key,
622
- this.fontSize,
623
- this.fontWeight,
624
- });
625
-
626
- @override
627
- Widget build(BuildContext context) {
628
- return ValueListenableBuilder(
629
- valueListenable: CallStore.shared.state.selfInfo,
630
- builder: (context, info, child) {
631
- if (info.status == CallParticipantStatus.accept) {
632
- return ValueListenableBuilder(
633
- valueListenable: CallStore.shared.state.activeCall,
634
- builder: (context, activeCall, child) {
635
- return Text(
636
- formatDuration(activeCall.duration.toInt()),
637
- style: TextStyle(
638
- fontSize: fontSize,
639
- fontWeight: fontWeight,
640
- ),
641
- );
642
- },
643
- );
644
- } else {
645
- return Container();
646
- }
647
- }
648
- );
649
- }
650
-
651
- String formatDuration(int timeCount) {
652
- int hour = timeCount ~/ 3600;
653
- int minute = (timeCount % 3600) ~/ 60;
654
- String minuteShow = minute <= 9 ? "0$minute" : "$minute";
655
- int second = timeCount % 60;
656
- String secondShow = second <= 9 ? "0$second" : "$second";
657
-
658
- if (hour > 0) {
659
- String hourShow = hour <= 9 ? "0$hour" : "$hour";
660
- return '$hourShow:$minuteShow:$secondShow';
661
- } else {
662
- return '$minuteShow:$secondShow';
663
- }
664
- }
665
- }
666
- ```
667
-
668
- > **Note:**
669
- >
670
- > For more reactive call state data, see [CallState](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallState-class.html).
671
-
672
- ## More Features
673
-
674
- ### Set Avatar and Nickname
675
-
676
- Before the call starts, use [setSelfInfo](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_login_login_store/LoginStore/setSelfInfo.html) to set your nickname and avatar.
677
-
678
- **Sample Code:**
679
-
680
- ```dart
681
- UserProfile profile = UserProfile(
682
- userID: "", // Your UserId
683
- avatarURL: "", // Avatar URL
684
- nickname: "", // Nickname to set
685
- );
686
- CompletionHandler result = await LoginStore.shared.setSelfInfo(userInfo: profile);
687
- if (result.errorCode == 0) {
688
- print("setSelfInfo success");
689
- } else {
690
- print("setSelfInfo failed");
691
- }
692
- ```
693
-
694
- **setSelfInfo API Parameter Details:**
695
-
696
- | **Parameter** | **Type** | **Required** | **Description** |
697
- | --- | --- | --- | --- |
698
- | `userProfile` | [UserProfile](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_login_login_store/UserProfile-class.html) | Yes | User info struct: `userID` (String), `avatarURL` (String), `nickname` (String). |
699
- | `completion` | CompletionHandler | No | Completion callback for result. |
700
-
701
- ### Switch Layout Modes
702
-
703
- Use [setLayoutTemplate](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_view_call_call_core_view/CallCoreController/setLayoutTemplate.html) for flexible layout switching. If unset, `CallCoreView` adapts automatically: 1-on-1 calls use `Float` mode, group calls use `Grid` mode.
704
-
705
- | **Mode** | **Layout** | **Interaction** |
706
- | --- | --- | --- |
707
- | Float | Full-screen self-view while waiting; after connecting, full-screen remote view with self-view as a floating window. | Floating window supports drag and click-to-swap with the main view. |
708
- | Grid | Grid layout for all participants, suitable for 2+ users. Supports click-to-enlarge. | Click any participant's view to enlarge. |
709
- | PIP | 1v1 shows fixed remote view; multi-party uses active-speaker strategy with full screen for the current speaker. | Waiting state shows self-view; after connecting, call duration is displayed. |
710
-
711
- **Sample Code:**
712
-
713
- ```dart
714
- CallCoreController controller = CallCoreController.create();
715
- CallLayoutTemplate template = CallLayoutTemplate.float;
716
- controller.setLayoutTemplate(template);
717
- ```
718
-
719
- **setLayoutTemplate API Parameter Details:**
720
-
721
- | **Parameter** | **Type** | **Required** | **Description** |
722
- | --- | --- | --- | --- |
723
- | `template` | CallLayoutTemplate | Yes | Layout mode for CallCoreView: `CallLayoutTemplate.float`, `CallLayoutTemplate.grid`, `CallLayoutTemplate.pip`. |
724
-
725
- ### Set Default Call Timeout
726
-
727
- When making a call via [calls](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallStore/calls.html), specify the timeout using [CallParams](https://liteav.sdk.qcloud.com/doc/product/tuikit/atomic-x/flutter/v1.0/en/api_call_call_store/CallParams-class.html) `timeout`.
728
-
729
- ```dart
730
- void startCall(List<String> userIdList, CallMediaType mediaType) {
731
- CallParams params = CallParams(
732
- timeout: 30, // Set call waiting timeout (seconds)
733
- );
734
- CallStore.shared.calls(userIdList, mediaType, params);
735
- }
736
- ```
737
-
738
- **calls API Parameter Details:**
739
-
740
- | **Parameter** | **Type** | **Required** | **Description** |
741
- | --- | --- | --- | --- |
742
- | `userIdList` | List<String> | Yes | List of target user IDs. |
743
- | `mediaType` | CallMediaType | Yes | Call type: audio or video. `CallMediaType.video` / `CallMediaType.audio`. |
744
- | `params` | CallParams | No | Call extension parameters: `roomId` (String, optional, auto-assigned if unset), `timeout` (int, seconds), `userData` (String, custom data), `chatGroupId` (String, group ID for group calls), `isEphemeralCall` (bool, encrypted call with no call record). |
745
-
746
- ### Implement In-App Floating Window
747
-
748
- If the call UI is covered (e.g., user navigates away), create a draggable floating window in the app. This window should show key call status (such as duration and remote info) and allow users to quickly return to the full call UI, enhancing multitasking.
749
-
750
- ```dart
751
- _buildPipWindowWidget() {
752
- final pipWidth = MediaQuery.of(context).size.width;
753
- final pipHeight = MediaQuery.of(context).size.height;
754
- final scale = pipWidth / originWidth;
755
- CallCoreController controller = CallCoreController.create();
756
- controller.setLayoutTemplate(CallLayoutTemplate.pip);
757
- return Scaffold(
758
- body: SizedBox(
759
- width: pipWidth,
760
- height: pipHeight,
761
- child: Container(
762
- width: pipWidth,
763
- height: pipHeight,
764
- decoration: const BoxDecoration(color: Colors.transparent),
765
- child: MediaQuery(
766
- data: MediaQuery.of(context).copyWith(
767
- size: Size(originWidth ?? pipWidth, originHeight ?? pipHeight)
768
- ),
769
- child: ClipRect(
770
- child: Transform.scale(
771
- scale: scale,
772
- alignment: Alignment.center,
773
- child: OverflowBox(
774
- maxWidth: originWidth,
775
- maxHeight: originHeight,
776
- alignment: Alignment.center,
777
- child: CallCoreView(
778
- controller: controller,
779
- ),
780
- ),
781
- ),
782
- ),
783
- ),
784
- ),
785
- ),
786
- );
787
- }
788
- ```
789
-
790
- ### Implement Android Picture-in-Picture Outside App
791
-
792
- Picture-in-Picture requires Android 8.0 (API 26) or later.
793
-
794
- 1. **MainActivity Configuration**
795
-
796
- Listen for the `MainActivity` lifecycle. When `enablePictureInPicture` is `true`, automatically enter PiP when the app goes to background.
797
-
798
- ```kotlin
799
- import android.app.PictureInPictureParams
800
- import android.content.pm.PackageManager
801
- import android.os.Build
802
- import android.util.Log
803
- import android.util.Rational
804
- import io.flutter.embedding.android.FlutterActivity
805
- import io.flutter.embedding.engine.FlutterEngine
806
- import io.flutter.plugin.common.MethodChannel
807
-
808
- class MainActivity : FlutterActivity() {
809
- companion object {
810
- private const val TAG = "MainActivity"
811
- private const val CHANNEL = "atomic_x/pip"
812
- }
813
-
814
- private var enablePictureInPicture = false
815
-
816
- override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
817
- super.configureFlutterEngine(flutterEngine)
818
- MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
819
- when (call.method) {
820
- "enablePictureInPicture" -> {
821
- val enable = call.argument<Boolean>("enable") ?: false
822
- val success = enablePIP(enable)
823
- result.success(success)
824
- }
825
- "enterPictureInPicture" -> {
826
- val success = enterPIP()
827
- result.success(success)
828
- }
829
- else -> result.notImplemented()
830
- }
831
- }
832
- }
833
-
834
- override fun onUserLeaveHint() {
835
- super.onUserLeaveHint()
836
- // Automatically enter PiP when user presses Home
837
- if (enablePictureInPicture) {
838
- enterPIP()
839
- }
840
- }
841
-
842
- private fun enablePIP(enable: Boolean): Boolean {
843
- Log.i(TAG, "enablePictureInPicture: $enable")
844
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O &&
845
- packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {
846
- enablePictureInPicture = enable
847
- return true
848
- }
849
- return false
850
- }
851
-
852
- private fun enterPIP(): Boolean {
853
- if (!enablePictureInPicture) return false
854
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
855
- try {
856
- val aspectRatio = Rational(9, 16)
857
- val params = PictureInPictureParams.Builder()
858
- .setAspectRatio(aspectRatio)
859
- .build()
860
- return enterPictureInPictureMode(params)
861
- } catch (e: Exception) {
862
- Log.e(TAG, "enterPIP failed: ${e.message}")
863
- }
864
- }
865
- return false
866
- }
867
- }
868
- ```
869
-
870
- 2. **AndroidManifest Configuration**
871
-
872
- Add PiP support to `MainActivity`:
873
-
874
- ```xml
875
- <activity
876
- android:name=".MainActivity"
877
- android:exported="true"
878
- android:launchMode="singleTop"
879
- android:taskAffinity=""
880
- android:theme="@style/LaunchTheme"
881
- android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
882
- android:hardwareAccelerated="true"
883
- android:windowSoftInputMode="adjustResize"
884
- android:supportsPictureInPicture="true">
885
- <meta-data
886
- android:name="io.flutter.embedding.android.NormalTheme"
887
- android:resource="@style/NormalTheme"
888
- />
889
- <intent-filter>
890
- <action android:name="android.intent.action.MAIN"/>
891
- <category android:name="android.intent.category.LAUNCHER"/>
892
- </intent-filter>
893
- </activity>
894
- ```
895
-
896
- 3. **Dart Layer Configuration**
897
-
898
- ```dart
899
- import 'package:flutter/services.dart';
900
-
901
- class PipManager {
902
- static const MethodChannel _channel = MethodChannel('atomic_x/pip');
903
-
904
- /// Enable/disable PiP
905
- static Future<bool> enablePictureInPicture(bool enable) async {
906
- try {
907
- final result = await _channel.invokeMethod<bool>('enablePictureInPicture', {'enable': enable});
908
- return result ?? false;
909
- } catch (e) {
910
- return false;
911
- }
912
- }
913
-
914
- /// Enter PiP mode immediately
915
- static Future<bool> enterPictureInPicture() async {
916
- try {
917
- final result = await _channel.invokeMethod<bool>('enterPictureInPicture');
918
- return result ?? false;
919
- } catch (e) {
920
- return false;
921
- }
922
- }
923
- }
924
- ```
925
-
926
- Enable PiP before the call starts; disable PiP after the call ends.
927
-
928
- ### Implement iOS Picture-in-Picture Outside App
929
-
930
- iOS supports system PiP with the underlying TRTC engine. When the app goes to background, the call view floats above other apps as a PiP window, letting users multitask.
931
-
932
- > **Note:**
933
- >
934
- > - Add `Background Modes` in Xcode's `Signing & Capabilities` and check `Audio, AirPlay, and Picture in Picture`.
935
- > - Requires iOS 15.0 or later.
936
-
937
- 1. **Enable PiP**
938
-
939
- ```dart
940
- import 'package:tencent_rtc_sdk/trtc_cloud.dart';
941
-
942
- TRTCCloud.sharedInstance().then((trtcCloud) {
943
- trtcCloud.callExperimentalAPI('''
944
- {
945
- "api": "configPictureInPicture",
946
- "params": {
947
- "enable": true,
948
- "cameraBackgroundCapture": true,
949
- "canvas": {
950
- "width": 720,
951
- "height": 1280,
952
- "backgroundColor": "#111111"
953
- },
954
- "regions": [
955
- {
956
- "userId": "remoteUserId",
957
- "userName": "",
958
- "width": 1.0,
959
- "height": 1.0,
960
- "x": 0.0,
961
- "y": 0.0,
962
- "fillMode": 0,
963
- "streamType": "high",
964
- "backgroundColor": "#111111",
965
- "backgroundImage": "file:///path/to/avatar.png"
966
- },
967
- {
968
- "userId": "localUserId",
969
- "userName": "",
970
- "width": 0.333,
971
- "height": 0.333,
972
- "x": 0.65,
973
- "y": 0.05,
974
- "fillMode": 0,
975
- "streamType": "high",
976
- "backgroundColor": "#111111"
977
- }
978
- ]
979
- }
980
- }
981
- ''');
982
- });
983
- ```
984
-
985
- 2. **Disable PiP**
986
-
987
- ```dart
988
- import 'package:tencent_rtc_sdk/trtc_cloud.dart';
989
-
990
- TRTCCloud.sharedInstance().then((trtcCloud) {
991
- trtcCloud.callExperimentalAPI('''
992
- {
993
- "api": "configPictureInPicture",
994
- "params": {
995
- "enable": false
996
- }
997
- }
998
- ''');
999
- });
1000
- ```
1001
-
1002
- ### Enable Background Audio/Video Capture
1003
-
1004
- To ensure your app can capture audio/video while in the background (e.g., screen lock or app switch), configure Android and iOS as follows:
1005
-
1006
- #### Android Configuration
1007
-
1008
- 1. **Permissions and Service (`AndroidManifest.xml`):** Android 9.0+ requires foreground service permissions; Android 14+ requires explicit service type for microphone/camera.
1009
-
1010
- ```xml
1011
- <manifest xmlns:android="http://schemas.android.com/apk/res/android">
1012
-
1013
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
1014
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA" />
1015
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
1016
-
1017
- <application>
1018
- <service
1019
- android:name=".CallForegroundService"
1020
- android:enabled="true"
1021
- android:exported="false"
1022
- android:foregroundServiceType="camera|microphone" />
1023
- </application>
1024
- </manifest>
1025
- ```
1026
-
1027
- 2. **Create Foreground Service Class (`CallForegroundService`):**
1028
-
1029
- ```kotlin
1030
- import android.app.Notification
1031
- import android.app.NotificationChannel
1032
- import android.app.NotificationManager
1033
- import android.app.Service
1034
- import android.content.Context
1035
- import android.content.Intent
1036
- import android.os.Build
1037
- import android.os.IBinder
1038
- import androidx.core.app.NotificationCompat
1039
-
1040
- class CallForegroundService : Service() {
1041
- companion object {
1042
- private const val NOTIFICATION_ID = 1001
1043
- private const val CHANNEL_ID = "call_foreground_channel"
1044
- fun start(context: Context) {
1045
- val intent = Intent(context, CallForegroundService::class.java)
1046
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
1047
- context.startForegroundService(intent)
1048
- } else {
1049
- context.startService(intent)
1050
- }
1051
- }
1052
-
1053
- fun stop(context: Context) {
1054
- val intent = Intent(context, CallForegroundService::class.java)
1055
- context.stopService(intent)
1056
- }
1057
- }
1058
-
1059
- override fun onCreate() {
1060
- super.onCreate()
1061
- createNotificationChannel()
1062
- // Start foreground notification to ensure background capture permission
1063
- startForeground(NOTIFICATION_ID, createNotification())
1064
- }
1065
-
1066
- override fun onBind(intent: Intent?): IBinder? = null
1067
-
1068
- private fun createNotification(): Notification {
1069
- return NotificationCompat.Builder(this, CHANNEL_ID)
1070
- .setContentTitle("In Call")
1071
- .setContentText("App is running in background to maintain call")
1072
- .setSmallIcon(android.R.drawable.ic_menu_call) // Replace with your app icon
1073
- .setPriority(NotificationCompat.PRIORITY_HIGH)
1074
- .build()
1075
- }
1076
-
1077
- private fun createNotificationChannel() {
1078
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
1079
- val channel = NotificationChannel(
1080
- CHANNEL_ID,
1081
- "Call Keep-Alive Service",
1082
- NotificationManager.IMPORTANCE_HIGH
1083
- )
1084
- val manager = getSystemService(NotificationManager::class.java)
1085
- manager.createNotificationChannel(channel)
1086
- }
1087
- }
1088
- }
1089
- ```
1090
-
1091
- #### iOS Configuration
1092
-
1093
- In Xcode:
1094
-
1095
- 1. Select your project `Target` → `Signing & Capabilities`.
1096
- 2. Click `+ Capability`.
1097
- 3. Add `Background Modes`.
1098
- 4. Check:
1099
- - `Audio, AirPlay, and Picture in Picture` (for audio and PiP)
1100
- - `Voice over IP` (for VoIP)
1101
- - `Remote notifications` (optional, for offline push)
1102
-
1103
- Your `Info.plist` will automatically include:
1104
-
1105
- ```xml
1106
- <key>UIBackgroundModes</key>
1107
- <array>
1108
- <string>audio</string>
1109
- <string>voip</string>
1110
- <string>remote-notification</string>
1111
- </array>
1112
- ```
1113
-
1114
- **Configure Audio Session (AVAudioSession):**
1115
-
1116
- Set up the audio session before the call starts — ideally in the call UI's `viewDidLoad`, before dialing, or before answering.
1117
-
1118
- ```swift
1119
- import AVFoundation
1120
-
1121
- /**
1122
- * Configure audio session for background audio capture.
1123
- *
1124
- * Recommended scenarios:
1125
- * 1. In call UI's viewDidLoad
1126
- * 2. Before making a call (calls)
1127
- * 3. Before answering a call (accept)
1128
- */
1129
- private func start() {
1130
- let audioSession = AVAudioSession.sharedInstance()
1131
- do {
1132
- // Set audio session category to play and record
1133
- // .allowBluetooth: Supports Bluetooth headset
1134
- // .allowBluetoothA2DP: Supports high-quality Bluetooth audio (A2DP)
1135
- try audioSession.setCategory(.playAndRecord, options: [.allowBluetooth, .allowBluetoothA2DP])
1136
- // Activate audio session
1137
- try audioSession.setActive(true)
1138
- } catch {
1139
- // Audio session configuration failed
1140
- }
1141
- }
1142
- ```
1143
-
1144
- > **Note:**
1145
- >
1146
- > Call `start()` via MethodChannel at the appropriate time in your app to enable background keep-alive.
1147
-
1148
- ## FAQ
1149
-
1150
- ### iOS Release Build [symbol not found] Error?
1151
-
1152
- Since `tencent_rtc_sdk` uses Flutter FFI, Xcode's symbol stripping during Release builds may remove TRTC C symbols and cause `symbol not found` errors. To resolve:
1153
-
1154
- 1. In **Build Settings**, set **Deployment Postprocessing** to **Yes**.
1155
- 2. Set **Strip Style** for **Release** to **Non-Global Symbols**.
1156
-
1157
- ### If the callee goes offline and then comes online within the call invitation timeout, will they receive the incoming call event?
1158
-
1159
- - **For single calls:** If the callee comes online within the timeout, they will receive the call invitation.
1160
- - **For group calls:** If the callee comes online within the timeout, up to 20 unprocessed group messages will be pulled; if there is a call invitation, the incoming call event is triggered.