Для всего этого нам понадобится (или правильнее будет сказать, что было использовано мной):
1) Apache 2.2.24
2) OpenSSL (входящий в установку апача)
3) 1C (с модулями веб-сервера)
4) Свой домен
5) Созданный бот в Телеграм (не буду описывать его создание, т.к. оно достаточно тривиально)
Предполагается, что весь софт у вас установлен.
Итак, начнем с получения сертификата. Открываем командную строку и выполняем следующий код:
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
На стороне вебсервера все готово. Переходим к 1С.
В конфигурации создаем 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-сервису. Напоминаю, что полный путь к сервису будет выглядеть следующим образом:
https://ВашДомен/ИмяБазы/hs/ИмяСервиса/v1/
Прошу не пинать ногами за код, некоторые вещи умышленно сделаны хардкодом, т.к. это всё делалось исключительно в демонстрационных целях.
Публикация была написана, т.к. ни одного рабочего примера по работе с вебхуками на сайте не нашел, кроме Конструктор ботов Телеграм. Но она платная и, возможно, не всем нужна в таком виде.
В архиве содержится установка апача 2.2.24 вместе с Openssl (почему-то поиск оной занял у меня много времени), файл html для регистрации вебхука, файл конфигурации апача и cf конфигурации с http-сервисом и примером отправки тестового сообщения. К скачиванию необязателен, т.к. всё содержимое есть в статье.