Telegram bot无法从webhook获取更新

时间:2018-06-29 20:15:23

标签: python server webhooks telegram-bot

将我的机器人移动到新服务器后,我面临以下问题。我使用webhook来获取更新,但现在该漫游器无法从电报服务器获取更新。我尝试从移除服务器发送带有curl的POST请求,并且漫游器以正常方式对其进行了处理。我用getWebhookInfo检查了webhook,它返回了一个非空url的对象,并且未决的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 个答案:

答案 0 :(得分:1)

Telegram webhook仅与https端点通信,因此我建议针对https连接检查您的服务器。

此外,getWebhookInfo调用返回一个状态对象,该状态对象具有端点的最新错误信息。查看该错误信息,可能会找到确切的问题。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

您的服务器上使用什么操作系统?
您将测试请求从CURL发送到电报或服务器的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!

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