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

如何基于python-telegram-bot v20实现无服务器Telegram机器人?

Python-Telegram-Bot v20.2 无服务器架构适配方案

核心逻辑

无服务器架构下无法使用run_polling()的长轮询模式,需将Telegram通过Webhook推送的请求直接转换为机器人可识别的Update对象,交由Application处理。

完整实现代码

import asyncio
import json
from telegram import Update
from telegram.ext import Application, CommandHandler
import config

# 全局初始化Application,复用实例提升性能
application = Application.builder().token(config.MYTOKEN).build()

# 你的命令处理器(和本地运行的逻辑一致)
async def send_welcome(update: Update, context):
    await update.message.reply_text("欢迎使用机器人!")

# 注册处理器
application.add_handler(CommandHandler("start", send_welcome))

async def handler(event, context):
    # 解析Telegram Webhook请求体
    request_body = json.loads(event['body'])
    # 将JSON请求转换为Update对象
    update = Update.de_json(request_body, application.bot)
    
    # 提交更新到处理队列并启动应用处理
    await application.update_queue.put(update)
    await application.initialize()
    await application.start()
    
    # 等待队列中所有更新处理完成
    while not application.update_queue.empty():
        await asyncio.sleep(0.1)
    
    # 清理应用资源
    await application.stop()
    await application.shutdown()
    
    return {
        'statusCode': 200,
        'body': json.dumps({'status': 'success'})
    }

关键说明

  • 全局Application实例:避免每次请求重复初始化机器人,大部分无服务器平台会保留函数实例复用,有效提升响应速度。
  • Update.de_json方法:这是对接Webhook的核心,将Telegram推送的JSON数据转换为python-telegram-bot内部的Update对象,替代轮询模式下的自动拉取逻辑。
  • 异步流程控制:手动管理Application的初始化、启动、停止流程,确保所有消息处理任务执行完毕后再返回响应,避免Telegram重复推送请求。

注意事项

  • 提前通过application.bot.set_webhook(url="你的无服务器函数URL")完成Webhook配置(本地运行一次即可)。
  • 调整无服务器平台的函数超时时间至10秒左右,确保消息处理流程能完整执行。
  • 打包部署时需包含依赖:python-telegram-bot==20.2,可通过requirements.txt声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:43:19