Telegram Bot 模型下:Bot 服务器、Telegram 服务器与用户之间的交互机制

本篇所有内容皆为grok回复

核心结论
Bot 服务器与用户之间无直接通信,所有交互必须通过 Telegram 官方服务器中转。


一、整体架构概览

用户 (Telegram 客户端)
     ↔ HTTPS
Telegram 官方服务器
     ↔ HTTPS (TLS 加密)
Bot 服务器 (你的代码)
  • 用户 ↔ Telegram:直接长连接(WebSocket / HTTPS)
  • Bot 服务器 ↔ Telegram:通过 Bot API(HTTPS)
  • Bot 服务器 ↔ 用户无直接连接

二、两种更新获取模式

模式 说明 数据流向 适用场景
Long Polling(轮询) Bot 主动向 Telegram 拉取更新 Bot → TG → Bot 开发测试、内网服务器
Webhook(钩子) Telegram 主动推送更新到 Bot TG → Bot 生产环境(推荐)

1. Long Polling 流程

sequenceDiagram
    participant U as 用户
    participant TG as Telegram 服务器
    participant B as Bot 服务器

    U->>TG: 发送消息
    B->>TG: getUpdates() [轮询]
    TG-->>B: 返回 Update 列表
    B->>TG: sendMessage()
    TG-->>U: 推送回复
  • 调用:GET /getUpdates
  • 无需公网,但效率低、延迟高

2. Webhook 流程(推荐)

sequenceDiagram
    participant U as 用户
    participant TG as Telegram 服务器
    participant B as Bot 服务器

    Note over B: setWebhook(url) 已设置
    U->>TG: 发送消息
    TG->>B: POST /webhook (JSON Update)
    B-->>TG: HTTP 200
    B->>TG: sendMessage()
    TG-->>U: 推送回复
  • 调用:POST /setWebhook?url=https://yourbot.com/webhook
  • 要求:
    • 公网 HTTPS(443 端口)
    • 有效 SSL 证书
    • 快速响应(< 几秒)

三、核心数据:Update 对象

Telegram 推送/返回的 JSON 示例:

{
  "update_id": 123456789,
  "message": {
    "message_id": 100,
    "from": { "id": 987654321, "first_name": "张三" },
    "chat": { "id": 987654321, "type": "private" },
    "date": 1731171234,
    "text": "/start"
  }
}

包含类型:message, callback_query, inline_query 等。


四、Bot 回复用户(通过 API)

所有回复必须调用 Bot API:

POST https://api.telegram.org/bot
<TOKEN>/sendMessage
Content-Type: application/json

{
  "chat_id": 987654321,
  "text": "你好!"
}

常见方法:

  • sendMessage:文字
  • sendPhoto:图片
  • editMessageText:编辑消息
  • answerCallbackQuery:按钮回调

五、安全机制

机制 说明
Bot Token 唯一身份凭证,类似密码
HTTPS 强制 Webhook 必须使用 TLS
Secret Token 自定义头验证来源
IP 白名单 可限制仅 Telegram IP 访问
# 示例验证
if request.headers.get('X-Telegram-Bot-Api-Secret-Token') != 'your_secret':
    abort(403)

六、完整交互图(Webhook 模式)

graph TD
    A[用户发送消息] --> B(Telegram 服务器)
    B --> C{生成 Update}
    C --> D[POST 到 yourbot.com/webhook]
    D --> E[Bot 验证 HTTPS + Secret Token]
    E --> F[处理逻辑]
    F --> G[调用 sendMessage API]
    G --> B
    B --> H[推送给用户]

七、常见部署方案

平台 Webhook 支持 推荐度
VPS / 云服务器 Yes 5 stars
Heroku / Render Yes 4 stars
Vercel / Cloudflare Warning (需适配) 3 stars
Ngrok Yes (临时) 开发专用

八、为什么不能直连用户?

原因 说明
隐私保护 不暴露用户 IP、设备信息
安全隔离 Bot 无法直接攻击用户
反垃圾 限制主动发送消息
统一管理 Telegram 可封禁恶意 Bot

只能给主动和你聊过的用户发消息


九、官方文档


十、总结表

角色 职责 与谁直接通信
用户 发送消息 Telegram
Telegram 服务器 中转、存储、推送 用户 + Bot
Bot 服务器 处理逻辑、调用 API 仅 Telegram

最终答案
Bot 服务器与用户之间没有直接通信,所有交互 100% 通过 Telegram 官方服务器中转。


推荐生产方案
Webhook + HTTPS + Secret Token + 公网服务器


@botfarther 创建机器人

  • 在telegram 客户端 @botfarther 就可以找到

BotFather is the one bot to rule them all. Use it to create new bot accounts and manage your existing bots.

I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual (https://core.telegram.org/bots).

You can control me by sending these commands:

/newbot - create a new bot
/mybots - edit your bots

Edit Bots
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot

Bot Settings
/token - generate authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode (https://core.telegram.org/bots/inline)
/setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode (https://core.telegram.org/bots/features#privacy-mode) in groups

Web Apps
/myapps - edit your web apps (https://core.telegram.org/bots/webapps)
/newapp - create a new web app (https://core.telegram.org/bots/webapps)
/listapps - get a list of your web apps
/editapp - edit a web app
/deleteapp - delete an existing web app

Games
/mygames - edit your games (https://core.telegram.org/bots/games)
/newgame - create a new game (https://core.telegram.org/bots/games)
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing game

–the end

2023-08-07-usdt-trc20兑换trx可以自助兑换的途径

因为近期需要转账usdt-trc20,消耗trx比较快,每一次转账基本上都会消耗14个左右的trx,于是稍微收集了一下,可以自助兑换,没必要去交易所操作。

需要留意一下的是:

  • 转账usdt-trc20的时候,tron钱包中需要有足够的trx才可以转账。所以,第一次是需要去交易所购买的,或者请熟人帮你先行转一点trx,兑换后再归还。
  • 转账兑换usdt-trc20的时候,发送usdt-trc20的钱包[tron钱包]地址和接收trx的钱包[tron钱包]地址是相同的。所以,只需要填写一次钱包地址就好。

一 Telegram兑换机器人

因为使用telegram作为日常交流工具,所以,使用tg机器人操作比较快捷。缺点是兑换的数目稍微偏少一点点。

@XTutrx_bot 夏天TRX兑换自助机器人 预支trx 选项,是必须已经兑换了多少usdt之后的用户才有资质。

https://changenow.io 在线自助兑换

https://changenow.io/zh/exchange?from=usdttrc20&to=trx&amount=10

https://simpleswap.io 在线自助兑换

https://simpleswap.io/cn/exchange?from=usdttrc20&to=trx&amount=10&rate=floating

四 资金操作,自行评估风险

每次自助兑换之前,可以稍微比较,选择一个能换取更多数额的途径操作。

–the end

2023-08-02-投注:提升博彩技巧的一种方法【转载】

原文链接地址 https://www.pinnacle.com/zh-cn/betting-articles/betting-strategy/staking-one-method-to-improve-your-betting/2962vhe9w3jpj7x7

以下列出了五个系统 – 你认为各个描述对应哪个字母?

策略1:每一次都奋力一搏

每一次都投注所有资金。优点是可以快速获得丰厚收益。缺点?只要输一次就会输光所有资金,退出游戏。

策略2:固定注额

每一次都投注固定的金额,不管赢了多少钱,也不改变。在此示例中,注额是$100。如果你的胜率是55%,赔率是2,此方法意味着你大幅降低了输光所有注额的机会。遗憾的是,这意味着你的彩金只能以“缓慢而稳定”的方式增加。

策略3:马丁格尔

任何一次失败后,加倍下注,利用下一次注额的彩金弥补之前的损失。这种方式的彩金增加速度比固定注额方法快(因为你加倍下注,弥补之前的损失)。但是,如果出现连续失败,你仍必须继续加倍下注,弥补之前的损失,你很快就会投注了一大笔资金。

策略 4:斐波纳契

按照斐波纳契顺序增加注额,使用下一次注额的彩金弥补之前的损失。此方法和马丁格尔体育博彩方法有类似的缺点,但是它可以减少连续失败时注额的增加速度(因此,赢奖速度也下降)。

策略 5:比例投注

投注与你的优势成比例的资金在此模拟中,我们使用凯利准则公式计算比例投注。采用这种方法,注额等于优势除于赔率。在此示例中,优势是10%,赔率是一比一,10 / 1等于10。 因此,注额是$1000的10%:$100。如果投注成功,下一个注额将提高到$110,亦即1100总资金的10%。这意味着彩金增加速度比固定注额系统快,损失速度也有所下降。


以上为原帖内容。

在很多博彩游戏中,特别是对抗庄家的游戏中,比如百家乐Baccarat,21点Blackjack,闲家所占有的胜率是不可能高于庄家胜率的。这个时候,就需要寻求一种更优的下注策略。

对于闲家来说,玩法策略在胜率方面是天然注定的处于劣势,更优的下注策略或者是一种有效的弥补。

固定注码的下注策略,看起来是最常见,但也应该不是最优的下注策略。

玩家与玩家之间的对抗游戏,比如德州扑克Texas holdem,奥马哈Omaha【4张或5张或6张】,看起来,是一种行之有效实现利润的途径。

–the end

2023-08-02-德州扑克texas-holdem中的底池赔率pot-odds

一 底池赔率(pot odds)是个很基本的概念

在德州扑克,奥马哈中使用的比较多,其他需要二次下注的游戏中,比如终极德州扑克,应该也可以应用得到。

就我个人接触到的资料来说,很多资料,对于这个底池赔率的解释,都不太容易理解。 所以,再来描述一下。

二 底池赔率是用于更好地描述游戏策略而产生的概念,特别是,当我们需要长期执行正ev(expected value )行动的时候,提供的衡量指标之一。

底池赔率就是筹码的比率,我们需要赢下当前底池,需要投入的筹码,和我们最终将赢得的筹码之间的比值。

场景举例:比如当前底池中数量是2,river圈,玩家a下注1,此时底池筹码是3,我们是否需要call,就应该要考虑

2.1 我们需要投入的筹码是1 2.2 我们最终赢得的筹码是4( 3+1【1是river圈我们自己投入的筹码】)

换算成百分比就是 1/4 = 25% 可以参看 https://www.masterclass.com/articles/poker-101-what-are-poker-odds Pot odds are the ratio between the size of the pot and the size of the bet.

三 胜率和底池赔率的关系

这里说的胜率,通常是牌型比较胜利次数的百分比,是一个估算值 底池赔率,是筹码之间的比值,是确定的值

胜率和底池赔率之间满足什么样的关系,我们的行动才是可以获利的呢?

接着上面的举例,底池里筹码现在是3,此时我们手里的筹码,看做为一个固定的数字,比如y,如果我们需要跟注call,则必须投入1个筹码【此时我们手头的筹码是y-1】。

假设,我们的胜率是x%,也就是,在100次跟注中,我们有x次可以赢得底池,有100-x次输掉底池。

3.1 x次我们赢,筹码的增量 是 3x,这里需要特别理解一下我们手里的筹码的增量,我觉得这是更好理解 底池赔率和胜率关系的关键。

赢一次,我们的筹码增量是3,而不是4,为什么呢?最后投入的那个1【river圈下注1个筹码后,我们手头的筹码是y-1,赢了底池4之后,我们手头的筹码是y-1+4=y+3】,不算做增量,因为我们投入1个筹码进底池之后,又赢回来这1个筹码。 赢两次,那么筹码的增量就是2x,依次类推。

3.2 100-x次,我们输掉底池,每次输掉1个筹码,我们输掉的筹码的增量,是 -(100-x),负数

3.3 如果我们想要找到这个刚好不输也不赢的临界点,100次投注最后的结果增量为0,也就是 3x + 【-(100-x)】= 0,4x=100,x=25.

也就是说,假设相同的场景下,我们投注100次,有25次赢,有75次输,则,最后 手头的筹码数量 还是 y,我们不输也不赢。

这个25,和底池赔率值相同,是巧合吗?当然不是。我们就是通过筹码的比例来计算,刚好ev值为0的情况时候的胜率。实际上,就是底池赔率。

如果我们在100次里,有26次赢,而只有74次输,我们的获利计算: 26*3 – 74 = 4

用筹码的增量来理解 胜率,我个人觉得更好理解。因为筹码的增量正好是说明了胜负。 胜率为25%的时候,是不输不赢,所以,当胜率大于25%的时候,我们的投注1个筹码的行为,就是正的期望值ev(expected value ),可以获利

胜率大于底池赔率的时候,我们通常就是获利,相反则亏损。

–the end

2023-08-02-德州扑克texas-holdem中5张公共牌出现的牌型概率

大约2014左右开始接触德州扑克游戏,然后就一直很喜欢德州扑克游戏。还看了很多德州扑克主播的讲解,买了很多德州扑克方面的书籍来看。

最初是在pokerstars这个平台玩,后来转到gg poker,大约2020年左右,慢慢转到打奥马哈[Omaha],先玩的是4张奥马哈,近期基本只玩5张奥马哈。 让人不好意思承认的是,一直是个亏损玩家。XD

一 开发的go程序,用于计算德州扑克,奥马哈游戏中,公共的5张牌,出现的牌型概率,实际上,这个测试结果,适用于任何发的2张,3张,4张,5张牌

  • 运行环境:vscode/ubuntu,32G内存
  • 运行条件:
  • 开启50个goroutine,每个goroutine循环10000次,也就是一共运行50万次
  • 每循环1次就是,牌靴中有1副牌的游戏流程[去掉大小鬼,每副牌52张]
  • 运行时间:2023-07-18 20:16:37
  • 运行时长:2:04(2分4秒)
  • 运行结果:

程序输出的 svg图片

二 运行结果说明

个人觉得比较有用的,就是,5张公共牌中,有49.25%会出现至少一对,也就是,flop后,如果手上有top set的话,其实all in打光应该也是 正ev的。

希望对看到的人有一点帮助。

–the end

2023-08-02-百家乐baccarat庄闲和胜率统计

一 开发了一个Go程序,来统计百家乐游戏中的庄闲和胜率情况。

  • 运行环境:vscode/ubuntu,32G内存
  • 运行条件:
  • 开启50个goroutine,每个goroutine循环10000次,也就是一共循环50万次
  • 每循环1次就是,牌靴中有8副牌的游戏流程[去掉大小鬼,每副牌52张]
  • 运行时间:2023-07-18 20:06:55
  • 运行时长:6:47(6分47秒)
  • 运行结果:

二 运行结果说明:

图表上的总运行次数代表的是,洗牌之后,每次下发闲家庄家的牌[闲家2张,庄家2张],并完成补牌整个流程,最终获胜的某个下注区域,这样的流程。

看起来,百家乐其实是游戏中,少有的庄闲对赌中,庄家没有占据大优势的游戏类别之一。

为方便记忆,可以简单取整,庄家 46%胜率,闲家45%胜率,和9%胜率。

三 可以参考:

维基百科中的 百家乐词条

https://zh.m.wikipedia.org/zh-cn/%E7%99%BE%E5%AE%B6%E6%A8%82

词条中庄胜率45.8597%,闲家胜率44.6247%,和胜率9.5156%

–the end

2023-08-04-inkscape1-3版本svg转png在ubuntu-server20-04遇到的问题

一 Inkscape程序

https://inkscape.org/

Inkscape是矢量图形编辑器,以自由软件许可发布与使用。该软件的开发目标是成为强大的绘图软件,且能完全遵循与支持XML、SVG及CSS等开放性的标准格式,而且是跨平台的应用程序,支持Windows、Mac OS X、Linux及类UNIX版等操作系统。[维基百科]

二 开发的后端go程序,需求svg转png,刚好选用Inkscape程序。在Windows10,Ubuntu桌面版[Ubuntu 22.04.2 LTS]运行都是ok的,但是 Ubuntu Server 上运行会出错。

glibmm-WARNING Failed to wrap object of type 'GtkRecentManager'

Ubuntu Server 版本

Distributor ID: Ubuntu
Description:    Ubuntu 20.04.5 LTS
Release:    20.04
Codename:   focal

Ubuntu Server 版本上安装的Inkscape版本是1.3的,错误和这个url地址错误一样 https://gitlab.com/inkscape/inbox/-/issues/6903

Version info
    Inkscape 1.3-dev (8a0d19d550, 2022-05-02, custom) Linux Mint 20
    Inkscape 1.2-beta (0d9a0fea06, 2022-04-08) Linux Mint 20

Doesn't occur in Inkscape 1.1.2 (ccedf6bf22, 2022-02-24) Linux Mint 20

根据这个帖子的内容,所以,卸载1.3新版本,改安装 1.1 版本。

apt purge inkscape  
apt list | grep inkscape 

查看可以安装的版本,选择1.1版本安装。

apt install inkscape=1:1.1+rc+202105240936+c4e8f9ed74~ubuntu20.04.1

安装完成,后端就可以正常从svg转到png了。

Inkscape也支持svg转pdf格式。

–the end