Первое и очень простое решение - можно вообще не использовать вебхуки для тестового бота. Например, пусть у нас будет в конфиге опция, по которой мы запускаем либо сервер для вебхуков, либо поллинг:
import config
if __name__ == '__main__':
if config.POLLING:
... start_polling
else:
start_webhook(...
Всё-таки основная часть бота - его бизнес-логика. Каждый раз проверять работу его вебхуков необязательно.
Если всё же хочется вебхуков, то организуем VPN по любой инструкции, коих тысячи, получаем туннель с парой IP. Например, 10.10.10.1 на сервере и 10.10.10.2 локально. На сервере поднимаем nginx, в котором настраиваем что-то типа
location /path/to/api_test {
proxy_pass http://10.10.10.2:порт/path/to/api_test
}
Обязательно настраиваем https, можно с Let's Encrypt, но можно и с самоподписанным сертификатом. В последнем случае надо будет загрузить этот сертификат в Telegram через API при настройке вебхука.
Локально у себя пробросить в докере тот самый порт в нужный контейнер с ботом.
Возможны разные вариации, не изменяющие общий принцип. Например, можно не настраивать https на сервере, пробросить весь порт "как есть" через nginx stream, haproxy, двойной нат или нат с policy routing, а сам https настраивать у себя локально.