即时通信 IM AI 聊天机器人

这篇基于腾讯云即时通信IM,为用户提供构建AI对话能力的端到端方案,支持语音/文本输入、LLM流式回复及TTS语音播报,接入方仅需自建LLM编排层,80%链路能力由IM原生提供。 两种接入方式:无公网场景用客户端长连接,有公网用服务端回调。 核心能力:128K流式消息、botID自带记忆、内置ASR/TTS及离线推送。 安全设计:AI业务数据在接入方服务器闭环,IM仅负责消息收发。

相关产品
即时通信 IM 产品页,含版本规格、价格与购买入口。

这篇是基于腾讯云即时通信 IM 构建 AI 对话能力的端到端落地指引。

一、摘要

本方案给出一条“用户语音/文本输入,经 IM 转发,至接入方业务 Bot,再由 LLM 流式回复,最后 IM TTS 语音播报”的完整 AI 对话链路,80% 链路由腾讯云 IM 原生能力支撑,接入方只需自建 LLM 编排层即可落地。

三句话定位:

·IM 是 AI 业务的安全消息总线:不感知模型、不绑定路由,只负责消息可靠、流式、多端送达。

·两种接入方式:接入方有公网服务端走服务端回调,无公网/本地部署走客户端长连接,两条路各自最优。

·128K 流式消息 + botID 自带记忆 + 端内 ASR/TTS + 内置离线推送:五件套覆盖 LLM 长回答、多轮上下文、语音输入、语音播报、离线触达等核心工程能力。

三、业务定位

本方案基于腾讯云即时通信(IM)产品,为接入方提供 AI 聊天机器人能力。接入方购买 IM 服务后,可将 AI 机器人接入到自有的聊天场景中,实现用户与机器人的智能对话。

在 IM 系统中,机器人是一类特殊账号:它与普通用户账号一样拥有唯一标识,可被加好友、拉入群聊、单聊或群聊 @,区别在于其消息的接收与回复由接入方的服务端结合 LLM 自动处理,而非真人操作。

四、典型接入方场景

场景 描述 典型接入方特征
App 内嵌 AI 对话助手 用户在 App 内长按说话/打字对话,AI 流式回复并可朗读。 工具类 App、内容社区、车机/IoT 控制端。
AI 客服 用户在客服窗口提问,AI 优先应答,复杂问题转人工。 电商、SaaS、金融售前。
AI 陪伴/角色扮演 用户与 AI 角色多轮对话,长期记忆、人设一致。 社交 App、虚拟伴侣、教育陪练。
群聊 AI 助理 多人群里 @机器人触发 AI 总结、问答、纪要。 协作工具、企业内部群。

五、本方案与通过 SSE 自研方案的区别

对比项 通过 SSE 自研 本方案(基于腾讯云 IM)
消息可靠送达 需自行实现重试、去重、离线补偿。 IM 原生保证。
多端漫游 需自建消息存储 + 多端同步逻辑。 IM 原生多端漫游。
流式长消息 SSE 天然支持流式推送,但需自行管理分片、长度上限与状态。 流式消息原生 128K,内置状态机管理。
离线推送 需自建多厂商推送通道(APNs/FCM/国内厂商),维护证书与对接。 IM 内置全平台推送,控制台一次配置。
语音输入(ASR) 需端侧集成第三方 ASR 服务。 IM SDK 内置 convertVoiceToText。
语音播报(TTS) 需自行集成 TTS 服务并管理音频下发。 IM 服务统一提供一句话 TTS / 流式 TTS。
群聊 / AI 助理 需自行实现群组管理、成员管理、消息分发。 IM 原生群组能力,机器人可加群、被 @。
消息历史与搜索 需自建存储 + 搜索引擎。 IM 原生历史消息存储 + 搜索。
安全与合规 需自行实现签名校验、内容审核、权限控制。 IM 内置内容审核、回调准入机制。
开发周期 长:需从零搭建消息基础设施。 短:聚焦 AI 编排层,消息链路由 IM 承担。
运维成本 高:消息服务、推送通道、存储均需持续运维。 低:消息基础设施由 IM 托管。
人人 + 人机混合 仅能做人与 AI 的沟通,无法在同一个 App 内同时承载人人通讯。 同一套 IM 体系天然支持人人通讯与人机对话并存,用户无需切换通道即可与真人和 AI 对话。

结论:SSE 自研方案在“流式推送”这一单点上有天然优势,但构建完整的 AI 对话产品所需的消息可靠送达、多端漫游、离线推送、语音输入/播报、群聊等能力均需从零搭建。更重要的是,如果 App 需要同时支持人与人通讯和人与 AI 对话,SSE 方案无法承载(只能另建一套即时通讯基础设施来处理人人通讯,两套系统割裂)。本方案基于 IM 构建,人人通讯与人机对话天然共存于同一套体系,接入方只需聚焦 LLM 编排与业务逻辑,显著缩短落地周期并降低长期运维成本。

六、两种接入方式总览

围绕“机器人如何接收用户消息”这一核心差异,本方案提供两种接入方式:

方案 方案一:客户端长连接 方案二:服务端回调
核心定义 机器人作为始终在线的客户端,长连接实时接收消息。 机器人无需在线,IM 服务端回调到接入方服务端。
适用场景 无公网 / 本地部署 / IoT。 有公网服务端、运维成熟。
具体方案 详细参见 方案一:基于客户端长连接。 详细参见 方案二:基于服务端回调。

九、关键设计原则

·IM 不做 AI 编排:所有意图识别、模型路由、RAG、工具调用都在接入方业务侧。IM 只看到 botID 收发文本。

·botID = 会话主键:每个 AI 助手对应一个 IM @RBT# 账号,历史消息天然按 botID 维度落库。

·消息即记忆:多轮上下文不需要单独存储,每次回复前从 IM 拉历史即可(配合缓存与窗口管理)。

·流式可降级:流式消息在 LLM 出错时可回退为整段消息或撤回重发。

·双轨解耦:客户端长连接与服务端回调是平行能力,接入方按部署形态二选一,业务层代码完全一致。

十一、@RBT# 特殊账号

机器人在 IM 中以 @RBT# 开头的特殊账号存在。机器人账号通过 独立的 REST API 创建,与普通用户账号的导入接口不同,专门用于创建 @RBT# 前缀的机器人账号。

账号类型 UserID 前缀 适用
普通用户 无 终端用户
机器人账号 @RBT# AI Bot

十二、botID 的工程优势(相比普通账号)

特性 普通用户账号 botID(@RBT#)
好友数上限 受套餐限制。 不限好友数。
加群数上限 受套餐限制。 不限加群数。
好友关系校验 若应用开启了好友关系校验,普通用户间需加好友才能发消息。 即使开启好友关系校验,botID 仍免校验,任何用户可直接发消息。
回调通道 公共 C2C/Group 回调。 支持独立机器人回调(可单独配置 URL,与普通业务回调隔离)。
流式消息发送 不支持。 专属支持(Bot 至用户方向 128K 流式)。

接入方价值:

·一个 AI 助手可同时服务海量用户,不受普通账号好友数上限束缚(好友数根据不同套餐定义)。

·群聊 AI 助理可无限加群,不需要为“机器人加群超限”做拆分。

·独立回调让 AI 业务流量与普通 IM 业务流量天然隔离,监控、限流、路由更清晰。

十四、原理

·用户将消息发送给一个或多个 @RBT# 开头的特殊用户(botID)。接入方服务端使用腾讯云提供的 IM SDK Node 版本,分别以每个 botID 身份登录 IM 服务器并建立持久长连接,机器人此时是一个“始终在线”的客户端,能够实时接收 IM 服务器推送的用户消息。

·会话的记忆与上下文管理由接入方侧自行实现,整理后转发给 LLM;机器人的回复由 Node SDK 客户端通过流式消息接口以机器人账号身份逐片下发(注意:不是服务端 REST API 发送,是客户端 SDK 发送)。

关键约束:一个 botID 对应一条长连接。有多少个 @RBT# 特殊用户,就需要维持多少条长连接。

十七、步骤一:客户端输入

输入方式 说明
文本输入 标准 IM 消息。
语音输入 录音,随后调 IM SDK 的 convertVoiceToText 转文本,再发文本消息。

为什么发文本而不是语音消息?

·LLM 直接处理文本,无需额外转换;

·文本可被 IM 历史存储和搜索;

·多端展示统一。

ASR 详细说明见 语音输入(ASR)。

十八、步骤二:ASR 语音转文字

由 IM SDK 的 convertVoiceToText 完成,详见 语音输入(ASR)。

十九、步骤三:客户端发消息至 botID

·目标 UserID:@RBT#xxx(机器人专属前缀);

·消息类型:TextMessage,可挂 cloudCustomData 携带场景标签(用于 Bot 路由);

·会话类型:单聊(C2C)或群聊(GROUP,群里 @机器人触发)。

20、步骤四:IM 投递消息到 botID

IM 服务将消息投递至 botID(@RBT# 开头的特殊账号)。对 IM 而言,botID 是一个可登录的账号,IM 不感知其背后是否对接了 AI,AI 逻辑全部在接入方业务侧。

由于 botID 已通过长连接登录并保持在线,IM 会把消息通过该长连接实时推送给接入方业务服务端。

·构建上下文记忆

机器人收到消息后,需要带上历史对话上下文才能让 LLM 给出连贯回复。

·优先建议:优先建议机器人端自行存储会话记忆,优势在于上下文读取延迟低、裁剪策略灵活可控、不依赖 IM 历史消息接口的调用频次与存储时长限制。

机器人在线接收消息的过程中,按会话维度持续将消息写入本地记忆,做好不同会话之间的隔离。收到新消息时从本地记忆中取出对应会话的上下文,连同当前消息一起转发给 LLM。

·特点:上下文的组织与裁剪策略完全由接入方掌控,灵活度高、读取延迟低、不依赖 IM 历史消息接口;但需自行处理会话隔离、记忆存储与一致性。

如有需要,也可以通过 Node SDK 拉取该会话的历史消息来获取上下文。

·上下文窗口管理(必做):无论哪种记忆方式,都必须做上下文窗口管理,否则 LLM 上下文将超出 Token 上限(需将最早摘要、中间摘要及最近 N 轮原文拼接成 prompt 给 LLM)。推荐 N=20-50 条,在 Bot 进程做 LRU + TTL 内存缓存,避免每条消息都打底层接口。

·云端消息存储时长约束:IM 云端消息存储时长受套餐包档位限制(可选 7/30/90/180/360 天),超过存储时长的历史消息无法再拉取。多轮对话场景下若依赖远期上下文,必须在 Bot 侧自建消息归档(写入接入方自有数据库 / 对象存储),不能假设 IM 长期保存。

21、步骤五:调用 LLM

接入方自选模型:混元 / 豆包 / DeepSeek / Kimi / 自部署 Llama / Qwen / GLM 等。

22、步骤六:LLM 流式输出

LLM 以流式模式持续输出 token。

23、步骤七:Bot 通过 Node SDK 流式发送回复

Bot 以客户端身份通过 Node SDK 的流式消息接口将回复逐片下发。

注意:方案一中流式消息由客户端 SDK 发送,不是服务端 REST API。

24、步骤八:IM 流式文本下发 + 客户端发起 TTS + 显示与播报

IM 服务收到 Bot 的流式消息后,文本和音频通过两个独立通道分别送达客户端:

通道 内容 说明
流式消息通道(IM 消息长连接) 逐片下发文本消息。 客户端拼接显示,模拟打字机效果。
TTS 音频通道(WebSocket) 客户端发起 TTS 请求后,IM 服务逐语义片段合成语音并回推音频 chunk。 客户端边收边播,首音延迟低。

·IM SDK 触发 onMessageReceived,每个流式分片都是一次回调,客户端 UI 拼接显示文字。

·客户端通过 WebSocket 向 IM 服务发起 TTS 请求 ,详见 文字转语音。

·TTS 由 IM 服务统一提供(一句话 TTS / 流式 TTS 两种模式),详见 语音播报(TTS)。

25、部署形态

部署位置:客户端长连接方式可以部署在接入方的服务端,并不局限于本地/边缘场景。

非 Node 技术栈接入方:即便接入方主业务服务端不是 Node.js(Java / Go / Python / .NET / PHP 等),也可以单独起一个 Node 进程作为 IM 接入网关,主业务通过内部 RPC / MQ / HTTP 与该 Node 进程通信。对接入方的额外成本只是“运维一个 Node 服务”,不需要把整套业务迁移到 Node。

26、特点与限制

特点:

·机器人需保持在线(长连接登录);

·由客户端长连接驱动,消息接收实时性强;

·会话记忆完全由接入方侧掌控,灵活度高;

·主动出站,无需公网回调地址,适用于本地部署、IoT、内网等无法提供公网回调的场景。

限制:

·1 botID = 1 条长连接,多机器人场景需多进程编排(如 k8s pod-per-bot);

·非 Node 接入方需额外部署一个 Node 进程。

27、页面文档指引

基于客户端长连接,所涉及的接收消息、拉取历史、流式发送回复等均走 Node.js 插件能力。下表列出方案一需要用到的核心能力及其页面文档,以页面最终发布为准。

能力 说明 页面文档
客户端语音转文字(ASR) IM SDK 的 convertVoiceToText,客户端录音后整段转文本。 语音转文字
Node.js 监听新消息 Node SDK 通过长连接实时接收用户消息(MESSAGE_RECEIVED 事件),用于触发 Bot 处理链路。 接收消息
Node.js 获取历史记录 Node SDK 拉取会话历史消息,用于构建机器人上下文记忆。 拉取消息列表
Node.js 发送流式消息 Node SDK 流式消息接口(客户端发送,非服务端 REST API),逐片下发回复。 参见这篇 流式消息

29、原理

机器人无需在线。IM 服务端提供机器人回调机制:当用户在单聊中给机器人发消息、或在群聊中 @ 机器人时,IM 服务端会将消息回调到接入方预先配置的回调地址。接入方服务端基于回调内容处理消息、转发给 LLM,并将机器人的回复通过服务端 REST API 流式消息接口(发送 C2C 流式消息 / 发送群流式消息)以机器人账号身份逐片下发。

31、构建上下文记忆

机器人收到回调后,需要带上历史对话上下文才能让 LLM 给出连贯回复。方案二基于服务端回调,记忆的构建方式因会话类型不同而有所差异:

32、单聊(C2C)场景

单聊中,用户发给 @RBT# 机器人的每条消息都会触发回调。接入方可以直接基于回调本身构建会话记忆,回调到达时将消息写入自有存储,需要上下文时从自有存储中取出即可。

优先建议业务侧自行存储会话记忆,优势在于上下文读取延迟低、裁剪策略灵活可控、不依赖 IM 历史消息接口的调用频次与存储时长限制。

33、群聊场景

群聊中,只有 @机器人 的消息才会触发回调,群内其他用户之间的普通对话不会回调。因此无法仅通过回调获取完整的群聊上下文。

正确的做法是:收到 @机器人 的回调后,通过服务端 REST API 拉取该群的近期历史消息,将群内对话整理为 LLM 可理解的上下文,连同当前 @机器人 的消息一起转发给 LLM。

会话类型 记忆来源 接口
单聊(C2C) 回调本身即可获取用户发给机器人的全部消息,自行存储构建记忆。 回调 + 自有存储
群聊 回调仅含 @机器人 的消息,需拉取群历史补全上下文。 回调 + REST API /v4/group_open_http_svc/group_msg_get_simple

如有需要,单聊场景也可以通过 REST API 拉取历史消息来获取上下文(/v4/openim/admin_getroammsg)。

·上下文窗口管理(必做):无论哪种记忆方式,都必须做上下文窗口管理,否则 LLM 上下文将超出 Token 上限(需将最早摘要、中间摘要及最近 N 轮原文拼接成 prompt 给 LLM)。推荐 N=20-50 条,在 Bot 进程做 LRU + TTL 内存缓存,避免每条消息都打底层接口。

·云端消息存储时长约束:IM 云端消息存储时长受套餐包档位限制(可选 7/30/90/180/360 天),超过存储时长的历史消息无法再拉取。多轮对话场景下若依赖远期上下文,必须在 Bot 侧自建消息归档(写入接入方自有数据库 / 对象存储),不能假设 IM 长期保存。

34、两类回调(按场景选其一或叠加)

回调类型 触发范围 适用场景
单聊/群聊发消息后回调 全量:平台下所有单聊、群聊消息都会触发。 已有完整 IM 业务、Bot 只是其中一类消息消费者;接入方侧自行根据 To_Account 是否为 @RBT# 前缀过滤路由。
机器人回调(Bot 专属) 只触发与机器人相关的消息:单聊里发给 @RBT# 机器人的消息;群聊里 @机器人 的消息。 纯 AI 场景,只关心机器人需要应答的消息;流量天然过滤、链路独立。

选型建议:纯 AI 助手场景优先用机器人回调,避免接收无关消息浪费带宽;如果接入方已有成熟的统一回调网关,可继续用单聊/群聊后回调,在网关侧过滤分发。

35、部署形态

接入方在 IM 控制台自助配置回调 URL(如 单聊机器人消息回调),无需 IM 团队介入。

36、注意事项

·2 秒内必须 ACK,否则 IM 重试导致消息重复;

·签名验证必做,防止伪造请求;

·单接入点托管多 botID:所有机器人消息汇入同一回调,适合大规模 Agent 矩阵。

37、特点

·机器人无需维护长连接;

·由 IM 服务端回调驱动,部署与运维更轻量;

·回调仅在单聊发消息和群聊 @ 机器人时触发;

·成熟、可水平扩展、无长连接维护成本。

38、页面文档指引

方案二基于服务端回调:接收消息靠机器人回调,拉取历史与发送流式回复均走服务端 REST API;端上语音输入(ASR)与语音播报(TTS)与方案一一致,由客户端 SDK / IM 服务承担。下表列出方案二需要用到的核心能力及其页面文档,未上线的以页面最终发布为准。

能力 说明 页面文档
单聊机器人消息回调 Bot.OnC2CMessage,用户单聊发给 @RBT# 机器人时触发。 单聊机器人消息回调
群内 @机器人消息回调 Bot.OnGroupMessage,群内 @ 机器人时触发。 群内@机器人之后回调
服务端拉取单聊历史 REST API /v4/openim/admin_getroammsg,拉取单聊漫游消息构建上下文。 拉取单聊历史消息
服务端拉取群聊历史 REST API /v4/group_open_http_svc/group_msg_get_simple,拉取群消息构建上下文。 拉取群聊历史消息
服务端发送流式消息(单聊) REST API send_c2c_stream_msg,逐片下发单聊回复。 发送 C2C 流式消息
服务端发送流式消息(群聊) REST API send_group_stream_msg,逐片下发群聊回复。 发送群流式消息
客户端语音转文字(ASR) IM SDK 的 convertVoiceToText,客户端录音后整段转文本。 语音转文字
客户端 TTS 相关 IM 服务 TTS 在客户端侧的接收与播报(一句话 TTS / 流式 TTS)。 语音播报(TTS)

39、两种方案对比

对比项 方案一:客户端长连接 方案二:服务端回调
机器人是否需在线 需要(长连接登录)。 不需要。
消息接收方式 客户端长连接实时推送。 IM 服务端回调到接入方回调地址。
驱动方式 客户端 SDK 驱动。 服务端回调驱动。
触发范围 单聊:发给该 botID 的消息;群聊:该 botID 所在群的所有消息。 单聊发消息、群聊 @ 机器人。
单接入点支持 botID 数 1 个 botID = 1 条长连接。 不限(所有机器人消息汇入同一回调)。
会话记忆实现 机器人端自行存储,如有需要可通过 Node SDK 拉取历史。 单聊可通过回调构建记忆,群聊需拉取群历史。
回复方式 Node SDK 流式消息接口(客户端发送)。 服务端 REST API 流式消息接口(send_c2c_stream_msg / send_group_stream_msg)。
部署/运维复杂度 较高(需维护在线长连接、断线重连等)。 较低(无状态回调,按需触发)。
公网暴露 不需要(主动出站)。 必须(开放公网入口)。
适用行业 无法提供公网回调地址(本地部署、IoT、内网等)。 通用。
适用场景 无法提供公网回调地址的场景(本地部署设备、IoT、边缘计算、内网环境等),或对消息接收范围要求全面。 可提供公网回调地址、机器人交互以单聊/群聊 @ 为主、希望轻量接入、大规模 Agent 矩阵。
优点 实时性强、对消息控制力强、无需公网回调地址。 无需常驻在线、接入与扩展简单、单点托管多 botID。
缺点 需保障长连接稳定性、资源占用相对高、1 botID=1 连接。 仅覆盖回调触发的消息类型、必须开放公网入口。

40、语音输入(ASR)

IM SDK 内置 ASR(语音转文字)能力,无需端侧集成第三方 ASR SDK。

当前为一句话 ASR 模式:录音结束后整段送转,返回完整文本。

接口 文档链接
IM SDK convertVoiceToText 语音转文字

42、为什么需要流式消息

LLM 单条回答经常超过 8K(尤其长文生成、代码生成、多轮总结场景),普通 IM 文本消息有长度上限。流式消息把一条逻辑消息拆成多个 chunk 下发,单条逻辑消息上限 128K,覆盖 LLM 长回答场景。

44、方案一:Node SDK 客户端发送

接口 用途
Node SDK 流式消息接口(单聊) Bot 以客户端身份向单聊会话发送流式消息,逐片追加,最后一片置 IsStreamEnd = true。
Node SDK 流式消息接口(群聊) Bot 以客户端身份向群聊发送流式消息,分片机制同上。

发送流式消息

发送流式消息的接口。与普通消息的区别在于 payload 使用流式专用结构,通过分块(chunk)逐次追加内容,服务端下发到接收方后由 SDK 拼装完整内容。首次调用返回消息实例,后续调用携带同一 streamMessageID 追加分块,直到 isStreamEnd = true 结束。

接口

chat.callExperimentalAPI('sendStreamMessage', options);

参数

options 参数如下:

参数 类型 默认值 描述
to String – 消息接收方的 userID 或 groupID。
conversationType String – 会话类型,取值 'C2C' 或 'GROUP'。
payload Object – 流式消息内容容器,字段说明见下方 payload 表。
priority String Normal 消息优先级(仅 GROUP 生效)。
cloudCustomData String '' 消息自定义数据,随消息一起下发到对端。
receiverList Array – GROUP 定向消息接收者列表,最多 50 人。
nick String – 发送方昵称,未传时从本地资料读取。
avatar String – 发送方头像 URL,未传时从本地资料读取。

payload 的描述如下:

参数 类型 描述
streamMessageID String 流式消息 ID。首次调用不传;后续追加时必传,取自首次调用返回消息实例的 payload.streamMessageID。
chunks Array 本次要发送的分块列表,元素结构见下方 chunk 表。

chunks 元素的描述如下:

参数 类型 描述
index Number 分块序号,从 1 开始严格自增,不能跳号。
markdown String 该分块的 markdown 文本内容。
isStreamEnd Boolean 是否为流式结束块。默认 false;设为 true 时服务端认为整条流式消息结束。

返回值

Promise<Message>:resolve 时返回消息实例,message.payload.streamMessageID 已由服务端返回值回填;reject 时抛出错误对象。

示例

1. 创建流式消息(首次发送,不传 streamMessageID)。

const streamMessage = await chat.callExperimentalAPI('sendStreamMessage', { to: 'group1', conversationType: 'GROUP', payload: { chunks: [ { index: 1, markdown: '这是第一块内容', isStreamEnd: false }, ], },});// 保存 streamMessageID 用于后续追加const streamMessageID = streamMessage.payload.streamMessageID;

2. 追加流式内容(携带 streamMessageID,末块 isStreamEnd = true)。

await chat.callExperimentalAPI('sendStreamMessage', { to: 'group1', conversationType: 'GROUP', payload: { streamMessageID, chunks: [ { index: 2, markdown: '这是第二块内容', isStreamEnd: false }, { index: 3, markdown: '这是第三块内容', isStreamEnd: true }, ], },});

45、方案二:服务端 REST API 发送

接口 用途 文档
发送单聊流式消息(send_c2c_stream_msg) 从一个账号向另一个账号发送 C2C 流式消息,单条消息内创建 StreamID 并按 MsgSeq 持续追加,最后一片置 IsStreamEnd = true。 发送 C2C 流式消息
发送群流式消息(send_group_stream_msg) 从一个账号向一个群发送流式消息,分片机制同上,群聊场景使用(如群里 @ 机器人触发流式回复)。 发送群流式消息

46、语音播报(TTS)

机器人回复到达客户端后,IM 服务提供 TTS(Text-to-Speech)能力,将文本消息转为语音播报给用户。客户端无需自建 TTS,IM 服务统一提供两种播报模式:一句话语音合成(一句话 TTS) 和 实时语音合成(流式 TTS)。

具体功能介绍详见 功能介绍文档。

47、播报模式

模式 一句话 TTS 流式 TTS
触发时机 流式消息全部完成(IsStreamEnd = true)后,客户端发起 TTS 请求,IM 服务拿全文合成语音。 流式消息进行中,客户端即可发起 TTS 请求,IM 服务逐语义片段生成语音并流式回推。
首音延迟 高(需等 LLM 全部输出完 + TTS 合成完)。 低(LLM 首批 chunk 到达后即可开始合成和回推音频)。
体验 用户先看完全部文字,再听语音;适合短信式通知、短回复。 边看边听,体验对齐主流 AI 语音助手;适合长回复、对话式交互。
实现复杂度 低(全文一次性合成)。 较高(需按 chunk 粒度合成、流式回推音频、处理 chunk 边界的断句)。
适用场景 短回复(< 100 字)、通知类消息、语音信箱。 长回复、AI 陪伴/角色扮演、语音对话、车机/车载场景。

终端发起语音播报功能详见文档:文字转语音。

49、能力概览

腾讯云 IM 内置离线推送(Push)能力,覆盖苹果 APNs、FCM 以及国内主流安卓厂商通道(华为 / 小米 / OPPO / vivo / 魅族 / 荣耀),无需额外集成第三方推送 SDK。

能力 说明
全平台通道接入 自动适配 iOS(APNs)、海外安卓(FCM)、国内安卓厂商通道,统一一套接口。
厂商证书托管 各厂商证书 / Key 在 IM 控制台一次性配置,IM 侧负责通道分发。
消息触达策略 支持按消息维度、全局维度、用户维度配置推送规则(声音、角标、跳转、静默时段等)。
角标管理 支持自动累加 / 重置角标,跨多端保持一致。
接收方在线状态判定 由 IM 服务端自动判定,无需业务侧维护在线状态。
通道协议适配 不同厂商透传 / 通知通道协议差异由 IM 内部抹平。

50、在 AI 助手场景下的两类典型用法

1. AI 回复触达通知

当用户发起提问后切走 App / 锁屏,Bot 完成 LLM 处理并通过 IM 回发消息时,若接收方处于离线状态,IM 自动按推送策略下发系统通知,引导用户回到对应会话查看回答。

业务侧无需自建轮询、无需维护推送通道,只要正常发 IM 消息即可触发推送,离线判断与厂商通道分发由 IM 接管。

2. 运营触达

通过 IM REST API 或控制台对指定 userID / 标签人群下发推送通知,支持沉默用户召回、新功能上线提醒、重要事件通知等场景。推送与 IM 消息共用同一套用户体系,无需额外的设备 ID / 标签映射。

51、关键接口

能力 文档
离线推送规则配置 推送服务
全员/标签推送 全员/标签消息

53、数据流向

数据类型 经过 IM? 存储位置
用户文本消息 经过 IM IM 历史 + 接入方业务库(可选)
LLM 输入/输出 不经过 IM 完全在接入方业务服务器
RAG 知识库 不经过 IM 接入方业务服务器
用户隐私(手机号等) 由接入方决定 接入方业务服务器

说明:AI 业务数据(LLM 输入输出、模型权重、RAG 知识库、用户隐私)均在接入方业务服务器内闭环处理,不经过腾讯云 IM。IM 仅负责 botID 与用户之间的文本消息收发,不感知也不存储 AI 业务数据。

54、业务准入控制(可选)

机器人场景下,接入方常有这类业务诉求:判断某个用户是否被允许向某个机器人发消息、或在群内 @ 某个机器人是否被允许(如 VIP 专属机器人、每日调用次数限制、黑名单、付费开通、灰度等)。这类规则高度业务化,IM 不提供标准方案,由接入方业务侧自行定义。

这一步是可选的。仅当接入方确有准入类业务要求时启用;无相关需求时不配置,不影响主流程。它位于主链路“用户发消息至消息到达机器人”之间,是一个可插拔的准入闸门。

55、方法一:服务端消息前回调

IM 在消息下发前提供回调,由接入方服务端判断是否放行,并通过返回码控制 IM 后续动作:

回调 命令字 触发时机 页面文档
发单聊消息之前回调 C2C.CallbackBeforeSendMsg 用户单聊消息(含发给 @RBT# 机器人)下发前 发单聊消息之前回调
群内发言之前回调 Group.CallbackBeforeSendMsg 群消息(含 @机器人)下发前 群内发言之前回调

回调返回码:

ErrorCode 含义 IM 后续动作
0 允许发送 消息正常下发,进入 Bot 接收 / 机器人回调链路。
1 拒绝发送 不下发,给发送方返回错误码(单聊 20006 / 群聊 10016)。
2 静默丢弃 不下发,但给发送方返回成功(发送方无感知)。
自定义区间 拒绝并携带原因 单聊 [120001,130000] / 群聊 [10100,10200] 区间内的错误码会随 ErrorInfo 透传到客户端,便于前端展示“无权限/达上限”等提示。

56、方法二:Bot 侧自行管理

如果接入方不希望或无法使用消息前回调(如方案一零公网暴露场景),也可以在 Bot 侧自行增加管理逻辑:Bot 收到用户消息后,先判断该用户是否被允许与当前机器人交互(如查询自有权限表、调用次数计数、黑名单校验等),若判定不响应则直接丢弃该消息、不调 LLM、不回复。

与方法一的区别:方法一在消息下发前拦截,用户端能看到“发送被拒绝”的反馈;方法二在 Bot 收到消息后判断,无法阻止消息到达 Bot,但可以控制是否响应。两种方法可根据部署形态和业务需求灵活选择。

57、与两种接入方式的关系

·方案一(客户端长连接):方案一通常面向“无公网”场景,而消息前回调要求一个公网回调入口。若坚持零公网暴露,可在 Bot 侧收到消息后自行做权限校验(方法二),但无法在“消息发出前”拦截,体验上不如消息前回调;若愿意为准入单独开放一个公网回调地址,则可与方案一混合使用。

消息前回调默认 2s 超时,超时默认按“正常下发”处理(控制台可自助配置超时策略)。准入逻辑应尽量轻量,避免拖慢消息发送。

·方案二(服务端回调):接入方本就有公网回调入口,启用消息前回调几乎零额外成本,可与机器人回调共用同一套回调服务,是落地准入控制最自然的方式。

赞 (0)
上一篇 4天前
下一篇 4天前