Aiogram на webhook и своем сервере телеграм
Есть свой сервер телеграм, на этом же сервер делаю бота на aiogram, по документации и примерам с гита, но после запуска сервер ни как не реагирует на действия в боте, сервер точно рабочий, так как на telebot все работает, а на aiogram ни каких реакций, вот код
TOKEN = config['TOKEN']
# Webserver settings
# bind localhost only to prevent any external access
WEB_SERVER_HOST = "127.0.0.1"
# Port for incoming request from reverse proxy. Should be any available port
WEB_SERVER_PORT = 8443
# Path to webhook route, on which Telegram will send requests
WEBHOOK_PATH = f'/webhook/{TOKEN}'
# Base URL for webhook will be used to generate webhook URL for Telegram,
# in this example it is used public DNS with HTTPS support
BASE_WEBHOOK_URL = "http://127.0.0.1/"
# All handlers should be attached to the Router (or Dispatcher)
router = Router()
@router.message(CommandStart())
async def command_start_handler(message: Message) -> None:
"""
This handler receives messages with `/start` command
"""
# Most event objects have aliases for API methods that can be called in events' context
# For example if you want to answer to incoming message you can use `message.answer(...)` alias
# and the target chat will be passed to :ref:`aiogram.methods.send_message.SendMessage`
# method automatically or call API method directly via
# Bot instance: `bot.send_message(chat_id=message.chat.id, ...)`
await message.answer(f"Hello, {hbold(message.from_user.full_name)}!")
@router.message()
async def echo_handler(message: types.Message) -> None:
"""
Handler will forward receive a message back to the sender
By default, message handler will handle all message types (like text, photo, sticker etc.)
"""
try:
# Send a copy of the received message
await message.send_copy(chat_id=message.chat.id)
except TypeError:
# But not all the types is supported to be copied so need to handle it
await message.answer("Nice try!")
async def on_startup(bot: Bot) -> None:
# If you have a self-signed SSL certificate, then you will need to send a public
# certificate to Telegram
await bot.set_webhook(f"{BASE_WEBHOOK_URL}{WEBHOOK_PATH}")
async def on_shutdown(bot: Bot) -> None:
await bot.delete_webhook()
def main() -> None:
# Dispatcher is a root router
dp = Dispatcher()
# ... and all other routers should be attached to Dispatcher
dp.include_router(router)
# Register startup hook to initialize webhook
dp.startup.register(on_startup)
dp.shutdown.register(on_shutdown)
session = AiohttpSession(
api=TelegramAPIServer.from_base('http://localhost:8081')
)
# Initialize Bot instance with a default parse mode which will be passed to all API calls
bot = Bot(TOKEN, session=session)
logging.info(bot.get_me())
# Create aiohttp.web.Application instance
app = web.Application()
# Create an instance of request handler,
# aiogram has few implementations for different cases of usage
# In this example we use SimpleRequestHandler which is designed to handle simple cases
webhook_requests_handler = SimpleRequestHandler(
dispatcher=dp,
bot=bot,
secret_token=WEBHOOK_SECRET,
)
# Register webhook handler on application
webhook_requests_handler.register(app, path=WEBHOOK_PATH)
# Mount dispatcher startup and shutdown hooks to aiohttp application
setup_application(app, dp, bot=bot)
# And finally start webserver
web.run_app(app, host=WEB_SERVER_HOST, port=WEB_SERVER_PORT)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO,
handlers=[RotatingFileHandler(
filename="logs/logs.txt", maxBytes=1000000, backupCount=5, encoding="utf-8")],
format="%(asctime)s %(levelname)s %(message)s", encoding="utf-8", datefmt='%Y-%m-%dT%H:%M:%S')
main()
что может быть не так?