johny2308, @gavrilka
В общем в итоге еще весной 2017-го, когда был создан этот тикет, я все-таки справился с этой проблемой путем долгих проб и постоянных нерабочих пушей на Хероку...
Уже не помню весь свой путь к этому решению, но в итоге вот как в итоге у меня это работает:
import telebot
import os
from flask import Flask, request
import logging
bot = telebot.TeleBot(token)
# Здесь пишем наши хэндлеры
# Проверим, есть ли переменная окружения Хероку (как ее добавить смотрите ниже)
if "HEROKU" in list(os.environ.keys()):
logger = telebot.logger
telebot.logger.setLevel(logging.INFO)
server = Flask(__name__)
@server.route("/bot", methods=['POST'])
def getMessage():
bot.process_new_updates([telebot.types.Update.de_json(request.stream.read().decode("utf-8"))])
return "!", 200
@server.route("/")
def webhook():
bot.remove_webhook()
bot.set_webhook(url="https://min-gallows.herokuapp.com/bot") # этот url нужно заменить на url вашего Хероку приложения
return "?", 200
server.run(host="0.0.0.0", port=os.environ.get('PORT', 80))
else:
# если переменной окружения HEROKU нету, значит это запуск с машины разработчика.
# Удаляем вебхук на всякий случай, и запускаем с обычным поллингом.
bot.remove_webhook()
bot.polling(none_stop=True)
Насчет настройки переменной окружения в Хероку - заходим в настройки приложения в Хероку и видим пункт "Config Variables". И добавляем туда переменную HEROKU, чтобы наш бот отличал - запущен он на сервере или на локальной машине. Но это уже не обязательно, это вкусовщна. Просто для меня это удобно.
Надеюсь, у вас все получится!