
В современном мире бизнеса автоматизация и быстрый обмен информацией играют ключевую роль. Интеграция различных систем, таких как CRM, ERP и мессенджеры, позволяет оптимизировать рабочие процессы и повысить эффективность взаимодействия с клиентами.
В этой статье описан процесс настройки интеграции Telegram бота с 1С через API. Telegram, как популярный мессенджер с открытым API, предоставляет широкие возможности для создания интерактивных ботов, которые могут автоматизировать задачи, отвечать на вопросы клиентов, принимать заказы и многое другое. Интеграция Telegram бота с 1С позволит вам расширить каналы коммуникации с клиентами, повысить оперативность реагирования на запросы и улучшить качество обслуживания.
Мы рассмотрим технические аспекты интеграции Telegram бота с 1С через API. Мы не будем углубляться в специфику кода 1С или функциональную реализацию бота, а сосредоточимся на общих принципах взаимодействия, необходимых библиотеках и протоколах обмена данными.
Вопросы, на которые ответить данная статья :
- Что понадобится для реализации?
- Как выпустить самоподписанный сертификат?
- Как настроить и выполнить веб-публикацию по https-протоколу через IIS?
- Как установить связь с Telegram API при помощи Webhook и какие могут быть ошибки?
Сразу выявим, что необходимо иметь для того, чтобы настроить интеграцию с Telegram:
- Статический IP. Обязателен для веб-публикации;
- Среда, в которой она будет выполнена (IIS или Apache). В статье использован IIS;
- OpenSSL;
- Информационная база 1С и http-сервис в ней;
- Telegram бот и его токен.
Выпуск самоподписанного сертификата
Для SSL-соединения обязательно использование SSL сертификата. Лучшим решением будет выпустить его платно в специализированном центре. Основные преимущества этого варианта: высокий уровень доверия к веб-странице и безопасность, но недостаток - понадобится зарегистрированный в сети домен, то есть не получится выпустить сертификат на IP, только на домен, а это дополнительные затраты и трудоемкость.
Телеграм позволяет работать с самоподписанными сертификатами, поэтому в данной статье будет разобран именно этот способ.
Плюсы:
- Бесплатно;
- Есть возможность выпустить как на конкретный IP, так и на домен;
- Срок действия указываем самостоятельно;
- Быстрый выпуск, если знать алгоритм действий.
Минусы:
- Низкий уровень доверия к веб-странице;
- Безопасность.
Для выпуска самоподписанного сертификата потребуется наличие установленного OpenSSL. Весь процесс будет происходить в командой строке.
- Для начала создаем каталог в удобном месте, куда будут сохраняться файлы сертификата. К примеру - C:\SSL\test.
- В OpenSSL , используя команду cd, переходим в каталог:
сd C:\SSL\test
- Вводим команду:
openssl req -newkey rsa:2048 -sha256 -nodes -keyout test.key -x509 -days 365 -out test.pem -subj "/C=RU/ST=Orenburg/L=Orenburg/O=Test/CN=99.99.999.999"
Основные аргументы:
- days – срок действия сертификата;
- keyout – сохраняет закрытый ключ сертификата в файл, в формате .key;
- out – сохраняет открытый ключ, в формате .pem;
- subj – данные сертфиката, где:
- - Код страны. Необязательный параметр. Длина 2 символа;
- - Название региона/области/края/республики. Необязательный параметр;
- - Название города. Необязательный параметр;
- - Название организации. Необязательный параметр;
- - Название отдела. Необязательный параметр;
- - Имя сертификата. Указывать либо доменное имя, либо IP. Обязательный параметр. Максимальная длина 64 символа;
- – Электронная почта. Необязательный параметр. Максимальная длина 40 символов.
4. Далее преобразуем сертификат в вид подходящий для IIS:
openssl pkcs12 -inkey test.key -in test.pem -export -out test.pfx
-inkey и -in - выбираем ранее созданные файлы test.key и test.pem
-out – сохраняет сертификат в формате .pfx
5. После ввода команды нужно ввести и далее подтвердить пароль.
Если откроем каталог через Проводник, то увидим что появилось три файла.
На этом выпуск самоподписанного сертификата завершен, следующий этап – настройка веб-сервера.
Настройка веб-сервера IIS
После выпуска самоподписанного сертификата, можно приступать к настройке IIS под https-протокол. Сначала находимо добавить созданный сертификат, для этого:
- Находим и открываем в IIS функцию Сертификаты сервера;
2, Импортировать;
3. Выбираем сертификат из каталога куда сохраняли его;
4. Вводим пароль от него и нажимаем ОК.
Далее необходимо создать Привязку у веб-сайта:
- Default Web Site – Привязки – Добавить
- В открывшемся окне указать протокол https, порт, под которым будет работать веб-публикация, и сертификат.
На текущий момент Телеграм API поддерживает работу WebHook через 443, 80, 88, 8443 порты. После заполнения необходимых полей нажимаем ОК.
Если нажать на кнопку Вид, то откроется сам сертификат. В нем мы можем посмотреть информацию, которую мы указывали при выпуске (Вкладка Состав – поле Субъект) и увидеть, что нет доверия этому сертификату.
Поэтому необходимо его установить в хранилище Доверенных сертификатов:
В каталоге с файлами сертификата открываем .pfx – вводим пароль – Поместить все сертификаты в следующее хранилище – Доверенные корневые центры сертификации – Готово.
При следующем открытии сертификата можно увидеть, что ошибка ушла.
Веб-публикация базы.
После того как провели основные настройки веб-сервера, можно приступить к публикации базы 1С. Сам процесс довольно типовой, поэтому концентрировать внимание на этом не будем.
- Открываем 1С от имени администратора в режиме Кофнигуратор;
- Администрирование – Публикация на веб-сервере;
- Здесь дать наименование публикации (обязательно использовать только латинские символы) и проверить правильно ли указан Каталог (если используются стандартные настройки и не создавался отдельный веб-сайт в IIS, то менять его не надо);
4. Перезапустить веб-сервер.
На этом этапе база опубликована и работает по https. Проверить это можно открыв ее в браузере, через localhost, внутренний IP или внешний IP. Внешний IP может не открываться с вашей локальной сети, пугаться не надо. При необходимости можно проверить с другого устройства, например, со смартфона.
В адресной строке можно увидеть, что ссылка прописана через https. Также при открытии будет предупреждение о небезопасном подключении, связано это с тем, что сертификат самоподписанный.
Во всех современных браузеров реализована защита, чтобы не допустить открытие сомнительных страниц, но так как это публикация не является сторонним/неизвестным нам источником - можно сделать исключение и продолжить открытие. На Телеграм API это не повлияет, так как доверие сертификату будет выполнено при установке WebHook’а.
(В случае использования платного сертификата, подобного предупреждения не будет).
База опубликована и работает, но нет того, к чему будет обращаться Телеграм Бот. Для наглядности статьи, будет использоваться максимально простое расширение 1С с http-сервисом, в котором прописаны только get и post запросы.
Чтобы имелся доступ к этому расширению по интернету, его необходимо включить в веб-публикацию. Сделать это можно:
Либо в окне Публикации на веб-сервере в самой 1С (во вкладке HTTP-сервисы):
Либо вручную в конфигурационном файле веб-публикации, для этого:
1. Открываем через текстовый редактор default.vrd, он находится в каталоге, который указали при веб-публикации в 1С. Каталог можно открыть через IIS, выбрав действие Проводник у вашей опубликованной базы;
Стандартный путь - "C:\inetpub\wwwroot\ИмяПубликации"
2. В этом файле, можно путем копирования, добавить еще одну запись в элементе <httpServices>. Обязательно заполнить атрибуты name и rootURL. По ним в дальнейшем будет указываться ссылка для установки вебхука. Остальные атрибуты можно оставить без изменений;
Как выглядит запись:
</service>
<service name="Шаблон URL"
rootUrl="Корневой URL"
enable="true"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5">
<accessTokenAuthentication>
<issuers/>
<accessTokenRecepientName/>
</accessTokenAuthentication>
</service>
3. После изменений перезапустить веб-сервер
Чтобы проверить доступ к http-сервису, можно открыть его. Ссылка выглядит следующим образом:
https://Хост/ИмяПубликации/hs/КорневойURL/ШаблонURL/
При открытии, браузер запросит авторизацию - нужно ввести данные пользователя 1С, у которого достаточно прав доступа к этому http-сервису.
После авторизации страница откроется, в моем случае имеется сообщение "HTTP-сервис работает", так как в модуле http-сервиса описан GET запрос, который возвращает такой ответ, если сервис успешно работает.
Но постоянное запрашивание авторизации не только неудобно, но и неработоспособно для Телеграм API. Нужно настроить автоматическую авторизацию. Для этого имеется два способа.
Первый способ – через default.vrd.
Вернемся к файлу конфигурационному файлу. Нас интересует элемент <point>, а именно атрибут ib. В нем указывается путь к базе, и в нем же указываем данные авторизации, дописав:
usr=ИмяПользователя1С;pwd=Пароль
Выглядеть должно таким образом:
Перезапускаем веб-сервер для принятия изменений, и теперь, при открытии http-сервиса в браузере, видим, что страница запускается без запрашивания авторизации. Но важно отметить, что и сама база не будет требовать авторизации, и будет открываться по ссылке автоматически через указанного пользователя. Грозит это тем, что любой у кого имеется ссылка на базу, сможет открывать ее без авторизации. Поэтому для данного способа, в целях безопасности, лучше создать отдельного пользователя, с правами и ролью назначенными только на использования этого http-сервиса.
Второй способ – Basic Auth.
Благо Телеграм API умеет в Basic Auth, поэтому удалим сделанную запись из default.vrd и перезапустим веб-сервер, чтобы при переходе по ссылке снова запрашивалась авторизация. Далее в ссылке указываем данные пользователя следующим образом:
https://ИмяПолльзоватлея:Пароль@localhost/ИмяПубликации/hs/КорневойURL/ШаблонURL
Такое действие позволяет указать данные для авторизации в момент при переходе по ссылке. Данный способ возможно использовать для установки Телеграм вебхука.
Установка Телеграм WebHook.
На этом этапе уже должны быть: выпущенный сертификат и веб-публикация, работающая по https протоколу. Устанавливать вебхук необходимо, с ПК и из сети, под которой работает публикация.
Так как используется самоподписанный сертификат, нужно чтобы Телеграм определил его таковым. Для этого потребуется использование метода загрузки файла. Сделаем это на примере простого html-кода.
- В текстовом документе вставляем данный код:
<html>
<body>
<form action="https://api.telegram.org/bot"ТокенБота"/setwebhook" method="post" enctype="multipart/form-data">
Сертификат:
<input type="file" name="certificate" id="fileToUpload"><br><br>
url: <input type="text" name="url" size="100"><br><br>
<input type="submit" value="Установить Webhook" name="submit" >
</form>
</body>
</html>
Токен бота вставляем без ковычек.
- Далее сохраняем в формате .html;
- Полученный файл открываем через браузер;
- Откроется веб-страница, в который необходимо выбрать самоподписанный сертификат в формате .pem и указать ссылку на http-сервис. В данном случае использую авторизацию Basic Auth, поэтому ссылка выглядит следующим образом:
https://tg:12345@99.99.999.999/testssl/hs/testbottg/testing
- Нажимаем Установить Webhook.
Далее видим "Webhook was set", это означает, что вебхук успешно установлен.
Если результат отличается - значит вебхук не установлен и была допущена ошибка при установке.
Чтобы проверить статус установленного вебхука используем метод /getwebhookinfo:
https://api.telegram.org/bot"ТокенБота"/getwebhookinfo
В случае, если вебхук установлен корректно, то информация выглядит таким образом:
Здесь можно увидеть, что статус вебхука true. Так же стоит обратить внимание на url и на has_custon_certificate – должно быть true (это означает, что сертификат в Телеграм API определен как самоподписанный).
Если необходимо удалить вебхук, то используем команду /deletewebhook
https://api.telegram.org/bot"ТокенБота"/deletewebhook
Основный ошибки Телеграм Webhook
Разберем какие могут быть основные ошибки у установленного вебхука при вызове метода /getwebhookinfo.
SSL error {error:0A000086:SSL routines::certificate verify failed
Ошибка связана с SSL-сертификатом. Возможно были допущены ошибки при выпуске самоподписанного сертификата, либо же при установке вебхука был выбран неверный сертификат.
Wrong response from the webhook: 500 Internal server error
Ошибка может означать что Телеграм не может обработать команду, вероятнее всего из-за косяков в коде. Рекомендуется проверить синтаксис и работоспособность кода.
Также может возникать если при установке вебхука была допущена ошибка в адресе (URL).
Connection reset by peer
Ошибка появляется когда вебхук не может достучаться до веб-публикации. Рекомендуется проверить работает ли публикации и доступность к ней с внешней сети.
Wrong response from the webhook: 401 Unauthorized
Ошибка авторизации. Неправильно указаны данные пользователя.
Connection timed out
Ошибка также связана с тем, что вебхук не может установить соединение с публикацией, вероятнее всего вебхук был установлен из другой сети. Рекомендуется устанавливать его непосредственно с того ПК, где стоит IIS и из под той же сети (под тем же внешнем IP), под которой была выполнена веб-публикация.
Специалисты компании «1С:БИЗНЕС РЕШЕНИЯ» помогут Вам освоить все возможности программ 1С, помогут установить, проведут бесплатную демонстрацию программ и ответят на вопросы!
Узнать подробнее о возможностях программы и заказать бесплатную демонстрацию можно по ссылке или по телефону +7 (800) 302-07-36.
