Telegram bot настройка webhook

Пишем телеграмм бота на PHP

Сейчас почти каждый порядочный человек зарегистрирован в телеграмм и в связи с этим растет популярность ботов для него. Рассмотрим создание такого.

Постановка задачи

Реализовать простого бота на PHP с двумя командами:

  • /start — отправка приветственного сообщения (эта команда вызывается всегда при добавлении бота и нажатия кнопки «Start» в чате)
  • /quote — отправка случайной цитаты

Что потребуется

  • PHP 5.5+
  • установленный composer
  • телеграмм клиент

Ограничения

Бот для телеграмм может работать одним из двух вариантов:

  • опрашивать api по крону через метод getUpdates. Для этого придется хранить идентификатор последнего сообщения и обрабатывать только новые.
  • установить callback бота на ваш url. В данном случае обрабатываем входящие сообщения мгновенно, не заботимся об очереди, но потребуется https домен.

Остановимся на втором варианте.

Telegram Bot — Part 5 — Set Webhook

Часть 1. Регистрация и настройка бота

Когда бот создан, вы получаете его токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 . Сразу установим наши команды для удобства использования. Для этого отправим /setcommands для BotFather. Он предложит выбрать одного из ваших ботов и задать для него список доступных команд в указанном виде. Отправим в ответ

start — Регистрация бота quote — Случайная цитата

Важно заметить, что эти команды не имеют ничего общего с теми, что мы будем реализовывать в скрипте. Это просто «выпадающие подсказки». На этом административная часть закончена, перейдем к программной.

Часть 2. Реализация самого приложения

Создаем новую директорию и переходим туда. Далее устанавливаем расширение для работы с telegram-api с помощью composer:

composer require telegram-bot/api «^2.3»

Создадим директорию web и укажем ее в качестве web-root для нашего домена в настройках сервера. Тут будут храниться наши скрипты доступные из web. Такая структура крайне желательна, так как она не дает получить доступ к остальным файлам с кодом, что является хорошей практикой в плане безопасности.

Настройки бота и список цитат вынесем в отдельный файл data/config.php

‘123456789:AAABBBCCCAAABBBCCCAAABBBCCCAAABBBCC’, ‘quotes’ => [ [ ‘author’ => ‘Mahatma Gandhi’, ‘quote’ => ‘Live as if you were to die tomorrow. Learn as if you were to live forever.’, ], [ ‘author’ => ‘Albert Einstein’, ‘quote’ => ‘Two things are infinite: the universe and human stupidity; and I’m not sure about the universe.’, ], [ ‘author’ => ‘Oscar Wilde’, ‘quote’ => ‘Be yourself; everyone else is already taken.’, ], // . ], ];

Еще по теме:  Telegram это российский мессенджер или нет

Заменяем botToken на полученный от BotFather и дополняем файл своими цитатами.

Далее нам необходимо произвести регистрацию web-хука. Сделать это можно только через API, поэтому создадим одноразовый файл set-webhook.php внутри папки web со следующим содержимым:

setWebhook(‘https://awesome.website.ru/my-secret-webhook.php’);

Важно! Название my-secret-webhook.php дано просто для примера. В реальных условиях оно должно иметь несвязанную тарабарщину (например, mu4OG-70sYakjrPcLf_DqHwTX4Ijr6B-.php ). Это сократит возможность несанкционированного доступа к файлу с целью передачи «плохих данных» в скрипт.

Теперь обращаемся к файлу set-webhook.php из браузера. На странице должна отобразиться цифра «1». После этого удаляем файл, он больше не потребуется.

Теперь впереди осталось то, ради чего все затевалось — реализация логики работы самого бота. Создадим файл web/my-secret-webhook.php

Как видно из кода выше, все достаточно просто, так как большая часть логики уже реализована за нас, остается только пользоваться.

Данная статья содержит один из самых простых примеров реализации телеграмм бота на php и имеет ряд недостатков. Например

  • весь код реализации содержится в одном входном файле
  • не отлавливаются исключения и не логируются ошибки
  • валидность конфигурации не проверяется и написана не в самом удобном виде

Есть и другое применение ботов — это отправка оповещений о каких-либо действиях (например, новое письмо с сайта или изменение статуса заказа), но это тема для отдельной статьи.

  • Введение в тг-ботов для разработчиков
  • Telegram API
  • PHP Telegram Bot Api — php-расширение для работы с api телеграмм-бота
  • PHP Telegram Bot — более сложное/мощное php-расширение для работы с bot-api
  • 2017-11-29 08:31:38

Источник: dev-tips.ru

TELEGRAM bot. ОБХОД БЛОКИРОВКИ API TELEGRAM

telegram bot

Всем привет, с вами Низамов Илья и сегодня мы будем обходить блокировку Telegram по IP адресу при работе через webhook. Если ваш провайдер применяет именно такую блокировку Telegram, то обойти ее поможет прокси сервер на nginx установленный на виртуальном сервере в другой стране.

Если вам нужно только отлаживать чат бот Telegram то советую не заморачиваться, а использовать сервис ngrok. Если же у вас рабочий бот и вы не можете получать входящие запросы от webhook Telegram, то посмотрев данное видео вы сможете обойти это ограничение. Главное условие, чтобы ваш http сервис 1С был опубликован на web сервере и имел белый статичный IP адрес.

Еще по теме:  Как восстановить всю переписку в Телеграмме за все время

Очень много информации я вынес из статьи пользователя PlugFox, советую пройти и почитать ее полностью.

Аренда VDS

Для начала я арендовал сервер VDS хостера. Сервер расположен в Цюрихе, Швейцария.

Доступ к нему мы получим по протоколу SSH с помощью утилиты Putty.

Настройка VDS

apt update apt upgrade

apt install ufw

Ставим web сервер nginx

apt install nginx

Проверяем по адресу http://91.245.225.114 что web сервер работает

Так как Telegram работает только по https, то для нашего сервера надо генерировать самоподписанный сертификат и настроить наш web сервер для работы с ним.

Генерация сертификата SSL для Telegram bot

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

При использовании OpenSSL нужно также создать ключи Диффи-Хеллмана, которые нужны для поддержки PFS (совершенной прямой секретности). Подробнее читаем в википедии.

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Настройка nginx

Продолжаем настраивать web сервер. Создадим сниппет, в котором укажем расположение SSL сертификата и ключа

С помощью текстового редактора nano создадим сниппет. Со временем вы можете забыть, что указано в сниппетах, по-этому советую называть их соответственно.

в конфиге укажем директивы

ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

Выходим и сохраняем данные.

Теперь создадим отдельный сниппет с настройками SSL.

Все эти параметры влияют в основном на безопасность и выполняют оптимизацию HTTPS-сервера
Подробнее о каждом параметре вы можете почитать в русскоязычной документации по web серверу nginx в разделе Настройка HTTPS-серверов

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers «EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH»;
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security «max-age=63072000; includeSubdomains; preload»;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

Выходим и сохраняем данные.

Создадим конфиг нового сайта, он должен располагаться в определенной папке, название у него будет telegram, выполним команду.

И прописываем конфиг нашего сервера

server listen 8443 ssl http2 default_server;
listen [::]:8443 ssl http2 default_server;
server_name 91.245.225.114;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
location / proxy_pass http://100.102.171.125/tl/hs/tg;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 100M;
>
>

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

Директива listen указывает на то какие порты мы будем прослушивать. На текущий момент отправка обновлений через вебхуки доступна только на порты: 443, 80, 88, 8443. По-этому я указываю порт 8443.

Параметр ssl указывает на то, что все соединения, принимаемые на данном порту, должны работать в режиме SSL.

Параметр http2 позволяет принимать на этом порту HTTP/2 соединения, подробнее вы можете почитать в wikipedia.

Параметр default_server указывает на то, что данный сервером будет сервером по умолчанию для указанной пары адрес:порт.

Вторая строка listen настраивает все тоже самое, только для протокола IPv6

Директива server_name – задаёт имя нашего виртуального сервера, так как мы не покупали хостинг, то здесь указываем IP адрес нашего сервера VDS.

Директива include – включает в конфигурацию другой файл с директивами. Ранее мы описали там подключение сертификатов и ключей SSL, а так же настройки протокола.

Директива location – устанавливает конфигурацию в зависимости от URI запроса. В нашем случае запросы к https://91.245.225.114:8443 будут обрабатываться по правилам в следующем блоке.

Следующий блок <> описывает перенаправление запросов на наш сервер.

Директива proxy_pass – задаёт протокол и адрес проксируемого сервера. В нашем случае это протокол http, далее IP адрес и потом адрес нашего http сервиса в 1С http://10.240.150.46/tl/hs/tg/

Директива proxy_set_header – позволяет переопределять или добавлять поля заголовка запроса, передаваемые нашему серверу.

proxy_set_header Host $http_host — передаем поле заголовка запроса

proxy_set_header X-Real-IP $remote_addr — передаем IP адрес запрашивающего в заголовке X-Real-IP (иначе в логах Apache будут адреса Nginx сервера, а не реальных клиентов)

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for — передаем IP клиента и список IP всех прокси-серверов, через которых прошёл запрос, разделённые запятыми. Подробнее читать тут.

proxy_set_header X-Forwarded-Proto $scheme – нужно для определения исходного протокола (например HTTPS или HTTP)

Директива client_max_body_size – задаёт максимально допустимый размер тела запроса клиента

Сохраняем конфиг и выходим.

Для активизации сайта надо создать символическую ссылку с помощью команды ниже.

ln -s /etc/nginx/sites-available/telegram.conf /etc/nginx/sites-enabled/telegram.conf

Проверяем настройки сервера командой.

Ругнется на настройки ssl, но это не страшно, а остальное должно быть ОК.

systemctl restart nginx

И настраиваем брандмауэр.

ufw allow 8443
ufw allow 1080
ufw allow 443

Источник: nizamov.school

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