先确定目标:提醒客服,还是在 Telegram 内回复访客?
这两种需求的开发范围不同。单向通知只把“有新咨询”送到接收人员,客服仍在原后台处理。双向客服还需要把 Telegram 回复可靠地关联回网站会话,处理坐席身份、权限、附件和多人员同时回复。第一版建议先把单向提醒做稳定,再按实际工作方式评估双向接入。
在大炮科技在线客服与 Telegram 通知案例中,公开资料展示了电脑网页版后台,以及新访客、多站点、群组/私聊/Topic 通知。下文的队列、去重、告警与验收方案是实施建议,不代表该产品所有内部机制已经公开或经过本次实测。

私聊、群组和 Topic 怎么选?
| 接收方式 | 适用情况 | 上线前要确认 |
|---|---|---|
| 私聊 | 一个负责人接收少量咨询 | 接收者先打开机器人并启动会话,确认接收账户正确 |
| 客服群组 | 多人共同查看通知 | 机器人已加入目标群且具备发送消息权限;明确谁负责认领 |
| 论坛群组 Topic | 按站点或业务线整理通知 | 核对群组 chat_id 和对应 message_thread_id,发送测试消息验证落点 |
Topic 是消息分类方式,不应当作客户之间的权限隔离。对成员可见范围有不同要求时,应使用不同接收群组或在业务系统中控制权限。不要仅凭群标题或话题名称建立路由:名称可能重复或被修改。
Telegram 的 sendMessage 文档定义了目标 chat_id、文本和可选话题标识。这里讨论论坛群组通知;其他会话类型应按实际接口要求配置。
推荐流程:先保存客服消息,再发送提醒
网站访客留言
↓
客服系统保存消息 + 通知待办
↓
发送任务读取站点配置
↓
发送到 Telegram 私聊 / 群组 / Topic
↓
记录发送结果 → 客服登录后台处理
↘ 失败:有限重试 / 配置告警 / 人工检查
不要让外部通知接口是否可用决定访客留言能否保存。比较稳妥的设计是将消息和通知待办写入同一数据库事务,再由后台任务发送。暂时不引入独立消息队列时,也可以由工作进程读取待办表;关键是待办可恢复、状态可查看,服务重启后不会直接遗失通知。
网站事件回调不等于 Telegram Webhook
客服系统向你的服务发送“新留言”事件,与 Telegram 向你的服务发送机器人更新,是两条不同链路。单向通知主要需要服务器向 Telegram 发出请求;只有处理机器人命令、回复或按钮等入站事件时,才需要另行规划 Telegram 更新接收机制。已有机器人正在运行时,不要为了获取一个接收 ID 随意替换其 Webhook。
接入前的五步准备
- 确认机器人归属:使用业务方控制的机器人;Token 只保存在服务端配置或密钥管理中,不能放进网站前端、截图或公开仓库。
- 确认消息来源:优先使用客服系统提供的已认证事件接口。校验签名、时间和事件身份,再接受回调;不要让浏览器直接指定消息要发到哪个群。
- 绑定接收端:管理员确认站点与接收目的地,发送一条不含访客信息的测试通知。测试成功后再启用真实事件。
- 选择触发条件:新会话首次消息、等待人工超时、每条访客消息分别是不同规则。初期可以只开首次消息提醒,减少连续刷屏。
- 确定后台入口:通知链接使用经过配置的 HTTPS 后台地址。打开后仍需登录并检查站点权限,不能因为持有链接就读取会话。
一份不带访客隐私的测试请求
以下为请求结构示例,并非该客服产品的后台操作截图或已运行代码。所有大写占位内容都需由部署人员在服务端替换;数值 123 仅为虚构话题示例,不可直接当作你的 Topic ID。
POST https://api.telegram.org/bot<BOT_TOKEN>/sendMessage
Content-Type: application/json
{
"chat_id": "<TARGET_CHAT_ID>",
"message_thread_id": 123,
"text": "[站点 A] 测试通知:请登录客服后台查看。",
"link_preview_options": {"is_disabled": true}
}
普通群组或不使用话题的私聊应移除 message_thread_id。首次联调使用纯文本,不添加 parse_mode,先排除格式转义问题。成功结果要检查 API 返回的 ok,并记录业务事件与返回消息标识的对应关系;接口接收成功不等于客服已经阅读或处理。
通知可以保留站点名称、脱敏会话编号、触发时间和后台入口。默认不推送完整聊天记录、手机号、邮件地址或订单明细。Token 出现在 API 请求路径中,HTTP 客户端异常、代理访问日志和监控采集也需要脱敏。
多站点最重要的是防止串消息
为每个站点保存独立映射:site_id → 接收 chat_id → 可选 topic_id → 启用状态。站点身份应来自已验证的服务端凭据或事件来源,而不是访客表单里的任意字段。修改映射需要管理员权限,并记录修改人、时间和前后目的地的安全摘要。
- 站点 A 的事件只能使用 A 的配置,不在查不到映射时自动落入另一个客户的群。
- 停用站点后,待发送任务按约定停止或转人工检查,不能继续使用旧配置无限推送。
- 切换接收群前先验证新群,再明确积压任务按旧配置还是新配置发送。
- 日志以事件编号和站点标识定位问题,避免为了排障复制全部访客对话。
失败重试、重复通知和消息风暴怎么处理?
给每条通知设置业务唯一键,例如“站点 + 事件编号 + 接收目的地”。创建待办时去重,工作进程领取任务时设置租约,避免两个进程同时发送同一条待办。另行设置单会话合并窗口与发送速率,防止访客连续发十条消息产生十次紧急提醒;后台仍应保留完整留言。
| 现象 | 建议处理 |
|---|---|
| 429 限流 | 参考返回的 retry_after 安排延后执行,限制重试次数,不立即循环发送 |
| 目标不存在、权限失效、Token 错误 | 结合返回说明检查配置,暂停无效任务并通知管理员,避免无限重试 |
| 连接超时或响应丢失 | 标记结果不确定;对重要事件允许有限补发,但说明可能重复,保留相同业务编号 |
| 后台进程重启 | 恢复未完成待办,检查租约和重试时间,不把全部历史任务重新发送 |
本地去重无法完全消除“Telegram 已接收,但服务端没收到响应”造成的重复。重试策略需要权衡漏提醒与重复提醒,不应承诺端到端绝对只送达一次。人工认领和处理状态仍以客服后台为准。限流等待参数见 官方 ResponseParameters,发送限制参考 Bot FAQ。
上线验收:不能只看手机收到一条消息
- 正确路由:A、B 两个测试站点各发一条消息,只到达各自配置的接收端;Topic 测试核对具体话题。
- 重复事件:重复提交同一客服事件,不重复创建待办;超时补发可通过同一事件编号识别。
- 连续留言:在约定合并窗口内发送多条测试消息,通知符合合并规则,后台留言没有丢失。
- 权限变化:在测试群移除发送权限,后台能显示失败和处理入口;恢复权限后按约定恢复。
- 进程中断:只在测试环境暂停发送任务再恢复,检查积压处理和重试上限。
- 后台鉴权:未登录或无站点权限的账号不能凭通知链接读取会话。
- 日志检查:确认通知与异常记录中没有 Token、完整私密对话或未脱敏联系方式。
上述是验收方法,不是本次对生产客服系统执行的测试记录。生产环境测试需要先安排接收人员、测试账户和操作窗口。
开发费用取决于哪些范围?
现成客服平台已有通知插件时,工作可能集中在配置、权限核对和联调。需要开发事件接口、多站点后台、消息待办、异常恢复或双向回复时,范围会明显增加。询价时提供站点数量、现有客服系统、通知触发条件、接收方式和维护要求即可,不需要发送真实 Token。具体评估可参考Telegram 机器人开发费用拆分。
常见问题
必须给机器人管理员权限吗?
按实际动作授予必要权限。仅发送通知,应先核对目标群允许机器人发消息;管理成员、创建话题等额外动作另行评估,不把全部管理员权限作为通用接入前提。
收到 Telegram 提醒后,可以直接回复网站用户吗?
单向通知不自动具备这个能力。双向回复需要身份校验、会话映射和回传接口;当前公开案例只能证明通知说明与后台展示,不能据此推断已实现双向客服。
没有收到通知,先查哪里?
按事件是否保存、待办是否生成、任务是否运行、API 返回内容、目的地配置、客户端通知设置逐层检查。接口成功与手机响铃是两件事,不要仅凭手机静音就判定消息发送失败。
把接入范围变成可验收的需求
建议先选一个站点和一个接收端,完成正常、重复、权限失败和恢复四类验证,再扩展其他站点。如果现有客服缺少接口或需要统一后台,可了解客服与通知机器人定制,或通过Telegram 机器人开发服务确认接口与交付边界。
