首页 文章

Telegram bot没有从webhook获得更新

提问于
浏览
0

将我的机器人移动到新服务器后,我遇到了以下问题 . 我使用webhook获取更新,但现在机器人没有从电报服务器获取它们 . 我尝试从删除服务器发送带有curl的POST请求,并且bot以正常方式处理它 . 我用getWebhookInfo检查了webhook,它返回了一个非空url和pending_update_count等于74的对象,没有错误 . 我想,这意味着电报服务器由于某种原因无法向我的主机发送POST请求 .

我的服务器的操作系统是Arch Linux .

我使用pyTelegramBotAP .

CONFIG = ConfigParser()
CONFIG.read(os.path.join('data', 'config.ini'))

# webhook url
URL_BASE = "https://{}:{}".format(CONFIG['server']['ip'], CONFIG.getint('server', 'port'))
URL_PATH = "/{}/".format(CONFIG['telegram bot']['token'])

BOT = telebot.TeleBot(CONFIG['telegram bot']['token'])

# server that will listen for new messages
APP = web.Application()

URL = URL_BASE + URL_PATH

BOT.set_webhook(url=URL, certificate=open(CONFIG['ssl']['certificate'], 'rb'))

# Build ssl context
CONTEXT = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
CONTEXT.load_cert_chain(CONFIG['ssl']['certificate'], CONFIG['ssl']['private key'])

# Start aiohttp server
web.run_app(
    APP,
    host=CONFIG['server']['listen'],
    port=CONFIG['server']['port'],
    ssl_context=CONTEXT,
)

请帮忙!

3 回答

  • 1

    电报webhook只与https endpoints 通信,因此我建议您检查服务器是否与https连接有关 .

    此外,getWebhookInfo调用返回一个状态对象,其中包含您的 endpoints 的最新错误信息 . 看看那个错误信息,可能会发现确切的问题 .

  • 0

    请检查服务器上的防火墙,服务器上的防火墙很可能没有将消息传递给您的应用程序 .

  • 0

    要检查防火墙状态,请运行 $ ufw status
    请显示没有真实IP的URL_BASE .

    您的服务器上有哪些操作系统?
    您是否将CURL的测试请求发送到Telegram或服务器的URL?

    如果您运行简单的应用程序,您能从服务器获得响应吗?

    例:

    from aiohttp import web
    
    async def hello(request):
        return web.Response(text='Hello world!')
    
    app = web.Application()
    app.add_routes([web.get('/', hello)])
    web.run_app(app, host='localhost', port=3003)
    

    检查回复:

    $ curl localhost:3003
    Hello world!
    

    请提供有关如何进行故障排除的更多详细信息 .

相关问题