У меня есть api сервер на fastapi. При запуске сервера закидываются вебхуки для нескольких ботов в списке bots:
async def set_webhook(bot):
url = 'https://какой-то_адрес'
webhook_url = url + '/webhook'
token = generate_secret_token(32)
await bot.set_webhook(webhook_url,
drop_pending_updates=True,
secret_token=token)
return token
@app.on_event('startup')
async def on_startup():
for bot_dict in bots:
bot = Bot(token=bot_dict['token'],
default=DefaultBotProperties(parse_mode=ParseMode.HTML))
secret_token = await set_webhook(bot)
bot_by_secret[secret_token] = bot
Вот такой эндпоинд для приемки обновлений от ботов:
@app.post('/webhook', include_in_schema=False)
async def handle(request: Request):
secret_token = request.headers.get('X-Telegram-Bot-Api-Secret-Token')
if secret:
try:
request.state.bot = bot_by_secret[secret_token]
except KeyError:
return Response(status_code=403)
request_data = await request.json()
update = types.Update(**request_data)
await request.state.dp._process_update(bot=request.state.bot,
update=update)
return Response()
else:
return Response(status_code=403)
Как сделать прием обновлений от ботов и их отправку через промежуточный vps?
С приемкой есть мысль закидывать вебхук уже с адресом промежуточного сервера, на этом сервере перенаправлять на основу, там выполнять какие-то вычисления и возвращать в обратном порядке.
Схема: TelegramAPI -> VPS -> Основной железный сервер -> VPS -> TelegramAPI
Но как перенастроить методы методы у класса Bot, такие как bot.set_webhook, bot.send_message и так далее, чтобы они шли через vps, а не напрямик? В документации не нашел ответов, но мб не там смотрел. Если есть какие-то примеры реализации, буду признателен.
Стандартная схема: Железо --[bot.set_webhook]--> Telegram API
Желаемая схема: Железо --[bot.set_webhook]--> VPS --[bot.set_webhook]--> Telegram API