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

Google Cloud Functions部署Telegram机器人报NoneType无chat属性错误

问题根因

报错由两个共同原因触发:

  1. 你的Cloud Functions部署配置未锁定python-telegram-bot依赖版本,冷启动构建时会自动拉取最新发布的库版本。2022年之后发布的python-telegram-bot v20为全异步重构版本,和你使用的v13同步API存在大量不兼容逻辑,Update对象的反序列化行为也有调整,无修改自动升级后直接出现解析异常。
  2. 原有代码未做边界校验:Telegram Webhook会向接口推送所有类型的更新事件,包括频道帖子、消息编辑事件、入群通知、按钮回调、多媒体消息等,这类事件的update.message字段本身就为None,旧版本库可能存在隐式兼容,新版本未做自动过滤,直接取属性就会触发AttributeError。
修复步骤
  • 锁定依赖版本,避免后续无感知升级。在函数部署根目录创建requirements.txt文件,指定兼容旧代码的稳定版本,内容如下:
python-telegram-bot==13.15
functions-framework==3.*
flask==2.0.3

该版本组合和你运行了一年的旧逻辑完全兼容,不会出现接口调用不匹配的问题。

  • 给业务代码增加空值校验,过滤非预期的更新事件,避免非用户普通文本消息触发报错。修正后的代码如下:
# main.py
import telegram
import re

def ItapoxBot(request):
  bot = telegram.Bot(token="9999999999:ABCDEFGHIJKLMNOPQRSTUVWXYZ")
  if request.method == "POST":
    update = telegram.Update.de_json(request.get_json(force=True), bot)
    # 跳过无有效普通消息的更新
    if update is None or update.message is None or update.message.chat is None:
      return "ok"
    chat_id = update.message.chat.id
    # 跳过无文本内容的多媒体/系统类消息
    if update.message.text is None:
      return "ok"
    resposta = criar_resposta(update.message.text)

    if resposta is not None:
        bot.sendMessage(chat_id=chat_id, text=resposta, parse_mode='HTML')
  return "ok"
  • 重新部署Cloud Functions,部署时确认构建流程读取本地的requirements.txt安装依赖,不要使用平台默认的最新版依赖拉取规则。
注意事项
  • 不要在未做代码适配的情况下升级到python-telegram-bot v20及以上版本,该版本全量改为异步调用逻辑,原有同步写法完全无法运行。
  • 如果后续需要减少无效请求,可以调用Telegram Bot API的setWebhook接口,指定只接收普通消息类型的更新,从源头减少无效推送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 13:12:27