Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 电报机器人无法从webhook获取更新_Python_Server_Webhooks_Telegram Bot - Fatal编程技术网

Python 电报机器人无法从webhook获取更新

Python 电报机器人无法从webhook获取更新,python,server,webhooks,telegram-bot,Python,Server,Webhooks,Telegram Bot,在将bot移动到新服务器后,我遇到了以下问题。我使用webhook获取更新,但现在bot无法从电报服务器获取更新。我试图用curl从remove服务器发送POST请求,bot以正常方式处理它。我用getWebhookInfo检查了webhook,它返回了一个对象,该对象的url为非空,pending_update_计数等于74,没有错误。我猜,这意味着电报服务器由于某种原因无法向我的主机发送POST请求 我的服务器的操作系统是ArchLinux 我使用Pybotap CONFIG = Confi

在将bot移动到新服务器后,我遇到了以下问题。我使用webhook获取更新,但现在bot无法从电报服务器获取更新。我试图用curl从remove服务器发送POST请求,bot以正常方式处理它。我用getWebhookInfo检查了webhook,它返回了一个对象,该对象的url为非空,pending_update_计数等于74,没有错误。我猜,这意味着电报服务器由于某种原因无法向我的主机发送POST请求

我的服务器的操作系统是ArchLinux

我使用Pybotap

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,
)

求求你,救命

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

要检查防火墙状态,请运行
$ufw status

请显示没有真实IP的URL\u库

您的服务器上有什么操作系统?
您从电报或服务器的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!

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

Telegram webhook只与https端点通信,因此我建议检查服务器的https连接


另外,getWebhookInfo调用返回一个状态对象,其中包含端点的最新错误信息。查看错误信息,可能会发现确切的问题。

我服务器的操作系统是Arch Linux。我不使用ufw,iptables接受所有数据包。我试着运行一个简单的服务器,正如您所描述的,它工作得很好。我用wireshark捕获了数据包,有很多来自带有重置标志的电报服务器的tcp数据包。我从远程服务器发送了CURL请求。getWebhookInfo不会返回任何错误:{'url':'','has_custom_certificate':True,'pending_update_count':55,'last_error_date':None,'last_error_message':None,'max_connections':40,'allowed_updates':None}您可以使用ngrok.ioI尝试了ngrok.io,但收到了SSL错误。我不确定我是否用对了。当我创建公钥时,我将ngrok提供给我的域名作为通用名,并在getWebHookinfo中使用ngrok+/token/no error info中的url设置webhook,这意味着电报服务器无法到达您的服务器。您的服务器https设置似乎有问题。请尝试使用letsencrypt免费ssl证书