Запустить ботов по ссылке в ТГ

Использование Webhook с модулем python-telegram-bot

Все примеры кода по пакету python-telegram-bot запускают Telegram бот с помощью Updater.start_polling() . Он использует метод Telegram API getUpdates для получения новых сообщений для бота. Это вполне нормально для небольших ботов и тестирования, но если бот популярен и получает/отправляет много трафика, то такой подход может замедлить время отклика бота.

Опрос Telegram сервера через webhook — это полезная технология для автоматизации процесса общения с пользователями. Как правило, этот функционал используется для экономии ресурсов на отправку/получение обновлений как собственного сервера, так и серверов Telegram.

Различие между polling и webhook является:

  • Опрос polling (через метод .get_updates ) периодически подключается к серверам Telegram для проверки новых обновлений или отправки обработанных сообщений.
  • Webhook — это URL-адрес, который передается API Telegram. Каждый раз, когда приходит новое обновление для бота, сервер Telegram отправляет это обновление на указанный URL. Аналогично происходит отправка сообщений.

Содержание:

  • Что необходимо для подключения к Telegram через webhook ;
  • Встроенный в библиотеку HTTP-сервер для webhook ;
  • Обратный прокси-сервер + встроенный сервер webhook ;
  • Использование webhook на Heroku;
  • Использование nginx с одним доменом/портом для всех ботов;
  • Использование haproxy с одним поддоменом на бота;
  • Индивидуальное решение, построенное на потоках.

Что необходимо для подключения к Telegram через webhook .

  1. Публичный IP-адрес или домен. Обычно это означает, что запуск бота должен осуществляться на VPS сервере.
  2. Необходим SSL-сертификат. Вся связь с серверами Telegram должна быть зашифрована с помощью HTTPS с использованием SSL. В случае подключения polling , о шифровании трафика заботятся серверы Telegram, но если отправка/получение сообщений идет через Webhook, то шифровании должен заботиться клиент/бот. Есть два способа сделать это:
    • Подключить проверенный сертификат, выданный доверенным центром сертификации (CA)
    • Самостоятельно создать самоподписанный сертификат SSL. Это проще, и в этом нет никакого недостатка.

    Чтобы создать самоподписанный SSL-сертификат с помощью openssl , выполните следующую команду в терминале:

    $ openssl req -newkey rsa:2048 -sha256 -nodes -keyout private.key -x509 -days 3650 -out cert.pem

    Утилита openssl запросит несколько подробностей. Необходимо убедится, что вы ввели правильное полное доменное имя или IP-адрес! Если у сервера есть домен, то введите полное доменное имя (например, sub.example.com ). Если сервер имеет только IP-адрес, то вместо домена введите его IP-адрес. Если введено неверное полное доменное имя или IP-адрес, то бот не получит никаких обновлений от Telegram, при этом не будет никаких ошибок!

    Встроенный HTTP-сервер для webhook .

    Библиотека python-telegram-bot поставляет встроенный HTTP-сервер, основанный на http.server.HTTPServer . Реализация HTTPServer , которая плотно интегрирована в модуль расширения telegram.ext и может быть запущен с помощью updater.start_webhook / application.run_webhook . Этот веб-сервер также занимается расшифровкой HTTPS-трафика. Это самый простой способ настроить webhook.

    Деплой телеграм бота на vps сервер. Как запустить несколько ботов на одном vps сервере.

    Еще по теме:  Информация по юзеру Телеграм

    Однако у этого решения есть ограничение. Telegram в настоящее время поддерживает только четыре порта для веб-перехватчиков: 443, 80, 88 и 8443. В результате можно запускать не более четырех ботов на одном домене/IP-адресе.

    Если это не проблема, то можно использовать код ниже или аналогичный, чтобы запустить бот с webhook. Адрес прослушивания должен быть либо ‘0.0.0.0’ , либо, если нет разрешения на это, общедоступный IP-адрес сервера. Порт может быть одним из 443, 80, 88 или 8443. Рекомендуется установить секретный токен в параметре secret_token , чтобы никто не мог отправить боту поддельные обновления.

    Аргументы key и cert должны содержать путь к файлам, которые создали ранее. Аргумент webhook_url должен быть фактическим URL-адресом webhook . При этом необходимо перед URL-адресом webhook использовать протокол https:// , домен или IP-адрес, которые установлен в качестве полного доменного имени сертификата, а также правильный порт и URL-адрес.

    application.run_webhook( listen=’0.0.0.0′, port=8443, secret_token=’ASecretTokenIHaveChangedByNow’, key=’private.key’, cert=’cert.pem’, webhook_url=’https://example.com:8443′ ) # или updater.start_webhook( listen=’0.0.0.0′, port=8443, secret_token=’ASecretTokenIHaveChangedByNow’, key=’private.key’, cert=’cert.pem’, webhook_url=’https://example.com:8443′ )

    Обратный прокси-сервер + встроенный сервер webhook .

    Чтобы решить эту проблему, можно использовать обратный прокси-сервер, такой как nginx или haproxy , а также можно использовать Heroku .

    В этой модели обратный прокси ( nginx ), слушает публичный IP-адрес, принимает все запросы webhook и пересылает их на правильный экземпляр локально запущенных встроенных в python-telegram-bot серверов webhook. Обратный прокси также выполняет завершение SSL, то есть расшифровывает HTTPS-соединение, поэтому серверы webhook получают уже расшифрованный трафик. Эти серверы могут работать на любом порту, а не только на четырех разрешенных Telegram портах, т.к. сервера Telegram напрямую подключается только к обратному прокси-серверу.

    В зависимости от того, какой прокси-сервер используется, реализация будет выглядеть немного иначе. Ниже перечислены несколько возможных настроек.

    Использование webhook на Heroku.

    На Heroku использовать webhook можно на свободном плане, т.к. он будет автоматически управлять временем простоя. Для пользователя Heroku будет настроен обратный прокси и создана среда исполнения. Из этой среды необходимо будет извлечь порт, который бот должен прослушивать. Heroku управляет SSL на стороне прокси-сервера, следовательно не нужно создавать сертификат самостоятельно.

    import os TOKEN = «TOKEN» PORT = int(os.environ.get(‘PORT’, ‘8443’)) # добавим обработчики application.run_webhook( listen=»0.0.0.0″, port=PORT, secret_token=’ASecretTokenIHaveChangedByNow’, webhook_url=»https://.herokuapp.com/» )

    Использование nginx с одним доменом/портом для всех ботов

    Все боты устанавливают свой URL-адрес на один и тот же домен и порт, но с другим url_path . Встроенный в python-telegram-bot сервер обычно запускается по адресу localhost или 127.0.0.1, порт может быть любым.

    Примечание: если нет домена, связанного с сервером, то example.com может быть заменен IP-адресом.

    Пример кода для запуска бота:

    application.run_webhook( listen=’127.0.0.1′, port=5000, url_path=’1′, secret_token=’ASecretTokenIHaveChangedByNow’, webhook_url=’https://example.com/1′, cert=’cert.pem’ )

    Пример конфигурации для nginx с двумя настроенными ботами (представлены важные части конфига):

    server < listen 443 ssl; server_name example.com; ssl_certificate cert.pem; ssl_certificate_key private.key; location /TOKEN1 < proxy_pass http://127.0.0.1:5000/1/; >location /TOKEN2 < proxy_pass http://127.0.0.1:5001/2/; >>

    Использование haproxy с одним поддоменом на бота.

    При таком подходе, каждому боту присваивается свой собственный поддомен. Если сервер имеет домен example.com , то можно создать поддомены например: bot1.example.com , bot2.example.com и т. д. Понадобится один сертификат для каждого бота с полным доменным именем, установленным для соответствующего поддомена. Встроенный в python-telegram-bot сервер обычно запускается по адресу localhost или 127.0.0.1, порт может быть любым.

    Примечание: Необходимо иметь домен привязанный к IP-адресу сервера.

    Еще по теме:  Сообщение сердце в ТГ

    Пример кода для запуска бота:

    application.run_webhook( listen=’127.0.0.1′, port=5000, secret_token=’ASecretTokenIHaveChangedByNow’, webhook_url=’https://bot1.example.com’, cert=’cert_bot1.pem’) )

    Пример конфигурации для haproxy с двумя настроенными ботами (сведен к важным частям конфига) . Опять же: полное доменное имя обоих сертификатов должно соответствовать значению в ssl_fc_sni . Кроме того, файлы .pem представляют собой объединенные файлы private.key и cert.pem .

    frontend public-https bind 0.0.0.0:443 ssl crt cert_key_bot1.pem crt cert_key_bot2.pem option httpclose use_backend bot1 if < ssl_fc_sni bot1.example.com >use_backend bot2 if < ssl_fc_sni bot2.example.com >backend bot1 mode http option redispatch server bot1.example.com 127.0.0.1:5000 check inter 1000 backend bot2 mode http option redispatch server bot2.example.com 127.0.0.1:5001 check inter 1000

    Индивидуальное решение, построенное на потоках.

    Не обязательно использовать встроенный веб-сервер. Если решите пойти этим путем, то не следует использовать класс Updater . Модуль telegram.ext был переработан с учетом этой опции, поэтому все равно можно использовать класс Application , чтобы извлечь выгоду из фильтрации / сортировки сообщений, которые он предоставляет. НО придется проделать некоторую работу вручную.

    from telegram import Bot from telegram.ext import Application application = Application.builder().token(‘TOKEN’).build() # Регистрация обработчиков здесь # Получаем `update_queue`, из которого приложение получает обновления для обработки. update_queue = application.update_queue start_fetching_updates(update_queue) # Запускаем приложение async with application: application.start() # и останавливаем, когда срабатывает # какой-либо механизм отключения: application.stop()

    Здесь start_fetching_updates — это заполнитель для любого метода, который используется для настройки веб-перехватчика. Важной частью является то, что полученные обновления в update_queue ставятся в очередь. То есть вызывается await update_queue.put(update) , где update — это декодированный объект Update (используйте Update.de_json(json.loads(text), bot ) для декодирования обновления из полученных данных JSON).

    Альтернатива: нет длительных задач.

    Если BOT не использует длительные задачи, запущенные с помощью application.start() , то это не нужно! Вместо того, чтобы помещать обновления в update_queue , можно напрямую обрабатывать их через application.process_update(update) .

    Простой пример пользовательского вебхука.

    Простой пример бота, который использует пользовательскую настройку веб-перехватчика и обрабатывает пользовательские обновления.Для пользовательской настройки вебхука используются библиотеки starlette и uvicorn . Эти модули необходимо установить как pip install starlette=0.20.0 uvicorn=0.17.0 .

    Обратите внимание, что можно использовать любой другой фреймворк веб-сервера на основе asyncio для пользовательской настройки веб-перехватчика.

    • Установите токен бота, URL-адрес, admin chat_id и порт в начале основной функции.
    • Также может понадобиться изменить значение listen в конфигурации uvicorn , чтобы оно соответствовало вашей настройке.
    • Нажатие Ctrl-C в командной строке остановит бота.

    Источник: docs-python.ru

    Создание бота авто приёма заявок

    Что такое приветствие и второе приветствие в боте и зачем это нужно?

    Приветствие и дополнительное сообщение в боте авто-приема заявок — это сообщения, которые бот автоматически отправляет пользователю после получения его заявки.
    Приветствие — это первое сообщение, которое пользователь получает от бота сразу после отправки заявки. Оно содержит информацию о том, что заявка принята и будет обработана в ближайшее время. Приветствие может также содержать благодарность пользователю за обращение и указание на то, что он может задать дополнительные вопросы или уточнить детали.
    Дополнительное сообщение — это сообщение, которое пользователь получает после подтверждения принятия заявки. Оно может содержать дополнительную информацию о процессе обработки заявки, такую как ожидаемое время ответа или контактные данные оператора, с которым можно связаться для уточнений. Второе приветствие также может содержать просьбу пользователю предоставить дополнительные данные или уточнить информацию по заявке.
    Приветствие и дополнительное сообщение в боте авто-приема заявок нужны для того, чтобы уведомить пользователя о том, что его заявка получена и будет обработана. Это помогает установить контакт с пользователем, подтвердить его обращение и дать ему возможность задать дополнительные вопросы или уточнить детали. Приветствие и дополнительное сообщение также повышают уровень сервиса и коммуникации с пользователями.

    Еще по теме:  Как понять что смс дошло в Телеграмме

    Сценарий бота авто-приёма заявок и как он работает?

    1. Приветствие — то что по команде /start
    2. Сценарий обработчика заявки — Сценарий который отправляется при подаче заявки.
    3. Кнопка сценария — кнопка, которая отправляется вместе со сценарием
    4. Дополнительное сообщение — Сообщение которое отправляется через N минут, независимо от сценария обработчика заявки
    5. Заявка — поданный запрос клиента в ресурс
    6. Ссылки для ресурса — Ссылки, которые сгенерированы в BOT-T для приема заявок в ресурс. По ним моно отслеживать трафик.

    Как это выглядит для юзеров в боте?
    1. Подписчик нажимает на вашу пригласительную ссылку, которую увидел в рекламе.
    2. Далее он видит окно, в котором может подать заявку на вступление. Нажимает на неё.
    3. Ему всплывает сообщение о том, что его заявка будет рассмотрена и принята.
    4. Мгновенно и автоматически подписывается на канал.
    5. Если вы настроили приветствие, то подписчику приходит сообщение от вашего бота (даже если он с ним ранее не взаимодействовал).
    6. Если у вас есть второе приветствие, то спустя время(его вы настраиваете сами) подписчику придет другое сообщение с вашим текстом. Можете посмотреть на нашем наглядном примере как это выглядит тут
    Важно: Бот принимает заявку мгновенно, но подписчик этого не видит сразу. Он либо найдёт ваш канал у себя в ленте позже, либо сразу нажмет на ссылку еще раз, чтобы перейти в ваш канал, либо получит от вас сообщение через бота, в котором вы его поприветствуете.

    Подключение ресурса к боту

    Подключение ресурса к боту

    Для того, чтобы подключить ресурс к боту надо сделать несколько простых шагов.
    Первый этап заключается в выдаче прав «пригласительных ссылок» своему созданному боту авто-приёма заявок.

    Запустить ботов по ссылке в тг

    Навигация на сайте Контур.Эльба

    Зарегистрировать новый бот можно через… бот! Заходите в BotFather, кликаете на команду /newbot. Теперь вам нужно придумать и ввести имя и адрес вашего нового бота. Имя будет отображаться в контактах, поэтому с ним можно поэкспериментировать и придумать что-то интересное.

    Кстати, через BotFather вы можете создавать неограниченное количество ботов. Здесь же вы в любое время сможете изменить настройки имени и адреса бота

    Навигация на сайте Контур.Эльба

    Учтите, что имя и адрес должны быть уникальными, иначе BotFather их не зарегистрирует. Если вы все сделаете правильно, BotFather пришлет вам “ключ” доступа к созданному боту – токен. Он вам пригодится при дальнейшей настройке. Ни с кем им не делитесь токеном: этот ключ дает доступ к боту и всей информации, которая в нем содержится.

    После успешной регистрации вы получаете вот такое сообщение от BotFather. Токен выглядит как набор чисел и букв.

    Здесь же вы можете загрузить аватарку вашего бота (команда /setuserpic), задать текст, который пользователи видят при запуске бота (команда /setdescription), изменить имя (команда /setname).

    Ваш бот готов. Правда, он еще ничего не умеет. Давайте это исправим

    Источник: svoemedia.space

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...