Установили локально 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»}
Все. Должно заработать.