@igro_sia
Познаю Python

Как решить 409 в Telegram Bot при использование webHook?

Добрый день. Решил перевести своего бота на webhook . Пока работаю экспериментирую с эхо-ботом.
Имеется:
Amazon AWS и ссылка созданная для бота в API Gateway
Машина на Windows где крутится бот , в будущем это будет vps от того же Amazon
и данный код:
# -*- coding: utf-8 -*-
import constant
import telebot
bot = telebot.TeleBot(constant.token)
WEBHOOK_URL_BASE = "ссылка Amazon"
WEBHOOK_URL_PATH = "https://api.telegram.org/bot{token}/{method}".format(
        token = "токен",
        method ="setWebhook"
    )
bot.remove_webhook()
bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH)
@bot.message_handler(func=lambda message: True, content_types=['text'])
def echo_msg(message):
    bot.send_message(message.chat.id, message.text)
if __name__ == '__main__':
     bot.polling(none_stop=True)


При запуске получаем следующую ошибку:
2017-12-05 10:58:23,116 (__init__.py:292 MainThread) ERROR - TeleBot: "A request to the Telegram API was unsuccessful. The server returned HTTP 409 Conflict. Response body:
[b'{"ok":false,"error_code":409,"description":"Conflict: can\'t use getUpdates method while webhook is active"}']"


Проверяю request, тестовый запрос проходит.

Что нужно исправить ?
  • Вопрос задан
  • 22565 просмотров
Пригласить эксперта
Ответы на вопрос 2
vera_ira
@vera_ira
Делаю приложение по изучению Иврит (Python Kotlin)
У меня возникла ошибка похожая.
Помогло только: через BotFather токен заменила revoke current token.
Ответ написан
Danya_Violet
@Danya_Violet
CTO/CIO
для начала удалите
if __name__ == '__main__':
     bot.polling(none_stop=True)


а webhook, у меня работает так:
WEBHOOK_HOST = 'URL' #без http:// и https://
WEBHOOK_PORT = 88  # 443, 80, 88 or 8443 (port need to be 'open')
WEBHOOK_LISTEN = '0.0.0.0'  # In some VPS you may need to put here the IP addr

WEBHOOK_SSL_CERT = '/etc/nginx/ssl/FILE.cer'  # Path to the ssl certificate
WEBHOOK_SSL_PRIV = '/etc/nginx/ssl/FILE.key'  # Path to the ssl private key

WEBHOOK_URL_BASE = "https://%s:%s" % (WEBHOOK_HOST, WEBHOOK_PORT)
WEBHOOK_URL_PATH = "/%s/" % (constant.token)

bot = telebot.TeleBot(constant.token)

class WebhookServer(object):
    @cherrypy.expose
    def index(self):
        if 'content-length' in cherrypy.request.headers and \
                        'content-type' in cherrypy.request.headers and \
                        cherrypy.request.headers['content-type'] == 'application/json':
            length = int(cherrypy.request.headers['content-length'])
            json_string = cherrypy.request.body.read(length).decode("utf-8")
            update = telebot.types.Update.de_json(json_string)
            # Эта функция обеспечивает проверку входящего сообщения
            bot.process_new_updates([update])
            return ''
        else:
            raise cherrypy.HTTPError(403)


bot.remove_webhook()

bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH,
                certificate=open(WEBHOOK_SSL_CERT, 'r'))

cherrypy.config.update({
    'server.socket_host': WEBHOOK_LISTEN,
    'server.socket_port': WEBHOOK_PORT,
    'server.ssl_module': 'builtin',
    'server.ssl_certificate': WEBHOOK_SSL_CERT,
    'server.ssl_private_key': WEBHOOK_SSL_PRIV
})

cherrypy.quickstart(WebhookServer(), WEBHOOK_URL_PATH, {'/': {}})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы