Для всего этого нам понадобится (или правильнее будет сказать, что было использовано мной):
- Apache 2.2.24
- OpenSSL (входящий в установку апача)
- 1C (с модулями веб-сервера)
- Свой домен
- Созданный бот в Телеграм (не буду описывать его создание, т.к. оно достаточно тривиально)
Предполагается, что весь софт у вас установлен.
Итак, начнем с получения сертификата. Открываем командную строку и выполняем следующий код:
openssl req -newkey rsa:2048 -sha256 -nodes -keyout YOURPRIVATE.key -x509 -days 365 -out YOURPUBLIC.pem -subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=YOURDOMAIN.EXAMPLE"
Где:
YOURPRIVATE.key — закрытый ключ сертификата. Будет использован в апаче
YOURPUBLIC.pem — открытый ключ сертификата. Будет использован при регистрации вебхука
YOURDOMAIN.EXAMPLE — адрес вашего домена с вебхуком. Должен таки совпадать с адресом вебхука!!!
После выполнения этого кода в папке openssl ( у меня это «C:\Program Files\Apache Software Foundation\Apache2.2\bin») появятся файлы ключей.
Я их скопировал в папку conf апача.
Переходим к настройке Apache.
Я видел много разных способов. У меня сработал следующий:
В httpd.conf добавлены следующие строки:
Listen 443
для того, чтобы апач «слушал» 443 порт.
Блок <IfModule ssl_module> приведен к следующему виду:
<IfModule ssl_module> SSLMutex default SSLSessionCache none </IfModule>
В самом конце добавлены строчки, где указываю пути к сертификату:
SSLEngine On SSLCertificateFile conf/YOURPUBLIC.pem SSLCertificateKeyFile conf/YOURPRIVATE.key
И раскоменитурйте строчку:
LoadModule ssl_module modules/mod_ssl.so
В конфигурации создаем HTTP-сервис. Именно он будет отвечать телеграму и обрабатывать его обращения.
В моём случае указаны следующие параметры:
Имя: ТГВебхук
КорневойURL: webhook
Повторное использование сеансов: Не использовать (с автоматическим режимом у меня не заработало)
Время жизни: 20
Шаблоны URL: создан шаблон «Любой» с двумя методами: GET и POST



Обработчики методов создаются по умолчанию. В обработчик POST добавлю следующее, просто для проверки связи:
Функция ЛюбойPOST(Запрос) ВыслатьТестовоеСообщение(""); //chat_id Ответ = Новый HTTPСервисОтвет(200); Возврат Ответ; КонецФункции &НаСервере Процедура ВыслатьТестовоеСообщение(Чат) Сообщение = "Тестовое сообщение"; Токен = "";//Ваш токен telegram Сервер = "api.telegram.org"; Ресурс = "bot" + Токен + "/sendMessage?chat_id=" + СтрЗаменить(Формат(Чат, "ЧДЦ=; ЧС=; ЧРГ=."), ".", "") + "&text=" + Сообщение; Соединение = Новый HTTPСоединение(Сервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL()); Запрос = Новый HTTPЗапрос(Ресурс); Ответ = Соединение.Получить(Запрос); КонецПроцедуры
Осталось опубликовать базу и привязать вебхук.
Публикация делается как всегда, необходимо только добавить галочки на публикации HTTP-сервиса:

Последним шагом мы привяжем нашу 1С к телеграму. Я для этого использовал простую html страничку со следующим кодом:
<html> <body> <form action="https://api.telegram.org/bot<ЗдесьДолженБытьТокен>/setwebhook" method="post" enctype="multipart/form-data"> Select Certificate to upload: <input type="file" name="certificate" id="fileToUpload"> URL: <input type="text" name="url" value="https://<YOURWEBSITE>/<YOUR_PHP_URL>"><br> <input type="submit" value="Upload Certificate" name="submit"> </form> </body> </html>
В форме просто выбираем публичный ключ и вводим полный путь к нашему http-сервису. Напоминаю, что полный путь к сервису будет выглядеть следующим образом:
ВашДомен/ИмяБазы/hs/ИмяСервиса/v1
Прошу не пинать ногами за код, некоторые вещи умышленно сделаны хардкодом, т.к. это всё делалось исключительно в демонстрационных целях.
Публикация была написана, т.к. ни одного рабочего примера по работе с вебхуками на сайте не нашел, кроме Конструктор ботов Телеграм. Но она платная и, возможно, не всем нужна в таком виде.
В архиве содержится установка апача 2.2.24 вместе с Openssl (почему-то поиск оной занял у меня много времени), файл html для регистрации вебхука, файл конфигурации апача и cf конфигурации с http-сервисом и примером отправки тестового сообщения. К скачиванию необязателен, т.к. всё содержимое есть в статье.
ссылка на оригинал статьи https://habr.com/ru/post/488374/
Добавить комментарий