Работа с онлайн сервисами из консоли через 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 8.3.14 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бытовые услуги, сервис Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Гостиничный бизнес Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Легкая промышленность, мода и одежда Управленческий учет Платные (руб)

Расширение позволяет автоматизировать управление картами лояльности и взаимодействие с покупателями при помощи интеграции корпоративной системы 1С и специализированного облачного сервиса "CARDPR". Автоматическая онлайн синхронизация сведений о владельце электронной карты лояльности и баланса бонусных баллов на карте между корпоративной системой 1С и мобильным устройством покупателя. Оповещение покупателя об изменении баланса его электронной карты лояльности и проведении каких-либо маркетинговых акций в компании при помощи рассылки push-сообщений на его мобильное устройство.

36000 руб.

20.07.2023    3202    1    2    

11

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

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

14400 руб.

19.10.2018    28699    7    1    

9

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

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

31.10.2024    1307    capitan    0    

0

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

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

18.10.2024    1701    capitan    5    

12

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

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

02.09.2024    441    EFSOL_oblako    0    

-2

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

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

17.06.2024    7640    capitan    18    

40

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

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

27.05.2024    1454    capitan    6    

9

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

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

02.05.2024    1455    capitan    0    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. uno-c 264 05.08.24 11:30 Сейчас в теме
Мое почтение! Хоть мне и удобнее писать самому по первичной документации API, тем не менее Ваши работы вызывают уважение.
mbx_baza; +1 Ответить
2. bayselonarrend 2087 05.08.24 11:32 Сейчас в теме
3. aximo 2100 05.08.24 17:34 Сейчас в теме
Не побоюсь написать, но все-таки и-старт остается единственным вменяемым профильным ресурсом, где можно почерпнуть что- нибудь интересное - даже в «режиме ознакомления»
mbx_baza; +1 Ответить
4. bayselonarrend 2087 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 2087 24.08.24 10:02 Сейчас в теме
(6) Да, пропустил вчера вопрос. Хотя как связан обмен с Почтой России и ОПИ я не понял о_О
Оставьте свое сообщение