网站在线客服如何接入 Telegram 消息通知?

网站在线客服接入 Telegram 通知,应先保存访客消息,再由服务端按站点配置发送提醒。单人可选私聊,多人协作可选群组,需要分类时再使用 Topic。上线重点是接收权限、多站点隔离、失败恢复和后台处理入口;收到提醒不等于完成回复。本文结合公开产品案例,说明接入流程与验收方法。

先确定目标:提醒客服,还是在 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。

接入前的五步准备

  1. 确认机器人归属:使用业务方控制的机器人;Token 只保存在服务端配置或密钥管理中,不能放进网站前端、截图或公开仓库。
  2. 确认消息来源:优先使用客服系统提供的已认证事件接口。校验签名、时间和事件身份,再接受回调;不要让浏览器直接指定消息要发到哪个群。
  3. 绑定接收端:管理员确认站点与接收目的地,发送一条不含访客信息的测试通知。测试成功后再启用真实事件。
  4. 选择触发条件:新会话首次消息、等待人工超时、每条访客消息分别是不同规则。初期可以只开首次消息提醒,减少连续刷屏。
  5. 确定后台入口:通知链接使用经过配置的 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。

上线验收:不能只看手机收到一条消息

  1. 正确路由:A、B 两个测试站点各发一条消息,只到达各自配置的接收端;Topic 测试核对具体话题。
  2. 重复事件:重复提交同一客服事件,不重复创建待办;超时补发可通过同一事件编号识别。
  3. 连续留言:在约定合并窗口内发送多条测试消息,通知符合合并规则,后台留言没有丢失。
  4. 权限变化:在测试群移除发送权限,后台能显示失败和处理入口;恢复权限后按约定恢复。
  5. 进程中断:只在测试环境暂停发送任务再恢复,检查积压处理和重试上限。
  6. 后台鉴权:未登录或无站点权限的账号不能凭通知链接读取会话。
  7. 日志检查:确认通知与异常记录中没有 Token、完整私密对话或未脱敏联系方式。

上述是验收方法,不是本次对生产客服系统执行的测试记录。生产环境测试需要先安排接收人员、测试账户和操作窗口。

开发费用取决于哪些范围?

现成客服平台已有通知插件时,工作可能集中在配置、权限核对和联调。需要开发事件接口、多站点后台、消息待办、异常恢复或双向回复时,范围会明显增加。询价时提供站点数量、现有客服系统、通知触发条件、接收方式和维护要求即可,不需要发送真实 Token。具体评估可参考Telegram 机器人开发费用拆分。

常见问题

必须给机器人管理员权限吗?

按实际动作授予必要权限。仅发送通知,应先核对目标群允许机器人发消息;管理成员、创建话题等额外动作另行评估,不把全部管理员权限作为通用接入前提。

收到 Telegram 提醒后,可以直接回复网站用户吗?

单向通知不自动具备这个能力。双向回复需要身份校验、会话映射和回传接口;当前公开案例只能证明通知说明与后台展示,不能据此推断已实现双向客服。

没有收到通知,先查哪里?

按事件是否保存、待办是否生成、任务是否运行、API 返回内容、目的地配置、客户端通知设置逐层检查。接口成功与手机响铃是两件事,不要仅凭手机静音就判定消息发送失败。

把接入范围变成可验收的需求

建议先选一个站点和一个接收端,完成正常、重复、权限失败和恢复四类验证,再扩展其他站点。如果现有客服缺少接口或需要统一后台,可了解客服与通知机器人定制,或通过Telegram 机器人开发服务确认接口与交付边界。

把下一步说清楚。

带上现状、目标与需要解决的问题,先确认实施范围和验收方式。