Вебхук телебота pythonanywhere.com не работает ⇐ Python
Вебхук телебота pythonanywhere.com не работает
Я пытался установить вебхук на pythonanywhere.com.
Все работало нормально. После запуска модульных тестов телебота, использующих Telegram API, вебхук перестал работать.
Я пытался использовать новый ключ API бота, но безрезультатно. Я пытался создать новое веб-приложение, но безрезультатно. Когда я отправляю сообщение в API Telegram с помощью getWebhookInfo, он не показывает URL-адрес веб-перехватчика. Я не получаю ошибок в журнале ошибок pythonanywhere. Бот отлично работает при использовании опроса на моей локальной машине. Я попробовал обновить все файлы исходного кода.
#октябрь. 9 2023 г. #faq_bot.py импортировать ОС из типов импорта телеботов импорт телебота из колбы импорт колбы, запрос импортировать faq_logging как faq_log импортировать faq_inline_keyboards импорт faq_utils импортировать faq_data_viz # Настройте приложение Flask приложение = Колба(__name__) logger = faq_log.set_logging('faq_bot.py', 'faq_bot.log') # Загружает токен Telegram API, а также вопросы и ответы из файла .json. logger.info('Загрузка faq_config.json') json_file ='faq_config.json' # Загружает контактную информацию contact_file = 'faq_contact_us.txt' # Загружаем подсказки Prompt_file = 'faq_prompts.json' подсказки = faq_utils.get_prompts(prompt_file) logger.info('Создание каталога данных, если он не существует') если os.path.isdir('data') имеет значение False: os.mkdir('данные') токен, вопросы_и_ответы = faq_utils.parse_json(json_file) logger.info('Создание экземпляра телебота') bot = telebot.TeleBot(токен, резьба=False) # Создает два файла CSV, если они не существуют. Один содержит отзывы пользователей, другой — # поисковых запросов. Значения в словаре представляют собой заголовки CSV. logger.info('Создание файлов CSV, если они не существуют') filenames = {'data/faq_feedback.csv': ['вопрос', 'обратная связь'], \ 'data/faq_search_queries.csv': ['запрос']} faq_utils.create_csv(имена файлов) # Срабатывает, когда пользователь вводит /FAQ или выбирает FAQ в меню бота Telegram. @bot.message_handler(commands=['FAQ', 'спросить', 'начать']) def faq_command(сообщение: типы.Сообщение): """ Функция, которая отображает главное меню пользователю Telegram по его запросу. Аргументы: message (types.Message): объект типа сообщения телебота Возврат: Не возвращается """ logger.info('Меню часто задаваемых вопросов инициализировано') bot.send_message(message.chat.id, подсказки[0], Reply_markup=faq_inline_keyboards.faq_keyboard(questions_and_ответы)) @bot.message_handler(commands=['42hiddenData67']) Защиту data_viz (сообщение: типы. Сообщение): """ Функция, которая отправляет визуализацию данных пользователю Telegram, когда он ее запрашивает. Аргументы: message (types.Message): объект типа сообщения телебота Возврат: Не возвращается """ data_viz_files = faq_data_viz.create_data_viz(список(filenames.keys())) zip_file = faq_data_viz.export_data_viz(data_viz_files) logger.info('Отправка визуализации данных') bot.send_message(message.chat.id, подсказки[1]) bot.send_document(message.chat.id, open(zip_file, 'rb')) # Срабатывает, когда пользователь вводит /Контакт или выбирает «Связаться с нами» в меню бота Telegram. @bot.message_handler(commands=['contact']) Защиту contact_command (сообщение: типы. Сообщение): """ Функция, которая отображает контактную информацию компании, когда пользователь ее запрашивает. Аргументы: message (types.Message): объект типа сообщения телебота Возврат: Не возвращается """ logger.info('Контактная информация отправляется') с open(contact_file, 'r') как fn: contact_info = fn.read() bot.send_message(message.chat.id, подсказки[2]) bot.send_message(message.chat.id, contact_info) # Обработчик, который обрабатывает данные, возвращаемые API бота Telegram, как данные обратного вызова @bot.callback_query_handler(func=лямбда-вызов: True) Защиту Keyboard_callback_handle (вызов: типы.CallbackQuery): """ Функция, которая отвечает на запросы обратного вызова Telegram Аргументы: call (types.CallbackQuery): объект типа обратного запроса телебота Возврат: Не возвращается """ # Сглаживает словарь вопросов и ответов, чтобы можно было найти вложенные вопросы qna_flattened = dict(faq_utils.flatten_dict(questions_and_ответы)) пытаться: # Отображает пользователю следующий уровень во вложенном меню на основе его предыдущего выбора if isinstance(qna_plattened[call.data], dict) == True: logger.info('Отображение вложенного меню') bot.send_message(call.from_user.id, подсказки[3], Reply_markup=faq_inline_keyboards.faq_keyboard(qna_plattened[call.data])) еще: # Отправляет ответ и собирает отзывы пользователей logger.info('Отправка ответа и запрос отзыва') bot.send_message(call.from_user.id, qna_plattened[call.data]) bot.send_message(call.from_user.id, подсказки[4], Reply_markup=faq_inline_keyboards.feedback(call.data)) # KeyError произойдет, когда клавиатура разметки вернет значение обратной связи, поскольку эти # значений нет в словаре вопросов и ответов. Это используется для обработки # обратная связь при обработке исключения кроме KeyError: logger.info('Добавление отзыва в csv') если call.data[-3:] == 'да' или call.data[-2:] == 'нет': # Создает список, который отделяет вопросы ([:-1]) от отзывов ([-1]) csv_list = [' '.join(call.data.split()[:-1]), call.data.split()[-1]] faq_utils.to_csv(csv_list, list(filenames.keys())[0]) bot.send_message(call.from_user.id, подсказки[5]) # Обработчик, который будет реагировать на любой ввод пользователя, который не обработан выше @bot.message_handler(func=лямбда-сообщение: True) Защиту handle_message (сообщение: типы. Сообщение): """ Функция, которая обрабатывает любые входные данные пользователя, которые не обрабатываются другими обработчиками. Пользовательский ввод будет использоваться для поиска вопросов в FAQ. Аргументы: message (types.Message): объект типа сообщения телебота Возврат: Не возвращается """ logger.info('Сбор вопросов на основе поискового запроса пользователя. Добавление запросов в .csv') вопросы = faq_utils.search_questions(message.text, questions_and_ответы) # Добавляет поисковый запрос в коллекцию запросов .csv. faq_utils.to_csv([message.text], list(filenames.keys())[1]) # Отображает набор кнопок, содержащих вопросы, относящиеся к запросу. если len(вопросы) > 0: bot.send_message(message.chat.id, подсказки[6], Reply_markup=faq_inline_keyboards.faq_keyboard(вопросы)) еще: bot.send_message(message.chat.id, подсказки[7]) logger.info('Вебхук Telebot запущен') # Определить маршрут вебхука @app.route('/', методы=['POST']) защита вебхука(): """ Функция, создающая вебхук для API бота Telegram. Возврат: Не возвращается """ update = telebot.types.Update.de_json(request.stream.read().decode('utf-8')) bot.process_new_updates([обновление]) вернуть «ОК» # Установите URL-адрес вебхука bot.remove_webhook() bot.set_webhook(url='https://shorecode.pythonanywhere.com', drop_pending_updates=True)
WSGI:
# Этот файл содержит конфигурацию WSGI, необходимую для обслуживания вашего # веб-приложение по адресу http://.pythonanywhere.com/ # Это работает, устанавливая переменную 'application' в обработчик WSGI какого-либо # описание. # # Приведенное ниже изображение было автоматически создано для вашего проекта Flask. импортировать систему # добавьте каталог вашего проекта в sys.path project_home = '/home/shorecode' если project_home отсутствует в sys.path: sys.path = [дом_проекта] + sys.path # импортируем приложение flask, но для работы WSGI его нужно назвать «приложением» из faq_bot импортировать приложение как приложение # noqa
Я пытался установить вебхук на pythonanywhere.com.
Все работало нормально. После запуска модульных тестов телебота, использующих Telegram API, вебхук перестал работать.
Я пытался использовать новый ключ API бота, но безрезультатно. Я пытался создать новое веб-приложение, но безрезультатно. Когда я отправляю сообщение в API Telegram с помощью getWebhookInfo, он не показывает URL-адрес веб-перехватчика. Я не получаю ошибок в журнале ошибок pythonanywhere. Бот отлично работает при использовании опроса на моей локальной машине. Я попробовал обновить все файлы исходного кода.
#октябрь. 9 2023 г. #faq_bot.py импортировать ОС из типов импорта телеботов импорт телебота из колбы импорт колбы, запрос импортировать faq_logging как faq_log импортировать faq_inline_keyboards импорт faq_utils импортировать faq_data_viz # Настройте приложение Flask приложение = Колба(__name__) logger = faq_log.set_logging('faq_bot.py', 'faq_bot.log') # Загружает токен Telegram API, а также вопросы и ответы из файла .json. logger.info('Загрузка faq_config.json') json_file ='faq_config.json' # Загружает контактную информацию contact_file = 'faq_contact_us.txt' # Загружаем подсказки Prompt_file = 'faq_prompts.json' подсказки = faq_utils.get_prompts(prompt_file) logger.info('Создание каталога данных, если он не существует') если os.path.isdir('data') имеет значение False: os.mkdir('данные') токен, вопросы_и_ответы = faq_utils.parse_json(json_file) logger.info('Создание экземпляра телебота') bot = telebot.TeleBot(токен, резьба=False) # Создает два файла CSV, если они не существуют. Один содержит отзывы пользователей, другой — # поисковых запросов. Значения в словаре представляют собой заголовки CSV. logger.info('Создание файлов CSV, если они не существуют') filenames = {'data/faq_feedback.csv': ['вопрос', 'обратная связь'], \ 'data/faq_search_queries.csv': ['запрос']} faq_utils.create_csv(имена файлов) # Срабатывает, когда пользователь вводит /FAQ или выбирает FAQ в меню бота Telegram. @bot.message_handler(commands=['FAQ', 'спросить', 'начать']) def faq_command(сообщение: типы.Сообщение): """ Функция, которая отображает главное меню пользователю Telegram по его запросу. Аргументы: message (types.Message): объект типа сообщения телебота Возврат: Не возвращается """ logger.info('Меню часто задаваемых вопросов инициализировано') bot.send_message(message.chat.id, подсказки[0], Reply_markup=faq_inline_keyboards.faq_keyboard(questions_and_ответы)) @bot.message_handler(commands=['42hiddenData67']) Защиту data_viz (сообщение: типы. Сообщение): """ Функция, которая отправляет визуализацию данных пользователю Telegram, когда он ее запрашивает. Аргументы: message (types.Message): объект типа сообщения телебота Возврат: Не возвращается """ data_viz_files = faq_data_viz.create_data_viz(список(filenames.keys())) zip_file = faq_data_viz.export_data_viz(data_viz_files) logger.info('Отправка визуализации данных') bot.send_message(message.chat.id, подсказки[1]) bot.send_document(message.chat.id, open(zip_file, 'rb')) # Срабатывает, когда пользователь вводит /Контакт или выбирает «Связаться с нами» в меню бота Telegram. @bot.message_handler(commands=['contact']) Защиту contact_command (сообщение: типы. Сообщение): """ Функция, которая отображает контактную информацию компании, когда пользователь ее запрашивает. Аргументы: message (types.Message): объект типа сообщения телебота Возврат: Не возвращается """ logger.info('Контактная информация отправляется') с open(contact_file, 'r') как fn: contact_info = fn.read() bot.send_message(message.chat.id, подсказки[2]) bot.send_message(message.chat.id, contact_info) # Обработчик, который обрабатывает данные, возвращаемые API бота Telegram, как данные обратного вызова @bot.callback_query_handler(func=лямбда-вызов: True) Защиту Keyboard_callback_handle (вызов: типы.CallbackQuery): """ Функция, которая отвечает на запросы обратного вызова Telegram Аргументы: call (types.CallbackQuery): объект типа обратного запроса телебота Возврат: Не возвращается """ # Сглаживает словарь вопросов и ответов, чтобы можно было найти вложенные вопросы qna_flattened = dict(faq_utils.flatten_dict(questions_and_ответы)) пытаться: # Отображает пользователю следующий уровень во вложенном меню на основе его предыдущего выбора if isinstance(qna_plattened[call.data], dict) == True: logger.info('Отображение вложенного меню') bot.send_message(call.from_user.id, подсказки[3], Reply_markup=faq_inline_keyboards.faq_keyboard(qna_plattened[call.data])) еще: # Отправляет ответ и собирает отзывы пользователей logger.info('Отправка ответа и запрос отзыва') bot.send_message(call.from_user.id, qna_plattened[call.data]) bot.send_message(call.from_user.id, подсказки[4], Reply_markup=faq_inline_keyboards.feedback(call.data)) # KeyError произойдет, когда клавиатура разметки вернет значение обратной связи, поскольку эти # значений нет в словаре вопросов и ответов. Это используется для обработки # обратная связь при обработке исключения кроме KeyError: logger.info('Добавление отзыва в csv') если call.data[-3:] == 'да' или call.data[-2:] == 'нет': # Создает список, который отделяет вопросы ([:-1]) от отзывов ([-1]) csv_list = [' '.join(call.data.split()[:-1]), call.data.split()[-1]] faq_utils.to_csv(csv_list, list(filenames.keys())[0]) bot.send_message(call.from_user.id, подсказки[5]) # Обработчик, который будет реагировать на любой ввод пользователя, который не обработан выше @bot.message_handler(func=лямбда-сообщение: True) Защиту handle_message (сообщение: типы. Сообщение): """ Функция, которая обрабатывает любые входные данные пользователя, которые не обрабатываются другими обработчиками. Пользовательский ввод будет использоваться для поиска вопросов в FAQ. Аргументы: message (types.Message): объект типа сообщения телебота Возврат: Не возвращается """ logger.info('Сбор вопросов на основе поискового запроса пользователя. Добавление запросов в .csv') вопросы = faq_utils.search_questions(message.text, questions_and_ответы) # Добавляет поисковый запрос в коллекцию запросов .csv. faq_utils.to_csv([message.text], list(filenames.keys())[1]) # Отображает набор кнопок, содержащих вопросы, относящиеся к запросу. если len(вопросы) > 0: bot.send_message(message.chat.id, подсказки[6], Reply_markup=faq_inline_keyboards.faq_keyboard(вопросы)) еще: bot.send_message(message.chat.id, подсказки[7]) logger.info('Вебхук Telebot запущен') # Определить маршрут вебхука @app.route('/', методы=['POST']) защита вебхука(): """ Функция, создающая вебхук для API бота Telegram. Возврат: Не возвращается """ update = telebot.types.Update.de_json(request.stream.read().decode('utf-8')) bot.process_new_updates([обновление]) вернуть «ОК» # Установите URL-адрес вебхука bot.remove_webhook() bot.set_webhook(url='https://shorecode.pythonanywhere.com', drop_pending_updates=True)
WSGI:
# Этот файл содержит конфигурацию WSGI, необходимую для обслуживания вашего # веб-приложение по адресу http://.pythonanywhere.com/ # Это работает, устанавливая переменную 'application' в обработчик WSGI какого-либо # описание. # # Приведенное ниже изображение было автоматически создано для вашего проекта Flask. импортировать систему # добавьте каталог вашего проекта в sys.path project_home = '/home/shorecode' если project_home отсутствует в sys.path: sys.path = [дом_проекта] + sys.path # импортируем приложение flask, но для работы WSGI его нужно назвать «приложением» из faq_bot импортировать приложение как приложение # noqa
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Библиотека телебота завершает выполнение сценария с кодом выхода 0xC0000135.
Anonymous » » в форуме Python - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как получить сообщение через вебхук Telegram с помощью API бота sendMessage
Anonymous » » в форуме Php - 0 Ответы
- 43 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как получить сообщение через вебхук Telegram с помощью API бота sendMessage
Anonymous » » в форуме Php - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-