г. Оренбург, ул. Комсомольская, д. 26

пн-пт 09:00 - 18:00

Отдел качества: +7 (922) 886 95 17

Веб-публикация 1С по https-протоколу для Telegram API

В современном мире бизнеса автоматизация и быстрый обмен информацией играют ключевую роль.  Интеграция различных систем, таких как 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. Весь процесс будет происходить в командой строке.

  1. Для начала создаем каталог в удобном месте, куда будут сохраняться файлы сертификата. К примеру - C:\SSL\test.
  2. В OpenSSL , используя команду cd, переходим в каталог:

 

сd C:\SSL\test

 

  1. Вводим команду:

 

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-протокол. Сначала находимо добавить созданный сертификат, для этого:

  1. Находим и открываем в IIS функцию Сертификаты сервера;

       2, Импортировать;

      3. Выбираем сертификат из каталога куда сохраняли его;

      4. Вводим пароль от него и нажимаем ОК.

Далее необходимо создать Привязку у веб-сайта:

  1. Default Web SiteПривязкиДобавить
  2. В открывшемся окне указать протокол https, порт, под которым будет работать веб-публикация, и сертификат.

На текущий момент Телеграм API поддерживает работу WebHook через 443, 80, 88, 8443 порты. После заполнения необходимых полей нажимаем ОК.

Если нажать на кнопку Вид, то откроется сам сертификат. В нем мы можем посмотреть информацию, которую мы указывали при выпуске (Вкладка Состав – поле Субъект) и увидеть, что нет доверия этому сертификату.

Поэтому необходимо его установить в хранилище Доверенных сертификатов:

В каталоге с файлами сертификата открываем .pfx – вводим пароль – Поместить все сертификаты в следующее хранилище – Доверенные корневые центры сертификации – Готово.

При следующем открытии сертификата можно увидеть, что ошибка ушла.

Веб-публикация базы.

 

После того как провели основные настройки веб-сервера, можно приступить к публикации базы 1С. Сам процесс довольно типовой, поэтому концентрировать внимание на этом не будем.

  1. Открываем 1С от имени администратора в режиме Кофнигуратор;
  2. АдминистрированиеПубликация на веб-сервере;
  3. Здесь дать наименование публикации (обязательно использовать только латинские символы) и проверить правильно ли указан Каталог (если используются стандартные настройки и не создавался отдельный веб-сайт в 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-кода.

  1. В текстовом документе вставляем данный код:

 

<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>

 

 

Токен бота вставляем без ковычек.

  1. Далее сохраняем в формате .html;
  2. Полученный файл открываем через браузер;
  3. Откроется веб-страница, в который необходимо выбрать самоподписанный сертификат в формате .pem и указать ссылку на http-сервис. В данном случае использую авторизацию Basic Auth, поэтому ссылка выглядит следующим образом:

https://tg:12345@99.99.999.999/testssl/hs/testbottg/testing

 

  1. Нажимаем Установить 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.