Работа с онлайн сервисами из консоли через OInt CLI

05.08.24

Интеграция - Облачные сервисы, хостинг

Примеры решения некоторых насущных проблем при работе с облачными сервисами, покрываемых CLI версией Открытого пакета интеграций - OInt CLI.

Я довольно часто пишу про Открытый пакет интеграций, и большинству данный проект известен как расширение для работы с облачными сервисами на базе платформы 1С:Предприятие. Однако, это лишь одна сторона проекта - самая известная, но не единственная. Поэтому, сегодня я хочу уделить больше внимания другой его части, моей любимой, если быть откровенным - приложению для командной строки OInt CLI, области его применения, решаемым задачам и принципу работы

 

Зачем нужен OInt CLI ?

 

Как уже было отмечено ранее, OInt CLI - это программа, приложение для командной строки. Но что оно умеет? Да, собственно, ровно все то же самое, что и оригинальный Открытый пакет интеграций - работать с облачными сервисами по Http. Набор методов OInt CLI и 1С расширения ОПИ практический полностью идентичен: сохранены имена функций и наборы параметров. Просто это работает из консоли и без 1С благодаря OneScript! 

 

В каких ситуациях OInt CLI может быть полезен:

  • Когда нужно быстро выполнить какую-либо манипуляцию с облачным сервисом без доступа к 1С
  • При тестировании и настройке сервиса для быстрой проверки результатов выполнения различных действий
  • Для подбора нужных методов и параметров под работу с 1С расширением ОПИ в дальнейшем
  • При автоматизации различных процессов, начиная с одиночных .bat файлов, заканчивая сложным CI/CD

 

Далее мы перейдем к конкретным примерам, но сначала пару слов про установку OInt CLI

 

Установка

 

OInt CLI доступен как на Windows, так и на Linux системах. Для его установки в каждом релизе ОПИ есть набор файлов, состоящий из двух .exe - Windows установщика и универсального исполняемого файла, .rpm пакета для Fedora/CentOS дистрибутивов и .deb пакета для дистрибутивов, основанных на Debian.

Вы можете просто скачать файл, подходящий для используемой вами системы

 

Как показывает статистика, чаще всего используется Windows версия OInt CLI - она же является самой простой в установке благодаря файлу установщика: Скачал -> Далее...Далее -> Готово

 

Приложение написано на OneScript, который, в свою очередь, требует .Net Framework 4.8. На всех более-менее современных версиях Windows он будет и так, а на Linux работает через Mono - прописан как зависимость внутри RPM и Deb-пакетов

Также, если вы пользуетесь OneScript и знаете, что такое OPM, то получить OInt CLI даже еще проще: он есть как пакет в OPM под именем oint-cli

 

opm install oint-cli

 

После установки одним из доступных способов, OInt CLI должен стать доступен для вызова в командной строке через команду oint (для Windows установщика может потребоваться перезагрузка)

 

Примеры работы

 

После установки можно начинать работу. Здесь я приведу несколько примеров решения задач, которые мне кажутся наиболее очевидными

Начнем с простого - отправка отчета о выполнении какого-либо процесса в Telegram. Работать я буду просто в командной строке, но организовать вызов из других инструментов, думаю, не должно вызвать никаких дополнительных трудностей

Так как это первый пример, для начала, просто запустим oint и посмотрим, какой вывод мы на это получим

 

 

Это главная страница. На ней есть некоторая информация о программе, а именно версия, структура вызова, список всех доступных библиотеки и универсальные опции, который могут быть использованы для любого другого вызова во время работы. В списке библиотек же мы можем видеть названия всех тех сервисов, что реализованы и в основном расширении ОПИ

Выберем самую первую библиотеку - telegram. Для этого напишем oint telegram и посмотрим на результат

 

Вызов библиотеки без указания метода возвращает список доступных функций. Для удобства, они дополнительно разделены по видам решаемых задач, которые равны областям в коде ОПИ и разделам документации

 

 

Теперь мы можем перейти непосредственно к отправке сообщения в Telegram. Если необходим только текст - выбираем функцию ОтправитьТекстовоеСообщение

 

При вызове функции без опций, выводится справка по методу и его параметрам. Набор параметров, опять же, соответствует таковым в 1С. Теперь уже отправим сообщение



 

В переменную %token% я заранее, за кадром, установил токен бота, а переменные %date% и %time% - это стандартные переменные в CMD, содержащие текущую дату и время системы

В качестве идентификатора чата тут выступает имя канала через @, но и числовые ID для отправки в чаты и личные сообщения пользователям также сюда подходят

 

Если же кроме текста необходимо отправлять еще и некоторый файл (например, какой-нибудь лог), то это будет ненамного сложнее: вместо функции ОтправитьТекстовоеСообщение просто вызывается функция ОтправитьДокумент с дополнительным параметром пути к файлу

 

В итоге мы получаем такое же сообщение, но уже с файлом. Слишком большой документ таким образом не пошлешь, но это уже ограничение API Telegram, а не самого OInt. Для отправки логов и текстовых файлов с результатами какого-либо процесса вполне подойдет

 

 

Теперь посмотрим более комплексный пример - отправка файла в облако

В наборе методов ОПИ есть решения для работы с тремя облачными сервисами: Google Drive, Yandex.Disk и Dropbox. Сразу стоит оговориться, что если подразумевается отправлять небольшие файлы (до 2 ГБ), то подойдет любое из них. При необходимости отправки больших файлов здесь отпадает Yandex.Disk, так как его API не имеет функционала для загрузки частями (т.н. Chunked Uploads)

В качестве примера я выбрал Google Drive, работа с которым позволит нам не только взглянуть на отправку файла, но и разобрать такой момент, как обновление временного токена доступа - с него и начнем

Если в случае с Telegram, который мы рассматривали первым, токен для бота выдается раз и навсегда, то большинство других сервисов токены выдает лишь на определенное время - их необходимо периодически обновлять

Для обновления токена сервиса Google  Drive в данном примере, необходимо вызвать функцию ОбновитьТокен из общего набора (библиотеки) google

 

oint google ОбновитьТокен --id %clientid% --secret %clientsecret% --refresh %refresh%

 

В нее передается ClientID, ClientSecret и RefreshToken - секретные данные для обновления. Далее, в рамках этого этапа, полученный в ответе JSON необходимо будет сохранить в файл. Для этого в OInt CLI есть универсальный для всех функций параметр --out (его описание можно увидеть на главной странице при вызове oint), в котором указывается путь к файлу для сохранения. Также можно воспользоваться и стандартной конструкцией ">", но тогда файл будет сохранен в кодировке оболочки, а не в UTF-8, как в случае с --out. Это может вызвать проблемы с использованием таких файлов из oint и других утилит на OneScript в дальнейшем

 

 

Но JSON ответа - это не чистое значение токена, которое нам необходимо. Для обработки подобных случаев, когда требуется разбор JSON в конечные значения, в составе OInt есть функция РазложитьJSON из набора tools

Вызвать функцию РазложитьJSON можно двумя способами: без указания имени поля JSON - тогда будет выведен весь список доступных полей и значений, где можно найти необходимые, и с указанием имени поля - тогда уже вернется конкретное его значение, которое можно будет куда-нибудь записать и использовать. Вот как это выглядит в нашем примере с ответом сервера по обновлению токена, записанным в newtoken.json

 

 

Теперь мы можем использовать новый токен из параметра %token%. Осталось лишь отправить файл на диск



 

Как вы могли заметить, само описание файла здесь передается в формате JSON: это может быть как непосредственно текст, так и путь к JSON файлу. В случае с прямой передачей текста используются одиночные кавычки, а не двойные

 

Полный набор команд:

oint google ОбновитьТокен --id %clientid% --secret %clientsecret% --refresh %refresh% --out C:/newtoken.json
oint tools РазложитьJSON --json C:/newtoken.json --enc CP866 --name access_token > token.tmp
set /p token=<token.tmp
oint gdrive ЗагрузитьФайл --token %token% --file C:/log.txt --props "{'MIME':'text/plain','Имя':'log.txt','Родитель':'root'}"

 

Подытожив

Мы рассмотрели простой случай с отправкой данных в Telegram, а также обновление токена, разбор JSON и передачу JSON параметра в случае с отправкой файла на облачный диск Google Drive. Ничего больше экстраординарного в других методах на данный момент встретить нельзя - принцип схож, просто выбирайте функции под свои конкретные нужды

Информацию по всем методам, также как и в случае с расширением для 1С, можно найти в документации: там есть и примеры вызываемых команд, и соотношение CLI опций с параметрами для 1С и OneScript

 

 

Скачать OInt CLI и расширение ОПИ для 1С можно на Github по ссылкам ниже
 

 

Также не забывайте ставить звездочку этому и другим открытым репозиториям, если они вам понравилась! Проектам это помогает в развитии, а вам - в отслеживании новостей о выходе новых версий

 

Спасибо за внимание!

 

Репозиторий ОПИ: github.com/Bayselonarrend/OpenIntegrations

Последний релиз: github.com/Bayselonarrend/OpenIntegrations/releases/latest

 

Другие статьи про Открытый пакет интеграций на Инфостарт:

 

 

 Мой GitHub:    https://gitub.com/Bayselonarrend 
 OpenYellow:    https://openyellow.notion.site
 Лицензия MIT:  https://mit-license.org

ОПИ API интеграция CLI консоль devops cicd onescript os облако сервисы обмен

См. также

Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Облачные сервисы, хостинг Программист Пользователь Платформа 1С v8.3 Управляемые формы 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Данная система предназначена всем, кому нужно выгружать данные в SPOT 2D или в ОРИМИ. Позволяет гибко настроить получение данных для каждого поля файла и файла выгрузки в целом. Имеет отборы по организации, складу, и папкам номенклатуры. Есть возможность выгружать данные как вручную, с выбором конкретного файла, за конкретный период, так и в автоматическом режиме в указанное вами время. Выгрузка может выполняться в файл или через http напрямую. Имеется подробная справка по настройке, а также примеры запросов для приведенных в примерах файлов выгрузки. Может работать в составе любой конфигурации! Обновление от 31.03.2020!

14400 руб.

19.10.2018    28614    7    1    

9

Облачные сервисы, хостинг Бесплатно (free)

Перенос 1С в облако — это процесс, который требует тщательного планирования и грамотного исполнения, чтобы избежать простоев и обеспечить бесперебойную работу системы. В этой статье рассмотрим пошаговую инструкцию по переносу 1С в облако, уделяя особое внимание минимизации рисков и обеспечению беспрерывной работы вашего бизнеса.

02.09.2024    349    EFSOL_oblako    0    

0

Облачные сервисы, хостинг Linux Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Одна из завершающих публикаций цикла "В облако на работу:.. Рецепты от Капитана" в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием и прочая прочая... Это основное блюдо, на закуску разберемся с отказоустойчивостью. В этой публикации для PostgreSQL, заодно попробуем сделать это по новому.

17.06.2024    7167    capitan    18    

40

Облачные сервисы, хостинг Linux Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

В прошлых публикациях мы, не торопясь, после настройки персонального рабочего места на РедОС 7.3, посмотрели РедОС 8 и почти полностью собрали рабочую сеть 1С на отечественной ОС подходящую для работы среднего размера компании. С веб-серверами, доменной авторизацией и прочая прочая... Осталось настроить регулярное архивирование, чтобы не потерять нажитое.

27.05.2024    1312    capitan    6    

9

Облачные сервисы, хостинг Linux Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В одном из лучших руководств администраторов "UNIX and Linux System Administration Handbook, © 2018 Pearson Education lnc." описывается такой метод настройки систем: "Копируй, вставляй, молись". Какой бы ни была подробной инструкция и на какой бы типовой системе она ни составлялась, всегда что-то может пойти не так. В этой публикации рассмотрим, как искать и устранять ошибки авторизации ОС сервером 1С на базе linux.

02.05.2024    1295    capitan    0    

11

Облачные сервисы, хостинг Linux Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В публикации рассматриваются все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Как случаи, когда сервер 1С авторизирует веб и обычных клиентов 1С в active directory, так и когда сам сервер является клиентом, например при HTTP запросах выполняемых сервером 1С.

18.03.2024    1460    capitan    1    

9

Облачные сервисы, хостинг Бесплатно (free)

Если вы работаете с 1С, то, скорее всего, используете для этого собственный сервер. Это решение дает больше гибкости: железо всегда под рукой, в любой момент можно поменять конфигурацию или установить дополнительное ПО. Например, чтобы организовать бухгалтеру удаленный рабочий стол. Но насколько этот вариант экономически выгоден для компании? Мы сравнили три варианта развертывания 1С: на собственном сервере, на арендованном в Selectel и в готовом облаке. Какие есть преимущества и недостатки у каждого варианта и что выгоднее — разбираем в статье.

13.03.2024    1032    doctor_it    6    

0

Облачные сервисы, хостинг Linux Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Прошлая публикация "Три пингвина под окном… Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux" набрала более 20К просмотров. В моем случае это абсолютный рекорд. Как и обещал в ней, рассказываю, как установить неподдерживаемый дистрибутив ОС у облачного провайдера.

25.02.2024    2743    capitan    0    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. uno-c 238 05.08.24 11:30 Сейчас в теме
Мое почтение! Хоть мне и удобнее писать самому по первичной документации API, тем не менее Ваши работы вызывают уважение.
mbx_baza; +1 Ответить
2. bayselonarrend 2033 05.08.24 11:32 Сейчас в теме
3. aximo 2087 05.08.24 17:34 Сейчас в теме
Не побоюсь написать, но все-таки и-старт остается единственным вменяемым профильным ресурсом, где можно почерпнуть что- нибудь интересное - даже в «режиме ознакомления»
mbx_baza; +1 Ответить
4. bayselonarrend 2033 05.08.24 17:36 Сейчас в теме
5. user721621 7 23.08.24 19:58 Сейчас в теме
Будет ли уместным задать вопрос. Использую вашу библиотеку для работы интернет сервисами и столкнулся с проблемой.
Ситуация массовый трекинг Почты России
через "WinHttp.WinHttpRequest.5.1" запрос работает
а через 1С нет.
Веб сервис идет с переадресацией:
Первичный адрес "https://tracking.russianpost.ru/fc?wsdl"
затем пересылает на "https://tracking.russianpost.ru/tracking-web-static/fc_wsdl.xml"
после чего выдает ошибку 405
А вот при использовании WinHttp.WinHttpRequest.5.1 ошибки нет.
Не подскажете куда копать?
Какой то авторизации там тоже нет, она сидит в XML теле запроса:
Запрос = НСтр("ru = '<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:pos=""http://fclient.russianpost.org/postserver"" xmlns:fcl=""http://fclient.russianpost.org"">
|<soapenv:Header/>
|<soapenv:Body>
| <pos:ticketRequest>
| <request>
| <fcl:Item Barcode = ""80098299076642""/>
|<fcl:Item Barcode = ""80098299076543""/>
|<fcl:Item Barcode = ""80098299076574""/>
|<fcl:Item Barcode = ""80098299076581""/>
| </request>
| <login>*****</login>
| <password>*****</password>
| <language>RUS</language>
| </pos:ticketRequest>
|</soapenv:Body>
|</soapenv:Envelope>'");
6. user721621 7 24.08.24 07:38 Сейчас в теме
(5) Сам спросил сам отвечу - проблема была в том что пытался установить защищенное соединение. Оно не нужно в этом случае. Без него ответ приходит сразу и без переадресации.
bayselonarrend; +1 Ответить
7. bayselonarrend 2033 24.08.24 10:02 Сейчас в теме
(6) Да, пропустил вчера вопрос. Хотя как связан обмен с Почтой России и ОПИ я не понял о_О
Оставьте свое сообщение