You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang如何在单服务器上用不同token启动多个Telegram Bot?

问题原因及解决方案

核心原因

两个bot进程出现冲突的根本原因是端口占用,结合你的代码细节具体逻辑如下:

  • 你的代码中启动webhook监听时固定占用了0.0.0.0:8443端口,操作系统同一端口仅允许被一个进程绑定监听
  • 你将http.ListenAndServeTLS调用放在了无错误捕获的goroutine中,第二个bot进程启动时,端口绑定失败的错误不会被输出到日志,你只会看到授权成功、webhook设置成功的日志,误以为服务正常启动,实际上第二个bot根本没有正常监听端口接收Telegram的回调请求
  • 你关闭第一个bot后,8443端口被释放,第二个bot的监听(如果还在运行)就可以正常工作,符合你观测到的现象

可行解决方案

你可以根据自己的需求选择以下任意一种方案:

方案1:多进程部署使用不同端口

给每个bot分配独立的监听端口,对应修改两处配置:

  1. webhook地址的端口,例如第二个bot的webhook地址改为https://example.com:8444/ + 第二个bot的token
  2. 监听端口改为对应端口,例如第二个bot的监听代码改为go http.ListenAndServeTLS("0.0.0.0:8444", "cert.pem", "key.pem", nil)
    另外建议补充监听错误的捕获逻辑,避免类似问题被隐藏:
go func() {
    err := http.ListenAndServeTLS("0.0.0.0:8443", "cert.pem", "key.pem", nil)
    if err != nil {
        log.Fatalf("webhook服务启动失败: %v", err)
    }
}()

方案2:用反向代理统一端口转发

在服务器上部署Nginx等反向代理服务,统一监听443/8443端口,根据请求路径匹配转发到本地不同端口的bot服务:

  • 两个bot分别监听本地不同的非加密端口,例如127.0.0.1:8081、127.0.0.1:8082,不需要再配置TLS证书
  • Nginx配置不同路径转发规则,例如/bot1token前缀的请求转发到127.0.0.1:8081,/bot2token前缀的请求转发到127.0.0.1:8082
  • 两个bot的webhook地址统一填写Nginx对外的域名+对应路径即可

方案3:单进程部署多bot

将多个bot的逻辑合并到同一个服务进程中,只启动一个HTTP服务监听端口,给每个bot注册独立的webhook回调路径即可,资源开销更低。

内容的提问来源于stack exchange,提问作者codices

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:36:04