Telegram 机器人是接 AI 最省事的入口之一:用户在你机器人里发消息,你的程序调用大模型生成回复,再发回去。不用做前端、不用管登录,一个 BotFather 令牌就能开工。本教程带你从零做一个能聊天、有记忆、可上线的 AI 机器人。
🤖 本教程适合:想快速验证 AI 产品点子、做社群助手/客服原型/个人效率机器人的开发者。
先搞懂:Telegram 机器人是怎么跑的?
一句话:BotFather 给你一个 token(令牌),你的程序用这个 token 长轮询/接收用户消息,调用 AI 生成回复,再发回去。AI 是大脑,Telegram 是「嘴巴和耳朵」。
| 角色 | 负责 |
|---|---|
| Telegram | 收发消息、按钮、命令菜单 |
| 你的程序 | 接收消息、调 AI、回消息 |
| 大模型 | 理解并生成回答 |
Step 1:找 @BotFather 创建机器人
1 拿到机器人的「身份证」
在 Telegram 搜索 @BotFather,发 /newbot,按提示起名,拿到一串 123456:ABCdef... 的 token。
1. 给 BotFather 发 /newbot
2. 填机器人显示名(如 My AI Helper)
3. 填用户名(必须以 bot 结尾,如 my_ai_helper_bot)
4. 复制返回的 token:123456:ABCdef...
token 等于账号密码:谁拿到都能以你的机器人身份发消息。只放环境变量,别提交到代码仓库。
Step 2:跑通「收到 hi 回你好」
2 最小可运行骨架
装好库,先不接 AI,确认消息收发通了:
pip install python-telegram-bot
from telegram import Update
from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes
async def echo(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("你好,我是 AI 机器人!")
app = ApplicationBuilder().token("你的TOKEN").build()
app.add_handler(MessageHandler(filters.TEXT, echo))
app.run_polling()
💡 能收到「你好」回复,说明 token 和收发链路都对了。下一步把 AI 接进来处理文本。
Step 3:把 AI 接进来当大脑
3 用户说什么,AI 答什么
把 echo 换成「调大模型」,用 DeepSeek/通义都行:
from openai import OpenAI
client = OpenAI(api_key=..., base_url="https://api.deepseek.com")
async def chat(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
user_text = update.message.text
r = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role":"user","content":user_text}],
)
await update.message.reply_text(r.choices[0].message.content)
回复长度限制:Telegram 单条消息有长度上限,AI 回答过长要分段发,或先摘要再发。
Step 4:加「会话记忆」
4 让机器人记得你们聊过啥
用 chat_id 当 key,把历史攒在内存(生产用数据库):
history = {} # chat_id -> [消息列表]
async def chat(update, ctx):
cid = update.message.chat_id
history.setdefault(cid, [])
history[cid].append({"role":"user","content":update.message.text})
r = client.chat.completions.create(model="deepseek-chat", messages=history[cid])
a = r.choices[0].message.content
history[cid].append({"role":"assistant","content":a})
await update.message.reply_text(a)
🔑 多轮记忆很自然,但要设上限(如最近 20 轮),否则越聊越慢越贵;也可把旧内容总结压缩。
Step 5:加命令菜单与兜底
5 体验与安全都要有
加上 /start、/reset 命令,并对敏感场景做兜底:
1. /start:发欢迎语 + 功能说明
2. /reset:清空该用户 history(保护隐私)
3. 敏感问题:先识别再转人工,不随意作答
4. 限流:同一用户每分钟最多 N 条,防刷防烧钱
公开机器人必须有护栏:限流防恶意刷接口;涉及账号、支付、个人隐私的内容转人工;内容违规及时拦截。
Step 6:部署上线
本地跑只能你电脑开机才在线。要 7×24:
1. 长期运行:丢一台云服务器 / 容器,用 nohup 或 systemd 保活
2. Webhook 模式:比轮询更省资源(需公网 HTTPS 地址)
3. 调试用 ngrok:把本地暴露到公网,仅开发期使用
4. 监控:token 泄露告警、用量与错误日志
🚀 小提示:先用
run_polling 在笔记本上验证完整逻辑,再搬去服务器跑 Webhook,省去反复部署。常见问题速查
| 现象 | 大概率原因 & 解决 |
|---|---|
| 机器人不回消息 | token 错 / 没 run_polling / 被封 |
| 409 Conflict | 同一个 token 多处运行,只留一个 |
| 回复被截断 | 超长度,分段发送或先摘要 |
| 被人刷爆额度 | 加限流 + 用量监控 |