Делаем запросы от telegram к своему IP через привязанный домен. OpenServer 6, Laravel 10

Установили локально Laravel с пакетом Telegraph. Создали бота в Telegram. Теперь нам надо получить ответ от бота в телеге. Основная проблема — это добавление сертификата на локальный сервер, чтобы телеграм не ругался на ssl и присылал ответы на бота.

Когда вводим команду /chatid в боте, он не реагирует. Когда проверяем ответ по ссылке «https://api.telegram.org/bot<token>/getWebhookInfo», получаем ошибку: «last_error_message»: «SSL error {error:0A000086:SSL routines::certificate verify failed}». Нам надо это исправить.

Что для этого делаем:

В настройках Laravel (.env) добавляем наш домен, изменив строку:

APP_URL=https://bot.mydomen.ru

Через консоль, которую запускаем в Open Server для проекта, создаем сертификат:

openssl req -newkey rsa:2048 -sha256 -nodes -keyout tele.key -x509 -days 365 -out tele.pem -subj "/C=RU/ST=Khakassia/L=Abakan/O=telegram/CN=bot.mydomen.ru"

Появятся 2 файла tele.key, tele.pem. Я их перекинул в папку .osp\ssl\ для удобства. Добавляем сертификаты в настройки проекта ( .osp\project.ini):

php_engine = PHP-8.2
public_dir = {base_dir}\public
ip = 192.168.1.105
aliases = 185.185.185.185 bot.mydomen.ru
ssl = on
ssl_cert_file = {base_dir}\.osp\ssl\tele.pem
ssl_key_file = {base_dir}\.osp\ssl\tele.key

Где:

ip — наш локальный IP

aliases — внешний наш IP. Плюс через пробел домен. На хостинге домен bot.mydomen.ru привязываем к своему IP, изменив А запись на наш IP.

ssl, ssl_cert_file, ssl_key_file — проставляем пути сертификатов.

Для добавления самоподписанного сертификата в telegram в консоли проекта пишем:

curl -F "url=https://bot.mydomen.ru/telegraph/<token>/webhook" -F "certificate=@.osp/ssl/tele.pem" "https://api.telegram.org/bot<token>/setwebhook"

Должен прийти ответ: {«ok»:true,»result»:true,»description»:»Webhook was set»}

Все. Должно заработать.

Мануал: https://core.telegram.org/bots/self-signed

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *