
场景 | 玩法摘要 | 关键能力 |
AMA(Ask Me Anything) | 项目方与社区 1:N 互动;连麦、投票、文本转录、屏幕共享共读白皮书 | 视频直播、连麦互动、投票卡片、字幕转录、屏幕共享 |
社区管理与去中心化协作 | KOL 群聊、富媒体(图片 / 语音 / 文件 / 表情)、群权限管理、消息搜索 / 引用 / 历史漫游 | 百万人社群(Community)、消息卡片、文件传输 |
Market Alert 市场警报系统 | 行情异动、空投预热、风控告警秒级触达;按语言 / 标签 / 持仓分组推送 | Push 高并发、标签分组推送、离线消息推送 |
直播投顾与解盘 | 行情共读、社交跟单(Social / Copy Trading)、链上声誉 / 持牌资质、打赏转化 | 视频直播、屏幕共享、礼物系统、跟单卡片、订单回写 |
MemeFi Live Interaction | 主播发起链上互动,观众通过链上合约或代币质押参与;游戏化交易(GameFi 玩法) | 互动直播、链上事件回调、智能合约、礼物系统 |
业务域 | 核心职责 | 技术基座 | 提供方 |
直播域 | 房间管理、音视频通信、连麦互动、弹幕礼物、转录翻译 | Live AtomicXCore + AI 转录/翻译 | 腾讯云 |
即时通信域 | 单聊、群聊、社群(Community)、公众号、智能客服 | Chat | 腾讯云 |
触达推送域 | 行情秒推、营销通知、订单提醒、离线触达 | Push | 腾讯云 |
资产交易域 | 钱包、跟单、订单、链上结算、红包 / 转账 | 业务自建(钱包 / 支付 / 链上服务) | 客户侧 |
风控合规域 | KYC、内容审核、风险提示、操作审计 | 云端内容理解 + 业务自建风控 | 腾讯云 + 客户侧 |
客服服务域 | 售前咨询、纠纷拉群、坐席流转、机器人 FAQ | 在线会话(Desk) | 腾讯云 |
服务 | 核心职责 | 对外接口 | 依赖的能力 |
直播服务 | 房间管理、成员管理、连麦管理、消息管理、字幕服务 | REST API | Live REST API + AI 转录 |
鉴权服务 | UserSig 生成与刷新、STS 临时凭证签发、Role 授权 | REST API | RTC Engine / Chat 鉴权服务 + STS |
钱包/资产服务 | 账户体系、链上托管、链上提现、转账、风控 | REST API | 支付系统 + 链上服务 |
红包服务 | 红包活动管理、抢红包、退款、幂等控制 | REST API | 支付系统 + 钱包服务 + Chat 自定义消息 |
跟单/订单服务 | 跟单卡片下发、一键跟单、订单回写、撮合接入 | REST API | 业务交易系统 |
推送编排服务 | 多语言推送编排、标签分群、转化统计 | REST API | Push 服务 |
审核合规服务 | 内容审核回调、KYC、强禁言、风险事件 | REST API + Webhook | 内容理解 + 业务风控 |
用户服务 | 账号体系、KYC 等级、粉丝关系、链上身份 | REST API | Chat 账户体系 |
客服服务 | 会话路由、机器人接待、智能应答 | REST API + Webhook | 在线会话(Desk)/ 智能客服 |
数据服务 | 直播数据统计、转化分析、用户画像 | 异步消息 + 批处理 | 数据仓库 |
create(liveID) 获取,内部实现为同一 liveID 返回同一实例。Store/Component | 功能描述 | API 文档 |
LiveCoreView | 直播视频流展示与交互的核心视图组件:负责视频流渲染和视图挂件处理,支持主播直播、观众连麦、主播连线等场景。 | |
LiveListStore | 直播间全生命周期管理:创建 / 加入 / 离开 / 销毁房间,查询房间列表,修改直播信息(名称、公告等),监听直播状态(如被踢出、结束)。 | |
DeviceStore | 音视频设备控制:麦克风(开关 / 音量)、摄像头(开关 / 切换 / 画质)、屏幕共享,设备状态实时监听。 | |
CoGuestStore | 观众连麦管理:连麦申请 / 邀请 / 同意 / 拒绝,连麦成员权限控制(麦克风 / 摄像头),状态同步。 | |
CoHostStore | 主播跨房连线:支持多布局模板(动态网格等),发起 / 接受 / 拒绝连线,连麦主播互动管理。 | |
BattleStore | 主播 PK 对战:发起 PK(配置时长 / 对手),管理 PK 状态(开始 / 结束),同步分数,监听对战结果。 | |
GiftStore | 礼物互动:获取礼物列表,发送 / 接收礼物,监听礼物事件(含发送者、礼物详情)。 | |
BarrageStore | 弹幕功能:发送文本 / 自定义弹幕,维护弹幕列表,实时监听弹幕状态。 | |
LikeStore | 点赞互动:发送点赞,监听点赞事件,同步总点赞数。 | |
LiveAudienceStore | 观众管理:获取实时观众列表(ID / 名称 / 头像),统计观众数量,监听观众进出事件。 | |
AudioEffectStore | 音频特效:变声(童声 / 男声)、混响(KTV 等)、耳返调节,实时切换特效。 | |
BaseBeautyStore | 基础美颜:调节磨皮 / 美白 / 红润(0-9 级),重置美颜状态,同步效果参数。 |
MetaData)能力,在房间内存储和同步任何业务相关的信息(如当前讲解的币种、当前在播的策略 ID);复用自定义消息(CustomMessage)能力,在房间内广播任何业务相关的消息(如跟单卡片、行情卡片、订单成交回执)。功能模块 | 核心能力 | 与直播间的联动方式 |
钱包 / 账户 | 余额查询、链上托管、提现、转账 | 进房展示资产卡片;连麦 / 打赏 / 红包扣款链路 |
行情服务 | 多币种行情、K 线、深度 | 主播切换讲解币种时通过房间自定义信息存储和同步 |
跟单 / 策略 | 策略发布、跟单订阅、净值结算 | 主播通过自定义消息在直播间发布交易策略 / 跟单卡片 |
订单 / 撮合 | 下单、撤单、成交回执 | 订单卡片回写直播间,并以系统消息形式在弹幕区展示 |
功能模块 | 核心能力 | 与直播间的联动方式 |
直播审核 | 视频 + 音频内容理解,违规识别 | 审核命中触发关播 / 警告 / 封禁 |
消息审核 | 单聊 / 群聊 / 群成员资料审核 | 直播间弹幕内容审核、直播间用户资料审核 |
KYC | 实名认证、身份分级 | 连麦、提现、跟单等操作前置校验 |
审计留痕 | 消息留存、操作日志、双录系统 | 直播云端录制、合规凭证与追溯 |
功能模块 | 核心能力 | 与直播间的联动方式 |
账号体系 | 注册、登录、关系链、用户资料 | 为直播观看、交易、连麦提供身份基础 |
会员等级 | VIP、积分、链上声誉评分(On-chain Reputation) | 影响连麦优先级、客服等级、跟单权重 |
粉丝社群 | 社群(Community)、分组、话题、公告 | 直播预热、福利发放、用户沉淀 |
公众号 | 广播推文、订阅、互动 | 品牌资讯、项目方 / 机构资讯、平台公告 |
功能模块 | 核心能力 | 与直播间的联动方式 |
行情秒推 | 高并发30秒级下发、按标签 / 指定用户分类 | 币价异动秒级触达,第一时间唤起 App |
直播预告 | 直播预约、开播提醒 | 开播前自动唤醒关注用户 |
营销推送 | 空投预热、活动通知、社区福利 | 提升 DAU 与活跃度 |
交易通知 | 订单成交、提现到账、风控告警 | 实时通知用户资产变动等重要消息 |
LoginStore 完成登录,这是使用 AtomicXCore 所有功能的关键前提。层级 | 作用 | 说明 |
底层 | LiveCoreView | 承载本地预览或远端视频 |
中层 | 主播信息、行情卡片、跟单卡片、字幕显示、在线人数 | 常驻轻交互信息 |
上层 | 弹幕、礼物、连麦弹窗 | 高频动态交互 |
顶层 | 结束直播确认、风控告警、合规拦截 | 阻断式操作与兜底提示 |
管理项 | 说明 |
麦克风管理 | 打开/关闭麦克风,设置采集音量和输出音量 |
摄像头管理 | 打开/关闭摄像头,切换前后摄像头,设置镜像和视频质量 |
音频路由 | 切换扬声器和听筒 |
屏幕分享 | 开启和关闭屏幕分享功能(PC 推流助手、行情共享场景) |
网络状态 | 实时监控网络质量信息 |
LiveListStore.shared().createLive 创建房间,并自动进入房间开始推流。create_room 创建一个空房间,主播客户端还需调用 LiveListStore.shared().joinLive 进入房间开始推流。LiveListStore.shared().endLive 结束直播。destroy_room 解散房间。AtomicXCore 框架中的 BarrageStore 模块,能为您的直播应用快速集成功能丰富、性能卓越的弹幕系统。类型 | 用途 | 展示方式 |
普通文本消息 | 咨询、互动、情绪表达 | 飘屏 / 弹幕列表 |
自定义消息 | 跟单卡片、成交回执、特效弹幕 | 特效 / 卡片消息 |
本地提示 | 进入房间、连麦状态、风控提示 | 本地 / 系统消息 |
BarrageStore.sendCustomMessage() 发送弹幕消息,其中 data 插入从业务后端获取到的等级 / 身份信息。收到消息时,解析 data 中的等级 / 身份信息,之后自行在弹幕列表上渲染。优化策略 | 实现方式 | 效果 |
列表长度限制 | 保留最近500条消息,超出部分从头部移除 | 控制内存占用 |
批量渲染 | 每300ms 批量更新一次 UI,而非逐条刷新 | 减少 UI 重绘次数 |
视图复用 | 使用 RecyclerView/UITableView 的复用机制 | 降低对象创建开销 |
异步加载 | 图文、自定义字体或复杂布局的视图异步绘制 | 避免主线程阻塞 |
GiftStore 是 AtomicXCore 中专门负责管理直播间礼物功能的模块。在 Web3与泛金融场景下,礼物可以是平台积分、法币打赏、加密货币(含稳定币)打赏、NFT(非同质化代币)礼物等多种资产形态。refreshUsableGifts 获取配置数据。List<GiftCategory> 数据填充礼物面板。BarrageStore.sendCustomMessage() 发送自定义消息作为补充。以下为加密货币打赏自定义消息结构示例:{"type": "live_crypto_tip","tipId": "tip_20260604_001","asset": {"symbol": "USDT", // 代币符号;稳定币 USDT 在以太坊主网遵循 ERC-20 标准"amount": "100.00", // 字符串避免 JS 数字精度丢失"chain": "ethereum", // 区块链网络标识(建议使用 chainId 或标准链名)"tokenContract": "0xdAC17F958D2ee...", // 代币合约地址;原生代币(如 ETH / SOL)可省略"txHash": "0xabc123..." // 链上交易哈希,用于跨端校验与审计},"senderId": "user_123","senderName": "Alice","senderAvatar": "https://example.com/avatar.jpg","effectUrl": "https://example.com/effects/usdt-rain.json"}
sendGift。onReceiveGift 事件;扣费失败,sendGift 的 completion 收到错误。IsCloudRecordEnabled 参数的默认值为空。若将其设为 false,即使开启全房间录制,该房间也不会被录制。LiveInfo.seatTemplate 为 videoLandscape4Seats(即开启适合屏幕共享的横屏多座位模板),请在 LiveListStore.startLive 成功回调后,再调用 DeviceStore.shared().startScreenShare() 开启屏幕分享。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. 设置直播的房间 IDliveID = "test_live_id"// 2. 设置直播的房间名称liveName = "屏幕分享直播"// 3. 核心步骤:配置适合屏幕分享的布局模板seatTemplate = SeatLayoutTemplate.VideoLandscape4Seats}// 4. 调用 LiveListStore 开始直播并进房LiveListStore.shared().startLive(liveInfo, object : LiveListStore.StartLiveCallback {override fun onSuccess(roomInfo: Any) {// 5. 调用接口开启屏幕分享,系统会自动触发前台服务与系统弹窗DeviceStore.shared().startScreenShare()}override fun onError(code: Int, message: String) {// 处理开播失败错误}})}
import AtomicXCoreprivate func startLiveForScreenShare() {var liveInfo = LiveInfo()// 1. 设置直播的房间 IDliveInfo.liveID = "test_live_id"// 2. 设置直播的房间名称liveInfo.liveName = "屏幕分享直播"// 3. 核心步骤:配置适合屏幕分享的布局模板(横屏动态 1 视频 + 3 音频)liveInfo.seatTemplate = .videoLandscape4Seats// 4. 调用 LiveListStore 单例开始直播并进房LiveListStore.shared.startLive(liveInfo: liveInfo) { [weak self] roomInfo inguard let self = self else { return }// 5. 调用 startScreenShare 开启屏幕分享DeviceStore.shared.startScreenShare(appGroup: "group.com.yourcompany.yourapp.screenshare")} onError: { code, message in// 处理开播失败错误}}
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. 构建开播房间参数LiveInfo liveInfo = LiveInfo();liveInfo.liveID = "test_live_id";liveInfo.liveName = "屏幕分享直播";// 2. 核心步骤:配置适合屏幕分享的布局模板(横屏动态 1 视频 + 3 音频)// 注:具体枚举名请对齐您当前 Flutter SDK 定义的横屏 4 座位模板字段liveInfo.seatTemplate = SeatLayoutTemplate.VideoLandscape4Seats;try {// 3. 调用 LiveListStore 开始直播并进房await LiveListStore.shared.startLive(liveInfo: liveInfo);// 4. 调用 startScreenShare 开启屏幕分享await DeviceStore.shared.startScreenShare(iOSAppGroup: 'group.com.yourcompany.yourapp.screenshare');} catch (e) {// 处理开播或进房失败错误}}
stopScreenShare() 接口。import io.trtc.tuikit.atomicxcore.api.device.DeviceStore/*** 停止 Android 屏幕共享*/fun stopScreenShare() {// 停止屏幕共享,底层会自动销毁前台保活服务DeviceStore.shared().stopScreenShare()// 推荐:重新打开本地摄像头恢复露脸直播DeviceStore.shared().openLocalCamera(isFront: true)}
import AtomicXCore/*** 停止 iOS 屏幕共享*/func stopScreenCapture() {// 停止屏幕共享,底层会自动断开与 TUIKitReplay 扩展进程的通信DeviceStore.shared.stopScreenShare()// 推荐:恢复本地摄像头画面DeviceStore.shared.openLocalCamera(isFront: true)}
import 'package:atomic_x_core/api/device/device_store.dart';/*** 停止 Flutter 屏幕共享*/Future<void> stopScreenShare() async {// 停止 Flutter 跨平台屏幕共享await DeviceStore.shared.stopScreenShare();// 推荐:恢复本地摄像头画面await DeviceStore.shared.openLocalCamera(true);}
LiveListStore.endLive,SDK 底层会自动执行关闭屏幕分享的全部逻辑。AITranscriberStore方法 | 参数 | 作用 |
startTranscription | (myLanguage: SourceLanguage, config: TranscriptionConfig, completion: CompletionHandler?) | 启动实时转录/翻译 |
updateTranscription | (myLanguage: SourceLanguage, config: TranscriptionConfig, completion: CompletionHandler?) | 转录过程中动态切换语言/开关翻译 |
stopTranscription | (completion: CompletionHandler?) | 停止实时转录/翻译 |
import io.trtc.tuikit.atomicxcore.api.ai.*// 1. 创建实例val store = AITranscriberStore.create(roomID)// 2. 启动转写store.startTranscription(myLanguage = SourceLanguage.CHINESE,config = TranscriptionConfig(enableTranslation = true)) { code, message ->if (code == 0) {// 启动成功} else {// 启动失败: $message}}// 3. 语言切换 / 翻译开关(运行中更新)store.updateTranscription(myLanguage = SourceLanguage.ENGLISH,config = TranscriptionConfig(enableTranslation = true)) { code, message ->// handle result}// 4. 停止转写store.stopTranscription { code, message ->// handle result}
import AtomicXCore// 1. 创建实例let store = AITranscriberStore.create(roomID: roomID)// 2. 启动转写store.startTranscription(myLanguage: .chinese,config: TranscriptionConfig(enableTranslation: true)) { result inswitch result {case .success:print("转写启动成功")case .failure(let error):print("转写启动失败: \\(error)")}}// 3. 语言切换 / 翻译开关(运行中更新)store.updateTranscription(myLanguage: .english,config: TranscriptionConfig(enableTranslation: true)) { result in// handle result}// 4. 停止转写store.stopTranscription { result in// handle result}
startTranscription。myLanguage 参数自动确定。CreateCloudTranscription接口 | 关键入参 | 作用 |
SdkAppId / RoomId / RoomIdType / TranscriptionParam / AsrParam / TranslationParam | 开始云端转录/翻译任务 | |
SdkAppId / TaskId | 查询云端转录/翻译任务状态 | |
SdkAppId / TaskId | 停止云端转录/翻译任务 |
{"SdkAppId": 1400000000, // TRTC SdkAppId"RoomId": "room_xxx", // 被转录的 TRTC 房间号"RoomIdType": 1, // 房间号类型:0=数字房间号,1=字符串房间号;必须与实际类型一致"TranscriptionParam": {"UserId": "transcriber_robot_001", // 机器人 UserId:房间内唯一,不能与主播/观众重复"UserSig": "eJxNjs1uwjAQhN_F1xT...", // 该 UserId 的签名,由后台生成(不建议在端侧生成)"SubscribeList": [ // 转录用户白名单,为空或不填表示转录所有主播音频{ "UserId": "anchor_001" }],"MaxIdleTime": 60 // 房间内推流用户全部离开后超过 60 秒自动结束任务},"AsrParam": {"Lang": "zh", // STT 模型,例:zh-TW / en / ja / ko / fr ..."VadSilenceTime": 1000, // VAD 静音断句阈值,单位 ms,更小的值会让语音识别分句更快"VadLevel": 2 // VAD 远场人声抑制能力,范围为[0, 3],越大的值抑制能力越强},"TranslationParam": {"TargetLang": ["en", "ja"] // 翻译的目标语言(可选,不需要翻译时不填),例:en / ja / ko ...}}
AITranscriberStore 的响应式数据中监听回调接收转录/翻译消息,适合用于端侧字幕 UI 渲染与刷新。realtimeMessageList 的 StateFlow,在 collect 回调中通过 DiffUtil 或 ListAdapter 更新 RecyclerView 数据源即可。lifecycleScope.launch {repeatOnLifecycle(Lifecycle.State.STARTED) {store.transcriberState.realtimeMessageList.collect { messages ->adapter.submitList(messages.toList()) // 使用 ListAdapter + DiffUtil}}}
messages 是 TranscriberMessage 的列表,TranscriberMessage 参数说明:参数名 | 类型 | 描述 |
segmentId | String | 用户的每句话都对应一个唯一的 segmentId。 |
speakerUserId | String | 说话用户的 ID。 |
speakerUserName | String | 说话用户的昵称。 |
sourceText | String | 用户的语音转文本。 |
translationTexts | Map<TranslationLanguage, String> | 用户语音文本对应的翻译文本,可翻译成多种语言。 |
timestamp | Long | 当前句子的时间戳。 |
isCompleted | Boolean | 当前句子是否已经完成。 |
store.state 是 StatePublisher<TranscriberState>,在 SwiftUI 中可以通过 @ObservedObject 使用,或在 UIKit 中通过 Combine 订阅。// 假如以 UITableView 显示消息列表,更新消息后,reloadData 即可store.state.subscribe(StatePublisherSelector(keyPath: \\.realtimeMessageList)).receive(on: RunLoop.main).sink { [weak self] in self?.updateMessages($0) }.store(in: &cancellables)
messages 是 TranscriberMessage 的列表,TranscriberMessage 参数说明:参数名 | 类型 | 描述 |
segmentId | String | 用户的每句话都对应一个唯一的 segmentId。 |
speakerUserId | String | 说话用户的 ID。 |
speakerUserName | String | 说话用户的昵称。 |
sourceText | String | 用户的语音转文本。 |
translationTexts | [TranslationLanguage: String] | 用户语音文本对应的翻译文本,可翻译成多种语言。 |
timestamp | Int64 | 当前句子的时间戳。 |
isCompleted | Bool | 当前句子是否已经完成。 |
场景类型 | 说明 |
内容重播 | 将热门直播内容或录播视频重新推流,吸引更多观众观看。 |
虚拟主播 | 结合数字人虚拟形象技术,通过机器人推流实现虚拟主播的直播。 |
企业直播 | 用于企业会议、产品发布会、培训等场景,将录制的视频推流到内部或外部平台。 |
游戏直播 | 将游戏画面推流到直播间,结合解说或背景音乐,提升直播效果。 |
教育直播 | 将录制的课程视频推流到教育平台,实现线上教学。 |
电商直播 | 通过机器人推流展示商品信息、促销活动等,提升销售转化率。 |
更多场景 | 任何基于媒体流的实时互动体验玩法,均可通过 RTMP 推流帮您实现,更多玩法等待您的探索。 |
Protocol 选择 trtc,ProtocolOption 需填写 TRTC 各项进房参数。LiveListStore 的房间元数据(LiveInfo.metaData,Map<String,String>)实现。updateLiveMetaData 更新元数据,您还可以通过服务端方法 set_room_metadata 设置房间元数据。liveState.currentLive 获取元数据,您还可以通过客户端方法 queryMetaData 主动查询元数据。updateLiveMetaData 写入,写入后 AtomicXCore 实时同步给所有观众。// Android (Kotlin)val metaData = hashMapOf("market_focus" to marketCardJson)LiveListStore.shared().updateLiveMetaData(metaData, object : CompletionHandler {override fun onSuccess() { /* 推送成功 */ }override fun onFailure(code: Int, desc: String) { /* 失败处理 */ }})
// iOS (Swift)let metaData = ["market_focus": marketCardJson]LiveListStore.shared.updateLiveMetaData(metaData) { result inif case .success = result { /* 推送成功 */ }}
liveState.currentLive,主播每次更新都会自动收到最新的全量 metaData。// Android:订阅 StateFlowscope.launch {LiveListStore.shared().liveState.currentLive.map { it.metaData["market_focus"] }.distinctUntilChanged().collect { json ->if (json != null) renderMarketCard(json) else hideMarketCard()}}// 退出时 scope.cancel() 取消订阅,避免协程泄漏
// iOS:Combine 订阅 keyPathLiveListStore.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) // 由 cancellables 统一管理订阅生命周期
market_focus 对应的 JSON)结构示例如下。{"symbol": "BTC/USDT", // 当前讲解币对"exchange": "binance", // 行情来源"last_price": "67890.5", // 最新价(字符串避免精度丢失)"change_24h": "+3.21%", // 24h 涨跌幅"kline_url": "/kline/BTC-USDT?interval=15m", // 行情页跳转链接"deeplink": "myapp://market/btc", // App 内跳转"start_timestamp": 1773321389000, // 切换时间戳(毫秒),用于客户端 diff 去重"status": "active" // 状态:active 讲解中 / ended 已结束}
expireAt 有效期,过期后不再可跟。需满足以下要求:expireAt,超期后客户端不再展示跟单入口,避免观众跟入一笔已结束的单。BarrageStore.sendCustomMessage 实时广播下发。// Android (Kotlin)const val BUSINESS_ID = "follow_trade"BarrageStore.create(liveId).sendCustomMessage(BUSINESS_ID, // businessID,接收端据此过滤followTradeJson, // data:跟单卡片 JSON 字符串object : CompletionHandler {override fun onSuccess() { /* 广播成功 */ }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):订阅自定义消息事件流private 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 // 只处理跟单卡片// 校验 expireAt / KYC 等级 / 白名单后,渲染跟单卡片 UIrenderFollowCard(json)}}}// 退出直播间时 scope.cancel(),避免协程泄漏
// iOS (Swift / Combine):订阅自定义消息发布者private 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 }// 校验 expireAt / KYC 等级 / 白名单后,渲染跟单卡片 UIself?.renderFollowCard(json)}}.store(in: &cancellables) // 由 cancellables 统一管理订阅生命周期}
expireAt)、用户 KYC 等级与跟单白名单。deeplink 跳转至业务页确认下单,由业务系统完成撮合。{"businessID": "follow_trade", // 消息类型,接收端据此过滤"version": 1,"extra": {"trader": {"uid": "trader_001","name": "Alice","winRate": 0.78,"followerCount": 12030,"kycLevel": 2},"trade": {"symbol": "BTC/USDT","side": "long", // 多头开仓;short 表示空头开仓"leverage": 10, // 永续合约杠杆倍数(仅适用于支持杠杆的产品类型)"entryPrice": "67890.5","size": "0.5","openTime": 1717477200000},"deeplink": "myapp://trade/follow?orderId=xxx","expireAt": 1717481000000 // 卡片有效期(毫秒时间戳),超期后客户端不再展示跟单按钮}}
#vote A、#ask 问题内容)。#vote / #ask)匹配筛选,命中则进入投票 / 提问池,未命中则丢弃。

BarrageStore / LikeStore / GiftStore 处理弹幕、点赞、礼物、行情 / 跟单广播,确保音视频与消息的高度同步(详见上文 业务核心功能开发实践)。TIMCustomElem)下发——使用 createCustomMessage(data, description, extension) 构建消息体,再调用 sendMessage 发送,群成员客户端解析后渲染为可视化卡片。data 字段的 JSON 结构示例如下:{"businessID": "strategy_card", // 业务类型,接收端据此路由到对应卡片渲染器"kol": { "name": "Alice 投研", "winRate": "78%", "followerCount": 12030 },"strategy": {"title": "BTC 波段策略 · 回踩做多","symbol": "BTC/USDT","side": "long", // 多头;short 表示空头"leverage": 5, // 杠杆倍数(仅支持杠杆的产品填写)"entryPrice": "67200.0","pnlRate": "+4.2%" // 浮动盈亏(展示用)},"deeplink": "myapp://copytrade/follow?strategyId=stg_001", // 点击唤起 App 内跟单页"expireAt": 1773321389000 // 有效期(毫秒),超期后降级为纯文本}
组件 | 职责 |
客户端(发送方 / 接收方) | 发起发送红包 / 拆红包请求;渲染红包卡片 UI |
Chat Service | 消息投递、状态更新、领取记录存储、领取通知推送 |
红包系统(业务自建) | 红包生命周期管理:创建、校验、拆开、金额计算 |
支付系统(业务自建) | 资金管理:扣款、转账、退款 |
TIMCustomElem)承载,Data 字段的关键字段如下:字段 | 类型 | 说明 |
BusinessID | String | 消息类型标识,红包消息固定为 red_packet |
packet_id | String | 红包唯一标识。由红包系统在扣款成功后生成,并通过 REST API 写入自定义消息,使消息与红包绑定 |
money_amount | Number | 红包金额(一对一红包) |
best_wishes | String | 祝福语 |
cover | String | 红包封面图片 URL |
status | String | 红包状态: Unopened(未领取)/ Opened(已领取)/ None left(已领完) |
quantity | Number | (仅群红包)红包个数 |
total | Number | (仅群红包)红包总金额 |
random_amount | Boolean | (仅群红包)是否为拼手气红包(随机金额) |
Data 示例:{"BusinessID": "red_packet","total": 2.00,"quantity": 3,"random_amount": true,"best_wishes": "新年快乐!","cover": "https://example.com/cover.png","status": "Unopened","packet_id": "rp_20260301_xyz789"}
能力 | 用途(红包场景) | 单聊定位参数 | 群聊定位参数 |
消息变更 | 更新红包状态(Unopened > Opened > None left),修改后所有客户端可见 | From_Account + To_Account + MsgKey | GroupId + MsgSeq |
消息扩展 | 在不改原消息的前提下附加领取记录 KV,变更实时同步到所有客户端 | From_Account + To_Account + MsgKey | GroupId + MsgSeq |
SupportMessageExtension 为 1,消息才支持扩展数据。packet_id → 红包系统服务端以发送方身份通过 发送单聊消息 REST API 将红包作为自定义消息发出。status 更新为 Opened、通过 REST API 向发送方推送 XX 领取了你的红包通知。Data 增加 quantity / total / random_amount 字段。status 更新为 None left。模块 | 入口 | 职责 |
用户端 (Client) | 网页 / H5 / App(Web、iOS、Android UIKit) | 用户咨询入口,先由机器人接待,可一键转人工;支持文本、多媒体、卡片消息 |
管理端 (Management Panel) | 配置机器人知识库 / 任务流、会话流程与路由规则、服务模式、排队与工作时间、团队 / 角色管理、数据看板 | |
客服工作台 (Agent Workspace) | 坐席接待与结束会话、会话转接、主动发起会话、满意度评价、坐席内部会话 |
能力 | 说明 | Web3 / 泛金融用法 |
问答库 (Q&A Database) | 配置标准问题、相似问法与答案,支持手动新增 / 批量导入 / 编辑 | 交易费率、合约规则、KYC 步骤、充提币等常见问题 |
任务流 (Task Flow) | 多轮对话编排,按用户输入分步引导 | 引导式 KYC、找回账户、申诉流程 |
闲聊库 (Chitchat) | 应答问候与寒暄,提升体验 | 开场问候、等待安抚 |
问答优化 (QA Optimization) | 问题聚类、未识别问题归集,持续补全知识库 | 发现高频未覆盖问题并迭代 |
环节 | 说明 |
接待与结束会话 | 坐席接入排队中的用户会话并完成应答 / 结束 |
会话转接 | 复杂问题(纠纷、风控)转接至更专业的坐席或坐席组,由路由规则分配 |
主动发起会话 | 坐席可对指定用户主动发起咨询(如风险事件预警、KYC 催办) |
满意度评价 | 会话结束触发用户评分,沉淀服务质量数据 |
数据看板 | 管理端查看实时接待、会话分析、坐席绩效与历史会话(可导出) |
对比维度 | 类微信公众号 | 类 WhatsApp Channel | 平台官方公众号 |
适用对象 | 开放给外部项目方 / 机构;商家端与用户端需拆为两个身份(两个 App 或双模式切换) | 开放给外部项目方 / 机构;同一 App / Web 内可同时拥有发布方与用户两种身份 | 仅搭建平台自有官方号,不开放给外部发布方 |
实现底座 | Chat 原生公众号能力 | Chat 社群(Community) | Chat 原生公众号能力 |
管理功能 | 需自建发布方管理后台 | 需自建发布方管理后台 | |
消息互动 | 广播消息(一对多推文)+ 单聊消息(一对一私信) | 群聊消息(一对多推文)+ 表情回应(对推文贴 Emoji) | 广播消息 + 单聊消息 |
订阅规模 | 按公众号订阅人数计 | 单号 10 万 - 100 万(社群容量) | 按公众号订阅人数计 |
公众号动作 | 底层实现 | 关键接口 |
创建公众号 | 创建 Community 社群( groupType=Community),并通过群自定义字段标记为“公众号”,区别于普通社群 | |
订阅 / 取消订阅 | 加入 / 退出社群;订阅后可用会话分组把公众号会话与普通聊天的未读分开展示 | |
获取公众号列表 | 拉取已加入社群列表,再按群自定义字段筛出标记为公众号的社群 | |
发布推文 | 公众号主 / 管理员调用群聊发送消息,支持文本、富媒体、自定义消息(如行情卡片、研报卡片) | |
订阅者互动 | 订阅者对推文进行 Emoji 表情回应 |
subscribeOfficialAccount / unsubscribeOfficialAccount,并通过 onOfficialAccountSubscribed 等监听器接收订阅、资料变更、销毁通知。sendMessage(receiver 填公众号 ID),公众号侧管理员用 向单个用户发送单聊消息(From_Account 填公众号 ID、To_Account 填订阅者 ID)。
价值 | 说明 |
状态零维护 | 平台自动识别用户在线 / 离线状态,自建在线通道与厂商离线通道按默认全覆盖策略自动切换,业务无需自行维护用户状态系统 |
全球高可达 | 全球超3200个加速节点就近接入,配合自研最优寻址算法智能选路,有效降低跨境传输延迟与丢包,服务可靠性高于99.99% |
极速触达 | 依托长连接实现毫秒级精准下发,1000万条消息可在30秒内全部送达,保障行情、风控等关键消息第一时间抵达用户 |
极简集成 | 控制台下载并引入 JSON 配置即可一键打通各厂商通道,SDK 自动完成注册、Token 上报与数据统计;已覆盖 APNs、FCM、华为、荣耀、小米、OPPO、VIVO、魅族等全部主流离线通道 |
全端覆盖 | 一套能力统一适配 Android / iOS / Flutter / uni-app / React Native / HarmonyOS / Unity / Unreal Engine 等主流开发平台 |
合规可信 | 提供新加坡、雅加达、首尔、东京、法兰克福、硅谷、利雅得等多地境外数据中心可选,支持数据加密传输 / 存储、隐私合规与全球安全认证,满足全球化金融业务的合规要求 |
推送方式 | 说明 | 典型用途 |
全员推送 | 面向全部用户的系统级触达 | 币价大涨预警、平台公告、版本更新 |
标签推送 | 按持仓 / 语言 / 地区等分群推送 | Market Alert 行情警报、空投预热、活动推送 |
指定 UserID 推送 | 批量定向推送给指定用户列表 | 风控告警、个性化运营、定向召回 |
Chat 消息推送 | 即时通讯消息触发离线推送 | 私信、群聊、客服回复 |
音视频通话推送 | Call 通话呼叫触发推送通知 | AI 数字人面签邀请、KOL 1v1投顾呼叫 |
步骤 | 操作 | 关键说明 |
① 开通服务 | 获取 SDKAppID 与客户端密钥 AppKey | |
② 配置厂商通道 | 在控制台下载 JSON 配置文件并引入工程,一键完成 APNs / FCM 及各安卓厂商推送信息配置 | 插件自动完成注册、Token 上报与数据统计 |
③ 集成 SDK 并注册 | 引入 TIMPush,调用 registerPush(SDKAppID, appKey) 注册;成功后即可接收在线推送,并通过 getRegistrationID() 获取设备推送唯一标识 RegistrationID | RegistrationID 卸载重装会发生变化;如需与 Chat 的 UserID 打通,可用 setRegistrationID(userID) 绑定 |
④ 发起推送 | 联调阶段可先指定 RegistrationID 做在线推送验证 | |
⑤ 点击跳转 | 建议在 Application / AppDelegate 启动时注册 |
能力 | 说明 | 价值 |
推送数据转化漏斗 | 按“可发送数量 → 发送数量 → 触达数量 → 点击数量”分阶段统计,并给出实发率 / 触达率 / 点击率 | 定位流失最严重的环节,针对性优化 |
推送记录查询 | 按时间窗口 / 任务 ID / 收发双方 UserID 检索历史推送(保留近7天) | 事后审计、问题复盘 |
消息链路查询 | 凭 Push ID / Task ID 对单条消息做“Chat 服务器 → 厂商服务器 → 终端设备 → 用户点击”端到端追踪 | 快速解答“为什么这条没收到” |
推送折损分析 | 按“可发送数量 → 发送数量”、“发送数量 → 触达数量”分区间逐层归因(厂商驳回、Token 失效、通知栏关闭、用户卸载等) | 降低无效投递、优化成本 |
全生命周期数据统计 | 从推送下发到客户端展示与点击的完整指标,支持按厂商维度分类查看 | 结合业务数据评估 ROI |
推送问题排查工具 | 自动诊断接入与下发各环节问题,给出明确解决指引 | 降低运维投入 |
PushStage 字段区分“发送 / 触达 / 点击”三个阶段,并携带 TaskId、To_Account、PushPlatform 等字段,便于业务侧将推送链路与自有风控、转化系统打通做闭环归因。更多介绍详见 Push 数据统计。
步骤 | 实现要点 |
① 行情接入 | 业务侧接入交易所 / 行情源 WebSocket,监听阈值规则(涨跌幅 / 成交量 / 链上事件,如大额转账、合约调用、空投开放) |
② 用户分类 | 基于 Chat 标签 / 属性体系,按 持仓币种 / 自选股 / 语言 / 风险偏好 / 地区 进行多维分类 |
③ 推送下发 | |
④ 离线兜底 | 未上线用户走厂商离线通道;安卓未配置厂商证书的设备通过7天消息离线存储机制兜底 |
⑤ 转化回收 | Ext 携带业务标识(如 alert_id / campaign_id),客户端点击后回写转化日志,并结合推送回调形成完整数据统计链路 |
术语 | 英文 / 全称 | 本方案中的含义 |
Web3 | Web 3.0 | 基于区块链的去中心化网络范式,核心特征是用户自持资产与身份 |
CEX / DEX | Centralized / Decentralized Exchange | 中心化交易所 / 去中心化交易所 |
KYC | Know Your Customer | 实名认证流程,多数司法辖区对持牌业务为强制要求 |
AMA | Ask Me Anything | 项目方与社区 1:N 互动直播形态,常见于交易所、KOL、协议方 |
KOL | Key Opinion Leader | 关键意见领袖,社区中的内容创作者与意见塑造者 |
Meme Coin | Meme Coin | 起源于网络迷因或社区文化的加密货币(如 DOGE / SHIB),通常具有高波动与强社区属性 |
MemeFi | Meme + DeFi | 在 Meme Coin 基础上叠加质押、收益共享、治理等 DeFi 能力的形态 |
LiveFi | Live + Finance | 与直播深度结合的金融化玩法(如直播打赏、直播跟单、直播链上互动) |
GameFi | Game + Finance | 游戏化金融,“边玩边赚”形态,常以 NFT 资产 / 代币奖励驱动 |
NFT | Non-Fungible Token | 非同质化代币,每枚具有唯一性,常用于数字收藏品 / 凭证 / 身份 |
SBT | Soulbound Token | 灵魂绑定代币,不可转让的链上身份与成就凭证 |
POAP | Proof of Attendance Protocol | 参与凭证协议,常作为活动 / 直播参与的链上证明 |
Tokenomics | Token Economics | 代币经济学,包含发行总量、分配、释放节奏、销毁、激励等设计 |
Smart Contract | Smart Contract | 智能合约,部署在区块链上的可自动执行代码 |
On-chain Reputation | On-chain Reputation | 基于钱包地址公开行为(交易历史、协议交互、合约部署等)综合评估的可信度,常用于空投资格判定 |
Airdrop | Airdrop | 项目方将代币 / NFT 免费分发给目标用户的拉新与激励手段 |
Stablecoin | Stablecoin | 与法币(多为 USD)锚定的加密货币,如 USDT / USDC / DAI |
Custodial Wallet | Custodial Wallet | 私钥由平台代为保管的钱包,常见于交易所内置钱包 |
Social Trading / Copy Trading | 社交跟单 / 复制跟单 | 订阅信号源主播策略并自动复制下单的交易形式 |
txHash | Transaction Hash | 链上交易的唯一标识,可用于跨端校验与审计 |
Confirmations | Confirmations | 区块链对一笔交易的累计确认次数,确认数越高交易越不可逆 |
文档反馈