Общая теория:
Если бот на Heroku уходит в сон, то он не теряет своего внутреннего состояния. Когда к спящему боту впервые обратятся по web, то он ответит, как обычно, но с задержкой, на то, чтобы проснуться из сна. В интернете пишут, что выход из сна занимает пару секунд. Я сам не проверял тайминги.
Практика:
Бесплатный тариф на Heroku можно успешно использовать для бота Телеграм, но нужно приспособиться:
- Делать long polling на Heroku с использованием worker gyno. В документации написано, что worker dyno не уходят в сон.
- Делать бота на webhooks. В этом случае бот при бездействии будет ходить в сон, но следующий запрос выведет его из сна. Не проверял тайминги, но предположу, что Telegram не будет обрывать совединение из-за задержки ответа в пару секунд. Да, для внешнего пользователя это запрос потребует несколько секунд на обработку из-за выхода из сна.
- Делать бота как обычно, но по web cron каждые 25 минут посылать web запросы на какой нибудь end point бота, чтобы тот не спал.