当前位置: 首页 > news >正文

从零搭建你的第一个 Telegram Bot:Bot API 实战指南(Python)

Telegram Bot API 提供了完整的机器人开发能力,支持消息处理、命令交互、Webhook 回调、内联按钮等功能。对于开发者来说,它是一套设计完善且易于上手的 Bot 开发接口。

本文将使用 Python 从零开始创建一个 Telegram Bot,并介绍消息处理机制以及 Long Polling 和 Webhook 两种接入方式的使用场景与区别。


一、创建一个 Telegram Bot

Telegram 官方提供了 Bot 管理机器人@BotFather,用于创建和管理自己的 Bot。

创建步骤如下:

  1. 向 BotFather 发送/newbot
  2. 设置机器人的显示名称(Name)
  3. 设置机器人的用户名(Username,必须以bot结尾)
  4. 获取 Bot Token

例如:

  • Name:My Demo Bot
  • Username:my_demo_bot

BotFather 会返回一个 Bot Token,例如:

<YOUR_BOT_TOKEN>

⚠️ Token 相当于机器人的身份凭证,请不要提交到 GitHub 仓库,也不要暴露在前端代码中。建议通过环境变量或配置文件进行管理。


二、使用 python-telegram-bot 编写第一个 Echo Bot

Python 社区中比较常用的 Telegram Bot SDK 是python-telegram-bot

安装:

pipinstallpython-telegram-bot

创建一个最简单的 Echo Bot(收到什么消息就回复什么消息):

fromtelegramimportUpdatefromtelegram.extimport(ApplicationBuilder,ContextTypes,MessageHandler,filters,)TOKEN="<YOUR_BOT_TOKEN>"asyncdefecho(update:Update,context:ContextTypes.DEFAULT_TYPE):awaitupdate.message.reply_text(f"你发送的内容是:{update.message.text}")app=ApplicationBuilder().token(TOKEN).build()app.add_handler(MessageHandler(filters.TEXT&~filters.COMMAND,echo,))app.run_polling()

运行程序之后,在 Telegram 中向机器人发送任意文本消息,即可收到回复。


三、处理命令与用户上下文

实际开发中,机器人通常会提供一些基础命令,例如:

/start /help /menu

可以通过CommandHandler注册命令处理函数:

fromtelegram.extimportCommandHandlerasyncdefstart(update:Update,context:ContextTypes.DEFAULT_TYPE):awaitupdate.message.reply_text("你好,我是你的第一个 Telegram Bot!\n""发送 /help 查看帮助信息。")asyncdefhelp_command(update:Update,context:ContextTypes.DEFAULT_TYPE):awaitupdate.message.reply_text("/start - 初始化机器人\n""/help - 查看帮助信息")app.add_handler(CommandHandler("start",start))app.add_handler(CommandHandler("help",help_command))

使用 user_data 保存用户状态

如果需要实现多轮对话,可以使用context.user_data保存用户上下文信息。

示例:

asyncdefask(update,context):context.user_data["step"]=1awaitupdate.message.reply_text("请输入你的名字:")asyncdefecho(update,context):ifcontext.user_data.get("step")==1:name=update.message.textawaitupdate.message.reply_text(f"你好,{name}!")context.user_data.clear()

user_data是按用户隔离的数据结构,非常适合保存对话状态。


四、Long Polling 与 Webhook 的区别

Telegram Bot 提供两种消息接收方式:

接入方式特点推荐场景
Long Polling配置简单,无需公网地址本地开发与调试
Webhook延迟更低,适合长期运行云服务器部署

Long Polling

Long Polling 的工作方式可以简单理解为:

Bot ↓ 不断向 Telegram 请求新消息 ↓ 有消息则返回 ↓ 继续请求下一次消息

优点:

  • 无需公网服务器
  • 本地即可调试
  • 配置简单

使用方式:

app.run_polling()

适用于:

  • 学习 Bot API
  • 本地开发
  • 快速验证功能

Webhook

Webhook 的工作方式为:

Telegram Server ↓ 收到用户消息 ↓ 主动推送到你的 HTTPS 地址 ↓ Bot 处理消息

适用于:

  • 云服务器部署
  • 长期运行
  • 对实时性有要求的场景

示例:

awaitapp.bot.set_webhook(url="https://example.com/telegram/webhook")app.run_webhook(listen="0.0.0.0",port=8443,webhook_url="https://example.com/telegram/webhook",)

注意:Webhook 地址必须使用 HTTPS,并且需要有效的 SSL 证书。

如果只是学习 Bot API 或本地调试,建议优先使用 Long Polling;部署到生产环境时,推荐使用 Webhook。


五、使用 Inline Keyboard 创建交互按钮

Telegram Bot 支持丰富的消息交互能力,其中最常见的就是 Inline Keyboard(内联按钮)。

示例:

fromtelegramimport(InlineKeyboardButton,InlineKeyboardMarkup,)asyncdefmenu(update,context):keyboard=[[InlineKeyboardButton("Bot API 文档",url="https://core.telegram.org/bots/api")],[InlineKeyboardButton("选项 A",callback_data="a"),InlineKeyboardButton("选项 B",callback_data="b")]]awaitupdate.message.reply_text("请选择一个操作:",reply_markup=InlineKeyboardMarkup(keyboard),)

用户点击按钮之后,可以通过CallbackQueryHandler获取回调数据:

fromtelegram.extimportCallbackQueryHandlerasyncdefbutton(update,context):query=update.callback_queryawaitquery.answer()awaitquery.edit_message_text(f"你点击的是:{query.data}")

其中:

callback_data

用于标识业务逻辑,最大支持 64 字节的数据,非常适合实现菜单、状态机以及多轮交互功能。


六、部署与常见问题

1、消息限速

Telegram Bot 存在消息发送速率限制。

如果需要进行批量消息发送,建议:

  • 控制发送频率
  • 使用异步任务队列
  • 合理处理 429 错误响应

2、用户状态持久化

默认情况下:

context.user_data

仅保存在内存中。

如果程序重启,用户状态会丢失。

开发阶段可以使用:

PicklePersistence

生产环境建议:

  • Redis
  • MySQL
  • PostgreSQL
  • MongoDB

进行用户状态持久化管理。


3、异常处理

建议为 Bot 添加统一的异常处理逻辑:

asyncdeferror_handler(update,context,):print(f"发生异常:{context.error}")app.add_error_handler(error_handler)

这样能够避免单个异常影响消息处理流程。


小结

一个基础的 Telegram Bot 开发流程可以概括为:

创建 Bot ↓ 获取 Token ↓ 编写消息处理逻辑 ↓ 选择 Long Polling 或 Webhook ↓ 部署运行

通过 Telegram Bot API,开发者可以实现:

  • 消息收发
  • 命令处理
  • Webhook 回调
  • 内联按钮交互
  • 富媒体消息发送
  • 群组与频道消息处理

掌握这些基础能力之后,还可以进一步扩展定时任务、群组管理、消息统计以及其他 Bot API 提供的高级功能。


参考资料

  • Telegram Bot API 官方文档
  • python-telegram-bot 官方项目文档
http://www.jsqmd.com/news/1240763/

相关文章:

  • AI生成儿童绘本插画描述的技术实现与应用
  • TMS320C6000 DSP EMIF异步接口配置与Flash存储器驱动开发实战
  • 2026年郑州企业信息化与短视频推广:如何选择一站式服务商少走弯路 - 中国远见品牌企业资讯
  • SVM核心原理与Python实战:从数学基础到应用优化
  • [具身智能-613]:嵌入式视觉常用图像格式完整梳理(适配 RDK X5 + MIPI 相机 + FCOS/YOLO AI 链路)
  • Cortex-M4 NVIC与SysTick寄存器级配置实战指南
  • QLoRA单GPU微调Llama 3:低显存高效训练指南
  • 徐州室内甲醛检测公司哪家靠谱?多方调研对比,深度剖析徐州荃妈妈环保检测治理专业优势 - 专注室内空气检测治理
  • Tiva™ TM4C129XNCZAD EEPROM初始化与寄存器操作全解析
  • 2026年地产沙盘定制源头工厂真实客户评价 - 万相科技
  • 远程协作中的异步沟通:写清楚比说清楚更重要
  • DM642 EVM实时视频处理系统:JPEG编解码与网络传输实战解析
  • 再也不用手动改格式!Okbiye智能排版实测|适配全校论文规范,一键搞定定稿✅
  • WX-0813大功率功放:USB供电与外部供电的裕度设计分析
  • 用户中心系统设计:认证、权限与数据存储实践
  • 2026高转数静音电机品牌推荐:上海沐辉实业领衔,性价比与质量双优 - 品牌推荐大师
  • 佳能ip2780,ix6780,g6080,g2800,ts6220,ts5180,ts5152,ts9020支持代码5B00,5B02,5B04,1700,1702,1704,P07,E08清零软件
  • 北京翡翠回收新规落地:A货鉴定、种水色分级、全程溯源,透明估价公示 - 二奢分享官
  • 鸿蒙 PC Markdown 编辑器标签栏对齐:消除单标签留白而不破坏水平滚动
  • 告别跑腿:出生公证书在哪儿办理?2026**正规办理渠道及流程全指南 - 叮咚办真方便
  • Prompt 模板在代码生成 Agent 中的最佳实践:从需求到可运行代码
  • 语言、思想与意识的投影关系
  • 深入解析TI ePWM:从寄存器映射到电机驱动实战
  • C6000 DSP数据打包与循环优化:PACK指令实战与性能提升
  • 嵌入式网络驱动开发:从EMAC/MDIO寄存器到稳定C代码的实战指南
  • 大同哪个武校比较正规**前三**实力测评 - 学途指南
  • AI如何重塑学术写作:技术架构与伦理挑战
  • Vue Router核心原理与高级实践指南
  • TI Tiva C系列MCU SHA/MD5硬件加速器实战:HMAC优化与DMA配置
  • AI 增强的协同文档引擎:从智能补全到语义级冲突检测的工程架构