В Telegram с 24 июня 2015 появились боты, а точнее Telegram Bot API. То есть, теперь мою прошлую задачу получения статуса сервера можно решить гораздо удобнее.
Бот не является “пользовательским аккаунтом”, ему не нужен номер телефона, и самое главное — не нужно ставить клиентское приложение для Telegram на сервере или где вы хотите его использовать. Бот для Telegram — это ну как бы и есть API — веб-запросы к серверам Telegram. Механизм обработки запросов и отправки ответов лежит на вас, как на владельце бота.
Официальная документация по ботам здесь: https://core.telegram.org/bots
Создание бота
Нужно написать самому главному боту — BotFather:
…и уважительно попросить создать нового бота:
После этого бот будет создан. Обратите внимание на токен — по нему осуществляется доступ к боту, так что светить этот токен нельзя, иначе кто угодно сможет получить доступ к сообщениям бота (перехватывать запросы и отправлять свои ответы).
Не работает чат-бот в телеграм: что делать?
Сейчас, когда у вас уже создан бот и получен токен, я могу на примере продемонстрировать, что конкретно имел в виду под словами “это ну как бы и есть API”. Откройте браузер и перейдите по такому адресу:
В браузере отобразится примерно такое:
Для большей наглядности, вот скриншот браузера:
Вот что такое бот в Telegram. Вы отправляете веб-запрос и получаете на него JSON-ответ.
Разумеется, нам нужно автоматизировать как отправку запросов, так и разбор JSON-ответов, потому нужна программная реализация бота, которая будет работать на каком-нибудь сервере (можно и на домашнем компе, но тогда, очевидно, бот будет доступен только когда будет включен компьютер). И для этой цели можно выбрать абсолютно любой язык программирования, поддерживающий отправку веб-запросов, ведь, как я уже сказал и продемонстировал — работа с ботом это всего лишь отправка веб-запросов и разбор ответов.
Реализация бота
Я выбрал язык Python. Выбор далеко не случаен. Дело в том, что для Python уже есть готовая библиотека, существенно облегчающая реализацию бота — это pyTelegramBotAPI. Собственно, в ней сделано уже всё, что требуется для отправки веб-запросов и получения ответов, вам остаётся только описать команды, которые ваш бот будет уметь выполнять. Однако, какое-то понимание всё же потребуется, потому настоятельно рекомендую изучить документацию по API: https://core.telegram.org/bots/api
Итак, вам нужно поставить Python и какую-нибудь IDE (хотя, конечно, можно и в Блокноте). Вот что у меня:
Итак, у вас установлен Python и pip, ставим pyTelegramBotAPI:
Не запускается бот, что делать?
Теперь создаём файл someTestBot.py , в котором и будет описан функционал бота. Я определил две обязательных команды /start и /help , а также команду отправки статуса сервера /server (забегая вперёд, она предназначена для запуска в Linux, так что при тестировании на Windows её вызов зафейлится):
Скрипт сбора информации о статусе сервера status.sh я взял из прошлой статьи и немного изменил:
Его надо поместить на сервере по пути /root/scrps/status.sh , либо каком другом, но тогда надо не забыть изменить его и в исходниках бота.
На этом реализация бота закончена.
Возвращаемся к BotFather, указываем ему команды, которые знает бот:
Размещение и запуск бота на сервере
Как я и говорил, команду /server в Windows он обработать не смог, и пойманное исключение записалось в журнал.
Кстати, обратите внимание — приложение показывает подсказки о всех командах бота, которые мы добавили через BotFather:
Теперь задача, как сделать так, чтобы бот работал постоянно. Идём на сервер с Linux, создаём каталог /usr/local/bin/someTestBot/ , кладём в него наш someTestBot.py . Кстати, на сервере тоже должен быть установлен pyTelegramBotAPI (разумеется, Python и pip тоже).
Я расскажу о двух способах, как запустить скрипт в качестве сервиса: Supervisor и systemd .
Supervisor
Создаём конфиг для процесса ( /etc/supervisor/conf.d/someTestBot.conf ):
С таким конфигом, надо полагать, бот будет “выполняться” с root правами, что некруто. Скорее всего, можно задать, с какими правами это будет работать. Ну да ладно, нам же надо скорее в продакшн, так что запускаем:
systemd
А можно ничего и не устанавливать, если в системе используется systemd .
В User=someTestBot можно и root указать, но я рекомендовал бы создать под это отдельного юзера. Правда, тогда чтобы работали скрипты, надо будет дать этому пользователю доступ к mysqladmin .
Включаем нашу только что созданную службу:
Ну всё, бот работает, проверяем:
Что ещё можно сделать? Ну, вот эта строка — bot.polling() — в общем-то, означает бесконечно выполняющийся цикл запросов к серверам Telegram, что не очень правильно в плане потребления ресурсов на обеих сторонах. Лучше сделать так, чтобы приложение бота ожидало сообщения от Telegram. Это можно сделать, реализовав webhook. Когда доберусь до этого, дополню статью.
Наконец-то запилил инструкцию на webhook. Решил не добавлять здесь, а запостить новую статью.
Как сделать так, чтобы бот работал постоянно?
Что нужно сделать, чтобы бот работал на постоянке, даже если я выключал бы свой пк/посоветуйте какие нибудь сервисы,если такие знаете.
Для этого нужно использовать любой из существующих хостингов. Например google cloud, если ваш бот не большой. В противном случае придется пользоваться платными хостингами.
Я воспользовался сервисом https://www.pythonanywhere.com там все бесплатно и понятно. Регистрируешься, затем добавляешь файлы с ботом в раздел Files и после запускаешь.
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как сделать, чтобы на VDS Телеграм бот работал постоянно?
Приветствую! Впервые заливаю бота на сервер, в связи с чем столкнулся с некоторыми проблемами. Для тех кто уже это делал вопросы могут показаться лёгкими, но для меня, увы, пока непонятно! Прошу помочь, а вопросы следующие:
1) Как сделать чтобы бот работал постоянно/круглосуточно + автоматически запускался после краша?
(Сейчас использую PuTTY, как я понял после запуска бота из консоли, в случае закрытия этой самой консоли бот тоже остановится?)
2)Как запускать одновременно на одном серваке несколько ботов, чтобы не было конфликтов между ними.
(Слышал про cmd-команду «screen» для создания виртуальной сессии, а также про systemd, это оно, копать в эту сторону?
3)Webhook предпочтительнее longpolling при одновременной работе нескольких ботов или не суть?
З.Ы. Хост — Fornex; Админка — Vesta; ОС — Debian 9; Терминал клиент — PuTTY; FTP клиент — WinSCP
Запускаем Python-скрипт на сервере, чтобы он работал всё время
В итоге мы остановились на том, что научились запускать скрипт на сервере, чтобы он работал после разрыва соединения. Но это половинчатое решение: если мы перезапустим сервер, то бот остановится. Иногда сервер перезагружается сам на стороне провайдера, например при плановых технических работах. И тогда наши скрипты умирают.
Сейчас нам нужно такое решение, чтобы бот автоматически перезапускался при любых обстоятельствах. Этим и займёмся.
Коротко — суть
Чтобы было понятно, что тут происходит, вот короткая версия:
- Настраиваем удалённый доступ к серверу.
- Создаём папку и заливаем в неё скрипт, который в итоге должен будет работать всё время.
- Создаём у себя на компьютере файл службы — он управляет настройками автозапуска скрипта.
- Отправляем файл службы на сервер.
- Обновляем на сервере данные обо всех службах и запускаем нашу.
Теперь подробно про каждый шаг.
Предварительная работа
Основное, что мы будем использовать, — это удалённый доступ к серверу по SSH. Для этого он должен быть включён на самом сервере, и там же можно сразу посмотреть параметры доступа. Например, для работы нашего учебного сервера мы пользуемся услугами SpaceWeb, где доступ по SSH включается из панели управления:
Ошибка 409 телеграм бот
Что делать, если не получается установить бота (возникает ошибка 409), использующего API Telegram. Исправление ошибок при загрузке чат-бота Телеграм на сервер.
В 2013-м году братья Дуровы создали инновационный мессенджер Telegram, который за девять лет был установлен на мобильные устройства свыше одного миллиарда раз (если верить статистике). Однако не только компании и обычные пользователи любят Телеграм. Платформу активно используют и разработчики для создания интерактивных чат-ботов. Однако иногда они сталкиваются с ошибкой 409, которая сопровождается сообщением «Не получается установить бот API Telegram».
Причины ошибки
Предполагаем, что этот материал будут читать не только опытные специалисты, но и начинающие разработчики, которые только недавно познакомились с возможностями API Telegram. Потому для начала расскажем, с чем могут быть связаны ошибки, возникающие во время работы с ботом. Весь процесс работы с API состоит из следующих этапов:
- Пользователь или программа отправляет запрос на сервер в виде функции.
- Сервер обрабатывает введенные параметры и сам запрос, а после выдает ответ.
- Пользователь считывает полученный ответ и оперирует с ним.
Если разработчик получил ошибку из заголовка, то значит, он столкнулся с невозможностью корректно обработать введенный запрос. Это ограничение может быть спровоцировано следующими факторами:
- Переданы некорректные аргументы или значения. В особенности проверьте правильность указанного токена.
- Бот запущен на нескольких серверах сразу. Нельзя указать один и тот же токен на двух хостингах.
- Проблема на стороне сервера Telegram. Глобальные сбои бывают редко, но не будем исключать их вероятность.
Отталкиваясь от возможных причин, автор составил список возможных решений. Ознакомиться с ним можете в разделе ниже.
Способы исправления
Примечательно, что автор и сам однажды столкнулся с этой проблемой, когда случайно загружал заброшенного на старом сервере бота на новый хостинг. По правилам разработчик должен сначала остановить чат-бота на старом устройстве, а после только запустить его на новом. Чтобы проверить, запущен ли уже бот, просто отправьте ему сообщение с командой /start. Обычно большинство приложений запрограммировано реагировать на эту команду.
В зависимости от результата ввода команды будут меняться и дальнейшие действия:
- Приложение ответило. Значит, оно запущено на старом сервере. Откройте его интерфейс и завершите работу процесса.
- Ответ не пришел. В таком случае, скорее всего, проблема кроется в самом токене. Проверьте, указан ли в конфигурациях выданный BotFather токен и укажите корректный идентификатор.
Вам помогло? Поделитесь с друзьями — помогите и нам!
для начала удалите
if __name__ == ‘__main__’: bot.polling(none_stop=True)
а webhook, у меня работает так:
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, >)
Природа происхождения ошибки 409 кроется в конфликте запросов. Не всегда эти запросы относятся к пользовательским. Например, такая ошибка может возникнуть при конфликте файлов сайта, если они обращаются к разным данным в одном файле. В результате этого, сервер возвращает ошибку, которая на самом деле не имеет отношения к запросам пользователей.
Основные причины возникновения ошибки 409:
- Пользователь обращается к данным, имеющим отличное значение или более новую версию. В итоге, сервер выдает ошибку 409, т.к. существует обновленная версия файла, страницы или скрипта.
- Ошибка 409 появилась в результате конфликтующих запросов внутри файлов на сервере. Решить проблему может программист.
- Использование прокси, которое конфликтует с определенными адресами или форматами запрашиваемых данных. Не путайте эту ошибку с ошибкой 407.
- Более распространенная причина – троян или вирус, который блокирует запросы к определенным сайтам или подгружает файл, который имеет конфликт с конфигурацией браузера.
- Ошибка 409 Conflicting Request в большинстве случае решается системным администратором или программистом, если это не касается заражения компьютера вирусом или трояном. Как проверить и какой программой расскажем ниже.
Чистим от вируса или трояна, чтобы убрать ошибку 409
Определить вирус/троян у вас или нет просто – установите программу Cureit от Dr.Web и просканируйте систему этой программой. Она бесплатная и не требует установки. Скачиваем только с официального сайта. В программе отмечаем все пункты для проверки и шагаем спать/на работу, т.к. сама проверка займет длительное время.
На скриншоте ниже вы можете рассмотреть, как и что отмечать в программе. Свой антивирус лучше отключить перед проверкой.
Можно также использовать бесплатную утилиту от Касперского, но она довольно сложная и нужно понимать, какие скрипты вводить в консоль. Остальные программы – платные, поэтому не пишу о них. Кстати, не рекомендую скачивать бесплатные ключи, т.к. такие генераторы могут с собой принести тот самый вирус или троян. Не пожалейте 30$ в год за нормальную защиту.
Исправляем ошибку 409 в конкретном браузере
В случае, если ошибка 409 Conflicting Request появляется буквально на каждом сайте, чтобы вы ни нажимали – это точно троян или вирус. Причем это должно происходить в любом браузере. Если нет – можете сразу удалить и заново установить браузер. Возможно произошел сбой конфигурации браузера. Заранее нужно сохранить закладки, т.к. можно потерять все нажитое непосильным трудом.
Делается это просто. На скриншоте выше вы видите пример сохранения настроек в браузере Mozilla. Аналогично делается и в остальных браузерах.
Последнее слово про ошибку
Если уж сильно хочется – установите программу CCleaner и пройдитесь по реестру с помощью этой программы. Во всяком случае это безопаснее, чем делать что-то лично ручками. Манипуляции с компьютером в случае с ошибкой 409 делать не стоит.
A request to the Telegram API was unsuccessful and produced the following error.
telebot.apihelper.ApiException A request to the Telegram API was unsuccessful. The Server returned HTTP 409 conflict Telegram API was unsuccessful. The server returned HTTP 409 Conflict. Response body: [b»] ERROR — TeleBot: «A request to the Telegram API was unsuccessful. The server returned HTTP 409 Conflict. Response body: [b»]» (util.py:65 Polling Thread) ERROR — TeleBot: «ApiException occurred, args=(‘A request to the Telegram API was unsuccessful.
The server returned HTTP 409 Conflict. Response body: n[b»]’,)
What does this error mean?
28.02.2021, 13:50. Показов 26624. Ответов 2
Метки нет (Все метки)
При написании простого бота
1 2 3 4 5 6 7 8 9 10 11 12 13 14
ERROR — TeleBot: «A request to the Telegram API was unsuccessful. Error code: 409. Description: Conflict: can’t use getUpdates method while webhook is active; use deleteWebhook to delete the webhook first»
что не так я делаю?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Видимо до этого пытались запустить бота не через polling, а webhook методом.
Перед первом запуском кода вставьте строчку.
bot.remove_webhook()
Позже эту строку можно будет удалить.
Попробуйте в самый конец файла добавить:
if __name__ == ‘__main__’: bot.polling(none_stop=True)
After deploy i have error on server
Enter fullscreen mode
Exit fullscreen mode
For solve this error change libs/plugins/server/src/lib/scraper/scraper-services/scraper.service.ts
Enter fullscreen mode
Exit fullscreen mode
Enter fullscreen mode
Exit fullscreen mode
And change apps/server/src/app/app.service.ts
Источник: oshibkaz.ru