二维码已成为连接线上线下的关键工具,无论是分享群组邀请链接、WiFi密码、支付信息,还是传递任何文本内容,二维码都能让手机一键识别。若能在Telegram中内置一个机器人,用户只需把链接或文本发给它,即可秒速获得对应二维码,这将极大提升沟通与分享效率。本文将从零开始,手把手教你搭建这样一个自动化二维码生成机器人,并分享生产环境的部署优化技巧。
一、准备工作:获取Token并搭建环境
在编写代码前,你需要准备以下基础资源:
- Telegram Bot Token:在Telegram中向 @BotFather 发送 /newbot,按提示设置名称和用户名,即可获得形如
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11的Token。 - Python 3.8+:建议使用虚拟环境(venv)隔离依赖。
- 依赖库:pip安装
python-telegram-bot、qrcode、Pillow(用于图像处理)、requests(可选,调用第三方API)。
二、用Python生成二维码:基础与自定义
二维码生成的核心是 qrcode 库,它简单而强大。以下是最基础的生成代码:
import qrcode
# 生成二维码,包含链接或文本
data = "https://t.me/somechannel"
qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4)
qr.add_data(data)
qr.make(fit=True)
# 创建图像并保存
img = qr.make_image(fill_color="black", back_color="white")
img.save("qrcode.png")
如需自定义颜色、大小,甚至嵌入Logo,可通过参数调整:
fill_color/back_color:设置前景和背景颜色,示例:fill_color="#2A5DB0"。box_size:每个点的像素大小,默认10。- 加Logo:使用Pillow打开Logo图片,缩放后粘贴到二维码中央。
三、对接Telegram Bot API:让机器人响应用户
接下来,将二维码生成集成到Telegram机器人中。我们采用 python-telegram-bot 库(v20+)作为示例:
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
import qrcode
import io
def generate_qr(data: str):
qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_M, box_size=10, border=2)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color="#000", back_color="#fff")
buf = io.BytesIO()
img.save(buf, format='PNG')
buf.seek(0)
return buf
async def qr_command(update: Update, context):
# 获取命令参数,如 /qr https://example.com
args = context.args
if not args:
await update.message.reply_text("请提供内容,例如:/qr https://t.me/example")
return
data = ' '.join(args)
qr_img = generate_qr(data)
await update.message.reply_photo(photo=qr_img, caption=f"二维码已生成:")
async def echo_qr(update: Update, context):
# 如果用户直接发送链接或文本,也自动生成二维码
text = update.message.text
if text.startswith('http://') or text.startswith('https://') or len(text) <= 100:
qr_img = generate_qr(text)
await update.message.reply_photo(photo=qr_img, caption="这是您的二维码")
if __name__ == "__main__":
app = Application.builder().token("YOUR_TOKEN").build()
app.add_handler(CommandHandler("qr", qr_command))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo_qr))
app.run_polling()
若不想让机器人对任何文本都生成二维码,可增加关键词过滤,例如仅处理以 http 开头或包含 #qr 标签的消息。
四、进阶:调用第三方API免去本地依赖
如果你的服务器资源有限,或不想安装图像处理库,可以使用现成的二维码生成API。例如 goqr.me 提供了免费接口:
import requests
def qr_from_api(data: str):
url = "https://api.qrserver.com/v1/create-qr-code/"
params = {"data": data, "size": "200x200", "margin": 10, "color": "#000000", "bgcolor": "#ffffff"}
resp = requests.get(url, params=params)
return resp.content
# 在机器人中直接发送 bytes 图片
使用API优点:代码简洁、减少依赖;缺点:依赖网络服务稳定性,且可能因频繁调用触发限流。对于内部小规模使用完全足够。
五、部署与优化:从本地到生产环境
写好机器人后,你需要让它7x24小时运行。推荐以下实践:
- 使用Webhook模式:生产环境优先用Webhook代替Polling,减少资源占用。需要HTTPS域名,可通过Nginx反向代理配置。
- Docker容器化:打包代码和依赖,便于迁移扩容。示例Dockerfile:
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "main.py"]
- 加入错误日志和重试机制:网络抖动或API异常时记录日志并重试,提高稳定性。
- 限制并发和频率:使用
asyncio.Semaphore控制并发请求,避免触发Telegram限流。python-telegram-bot内置了速率限制,但高流量时可自定义。
六、典型应用场景与玩法
- 群组链接分享:将群邀请链接一键转为二维码,方便线下大屏扫码入群。
- WiFi信息传递:生成包含WiFi名和密码的二维码,客人扫码即可联网。
- 支付宝/微信收款码:个人经营场景下,机器人可生成固定收款二维码,供客户扫描。
- 文本便签:将会议纪要、日程等转成二维码,扫码保存到手机。
总结
本文从基础到进阶,完整介绍了Telegram机器人自动生成二维码的实现路径。你既可以用Python本地生成,也可以调用远程API,再通过Bot API以图片形式秒回给用户。生产部署时要注意环境隔离、Webhook和日志监控。希望这个工具能为你的Telegram交流带来便利,也欢迎结合实际需求延伸出更多创意功能。