
Scenario | Game Mode Summary | Key Capability |
AMA(Ask Me Anything) | 1:N interaction between project team and community; mic connection, voting, text transcription, and screen sharing for co-reading whitepaper | Video streaming, mic connection interaction, voting card, subtitle transcription, screen sharing |
Community Management and Decentralized Collaboration | KOL group chat, rich media (images/voice/files/emojis), group permission management, message search/reference/history roaming | Large-scale community (Community), message card, file transfer |
Market Alert Market Alert System | Market anomaly, airdrop preheating, and risk control alarm delivered within seconds; push notifications grouped by language / Tag / holding position | High-concurrency push, Tag-based group push, offline message push |
Live Investment Advisory and Market Analysis | Market co-reading, social copy trading (Social/Copy Trading), on-chain reputation/licensed qualification, tipping conversion | Video streaming, screen sharing, gift system, copy trading card, order write-back |
MemeFi Live Interaction | The anchor initiates on-chain interactions, and the audience participates via on-chain contracts or token staking; gamified trading (GameFi game mode) | Interactive live streaming, on-chain event callback, smart contract, gift system |
Business Domain | Core Responsibility | Technology Base | Provider |
Live streaming domain | Room management, audio/video communication, mic connection interaction, bullet screen and gifts, transcription and translation | Live AtomicXCore + AI Transcription/Translation | Tencent Cloud |
Instant messaging domain | One-on-one chat, group chat, community (Community), official account, intelligent customer service | Chat | Tencent Cloud |
Reach and push domain | Real-time market push, marketing notifications, order reminders, offline message delivery | Push | Tencent Cloud |
Asset trading domain | Wallet, copy trading, order, on-chain settlement, red packet/transfer | Self-built by the business (wallet/payment/on-chain service) | Customer Side |
Risk control and compliance domain | KYC, content review, risk alert, CloudAudit | Cloud-based content understanding + self-built business risk control | Tencent Cloud + Customer Side |
Customer service domain | Pre-sales consultation, dispute group creation, agent routing, chatbot FAQ | Desk | Tencent Cloud |
Service | Core Responsibility | External Interface | Dependency |
Live streaming service | Room management, member management, mic connection management, message management, subtitle service | REST API | Live REST API + AI transcription |
Authentication service | UserSig generation and refresh, STS temporary credential issuance, Role authorization | REST API | RTC Engine / Chat authentication service + STS |
Wallet/Asset service | Account system, on-chain custody, on-chain withdrawal, transfer, risk control | REST API | Payment system + on-chain service |
Red packet service | Red packet campaign management, red packet grabbing, refund, idempotency control | REST API | Payment system + wallet service + Chat custom messages |
Copy trading/Order service | Copy trading card distribution, one-click copy trading, order write-back, matching engine integration | REST API | Business transaction system |
Push orchestration service | Multilingual push orchestration, Tag-based audience segmentation, conversion statistics | REST API | Push service |
Review and compliance service | Content review callback, KYC, forced muting, risk event | REST API + Webhook | Content understanding + business risk control |
User service | Account system, KYC level, follower relationship, on-chain identity | REST API | Chat account system |
Customer service | Session routing, bot reception, intelligent response | REST API + Webhook | Desk / Intelligent Customer Service |
Data service | Live streaming data statistics, conversion analysis, user profile | Asynchronous Messaging + Batch Processing | Data Warehouse |
create(liveID). Internally, the same instance is returned for the same liveID.Store/Component | Feature Description | API Reference |
LiveCoreView | The core view component for live video stream display and interaction: responsible for video stream rendering and view widget processing, supporting scenarios such as anchor live streaming, audience mic connection, and anchor cross-room connection. | |
LiveListStore | Full lifecycle management of live rooms: create / join / leave / terminate rooms; query room lists; modify live streaming information (name, announcement, and so on); and monitor live streaming status (such as being kicked out and ended). | |
DeviceStore | Audio and video device control: microphone (on/off, volume), camera (on/off, switch, quality), screen sharing, and real-time device status monitoring. | |
CoGuestStore | Audience mic connection management: mic connection request / invitation / acceptance / rejection, mic connection member permission control (microphone / camera), and status synchronization. | |
CoHostStore | Cross-room anchor connection: supports multiple layout templates (such as dynamic grid, and so on), initiates / accepts / rejects connections, and manages interactions among connected anchors. | |
BattleStore | Anchor PK competition: initiate PK (configure duration / opponent), manage PK status (start / end), synchronize scores, and monitor competition results. | |
GiftStore | Gift interaction: obtain gift lists, send / receive gifts, and monitor gift events (including sender and gift details). | |
BarrageStore | Bullet screen feature: send text / custom bullet screens, maintain bullet screen lists, and monitor bullet screen status in real time. | |
LikeStore | Like interaction: send likes, monitor like events, and synchronize total like counts. | |
LiveAudienceStore | Audience management: obtain real-time audience lists (ID / name / avatar), count audience numbers, and monitor audience entry and exit events. | |
AudioEffectStore | Audio effects: voice changing (child voice / male voice), reverb (KTV, and so on), earphone monitoring adjustment, and real-time effect switching. | |
BaseBeautyStore | Basic beauty effects: adjust skin smoothing / whitening / rosiness (0-9 levels), reset beauty effect status, and synchronize effect parameters. |
MetaData) capability to store and synchronize any business-related information within the room (such as the currency currently being explained or the policy ID currently being broadcast). You can also reuse the custom message (CustomMessage) capability to broadcast any business-related messages within the room (such as copy-trading cards, market quote cards, or order execution receipts).Functional Module | Core Capabilities | Interaction with Live Room |
Wallet / Account | Balance inquiry, on-chain custody, withdrawal, transfer | Display asset card upon entering a room; deduction link for mic connection / tipping / red packets |
Market data service | Multi-currency quotes, K-line charts, market depth | Stores and synchronizes via room custom messages when the anchor switches the explained currency. |
Copy trading / Policy | Policy publishing, copy trading subscription, net value settlement | Publishes trading policies / copy trading cards in the live room via custom messages. |
Order / Matching | Order placement, order cancellation, trade confirmation receipt | Order cards are written back to the live room and displayed as system messages in the bullet screen area. |
Functional Module | Core Capabilities | Interaction with Live Room |
Live Stream Moderation | Video + audio content understanding, violation detection | Triggering stream termination / warning / banning upon review hit |
Message Moderation | One-on-one chat / group chat / group member profile review | Live room bullet screen content review, live room user profile review |
KYC | Identity verification, identity tiering | Pre-validation for operations such as mic connection, withdrawal, and order following |
Audit Trail | Message retention, operation logs, dual recording system | Live streaming on-cloud recording, compliance credentials and traceability |
Functional Module | Core Capabilities | Interaction with Live Room |
Account System | Registration, login, relationship chain, user profile | Providing an identity foundation for live viewing, transactions, and mic connection |
Member Level | VIP, points, on-chain reputation score (On-chain Reputation) | Affecting mic connection priority, customer service level, and order following weight |
Fans Community | Community (Community), grouping, topics, announcements | Live stream preheating, benefit distribution, and user retention |
Official Account | Broadcast posts, subscription, interaction | Brand information, project/agency information, platform announcements |
Functional Module | Core Capabilities | Interaction with Live Room |
Real-time market data push | High-concurrency 30-second-level delivery, classification by Tag / specified user | Deliver price anomalies within seconds and immediately wake up the App. |
Live Broadcast Preview | Live stream reservation and start notification | Automatically wake up followers before the live stream starts. |
Marketing push | Airdrop preheating, event notification, and community benefits | Increase DAU and user engagement. |
Transaction Notification | Order execution, withdrawal arrival, and risk control alarm | Notify users of important messages such as asset changes in real time. |
LoginStore in your project to complete the login. This is a key prerequisite for using all AtomicXCore features.Layer | Feature | Description |
Bottom Layer | LiveCoreView | Hosts local preview or remote video |
Middle Layer | Anchor information, market quote cards, copy trading cards, subtitle display, online user quantity | Persistent light-interaction information |
Upper Layer | Bullet screens, gifts, mic connection pop-up windows | High-frequency dynamic interaction |
Top Layer | End live stream confirmation, risk control alarm, and compliance interception | Blocking operations and fallback prompts |
Management Item | Description |
Microphone Management | Enable/disable the microphone, and configure the capture volume and output volume. |
Camera Management | Enable/disable the camera, switch between front and rear cameras, and configure mirroring and video quality. |
Audio Routing | Switch between the speaker and the earpiece. |
Screen Sharing | Enable and disable the screen sharing feature (PC Stream Pushing Assistant, Market Sharing scenarios). |
Network Status | Monitor network quality information in real time. |
LiveListStore.shared().createLive to create a room and automatically enters the room to start pushing the stream.create_room to create an empty room. The anchor client must also call LiveListStore.shared().joinLive to enter the room and start pushing the stream.LiveListStore.shared().endLive to end the live streaming.destroy_room to dissolve the room.LiveListStore.shared().joinLive to enter the room, and LiveCoreView automatically plays the video stream of the current room.LiveListStore.shared().leaveLive to leave the room. The SDK automatically stops pulling the stream and exits the room.BarrageStore module in the AtomicXCore framework, you can quickly integrate a feature-rich and high-performance bullet screen system into your live streaming application.Type | Purpose | Display Method |
Plain text messages | Inquiry, interaction, and emotional expression | Floating screen / Bullet screen list |
Custom Messages | Copy trading cards, trade confirmation receipts, special effect bullet screens | Special effects / Card messages |
Local Notifications | Room entry, mic connection status, and risk control prompts | Local / System messages |
BarrageStore.sendCustomMessage() to send a bullet screen message, inserting the level/identity information obtained from the business backend into the data field. When a message is received, parse the level/identity information in the data field, and then render it on the bullet screen list independently.Tuning Policies | Implementation Method | Effect |
List Length Limit | Keep the latest 500 messages and remove the excess from the head. | Control memory usage |
Batch Rendering | Update the UI in batches every 300ms instead of refreshing it item by item. | Reduce UI redraw frequency |
View Reuse | Use the recycling mechanism of RecyclerView/UITableView. | Reduce object creation overhead |
Asynchronous Loading | Asynchronously draw views containing images, text, custom fonts, or complex layouts. | Avoid main thread blocking |
GiftStore is the module within AtomicXCore specifically responsible for managing the gift feature in live rooms. In Web3 and broader financial scenarios, gifts can take various asset forms, such as platform points, fiat currency tips, cryptocurrency (including stablecoin) tips, and NFT (Non-Fungible Token) gifts.refreshUsableGifts on the client side to obtain configuration data.List<GiftCategory> data.BarrageStore.sendCustomMessage(). The following is an example of a custom message structure for cryptocurrency tipping:{"type": "live_crypto_tip","tipId": "tip_20260604_001","asset": {"symbol": "USDT", // Token symbol; the stablecoin USDT follows the ERC-20 standard on the Ethereum mainnet"amount": "100.00", // String to avoid JavaScript number precision loss"chain": "ethereum", // Blockchain network identifier (it is recommended to use chainId or a standard chain name)"tokenContract": "0xdAC17F958D2ee...", // Token contract address; can be omitted for native tokens (e.g., ETH/SOL)"txHash": "0xabc123..." // On-chain transaction hash, used for cross-end verification and auditing},"senderId": "user_123","senderName": "Alice","senderAvatar": "https://example.com/avatar.jpg","effectUrl": "https://example.com/effects/usdt-rain.json"}
sendGift.onReceiveGift event. If the deduction fails, the completion of sendGift receives an error.Configuration Item | Description |
Storage Location | Required. You can store files to VOD, COS, or AWS S3. |
Full-room Recording | Used to enable recording for all rooms under the current SDKAppID with one click. After you enable this feature, the system automatically enables recording for all live streaming rooms under the current SDKAppID that meet the following conditions: The live room meets the Applicable Scope. When creating a live room, set IsCloudRecordEnabled to empty (default) or explicitly to true. For details, see Step 2 below. |
IsCloudRecordEnabled parameter is empty. If you set it to false, the room will not be recorded even if full-room recording is enabled.RoomInfo), you can decide whether to record the current room by setting IsCloudRecordEnabled. The specific behavior depends on the parameter value, as shown below:Parameter Value | Description | Room Recording Behavior |
Null | Default Value | Follows the all-room recording setting. That is, if the live streaming room meets the applicable conditions and you have enabled all-room recording in Step 1, the current room will be recorded; otherwise, it will not. |
true | Explicitly Enable Recording | If the live streaming room meets the applicable conditions, the current room will be recorded regardless of the all-room recording setting. |
false | Explicitly Disable Recording | Forcibly not recorded. Even if you have enabled all-room recording in Step 1, the room will not be recorded. |
LiveInfo.seatTemplate for live streaming to videoLandscape4Seats (which enables the landscape multi-seat template suitable for screen sharing). After the LiveListStore.startLive callback succeeds, call DeviceStore.shared().startScreenShare() to start screen sharing.import io.trtc.tuikit.atomicxcore.api.live.LiveListStoreimport io.trtc.tuikit.atomicxcore.api.live.LiveInfoimport io.trtc.tuikit.atomicxcore.api.live.SeatLayoutTemplateimport io.trtc.tuikit.atomicxcore.api.device.DeviceStoreprivate fun startLiveForScreenShare() {val liveInfo = LiveInfo().apply {// 1. Set the live room IDliveID = "test_live_id"// 2. Set the live room nameliveName = "Screen Sharing Live Stream"// 3. Core step: Configure a layout template suitable for screen sharingseatTemplate = SeatLayoutTemplate.VideoLandscape4Seats}// 4. Call LiveListStore to start live streaming and enter the roomLiveListStore.shared().startLive(liveInfo, object : LiveListStore.StartLiveCallback {override fun onSuccess(roomInfo: Any) {// 5. Call the API to start screen sharing. The system automatically triggers the foreground service and system pop-up window.DeviceStore.shared().startScreenShare()}override fun onError(code: Int, message: String) {// Handle live streaming start failure errors}})}
import AtomicXCoreprivate func startLiveForScreenShare() {var liveInfo = LiveInfo()// 1. Set the live room IDliveInfo.liveID = "test_live_id"// 2. Set the live room nameliveInfo.liveName = "Screen Sharing Live Stream"// 3. Core step: Configure a layout template suitable for screen sharing (landscape dynamic 1 video + 3 audio)liveInfo.seatTemplate = .videoLandscape4Seats// 4. Call the LiveListStore singleton to start live streaming and enter the roomLiveListStore.shared.startLive(liveInfo: liveInfo) { [weak self] roomInfo inguard let self = self else { return }// 5. Call startScreenShare to start screen sharingDeviceStore.shared.startScreenShare(appGroup: "group.com.yourcompany.yourapp.screenshare")} onError: { code, message in// Handle live streaming start failure errors}}
import 'package:atomic_x_core/api/live/live_list_store.dart';import 'package:atomic_x_core/api/device/device_store.dart';Future<void> startLiveForScreenShare() async {// 1. Build live streaming room parametersLiveInfo liveInfo = LiveInfo();liveInfo.liveID = "test_live_id";liveInfo.liveName = "Screen Sharing Live Stream";// 2. Core step: Configure a layout template suitable for screen sharing (landscape dynamic 1 video + 3 audio)// Note: The specific enumeration name should match the landscape 4-seat template field defined in your current Flutter SDK.liveInfo.seatTemplate = SeatLayoutTemplate.VideoLandscape4Seats;try {// 3. Call LiveListStore to start live streaming and enter the roomawait LiveListStore.shared.startLive(liveInfo: liveInfo);// 4. Call startScreenShare to start screen sharingawait DeviceStore.shared.startScreenShare(iOSAppGroup: 'group.com.yourcompany.yourapp.screenshare');} catch (e) {// Handle live streaming start or room entry failure errors}}
stopScreenShare() API for each platform.import io.trtc.tuikit.atomicxcore.api.device.DeviceStore/*** Stop Android screen sharing*/fun stopScreenShare() {// Stop screen sharing. The underlying layer automatically terminates the foreground keep-alive service.DeviceStore.shared().stopScreenShare()// Recommendation: Reopen the local camera to resume face-to-camera live streamingDeviceStore.shared().openLocalCamera(isFront: true)}
import AtomicXCore/*** Stop iOS screen sharing*/func stopScreenCapture() {// Stop screen sharing. The underlying layer automatically disconnects communication with the TUIKitReplay extension process.DeviceStore.shared.stopScreenShare()// Recommendation: Restore the local camera feedDeviceStore.shared.openLocalCamera(isFront: true)}
import 'package:atomic_x_core/api/device/device_store.dart';/*** Stop Flutter screen sharing*/Future<void> stopScreenShare() async {// Stop Flutter cross-platform screen sharingawait DeviceStore.shared.stopScreenShare();// Recommendation: Restore the local camera feedawait DeviceStore.shared.openLocalCamera(true);}
LiveListStore.endLive API to end the live stream. The SDK underlying layer automatically executes all the logic for closing screen sharing.AITranscriberStoreMethodology | Parameter | Feature |
startTranscription | (myLanguage: SourceLanguage, config: TranscriptionConfig, completion: CompletionHandler?) | Start real-time transcription/translation |
updateTranscription | (myLanguage: SourceLanguage, config: TranscriptionConfig, completion: CompletionHandler?) | Dynamically switch languages/toggle translation during transcription |
stopTranscription | (completion: CompletionHandler?) | Stop real-time transcription/translation |
import io.trtc.tuikit.atomicxcore.api.ai.*// 1. Create an instanceval store = AITranscriberStore.create(roomID)// 2. Start transcriptionstore.startTranscription(myLanguage = SourceLanguage.CHINESE,config = TranscriptionConfig(enableTranslation = true)) { code, message ->if (code == 0) {// Started successfully} else {// Failed to start: $message}}// 3. Language Switching / Translation Toggle (Update During Runtime)store.updateTranscription(myLanguage = SourceLanguage.ENGLISH,config = TranscriptionConfig(enableTranslation = true)) { code, message ->// handle result}// 4. Stop transcriptionstore.stopTranscription { code, message ->// handle result}
import AtomicXCore// 1. Create an instancelet store = AITranscriberStore.create(roomID: roomID)// 2. Start transcriptionstore.startTranscription(myLanguage: .chinese,config: TranscriptionConfig(enableTranslation: true)) { result inswitch result {case .success:print("Transcription started successfully")case .failure(let error):print("Failed to start transcription: \\(error)")}}// 3. Language Switching / Translation Toggle (Update During Runtime)store.updateTranscription(myLanguage: .english,config: TranscriptionConfig(enableTranslation: true)) { result in// handle result}// 4. Stop transcriptionstore.stopTranscription { result in// handle result}
startTranscription.myLanguage parameter.CreateCloudTranscriptionAPI | Key Input Parameter | Feature |
SdkAppId / RoomId / RoomIdType / TranscriptionParam / AsrParam / TranslationParam | Start a cloud transcription/translation task. | |
SdkAppId / TaskId | Query the status of a cloud transcription/translation task. | |
SdkAppId / TaskId | Stop a cloud transcription/translation task. |
{"SdkAppId": 1400000000, // TRTC SdkAppId"RoomId": "room_xxx", // The TRTC room ID to be transcribed"RoomIdType": 1, // Room ID type: 0 = numeric Room ID, 1 = string Room ID. It must match the actual type."TranscriptionParam": {"UserId": "transcriber_robot_001", // Robot UserId: It must be unique within the room and cannot duplicate the UserId of any anchor/audience."UserSig": "eJxNjs1uwjAQhN_F1xT...", // The signature for this UserId, generated by the backend (not recommended to be generated on the client side)"SubscribeList": [ // The allowlist of users to be transcribed. If left empty or unspecified, all anchor audio will be transcribed.{ "UserId": "anchor_001" }],"MaxIdleTime": 60 // The task is automatically terminated more than 60 seconds after all stream-pushing users have left the room.},"AsrParam": {"Lang": "zh", // The STT model, for example: zh-TW / en / ja / ko / fr ..."VadSilenceTime": 1000, // The VAD silence segmentation threshold in milliseconds. A smaller value makes ASR segmentation faster."VadLevel": 2 // The VAD far-field voice suppression capability. Its value ranges from 0 to 3, and a larger value indicates stronger suppression.},"TranslationParam": {"TargetLang": ["en", "ja"] // The target language(s) for translation (optional, leave empty if translation is not needed), for example: en / ja / ko ...}}
AITranscriberStore to receive transcription/translation messages. This is suitable for client-side subtitle UI rendering and refreshing.realtimeMessageList using the following code. Then, update the RecyclerView data source via DiffUtil or ListAdapter in the collect callback.lifecycleScope.launch {repeatOnLifecycle(Lifecycle.State.STARTED) {store.transcriberState.realtimeMessageList.collect { messages ->adapter.submitList(messages.toList()) // Using ListAdapter + DiffUtil}}}
messages is a list of TranscriberMessage objects. The TranscriberMessage parameters are described as follows:Parameter Name | Type | Description |
segmentId | String | Each user utterance corresponds to a unique segmentId. |
speakerUserId | String | The ID of the speaking user. |
speakerUserName | String | The nickname of the speaking user. |
sourceText | String | The text transcribed from the user's speech. |
translationTexts | Map<TranslationLanguage, String> | The translated text corresponding to the user's speech text, which can be translated into multiple languages. |
timestamp | Long | The timestamp of the current sentence. |
isCompleted | Boolean | Whether the current sentence is completed. |
store.state is a StatePublisher<TranscriberState>. In SwiftUI, you can use it via @ObservedObject, or subscribe to it via Combine in UIKit.// If you use a UITableView to display the message list, simply call reloadData after updating the messages.store.state.subscribe(StatePublisherSelector(keyPath: \\.realtimeMessageList)).receive(on: RunLoop.main).sink { [weak self] in self?.updateMessages($0) }.store(in: &cancellables)
messages is a list of TranscriberMessage objects. The TranscriberMessage parameters are described as follows:Parameter Name | Type | Description |
segmentId | String | Each user utterance corresponds to a unique segmentId. |
speakerUserId | String | The ID of the speaking user. |
speakerUserName | String | The nickname of the speaking user. |
sourceText | String | The text transcribed from the user's speech. |
translationTexts | [TranslationLanguage: String] | The translated text corresponding to the user's speech text, which can be translated into multiple languages. |
timestamp | Int64 | The timestamp of the current sentence. |
isCompleted | Bool | Whether the current sentence is completed. |
Scenario Type | Description |
Content Replay | Restream popular live content or recorded videos to attract more viewers. |
Virtual Anchor | Leverage digital human avatar technology and robot-based stream pushing to implement virtual anchor livestreaming. |
Enterprise Live Streaming | Used for scenarios such as corporate meetings, product launches, and training, it pushes recorded videos to internal or external platforms. |
Game Live Streaming | Push the game screen to the live room, combine it with commentary or background music, and enhance the live streaming effect. |
Educational Live Streaming | Push recorded course videos to the education platform to achieve online teaching. |
Live Shopping | Display product information, promotional activities, and so on, through robot-based stream pushing to enhance sales conversion rates. |
More Scenarios | Any real-time interactive experience based on media streams can be implemented for you via RTMP stream pushing, with more game modes awaiting your exploration. |
trtc for Protocol and fill in the TRTC room entry parameters for ProtocolOption.LiveInfo.metaData, Map<String,String>) of AtomicXCore LiveListStore.updateLiveMetaData, you can also set room metadata using the server-side method set_room_metadata.liveState.currentLive, you can also actively query metadata using the client-side method queryMetaData.updateLiveMetaData. After the write operation, AtomicXCore synchronizes the data to all audience members in real time.// Android (Kotlin)val metaData = hashMapOf("market_focus" to marketCardJson)LiveListStore.shared().updateLiveMetaData(metaData, object : CompletionHandler {override fun onSuccess() { /* Push succeeded */ }override fun onFailure(code: Int, desc: String) { /* Failure handling */ }})
// iOS (Swift)let metaData = ["market_focus": marketCardJson]LiveListStore.shared.updateLiveMetaData(metaData) { result inif case .success = result { /* Push succeeded */ }}
liveState.currentLive. Each time the anchor updates, the latest full metaData is automatically received.// Android: Subscribe to StateFlowscope.launch {LiveListStore.shared().liveState.currentLive.map { it.metaData["market_focus"] }.distinctUntilChanged().collect { json ->if (json != null) renderMarketCard(json) else hideMarketCard()}}// When exiting, call scope.cancel() to cancel subscriptions and avoid coroutine leaks.
// iOS: Subscribe to keyPath using CombineLiveListStore.shared.state.subscribe(StatePublisherSelector(keyPath: \\LiveListState.currentLive.metaData)).removeDuplicates().receive(on: DispatchQueue.main).sink { metaData inguard let json = metaData["market_focus"] else { hideMarketCard(); return }renderMarketCard(json)}.store(in: &cancellables) // The cancellables collection centrally manages the subscription lifecycle.
market_focus) written into metaData by the market quote card.{"symbol": "BTC/USDT", // The currency pair currently being explained"exchange": "binance", // The source of the market quote"last_price": "67890.5", // Latest price (string to avoid precision loss)"change_24h": "+3.21%", // 24-hour price change"kline_url": "/kline/BTC-USDT?interval=15m", // Link to navigate to the market quote page"deeplink": "myapp://market/btc", // In-app navigation"start_timestamp": 1773321389000, // Switch timestamp (in milliseconds), used by the client for diff-based deduplication"status": "active" // Status: active (explanation in progress) / ended (finished)}
expireAt validity period. Once expired, it can no longer be followed. The following requirements must be met:expireAt field. After expiration, the client no longer displays the copy trading entry to prevent viewers from following a trade that has already ended.BarrageStore.sendCustomMessage.// Android (Kotlin)const val BUSINESS_ID = "follow_trade"BarrageStore.create(liveId).sendCustomMessage(BUSINESS_ID, // businessID, used by the receiver for filteringfollowTradeJson, // data: copy trading card JSON stringobject : CompletionHandler {override fun onSuccess() { /* Broadcast succeeded */ }override fun onFailure(code: Int, desc: String) { /* code / desc */ }})
// iOS (Swift)let barrageStore = BarrageStore.create(liveID: liveId)barrageStore.sendCustomMessage(businessID: "follow_trade",data: followTradeJson,completion: nil)
// Android (Kotlin): Subscribe to the custom message event streamprivate val barrageStore = BarrageStore.create(liveId)private val scope = CoroutineScope(Dispatchers.Main)fun start() = scope.launch {barrageStore.customMessageEvent.collect { event ->if (event is CustomMessageEvent.CustomMessageReceived) {val data = event.barrage.data ?: return@collectval json = JSONObject(data)if (json.optString("businessID") != "follow_trade") return@collect // Process only copy trading cards// After verifying the expireAt / KYC level / allowlist, render the copy trading card UI.renderFollowCard(json)}}}// When exiting the live room, call scope.cancel() to avoid coroutine leaks.
// iOS (Swift / Combine): Subscribe to the custom message publisherprivate var cancellables = Set<AnyCancellable>()private lazy var barrageStore = BarrageStore.create(liveID: liveId)func startObserve() {barrageStore.CustomMessageEventPublisher.receive(on: RunLoop.main).sink { [weak self] event inif case .customMessageReceived(barrage: let barrage) = event {guard let d = barrage.data.data(using: .utf8),let json = try? JSONSerialization.jsonObject(with: d) as? [String: Any],json["businessID"] as? String == "follow_trade" else { return }// After verifying the expireAt / KYC level / allowlist, render the copy trading card UI.self?.renderFollowCard(json)}}.store(in: &cancellables) // The cancellables collection centrally manages the subscription lifecycle.}
expireAt), the user's KYC level, and the copy trading allowlist.deeplink is triggered to redirect to the business page for order confirmation, and the business system completes the matching.{"businessID": "follow_trade", // Message type, used by the receiver for filtering"version": 1,"extra": {"trader": {"uid": "trader_001","name": "Alice","winRate": 0.78,"followerCount": 12030,"kycLevel": 2},"trade": {"symbol": "BTC/USDT","side": "long", // Long position opening; 'short' indicates short position opening."leverage": 10, // Perpetual contract leverage multiplier (applicable only to product types that support leverage)"entryPrice": "67890.5","size": "0.5","openTime": 1717477200000},"deeplink": "myapp://trade/follow?orderId=xxx","expireAt": 1717481000000 // Card expiration time (millisecond timestamp). After expiration, the client no longer displays the copy trading button.}}
#vote A, #ask question content).#vote / #ask). If a match is found, the message enters the voting/question pool; otherwise, it is discarded.

BarrageStore / LikeStore / GiftStore modules encapsulated by AtomicXCore, ensuring high synchronization between audio/video and messages (for details, see Business Core Feature Development Practices above).TIMCustomElem): the message body is constructed using createCustomMessage(data, description, extension) and then sent by calling sendMessage. After parsing, the group member client renders them as visual cards.data field is as follows:{"businessID": "strategy_card", // Business type, used by the receiver to route to the corresponding card renderer"kol": { "name": "Alice Investment Research", "winRate": "78%", "followerCount": 12030 },"strategy": {"title": "BTC Swing Strategy · Buy on Pullback","symbol": "BTC/USDT","side": "long", // Long; 'short' indicates short."leverage": 5, // Leverage multiplier (fill in only for products that support leverage)"entryPrice": "67200.0","pnlRate": "+4.2%" // Floating profit and loss (for display purposes)},"deeplink": "myapp://copytrade/follow?strategyId=stg_001", // Click to navigate to the in-app copy trading page"expireAt": 1773321389000 // Expiration time (in milliseconds). After expiration, it degrades to plain text.}
createCustomMessage to encapsulate the card message, and then calls the send message API to send it to the community.Component | Responsibilities |
Client (Sender / Receiver) | Initiate send red packet / open red packet requests; render red packet card UI. |
Chat Service | Message delivery, status update, claim record storage, claim notification push |
Red packet system (business-built) | Red packet lifecycle management: creation, validation, opening, amount calculation |
Payment system (business-built) | Fund management: deduction, transfer, refund |
TIMCustomElem). The key fields of the Data field are as follows:Field | Type | Description |
BusinessID | String | Identifies the message type. For red packet messages, it is fixed as red_packet. |
packet_id | String | The unique identifier of the red packet. It is generated by the red packet system after a successful deduction and is written into the custom message via the REST API, thereby binding the message to the red packet. |
money_amount | Number | The amount of the red packet (for one-to-one red packets). |
best_wishes | String | Best wishes |
cover | String | The URL of the red packet cover image |
status | String | Red packet status: Unopened (not claimed) / Opened (claimed) / None left (all claimed) |
quantity | Number | The number of red packets (for group red packets only) |
total | Number | The total amount of the red packet (for group red packets only) |
random_amount | Boolean | Whether it is a lucky money red packet (random amount) (for group red packets only) |
Data field for a group red packet custom message:{"BusinessID": "red_packet","total": 2.00,"quantity": 3,"random_amount": true,"best_wishes": "Happy New Year!","cover": "https://example.com/cover.png","status": "Unopened","packet_id": "rp_20260301_xyz789"}
key = userID, value = amount, timestamp). The client can read the extension data to render the claim list on the details page.Capability | Use (Red Packet Scenario) | One-on-One Chat Message Locator Parameter | Group Chat Message Locator Parameter |
Message modification | Updates the red packet status (Unopened > Opened > None left), and the change is visible to all clients. | From_Account + To_Account + MsgKey | GroupId + MsgSeq |
Message extension | Attaches claim record KV without modifying the original message, and the change is synchronized to all clients in real time. | From_Account + To_Account + MsgKey | GroupId + MsgSeq |
SupportMessageExtension to 1 when sending the message.packet_id is generated. Finally, the red packet system server, acting as the sender, uses the Send Private Message REST API to send the red packet as a custom message.status to Opened via the Modify Private Message History REST API, and pushes a XX claimed your red packet notification to the sender via a REST API.quantity / total / random_amount fields to Data.status is updated to None left via the Modify Group Message History REST API.Module | Entries | Responsibilities |
User end (Client) | Web / H5 / App (Web, iOS, Android UIKit) | Serves as the user inquiry entry point, where inquiries are first handled by a chatbot and can be transferred to a human agent with one click. Supports text, multimedia, and card messages. |
Management end (Management Panel) | desk.tencentcloud.com (password-free login for super administrators) | Configure chatbot knowledge base/task flows, conversation flows and routing rules, service modes, queuing and working hours, team/role management, and data dashboards. |
Agent workspace (Agent Workspace) | desk.tencentcloud.com (login with agent email + password) | Agent reception and session closure, session transfer, proactive session initiation, satisfaction rating, internal agent chat |
Step | Operation |
① Create a Desk Application. | In the Cloud Contact Center console, select Desk to claim a 7-day free trial. To integrate with conversation data, you can associate a Tencent Chat application. |
② Experience Client Capabilities. | Go to Admin Console (super administrator password-free login), directly experience the full process of sending messages, chatbot responses, and transferring to human agents in the "Client Configuration" section, and obtain the user end link / QR code / access code. |
③ Go to the Workbench to Experience. | In the Admin Console, click "Go to Workspace" to handle sessions transferred to human agents as an agent. |
Capability | Description | Web3 / General Finance Use Cases |
Q&A database (Q&A Database) | Configure standard questions, similar queries, and answers, supporting manual addition / batch import / editing. | Transaction fees, contract rules, KYC procedures, deposit/withdrawal, and other common issues |
Task flow (Task Flow) | Orchestrate multi-turn conversations and guide users step by step based on their input. | Guided KYC, account recovery, and appeal process |
Chitchat library (Chitchat) | Respond to greetings and chitchat to enhance the user experience. | Opening greetings and waiting reassurance |
QA optimization (QA Optimization) | Cluster questions, collect unrecognized queries, and continuously enrich the knowledge base. | Discover high-frequency uncovered issues and iterate. |
Stage | Description |
Reception and session closure | Agents accept queued user sessions and complete the response / end the session. |
Session transfer | Complex issues (such as disputes and risk control) are transferred to more specialized agents or agent groups and assigned by routing rules. |
Initiate session proactively | Agents can proactively initiate consultations with designated users (such as risk event alerts and KYC follow-ups). |
Satisfaction survey | The end of a session triggers user rating, which accumulates service quality data. |
Data dashboard | The management console views real-time reception, Conversation Analytics, agent performance, and historical sessions (exportable). |
Comparison Dimension | WeChat Official Account-like | WhatsApp Channel-like | Platform Official Account |
Applicable Scope | Open to external project parties / organizations; the merchant end and user end must be separated into two identities (two apps or dual-mode switching). | Open to external project parties / organizations; within the same App / Web, a publisher and a user identity can be held simultaneously. | Only builds the platform's own official account, not open to external publishers. |
Implementation Base | Chat native official account capability | Chat Community (Community) | Chat native official account capability |
Management Feature | Requires building a publisher management backend | Requires building a publisher management backend | |
Message Interaction | Broadcast messages (one-to-many posts) + private chat messages (one-to-one private messages) | Group chat messages (one-to-many posts) + Emoji reactions (adding emojis to posts) | Broadcast messages + private chat messages |
Subscription Scale | Calculated based on the number of official account subscribers | Single account: 100,000 - 1,000,000 (community capacity) | Calculated based on the number of official account subscribers |
Official Account Action | Underlying Implementation | Key APIs |
Create Official Account | Create a Community group ( groupType=Community), mark it as an "Official Account" via a group custom field, distinguishing it from regular groups. | |
Subscribe / Unsubscribe | Join / leave a community. After subscription, use conversation grouping to separately display unread messages from official account conversations and regular chats. | |
Obtain Official Account List | Pull the list of joined communities, then filter out communities marked as official accounts based on group custom fields. | |
Publish posts | Official account owners / administrators invoke group chat to send messages, supporting text, rich media, and custom messages (such as market quote cards, research report cards). | |
Subscriber interaction | Subscribers react to posts with Emoji. |
subscribeOfficialAccount / unsubscribeOfficialAccount and receives subscription, profile change, and termination notifications through listeners such as onOfficialAccountSubscribed.sendMessage (with the receiver field filled with the Official Account ID), while the administrator on the Official Account side uses Send Private Message to a Single User (with From_Account filled with the Official Account ID and To_Account filled with the subscriber ID).
Benefits | Description |
Zero-maintenance status | The platform automatically identifies user online/offline status, switches between the self-built online channel and vendor offline channels according to the default full-coverage policy, and eliminates the need for businesses to maintain a user status system themselves. |
Global high availability | Globally, over 3200 acceleration nodes are accessed nearby, which, combined with the self-developed optimal routing algorithm for intelligent path selection, effectively reduces cross-border transmission latency and packet loss, with service reliability exceeding 99.99%. |
Ultra-fast delivery | Leveraging persistent connections to achieve millisecond-level precise delivery, 10 million messages can be fully delivered within 30 seconds, ensuring critical messages such as market data and risk alerts reach users at the first opportunity. |
Simplified integration | Download and import the JSON configuration from the console to enable one-click integration with various vendor channels, while the SDK automatically handles registration, Token reporting, and data statistics. It already covers all mainstream offline channels, including APNs, FCM, Huawei, Honor, Xiaomi, OPPO, VIVO, and Meizu. |
Full-stack coverage | A single capability uniformly adapts to mainstream development platforms such as Android / iOS / Flutter / uni-app / React Native / HarmonyOS / Unity / Unreal Engine. |
Compliant and trustworthy | Offers optional overseas data centers in multiple locations such as Singapore, Jakarta, Seoul, Tokyo, Frankfurt, Silicon Valley, and Riyadh, supports encrypted data transmission/storage, privacy compliance, and global security certifications, and meets the compliance requirements for global financial services. |
Push Method | Description | Typical Use Cases |
Broadcast push | System-level reach to all users | Sharp price rise alerts, platform announcements, and version updates |
Tag-based push | Push notifications grouped by holding position / language / region | Market Alert, airdrop preheating, and event push |
Push to specified UserIDs | Batch push to a specified user list | Risk control alarm, personalized operation, and targeted recall |
Chat message push | Offline push triggered by instant messaging messages | Private messages, group chats, and customer service replies |
Voice and video call push | Push notification triggered by a Call | AI digital human interview invitations and KOL 1v1 investment advisory calls |
Step | Operation | Key Notes |
① Activate Service | Create an application and enable Push in the console. New users can claim a full-feature trial version twice, each lasting for 7 days. | Obtain the SDKAppID and client secret AppKey |
② Configure Vendor Channels | Download the JSON configuration file from the console and import it into your project to complete the configuration for APNs / FCM and various Android vendor push notifications with one click. | The plugin automatically handles registration, Token reporting, and data statistics. |
③ Integrate SDK and Register | Import TIMPush and call registerPush(SDKAppID, appKey) to register. Upon success, you can receive online push notifications and obtain the unique device push identifier RegistrationID via getRegistrationID(). | The RegistrationID changes upon uninstallation and reinstallation. To link it with the Chat UserID, use setRegistrationID(userID) to bind them. |
④ Initiate Push | Call initiate all-user/Tag push or single-user push from the server side, or deliver it visually in the console. | During the joint debugging phase, you can first specify the RegistrationID to perform online push verification. |
⑤ Click to Navigate | Register the onNotificationClicked(ext) callback on the client side, parse the ext to navigate to the business page. For details, see Custom Click Navigation. | It is recommended to register during Application/AppDelegate startup. |
Capability | Description | Benefits |
Push data conversion funnel | Statistics are performed in stages based on "Sendable Count → Sent Count → Delivered Count → Click Count", and the Actual Send Rate / Delivery Rate / Click Rate are provided. | Pinpoint the stage with the most severe churn and optimize accordingly. |
Push record query | Search historical pushes (retained for the last 7 days) by time window / task ID / sender/receiver UserID. | Post-event audit and issue review |
Message link query | Perform end-to-end tracing of a single message (Chat server → vendor server → terminal device → user click) using the Push ID / Task ID. | Quickly answer the question "Why wasn't this message received?". |
Push loss analysis | Perform interval-based, layered attribution for "Sendable Count → Sent Count" and "Sent Count → Delivered Count" (such as vendor rejection, Token invalidation, notification bar disabled, user uninstall, and so on). | Reduce ineffective deliveries and optimize costs. |
Full lifecycle data statistics | Provides complete metrics from push delivery to client-side display and click, supporting categorized viewing by vendor dimension. | Evaluate ROI by integrating business data. |
Push troubleshooting tool | Automatically diagnoses issues in all stages of access and delivery, and provides clear resolution guidance. | Reduce Ops investment. |
PushStage field and carries fields such as TaskId, To_Account, and PushPlatform. This enables the business side to integrate the push delivery chain with its own risk control and conversion systems for closed-loop attribution. For more details, refer to Push Data Statistics.
Step | Implementation Key Points |
① Market data ingestion | The business side connects to the exchange/market data source WebSocket and monitors threshold rules (price change/volume/on-chain events, such as large transfers, contract calls, airdrop openings). |
② User classification | Multi-dimensional classification based on Chat Tag/attribute system, according to held currencies/watchlist stocks/language/risk preference/region |
③ Push and Deliver | Call Pushing to All/Tagged Users to precisely target users based on Condition; enable rate-limited push during peak hours to avoid instantaneous traffic surges impacting the business backend. |
④ Offline Fallback | Users who are offline use the vendor's offline channel; Android devices without vendor certificates configured are covered by a 7-day offline message storage mechanism. |
⑤ Conversion Tracking and Data Collection | The Ext field carries business identifiers (such as alert_id/campaign_id). After the client clicks, it writes back conversion logs, which are then combined with push callbacks to form a complete data statistics pipeline. |
Term | English / Full Name | Meaning in This Solution |
Web3 | Web 3.0 | A decentralized network paradigm based on blockchain, with the core feature of user-held assets and identity. |
CEX / DEX | Centralized / Decentralized Exchange | Centralized Exchange / Decentralized Exchange |
KYC | Know Your Customer | Identity verification process, which is a mandatory requirement for licensed businesses in most jurisdictions. |
AMA | Ask Me Anything | A 1:N interactive livestream format between project teams and communities, commonly seen on exchanges, with KOLs, and among protocol teams. |
KOL | Key Opinion Leader | Key opinion leaders, who are content creators and opinion shapers within communities. |
Meme Coin | Meme Coin | A cryptocurrency that originates from internet memes or community culture (e.g., DOGE / SHIB), typically characterized by high volatility and strong community attributes. |
MemeFi | Meme + DeFi | A form that builds upon Meme Coin by adding DeFi capabilities such as staking, profit sharing, and governance. |
LiveFi | Live + Finance | A financialized game mode deeply integrated with livestreaming (such as livestream tipping, livestream copy trading, and livestream on-chain interaction). |
GameFi | Game + Finance | Gamified finance, a "play-to-earn" model, often driven by NFT assets / token rewards. |
NFT | Non-Fungible Token | Non-fungible tokens, each with uniqueness, commonly used for digital collectibles / credentials / identity. |
SBT | Soulbound Token | Soulbound tokens, non-transferable on-chain identity and achievement credentials. |
POAP | Proof of Attendance Protocol | Proof of Attendance Protocol, commonly used as on-chain proof for event / livestream participation. |
Tokenomics | Token Economics | Token economics, encompassing designs for total supply, distribution, release schedule, termination, incentives, and more. |
Smart Contract | Smart Contract | Smart contracts, self-executing code deployed on a blockchain. |
On-chain Reputation | On-chain Reputation | A credibility score comprehensively evaluated based on the public behaviors of a wallet address (such as transaction history, protocol interactions, contract deployments, and so on), commonly used for airdrop eligibility determination. |
Airdrop | Airdrop | A user acquisition and incentive method where the project party distributes tokens / NFTs for free to target users. |
Stablecoin | Stablecoin | A cryptocurrency pegged to fiat currency (mostly USD), such as USDT / USDC / DAI. |
Custodial Wallet | Custodial Wallet | A wallet whose private keys are custodied by the platform, commonly found in exchange-built-in wallets. |
Social Trading / Copy Trading | Social trading / Copy trading | A trading form that subscribes to signal source anchor policies and automatically replicates orders. |
txHash | Transaction Hash | The unique identifier for an on-chain transaction, usable for cross-end verification and auditing. |
Confirmations | Confirmations | The cumulative number of confirmations for a transaction by the blockchain, where a higher number of confirmations makes the transaction more irreversible. |
Esta página foi útil?
Você também pode entrar em contato com a Equipe de vendas ou Enviar um tíquete em caso de ajuda.
comentários