Телеграм + 1С + Вебхуки + Апач + Самоподписанный сертификат

26.02.19

Интеграция - Мессенджеры и боты

Много строк исписано про интеграцию Телеграма и 1С. Но нигде не увидел полной инструкции по установке и настройке вебхуков. Попробую её написать.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Телеграм + 1С + Вебхуки + Апач + Самоподписанный сертификат:
.zip 5,48Mb
34
34 Скачать (1 SM) Купить за 1 850 руб.

Для всего этого нам понадобится (или правильнее будет сказать, что было использовано мной): 

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-сервисом и примером отправки тестового сообщения. К скачиванию необязателен, т.к. всё содержимое есть в статье.

Телеграм telegram webhook вебхук http

См. также

Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Интеграция мессенджера WhatsApp и 1С: УНФ, УТ, КА, ERP - отправка и получение сообщений, картинок, файлов и видео прямо в 1С. Расширение работает с сервисом GreenApi.

15600 руб.

23.06.2023    9481    58    12    

34

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 1С:Конвертация данных Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 руб.

27.12.2021    38193    108    161    

201

SALE! 25%

Мессенджеры и боты Системный администратор Программист Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 Платные (руб)

Развитие популярного решения для интеграции мессенджера Telegram с нашей любимой 1С - конструктор чат-ботов в Телеграм.

15000 11250 руб.

18.06.2021    65556    312    272    

369

Документооборот и делопроизводство (СЭД) Мессенджеры и боты Учет документов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    30269    35    49    

71

Мессенджеры и боты Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Данное расширение представляет собой интерфейс взаимодействия 1С с сервисом Wazzup. Данный сервис позволяет вести беседу с использованием номера телефона, привязанного к Whatsapp. Почитать о сервисе и его условиях использования можно по ссылке https://wazzup24.com/. На данный момент расширение поддерживает почти все доступные через API функции. Обновление от 19.05.2023, версия 2.1!

14400 руб.

30.11.2020    13594    8    13    

15

Мессенджеры и боты SMS рассылки Платформа 1С v8.3 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Решение реализовано в виде расширения. Заменяет отправку смс на отправку в WhatsApp через Green-api. Отправка чека картинкой.

7800 руб.

15.05.2024    1544    3    6    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mussolene 20 27.02.19 08:34 Сейчас в теме
Не совсем понимаю для чего вообще через WebHook делать, если есть штатная работа telegram api по longpolling, реализованная библиотека на python. в сочетании с flask. Можно поднять и не парится с переносом кода и правкой внутри конфигурации, гораздо более эффективное использование и не светить адрес в инет)))
2. alexlx 114 27.02.19 08:52 Сейчас в теме
(1) Согласен. Но есть люди, которым проще/удобней всё делать через 1С.
maksa2005; +1 Ответить
9. mussolene 20 27.02.19 15:07 Сейчас в теме
(2) Еще можно и в 1С поллинг реализовать фоновым заданием которое отрабатывает каждые несколько секунд и получает обновления с api.
главное иметь рабочий прокси и все)))
10. alexlx 114 27.02.19 15:37 Сейчас в теме
(9)
фоновым заданием которое отрабатывает каждые несколько секунд

Не каждому нравится, что у него фоновое задание отрабатывает каждые несколько секунд
Andreyyy; maksa2005; pogroleg; bendarik; zakiap; kuzyara; blackhole321; GreenDragon; mussolene; acanta; +10 Ответить
13. mussolene 20 27.02.19 19:11 Сейчас в теме
(10) Верно мне тоже не по вкусу фоновые))). Только вот в текущих конфигурациях все через фоновые задания делается, так что одним меньше одним больше)))
14. GreenDragon 27.02.19 19:25 Сейчас в теме
(13)
одним меньше одним больше

После такого заявления эксперты по производительности могут с вами сделать примерно то же самое, что и геологи после заявления, что нефть из динозавров.
19. mussolene 20 28.02.19 00:37 Сейчас в теме
(14) Ну если рассматривать с точки зрения производительности то кажется мне что web server который обращается в бд за данными и обработкой кода будет кушать побольше чем фоновое задание запускаемое внутри системы)). Ну хотя тут может чего и не знаю)).
21. GreenDragon 28.02.19 10:21 Сейчас в теме
(19) Фоновое задание запускается не
внутри системы
, а вполне себе на сервере 1С. То, что нагружается web сервер, это как раз и хорошо, так как часть нагрузки выносится за контур сервера 1С. Гораздо дешевле масштабировать контур web серверов, чем 1С.
23. PLAstic 296 01.03.19 09:36 Сейчас в теме
(10) Тогда ставим вебхук по апи телеги, а не по описанному в статье. Если честно, статья как-то оторвана от того процесса, который я выполнял при установке вебхука. Там нужен сам сертификат и один метод апи телеги. Всё.
26. alexlx 114 01.03.19 09:44 Сейчас в теме
(23) У меня также используется сертификат и один метод телеги. Просто описана установка и настройка окружения для этого. Лично у меня много времени занял поиск инфы по настройке апача и HTTP-сервиса
3. DarkPinch222 147 27.02.19 10:35 Сейчас в теме
А у меня проблемы при попытке установить вебхук - пробовал и через postman, попробовал и через вашу html-страничку.
При установке вебхука, в ответ:
{
"ok": true,
"result": true,
"description": "Webhook was set"
}

При попытке проверить методом getWebhookInfo:

{
"ok": true,
"result": {
"url": "https://мой урл",
"has_custom_certificate": false,
"pending_update_count": 7,
"max_connections": 40
}
}.

При этом сообщения от бота не приходят.

При попытке выполнить вашу html-страничку - отображается Ошибка при установлении защищённого соединения

При этом сообщения так и не приходят в 1с. Подскажите, куда копать?
4. alexlx 114 27.02.19 11:11 Сейчас в теме
(3) В код странички добавили токен бота?

"has_custom_certificate": false - сертификат по инструкции делали? Эта строчка говорит, что он не принял ключа
5. DarkPinch222 147 27.02.19 11:58 Сейчас в теме
(4) Да, сертификат делал через openssl, где в your domen - указывал внешний ip-адрес.
Токен бота конечно добавил
6. alexlx 114 27.02.19 12:26 Сейчас в теме
(5) Попробуйте в качестве your domen указать не ip-адрес, а адрес сервера (localhost или имя компа)
7. DarkPinch222 147 27.02.19 12:40 Сейчас в теме
8. alexlx 114 27.02.19 12:49 Сейчас в теме
(7) Домена своего нет? Я через IP не пробовал, у меня домен 3-го уровня и через него зашло сразу же.
16. blackhole321 1314 27.02.19 21:01 Сейчас в теме
(7)В качестве имени хоста необходимо указывать dns имя, доступное извне. Т.е. Вам необходимо зарегистрировать домен (к примеру на freenom.com). Url webhook'а должен ссылаться на это dns имя. Также в свое время telegram не работал с self-signed сертификатами. Не знаю как обстоят дела сейчас. Вы можете создать бесплатный не self-signed сертификат бесплатно, к примеру на на sslforfree.com, месяца на три. Для тестов хватит.
38. Goody 130 29.10.21 12:42 Сейчас в теме
(16)Вставлю свои "пять копеек"... Не нужно никакого домена. Достаточно иметь внешний IP адрес Веб-сервера. На этот адрес генерируем сертификат "CN=xxx.yyy.72.239"
И все взлетает.
{"ok":true,"result":{"url":"https://xxx.yyy.72.239:8443/xxxxx_hs/hs/WebHook/telegram_bot","has_custom_certificate":true,"pending_update_count":3,"last_error_date":1635500407,"last_error_message":"Wrong response from the webhook: 400 Bad request","max_connections":40,"ip_address":"xxx.yyy.72.239"}}
11. dinn 27.02.19 17:21 Сейчас в теме
(3) попробуйте использовать прокси
15. DarkPinch222 147 27.02.19 20:53 Сейчас в теме
(11) получилось с другого компьютера сделать setwebhook на сервер, с сертификатом сервера, теперь выдает все ок, has_custom_certificate = true.
Но в 1С сообщения от бота все равно не приходят ) Буду пробовать дальше, спасибо!
17. alexlx 114 27.02.19 22:52 Сейчас в теме
18. alexlx 114 27.02.19 23:54 Сейчас в теме
(15) попробуйте раскомментировать строку
LoadModule ssl_module modules/mod_ssl.so
в конфиге апача
25. PLAstic 296 01.03.19 09:39 Сейчас в теме
(11) Не поможет. Прокси для отправки только работает. Штатный путь от сервера телеги до вашего хоста в любом случае лежит через фильтр провайдера, где действуют правила РКН. Вам нужно выносить хост за область действия РКН. Например, в Прибалтику. 2000 в месяц за виртуалку.
DarkPinch222; +1 Ответить
24. PLAstic 296 01.03.19 09:37 Сейчас в теме
(3) У вас банальный фаервол РКН срабатывает. Вам нужно выносить сервер за зону действия РКН.
DarkPinch222; +1 Ответить
27. DarkPinch222 147 01.03.19 13:26 Сейчас в теме
(24) Спасибо! Думаю как раз в этом деле, а сколько уже мучались
12. dinn 27.02.19 17:22 Сейчас в теме
Посмотрите последий релиз ЗУП КОРП, там есть подсистема чатбота для рекрутинга.
20. asved.ru 36 28.02.19 10:18 Сейчас в теме
1) letsencrypt.
2) Смысл в переиспользовании сеансов появляется при массовых вызовах, но без него через 20 секунд после ухода последнего соединения рабочий процесс выгрузит контекст конфигурации, и следующий вызов будет долгим. Да и создание сеансов само по себе вещь затратная.
22. Sergey_Borisovi4 95 28.02.19 10:30 Сейчас в теме
Домен не обязателен, достаточно иметь внешний IP адрес. А при генерации сертификата указывать в качестве домена IP адрес.
maksa2005; megaZ; +2 Ответить
28. vsesam80 19.07.19 19:23 Сейчас в теме
Почему то сертификат Апач не принимает. После перезапуска не работает. В чем может быть дело? Всё сделал по инструкции
maksa2005; +1 Ответить
31. maksa2005 550 14.05.21 15:06 Сейчас в теме
(28)такая же фигня. все сделал как в инструкции.
36. maksa2005 550 17.05.21 13:59 Сейчас в теме
(28)у меня получилось) хоть и 2 дня с ним мучался
29. alexlx 114 22.07.19 08:41 Сейчас в теме
Что значит не принимает? Что логи пишут? Как сертификат делали?
30. sokir 2 09.10.20 01:36 Сейчас в теме
https://ВашДомен/ИмяБазы/hs/ИмяСервиса/v1/
У меня с https не видит вэб сервер - только с http. В чем может быть причина? Сертификат надо сначала подключить?
И что за /v1/ в конце пути?
32. maksa2005 550 14.05.21 15:14 Сейчас в теме
ошибка при запросе getWebhookInfo
{"ok":true,"result":{"url":"https://_______:8443/bot/hs/webhook/ts","has_custom_certificate":true,"pending_update_count":17,"last_error_date":1620994377,"last_error_message":"SSL error {error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed}","max_connections":40,"ip_address":"__________"}}
33. maksa2005 550 17.05.21 06:55 Сейчас в теме
Короче все это не так. С само подписным сертификатом телега не пропустит. Хоть застрелись)
34. maksa2005 550 17.05.21 13:51 Сейчас в теме
(33)ВСЕ получилось. спасибо за внимание!
35. maksa2005 550 17.05.21 13:52 Сейчас в теме
Решение было простым. Все сделал как по инструкции. Затык был в передаче правильного ip
сделал так:
https://__.__.__.__:8443/bot/hs/webhook/ts
и приложил само подписанный сертификат YOURPUBLIC.pem
37. user1081770 03.07.21 09:01 Сейчас в теме
"last_error_message": "SSL error {error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed}"
в чем проблема подскажите делал все по инструкций.

https://{мойдомен}:8443/telegram/hs/tg

setwebhoot выдает
ok true
result true
description "Webhook was set"
39. Goody 130 29.10.21 12:45 Сейчас в теме
(37)Сертификата нету у телеги. При установке вебхука не передали сертификат.
40. RussXXX 04.05.22 10:13 Сейчас в теме
Может сталкивался кто?

ошибка при запросе getWebhookInfo "last_error_message": "Wrong response from the webhook: 404 Not found",

ok": true,
"result": {
"url": "https://domen.ru/BD/hs/webhook/TG",
"has_custom_certificate": true,
"pending_update_count": 20,
"last_error_date": 1651647958,
"last_error_message": "Wrong response from the webhook: 404 Not found",
"max_connections": 40,
"ip_address": "xxx.xxx.xxx.78"
43. Лирик 14.09.23 16:14 Сейчас в теме
(40) Как то решили проблему? Ни где ответов нет.
41. Zixxx 16.09.22 20:59 Сейчас в теме
Ответ getwebhookinfo, что не нравится в само подписанном сертификате?

{"ok":true,"result":{"url":"https://___.___.___.___/bot/hs/webhook/tb","has_custom_certificate":true,"pending_update_count":28,"last_error_date":1663350880,"last_error_message":"SSL error {error:0A000086:SSL routines::certificate verify failed}","max_connections":40,"ip_address":"___.___.___.___"}}
42. Zixxx 16.09.22 22:47 Сейчас в теме
По комментам некоторые отправляли на 8443, попробовал сделать также

setwebhook https://___.___.___.___/bot/hs/webhook/tb
SSL routines::certificate verify failed

setwebhook https://___.___.___.___:8443/bot/hs/webhook/tb
last_error_message":"Connection refused" - когда привязка в IIS 443
SSL routines::certificate verify failed - когда привязка в IIS 8443
Оставьте свое сообщение