mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
You can now use the Retry-After response header to configure the delay after which the Bot API will retry the request after an unsuccessful response from a webhook.
This commit is contained in:
parent
9477e9af86
commit
94d3dd4b13
2 changed files with 16 additions and 5 deletions
|
|
@ -128,8 +128,14 @@ class WebhookRequestHandler(web.View):
|
|||
response = self.get_response(results)
|
||||
|
||||
if response:
|
||||
return response.get_web_response()
|
||||
return web.Response(text='ok')
|
||||
web_response = response.get_web_response()
|
||||
else:
|
||||
web_response = web.Response(text='ok')
|
||||
|
||||
if self.request.app['RETRY_AFTER']:
|
||||
web_response.headers['Retry-After'] = self.request.app['RETRY_AFTER']
|
||||
|
||||
return web_response
|
||||
|
||||
async def get(self):
|
||||
self.validate_ip()
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ def start_polling(dispatcher, *, loop=None, skip_updates=False, reset_webhook=Tr
|
|||
|
||||
|
||||
def start_webhook(dispatcher, webhook_path, *, loop=None, skip_updates=None,
|
||||
on_startup=None, on_shutdown=None, check_ip=False, **kwargs):
|
||||
on_startup=None, on_shutdown=None, check_ip=False, retry_after=None, **kwargs):
|
||||
"""
|
||||
Start bot in webhook mode
|
||||
|
||||
|
|
@ -54,7 +54,8 @@ def start_webhook(dispatcher, webhook_path, *, loop=None, skip_updates=None,
|
|||
:param kwargs:
|
||||
:return:
|
||||
"""
|
||||
executor = Executor(dispatcher, skip_updates=skip_updates, check_ip=check_ip, loop=loop)
|
||||
executor = Executor(dispatcher, skip_updates=skip_updates, check_ip=check_ip, retry_after=retry_after,
|
||||
loop=loop)
|
||||
_setup_callbacks(executor, on_startup, on_shutdown)
|
||||
|
||||
executor.start_webhook(webhook_path, **kwargs)
|
||||
|
|
@ -84,12 +85,13 @@ class Executor:
|
|||
Main executor class
|
||||
"""
|
||||
|
||||
def __init__(self, dispatcher, skip_updates=None, check_ip=False, loop=None):
|
||||
def __init__(self, dispatcher, skip_updates=None, check_ip=False, retry_after=None, loop=None):
|
||||
if loop is None:
|
||||
loop = dispatcher.loop
|
||||
self.dispatcher = dispatcher
|
||||
self.skip_updates = skip_updates
|
||||
self.check_ip = check_ip
|
||||
self.retry_after = retry_after
|
||||
self.loop = loop
|
||||
|
||||
self._identity = secrets.token_urlsafe(16)
|
||||
|
|
@ -186,6 +188,9 @@ class Executor:
|
|||
if app is None:
|
||||
self._web_app = app = web.Application()
|
||||
|
||||
if self.retry_after:
|
||||
app['RETRY_AFTER'] = self.retry_after
|
||||
|
||||
if self._identity == app.get(self._identity):
|
||||
# App is already configured
|
||||
return
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue