Отправка Push-уведомлений через сервис Firebase Cloud Messaging по протоколу FCM HTTP v1 API

Публикация № 1408766 24.03.21

Интеграция - WEB-интеграция

push push-уведомления firebase fcm fcm-push firebase-push

При разработке нативного приложения Android для ТСД, в котором присутствует функционал отображения задач кладовщикам, созданных в 1С, возникла необходимость отправлять push-уведомления о появлении новых задач. Для отправки таких уведомлений было решено использовать сервис Firebase Cloud Messaging (FCM). Так как для 1С, в отличии от других языков программирования, не существует готовых библиотек, что вполне логично, то очевидным способом отправки является использование протокола HTTP. Однако, существующая информация в интернете в части 1С содержит только сведений об отправке push-уведомлений через этот сервис с использованием устаревшего протокола HTTP Firebase Cloud Messaging. Сам Google не рекомендует использовать данный протокол и настоятельно склоняет к переходу на новый протокол FCM HTTP v1 API. Что ж, пришлось разбираться самостоятельно.

Авторизация для выполнения запросов к сервисам Google.

Основным отличием, помимо формата самого отправляемого сообщения, является способ авторизации. В отличии от постоянного ключа (Web API Key, который, нужно заметить, для новых проектов вообще не доступен), который передаётся в заголовке при использовании старого протокола, теперь необходимо отправлять ключ доступа (access token), срок действия которого максимально может составлять один час. По истечению срока действия необходимо получать новый ключ доступа для доступа к сервисам Google. Сделано это для увеличения безопасности. Если такой ключ доступа попадёт в посторонние руки, то максимум через час он уже будет недействителен.

Так же в качестве плюсов нового протокола приводится более эффективная настройка сообщений для разных платформ. Можно указать общие параметры уведомления и настроить дополнительные определения для конкретных платформ (Android, APNS, Web push protocol).

И если отправка самого push-уведомления через сервис FCM не вызывает сложностей (достаточно сформировать JSON объект согласно описанию https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages?hl=ru и отправить его в POST запросе по адресу https://fcm.googleapis.com/v1/projects/{идентификатор-проекта}/messages:send, указав в заголовке ключ доступа, речь о котором идёт выше), то вот как получать этот ключ пришлось разбираться более детально.

Можно, конечно, получать ключ с использованием авторизации пользователя через OAuth2. Это когда открывается форма c веб-страницей, в которой выполняется переход на сайт Google для авторизации, а после входа в свою учётную запись возвращается ключ доступа. Потом периодически по истечению срока действия ключа выполняется HTTP запрос для обновления этого ключа уже без участия пользователя. Такой метод использовался мной для обращения к сервисам Google Карты и Календарь. Но в данной ситуации захотелось выполнять авторизацию (получать ключ доступа) от имени сервисного аккаунта, т. е. вообще без участия пользователя.

Для выполнения такой авторизации используется JSON Web Token, который подписывается приватным ключом и отправляется на сервер авторизации. В ответ приходит ключ доступа. Когда срок действия этого ключа истекает, необходимо повторить процесс авторизация для получения нового ключа.

Подробно можно ознакомиться здесь: https://developers.google.com/identity/protocols/oauth2/service-account#httprest

Далее мы рассмотрим вкратце, как это сделать на 1С и по-русски)).

Получение приватного ключа для выполнения авторизации.

В первую очередь, нам понадобится приватный ключ, который можно скачать в настройках проекта Firebase. Как создавать такой проект мы рассматривать не будем, информации на эту тему достаточно в интернете, в том числе и на этом сайте. А если вы ранее использовали сервисы Firebase (например, для отправки push-уведомлений по устаревшему протоколу), то такой проект у вас уже есть.

Переходим к настройкам своего проекта Firebase на закладку Service Accounts и нажимаем кнопку Generate new private key. Браузером будет скачан JSON файл с данными приватного ключа. Внимание! Храните этот файл в надёжном хранилище и не допускайте его утечки.

Далее необходимо сгенерировать JSON Web Token (JWT) и подписать его приватным ключом для отправки на сервер авторизации.

Чтение приватного ключа в 1С.

Приватный ключ является объектом JSON. Ниже приведён пример содержимого ключа.

{
  "type": "service_account",
  "project_id": "fir-push-for-1c",
  "private_key_id": "355...b06",
  "private_key": "-----BEGIN PRIVATE KEY-----\n[СОДЕРЖИМОЕ ПРИВАТНОГО КЛЮЧА]\n-----END PRIVATE KEY-----\n",
  "client_email": "firebase-...@fir-push-for-1c.iam.gserviceaccount.com",
  "client_id": "106...782",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-hmjr4%40fir-push-for-1c.iam.gserviceaccount.com"
}

Этот ключ понадобится для создания подписанного JWT, поэтому необходимо его прочитать из файла и преобразовать в Структуру.

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл("{путь_к_файлу_секретного_ключа}");

СекретныйКлюч = ПрочитатьJSON(ЧтениеJSON);

ЧтениеJSON.Закрыть();

Создание JWT.

JWT является строкой и состоит из трёх частей, разделённых точкой: заголовок, данные авторизации (тело), цифровая подпись. Каждая часть представляет собой строку Base64.

{Заголовок Base64}.{Тело Base64}.{Подпись Base64}

Для получения подписи необходимо подписать приватным ключом первые две части JWT.

{Заголовок Base64}.{Тело Base64}

И добавить полученное значение подписи в конец JWT через точку.

Формат заголовка JWT.

Формат заголовка представляет собой JSON объект, содержащий два параметра:

  • alg – тип алгоритма, по которому формируется подпись. Всегда используется алгоритм RSA SHA-256, поэтому значение этого параметра RS256.
  • typ – тип формата. Всегда JWT token, поэтому значение этого параметра JWT.

Таким образом заголовок будет всегда одним и тем же:

{"alg": "RS256", "typ": "JWT"}

В 1С можно просто устанавливать эту строку. Для преобразования простой строки в Base64 можно создать соответствующую процедуру.

Функция СтрокаВСтрокуBase64(ИсходнаяСтрока)
	
	Поток = Новый ПотокВПамяти;
	
	ЗаписьТекста = Новый ЗаписьТекста(Поток, КодировкаТекста.UTF8);
	ЗаписьТекста.Записать(ИсходнаяСтрока);
	ЗаписьТекста.Закрыть();
	
	ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
	Результат = Base64Строка(ДвоичныеДанные);
	
	// Необходимо так же удалить разделители ВК + ПС
	Результат = СтрЗаменить(Результат, Символы.ВК + Символы.ПС, "");
	
	Возврат Результат;
	
КонецФункции

В результате код получения заголовка JWT будет выглядеть следующим образом.

ЗаголовокJWT = СтрокаВСтрокуBase64("{""alg"":""RS256"", ""typ"":""JWT""}");

Формат данных авторизации (тело JWT).

Тело JWT так же является объектов JSON и содержит следующие параметры:

  • iss – адрес электронной почты сервисного аккаунта проекта Firebase.
  • scope – разрешения, которые необходимы. Для возможности отправлять push-уведомление необходимо разрешение https://www.googleapis.com/auth/firebase.messaging. Со всем значениями можно ознакомиться по адресу https://developers.google.com/identity/protocols/oauth2/scopes.
  • aud – всегда имеет значение https://oauth2.googleapis.com/token.
  • iat – дата, начиная с которой будет действовать полученный ключ доступа. Значение содержит количество секунд, прошедших с 1 января 1970 года.
  • exp – дата окончания действия ключа доступа. Значение содержит количество секунд, прошедших с 1 января 1970 года. Значение не может быть больше даты начала срока действия ключа чем на час (3600 секунд).

Сформировать тело JWT в 1С можно следующим образом.

// Вычисляем количество секунд с 01.01.1970 00:00:00
ДатаВыдачи = ТекущаяУниверсальнаяДата() - '19700101';
// Максимальный срок действия - 1 час (3600 секунд).
ДатаОкончания = ДатаВыдачи + 3600;

// Простой объект JSON сформируем сразу как строку.
ШаблонТела =
"{
|	""iss"": ""%1"",
|	""scope"": ""%2"",
|	""aud"": ""%3"",
|	""exp"": %4,
|	""iat"": %5
|}";
// Необходимые данные подставим из считанного ранее из файла приватного ключа.
Тело = СтрШаблон(ШаблонТела,
	СекретныйКлюч.client_email,
	"https://www.googleapis.com/auth/firebase.messaging",
	СекретныйКлюч.token_uri,
	Формат(ДатаОкончания, "ЧГ="),
	Формат(ДатаВыдачи, "ЧГ="));
	
ТелоJWT = СтрокаВСтрокуBase64(Тело); // Конечный результат должен быть строкой Base64.

Формирование подписи JWT.

После получения строк Base64 заголовка и тела их необходимо соединить через точку и вычислить цифровую подпись полученной строки с использование приватного ключа, содержащемся в скачанном выше файле. К сожалению, встроенные средства криптографии 1С не позволяет это сделать, поэтому для формирования подписи используется внешняя программа OpenSSL.
Для формирования подписи этой программой необходимо выполнить следующую команду системы:

openssl.exe dgst -sha256 -sign <имя_приватного_ключа> -out <имя_файла_подписи> <имя_подписанного_файла>

Таким образом для получения подписи нам необходимо сохранить в файлы на диске полученную строку для подписи и приватный ключ, выполнить указанную выше команду, подставив нужные имена файлов, после чего считать подпись из созданного файла <имя_файла_подписи>.

Создадим вспомогательную процедуру для записи строки в файл на диске. Это должны быть текстовые файлы в формате UTF-8.

Процедура ЗаписатьСтрокуВФайл(Строка, ИмяФайла)
	
	// Используется поток, чтобы записать текст в формате UTF-8 без BOM.
	Поток = Новый ПотокВПамяти;
	
	ЗаписьТекста = Новый ЗаписьТекста(Поток, КодировкаТекста.UTF8, , , Ложь);
	ЗаписьТекста.Записать(Строка);
	ЗаписьТекста.Закрыть();
	
	ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
	ДвоичныеДанные.Записать(ИмяФайла);
	
КонецПроцедуры

Далее реализуем алгоритм по формированию подписи с использованием OpenSSL.

// Создадим временный каталог для хранения файлов.
КаталогФайлов = ПолучитьИмяВременногоФайла();
СоздатьКаталог(КаталогФайлов);

// Зададим имена файлов.
ИмяФайлаКлюча = КаталогФайлов + "\private.key";
ИмяФайлаJWT = КаталогФайлов + "\jwt.txt";
ИмяФайлаПодписи = КаталогФайлов + "\jwt.sgn";

// Запишем подписываемые данные и приватный ключ в файлы.
ДанныеДляПодписи = ЗаголовокJWT + "." + ТелоJWT;
ЗаписатьСтрокуВФайл(ДанныеДляПодписи, ИмяФайлаJWT);
ЗаписатьСтрокуВФайл(СекретныйКлюч.private_key, ИмяФайлаКлюча);

// Сфомируем команду для формирования подписи.
OpenSsl = "<Путь_к_OpenSLL>\bin\openssl.exe";
СтрокаКоманды = OpenSsl + " dgst -sha256 -sign " + ИмяФайлаКлюча + " -out " + ИмяФайлаПодписи + " " + ИмяФайлаJWT;
КодВозврата = Неопределено;

// Выполним команду для формирования подписи.
ЗапуститьПриложение(СтрокаКоманды, , Истина, КодВозврата);

Если КодВозврата <> 0 Тогда
	// Что-то пошло не так.
	УдалитьФайлы(КаталогФайлов);
	ВызватьИсключение СтрШаблон(
		НСтр("ru='Произошла ошибка при подписании JSON Web Token. Код возврата: %1'"),
		КодВозврата);
КонецЕсли; 

// Прочитаем полученную подпись из файла, как двоичные данные.
ДанныеПодписи = Новый ДвоичныеДанные(ИмяФайлаПодписи);

// Преобразуем подпись в строку Base64...
ПодписьJWT = Base64Строка(ДанныеПодписи);
// ... и удалим разделители ВК + ПС
ПодписьJWT = СтрЗаменить(ПодписьJWT, Символы.ВК + Символы.ПС, "");

// Удалим временный каталог с файлами.
УдалитьФайлы(КаталогФайлов);

После того, как получена подпись, можем сформировать итоговый JSON Web Token.

JWT = ЗаголовокJWT + "." + ТелоJWT + "." + ПодписьJWT;

Авторизация и получение ключа доступа с использованием сформированного JWT.

Теперь мы можем выполнить авторизацию и получить ключ доступа для обращения к сервисам Google.

Для этого необходимо выполнить HTTP POST запрос по адресу https://oauth2.googleapis.com/token.

В теле запроса необходимо передать объект JSON, содержащий два параметра:

  • grant_type – всегда содержит значение urn:ietf:params:oauth:grant-type:jwt-bearer.
  • assertion – сформированный выше подписанный JSON Web Token.

Такой запрос будет выглядеть следующим образом.

// В заголовках установим тип содержимого тела - JSON.
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");

// Простой объект JSON сформируем сразу как строку.
ШаблонЗапроса = 
"{
|	""grant_type"": ""%1"",
|	""assertion"": ""%2""
|}";
ПараметрыЗапроса = СтрШаблон(ШаблонЗапроса,
	"urn:ietf:params:oauth:grant-type:jwt-bearer",
	JWT
);

// Создадим HTTP запрос с нужными параметрами.
Запрос = Новый HTTPЗапрос("token", Заголовки);
Запрос.УстановитьТелоИзСтроки(ПараметрыЗапроса);

// Создадим защищенное HTTPS соединение.
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
Соединение = Новый HTTPСоединение("oauth2.googleapis.com", , , , , , ЗащищенноеСоединение);

// И отправим запрос с методом POST на сервер.
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

В ответе придёт JSON объект, содержащий ключ доступа (access_token) и срок действия (дата, после которой ключ станет недействительным).

Произведём чтение этих данных из ответа.

ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоОтвета);

СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);
	
ЧтениеJSON.Закрыть();

Если Ответ.КодСостояния <> 200 Тогда
	ВызватьИсключение СтруктураОтвета.error_description;
КонецЕсли; 

КлючДоступа = СтруктураОтвета.access_token;
// Определим срок действия ключа, после которого он устареет и необходимо будет
// вновь выполнить авторизацию.
СрокДействия = ТекущаяУниверсальнаяДата() + СтруктураОтвета.expires_in;

// Можно сохранить ключ доступа чтобы не производить авторизацию при каждой отправке сообщения.
// Если в вашей конфигурации используется БСП, то это можно сделать, например, так.
ДанныеКлючаДоступа = Новый Структура("КлючДоступа, СрокДействия", КлючДоступа, СрокДействия);
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище("GoogleAPI", ДанныеКлючаДоступа);
УстановитьПривилегированныйРежим(Ложь);

Теперь, имея действующий ключ доступа мы может выполнять запросы к сервисам Google, в том числе и для отправки push-уведомлений.

Отправка push-уведомлений.

Как было сказано вначале, для отправки push-уведомлений необходимо сформировать JSON-объект, заполненный необходимыми данными и отправить его по адресу https://fcm.googleapis.com/v1/projects/{идентификатор-проекта}/messages:send, указав в заголовке ключ доступа.

Для этой статьи мной был создан проект Firebase с идентификатором «fir-push-for-1c» (Project ID на закладке General настроек проекта). Поэтому адрес, по которому необходимо отправить push-уведомление будет выглядеть следующим образом: https://fcm.googleapis.com/v1/projects/fir-push-for-1c/messages:send.

Объект JSON называется message и содержит следующий поля:

  • data – произвольные передаваемые данные, которые будут обработаны приложением, получившим push-уведомление. В терминах 1С – это Соответствие, где ключ и значение имеют тип «Строка».
  • notification – объект (в терминах 1С – Структура), описывающий само уведомление (заголовок, текст сообщения и изображение).
  • android – объект, содержащий специфичные параметры для Android устройств (приоритет, цвет сообщение, звук, видимость и прочие параметры).
  • webpush – объект, содержащий параметры протокола Webpush.
  • apns – объект, содержащий специальные параметры службы push-уведомлений Apple.
  • token – идентификатор (токен) получателя. Данный идентификатор должен быть получен от устройства, на которое требуется отправлять уведомления. Получение идентификатора можно реализовать через http-сервис 1С. Например, при запуске мобильного приложения на устройстве Android, разработчик должен реализовать получение этого идентификатора и отправку его в базу 1С через http-сервис. Разработчик 1С должен сохранять этот идентификатор в БД и использовать его при отправке уведомлений на это устройство. Если вы реализовывали отправку уведомлений для приложений на мобильной платформе 1С, то вам должен быть знаком данный механизм (token в таком случае – ИдентификаторПодписчикаДоставляемыхУведомлений.ИдентификаторУстройства).

С подробным описанием этого объекта уведомлений можно ознакомиться по адресу https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages?hl=ru.

Напишем код, который отправит простое push-уведомление, содержащее заголовок, текст сообщения и данные о вымышленной задаче (тип задачи и её идентификатор). Заголовок и текст сообщения используются для отображения оповещения на экране устройства, а данные (data) используются непосредственно самим приложением, чтобы «знать» что, собственно говоря, пришло.

// Сформируем объект push-уведомления для отправки.
Уведомление = Новый Структура;
Уведомление.Вставить("token", "<Идентификатор_получателя>");

// Установим необходимые данные.
Уведомление.Вставить("data", Новый Соответствие);
Уведомление.data["task_id"] = "092309280";
Уведомление.data["task_type"] = "check_order";

// Зададим оповещение, отображаемое на экране.
Оповещение = Новый Структура;
Оповещение.Вставить("title", НСтр("ru='Создана новая задача'"));
Оповещение.Вставить("body", НСтр("ru='Проверить сборку ордера на отгрузку 123'"));

Уведомление.Вставить("notification", Оповещение);

// Для Android устройства можем указать дополнительные параметры оповещения,
// например, видимость уведомления.
КонфигурацияAndroid = Новый Структура;
КонфигурацияAndroid.Вставить("notification", Новый Структура("visibility", "PRIVATE"));

Уведомление.Вставить("android", КонфигурацияAndroid);

// Создадим итоговый объект уведомления.
PushСообщение = Новый Структура("message", Уведомление);

// И преобразуем его в JSON строку.
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();

ЗаписатьJSON(ЗаписьJSON, PushСообщение);

ТелоЗапроса = ЗаписьJSON.Закрыть();

// Отправим уведомление через FCM.

КлючДоступа = "<полученный_ранее_ключ_доступа>";

// Если ключ доступа был сохранён в безопасном хранилище, как было показано в коде выше,
// то можно воспользоваться следующим кодом.
УстановитьПривилегированныйРежим(Истина);
ДанныеКлючаДоступа = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища("GoogleAPI");
УстановитьПривилегированныйРежим(Ложь);

// Проверка сохраненного ключа доступа
КлючДоступаАктален = Тип(ДанныеКлючаДоступа) = Тип("Структура")
	И ТекущаяУниверсальнаяДата() < ДанныеКлючаДоступа.СрокДействия;
Если Не КлючДоступаАктален Тогда
	// Необходимо выполнить повторную авторизацию.
	// Как вариант, можно обновлять ключ доступа регламентным заданием по рассписанию.
	//....
КонецЕсли; 

КлючДоступа = ДанныеКлючаДоступа.КлючДоступа;

АдресРесурса = СтрШаблон("/v1/projects/%1/messages:send", "<Идентификатор_вашего_проекта_Firebase>");

Заголовки = Новый Соответствие;
// Заголовок авторизации с полученным ранее ключом доступа.
Заголовки.Вставить("Authorization", "Bearer " + КлючДоступа);
// Заголовок, указывающий тип содержимого тела запроса.
Заголовки.Вставить("Content-Type", "application/json");
	
Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);

Соединение = Новый HTTPСоединение("fcm.googleapis.com", , , , , , Новый ЗащищенноеСоединениеOpenSSL);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Таким образом мы выполнили авторизацию, получили ключ доступа и отправили push-уведомление.

Библиотека отправки Push уведомления через Firebase Cloud Messaging.

"Для облегчения жизни" описанный выше код был собран в отдельные процедуры и функции для авторизации и отправки push-уведомлений в отдельную библиотеку, выполненную в виде расширения. Её можно подключить к своей конфигурации как расширение, либо добавить общие модули из этой библиотеки непосредственно в конфигурацию своего прикладного решения. Дополнительно необходимо будет реализовать получение идентификаторов получателей от мобильных устройств и загрузку приватного ключа из файла JSON.

Описание процедур и функций библиотеки.

Выполнение авторизации.

Для выполнения авторизации предназначен общий модуль fcm_АутентификацияGoogleAPIКлиентСервер, который содержит одну экспортную функцию ПолучитьКлючДоступаGoogleAPI.

Синтаксис:

ПолучитьКлючДоступаGoogleAPI(<СекретныйКлюч>, <Разрешения>, <ПутьКOpenSsl>, <СрокДействия>)

Параметры:

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

Разрешения (обязательный) - Строка - требуемые разрешения от сервисов Google. Для отправки push-уведомлений необходимо указать значение https://www.googleapis.com/auth/firebase.messaging. Данное значение можно получить вызвав функцию библиотеки fcm_УведомленияКлиентСервер.РазрешениеFCMОтправкаУведомлений().

ПутьКOpenSSL (обязательный) - Строка - путь к программе OpenSSL для вычисления подписи JSON Web Token.

СрокДействия (необязательный) - Число - срок действия ключа доступа в секундах. Если не указан, то по умолчанию используется максимально возможное значение: 3600 секунд (1 час).

Возвращаемое значение:

Строка - ключ доступа (access token) к сервисам Google, полученный в результате авторизации.

Описание:

Выполняет авторизация на сервере Google и возвращает ключ доступа. В случае возникновения ошибки при авторизации будет вызвано Исключение.

Отправка push-уведомлений.

Для отправки push-уведомлений предназначен общий модуль fcm_УведомленияКлиентСервер. Данный модуль содержит функцию ОтправитьУведомление для отправки уведомлений и ряд служебный функций для формирования объектов уведомления.

ОтправитьУведомление

Синтаксис:

ОтправитьУведомление(<Уведомление>, <ПроектFirebase>, <КлючДоступа>)

Параметры:

Уведомление (обязательный) - Структура - структура, описывающая push-уведомление. Для формирование данной структуры можно использовать вспомогательные функции модуля fcm_УведомленияКлиентСервер (см. ниже).

ПроектFirebase (обязательный) - Строка - идентификатор проекта сервиса  Firebase.

КлючДоступа (обязательный) - Строка - ключ доступа к сервису Firebase Cloud Messaging.

Возвращаемое значение:

Строка - идентификатор Firebase Cloud Messaging отправленного уведомления.

Описание:

Выполняет отправку push-уведомления через Firebase Cloud Messaging. В случае возникновения ошибки при отправке уведомления будет вызвано Исключение.

Вспомогательные функции для создания структуры, описывающей push-уведомление.

СоздатьУведомление - возвращает структуру, описывающую push-уведомление и инициализированную пустыми значениями.

СоздатьОповещение - возвращает структуру, описывающую оповещение (Notification) и инициализированную пустыми значениями.

СоздатьКонфигурациюAndroid - возвращает структуру, описывающую конфигурацию push-уведомление для Android и инициализированную пустыми значениями.

СоздатьОповещениеAndroid - возвращает структуру, описывающую оповещение для Android (AndroidNotification) и инициализированную пустыми значениями.

СоздатьКонфигурациюWebPush - возвращает структуру, описывающую конфигурацию push-уведомление для Webpush protocol и инициализированную пустыми значениями.

СоздатьКонфигурациюAPNS - возвращает структуру, описывающую конфигурацию push-уведомление для Apple Push Notification Service и инициализированную пустыми значениями.

НастройкиСветовогоОповещения - возвращает структуру, описывающую настройки светового оповещения (LightSettings) и инициализированную пустыми значениями.

ЦветRGBA(R, G, B, A) - возвращает структуру, описывающую цвет RGBA:

  • R - Число - красный (red), дробное число от 0 до 1;
  • G - Число - зеленый (green), дробное число от 0 до 1;
  • B - Число - синий (blue), дробное число от 0 до 1;
  • A - Число - значение альфа-канала, определяющее прозрачность (alpha), дробное число от 0 до 1.

Ниже приведён пример отправки такого же push-уведомления, которое было приведено выше с использованием библиотеки.

// Сформируем объект push-уведомления для отправки.
Уведомление = fcm_УведомленияКлиентСервер.СоздатьУведомление();
Уведомление.token = "<Идентификатор_получателя>";

// Установим необходимые данные.
Уведомление.data["task_id"] = "092309280";
Уведомление.data["task_type"] = "check_order";

// Зададим оповещение, отображаемое на экране.
Оповещение = fcm_УведомленияКлиентСервер.СоздатьОповещение();
Оповещение.title = НСтр("ru='Создана новая задача'");
Оповещение.body = НСтр("ru='Проверить сборку ордера на отгрузку 123'");

Уведомление.notification = Оповещение;

// Для Android устройства можем указать дополнительные параметры оповещения,
// например, видимость уведомления.
ОповещениеAndroid = fcm_УведомленияКлиентСервер.СоздатьОповещениеAndroid();
ОповещениеAndroid.notification_priority = fcm_УведомленияКлиентСервер.ПриоритетОповещенияВысокий();
ОповещениеAndroid.visibility = fcm_УведомленияКлиентСервер.ВидимостьУведомленияПриватное();

КонфигурацияAndroid = fcm_УведомленияКлиентСервер.СоздатьКонфигурациюAndroid();
КонфигурацияAndroid.priority = fcm_УведомленияКлиентСервер.ПриоритетAndroidВысокий();
КонфигурацияAndroid.notification = ОповещениеAndroid;

Уведомление.android = КонфигурацияAndroid;

УстановитьПривилегированныйРежим(Истина);
ДанныеКлючаДоступа = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища("GoogleAPI");
УстановитьПривилегированныйРежим(Ложь);

// Проверка сохраненного ключа доступа
КлючДоступаАктален = Тип(ДанныеКлючаДоступа) = Тип("Структура")
	И ТекущаяУниверсальнаяДата() < ДанныеКлючаДоступа.СрокДействия;

Если Не КлючДоступаАктален Тогда
	// Ключ доступа не актуален. Необходимо выполнить авторизацию и сохранить новый ключ доступа.
		
	СрокДействия = 600; // 10 минут
	КлючДоступа = fcm_АутентификацияGoogleAPIКлиентСервер.ПолучитьКлючДоступаGoogleAPI(
		"<Передайте_загруженный_ключ_доступа>",
		fcm_УведомленияКлиентСервер.РазрешениеFCMОтправкаУведомлений(),
		СрокДействия
	);
	
	ДанныеКлючаДоступа = Новый Структура;
	ДанныеКлючаДоступа.Вставить("КлючДоступа", КлючДоступа);
	ДанныеКлючаДоступа.Вставить("СрокДействия", ТекущаяУниверсальнаяДата() + СрокДействия);
	
	УстановитьПривилегированныйРежим(Истина);
	ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище("GoogleAPI", ДанныеКлючаДоступа);
	УстановитьПривилегированныйРежим(Ложь);
	
Иначе
	
	КлючДоступа = ДанныеКлючаДоступа.КлючДоступа;
	
КонецЕсли; 

ИдентификаторУведомления = fcm_УведомленияКлиентСервер.ОтправитьУведомление(
	Уведомление, "<идентификатор_проекта_firebase>", КлючДоступа);

Сообщить(СтрШаблон(НСтр("ru='Уведомление отправлено. Идентификатор: %1'"), ИдентификаторУведомления));

Так же в состав библиотеки входит обработка, демонстрирующая отправку push-уведомлений.

Условия использования библиотеки отправки Push уведомления через Firebase Cloud Messaging.

Исходный код библиотеки отправки Push уведомления через Firebase Cloud Messaging распространяется под лицензий Apache 2.0. Вы можете свободно использовать, изменять и распространять его, в том числе и в коммерческих целях с обязательным указанием авторства. Подробнее см. текст лицензии http://www.apache.org/licenses/LICENSE-2.0

Исходный код также доступен на github: https://github.com/ltfriend/FCMPushFor1C

Работа была протестирована на версии 1С:Предприятия 8.3.18.1363.

Скачать файлы

Наименование Файл Версия Размер
Библиотека отправки Push уведомлений FCM (расширение)

.cfe 21,64Kb
27
.cfe 1.0.1.2 21,64Kb 27 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Steelvan 272 24.03.21 12:14 Сейчас в теме
Как вариант, вместо родного мобильного приложения можно было обойтись родной 1С компонентой для вебгнезд и веб-мордой на html для мобильного обозревателя.
А вообще вариантов и технологий для решения подобных задач достаточно много, да.
2. rozer 299 30.03.21 17:03 Сейчас в теме
интересно а это Push и локальные уведомления еще актуально ? И 1С не переделала свой 1С:Центр уведомлений c GCM на FCM ?
3. Rootking2010 31.03.21 17:34 Сейчас в теме
Спасибо, очень своевременно сделали статью. Никак не получалось с авторизацией на FCM, пришлось переделать через pusher.com, а вот с Вашим расширением всё получилось и убрали не нужное звено.
4. user1098176 08.06.21 14:37 Сейчас в теме
выпадает в ошибку:
"error": {
"code": 403,
"message": "SenderId mismatch",
"status": "PERMISSION_DENIED",
"details": [
{
"@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
"errorCode": "SENDER_ID_MISMATCH"
6. viki_glebova 19.09.21 11:56 Сейчас в теме
(4)Добрый день. У меня тоже такая же ошибка

Ошибка при отправке push-уведомления: SenderId mismatch


Вы разобрались?
7. dimasts 22 11.10.21 20:06 Сейчас в теме
13. dimasts 22 30.06.22 20:56 Сейчас в теме
(4) Получилось разобраться?
5. user642047_ziborov.roman 29.07.21 14:47 Сейчас в теме
Спасибо вам за подробную статью. Нигде не видел столь подробного примера работы с новым протоколом firebase.

С помощью вашего расширения действительно удалось отправить сообщение мобильному приложению 1с. К самому расширению вопросов нет. Всё просто супер.

Но у меня есть трудности. Возможно вы сталкивались с подобными в своей практике. Сейчас буксую на двух вопросах:

1.
Есть ли возможность использовать для ловли push в мобильном приложении 1с метод ДоставляемыеУведомления.ПодключитьОбработчикУведомлений ?

В вашей статье есть упоминание о передаче данных:
"data – произвольные передаваемые данные, которые будут обработаны приложением, получившим push-уведомление"

В расширении вашей статьи не было такого поля (data). Поэтому хотел бы у вас уточнить. На 8.3.18.1208 мне не удалось обработать push внутри мобильного приложения 1с с помощью ДоставляемыеУведомления.ПодключитьОбработчикУведомлений.
https://forum.infostart.ru/forum92/topic229197/

2.
Вторая проблема. Доставляемые уведомления хотя и приходят на устройство, но почему-то не отображаются в консоли Fire Cloud Messaging на вкладке Reports (https://console.firebase.google.com/project/<имя проекта firebase>/notification). Есть предположения, что на этой вкладке отображаются только отправка маркетинговых push, созданных на вкладке Notifications.
Приходилось ли вам видеть сообщения из 1с в этом журнале?
8. dimasts 22 11.10.21 21:34 Сейчас в теме
До конца сентября уведомления приходили, теперь получаю ошибку. КлючДоступа получает без ошибки, но при отправке уведомления приходит ответ:
{
  "error": {
    "code": 403,
    "message": "SenderId mismatch",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
        "errorCode": "SENDER_ID_MISMATCH"
      }
    ]
  }
}
Показать

Куда копать не понимаю
9. dimasts 22 14.10.21 12:43 Сейчас в теме
(8) Попытался перевести описание ошибки. Стало ещё непонятней :)
SENDER_ID_MISMATCH – (Код ошибки HTTP = 403) Идентификатор аутентифицированного отправителя отличается от идентификатора отправителя для токена регистрации.

Жетон регистрации привязан к определенной группе отправителей. Когда клиентское приложение регистрируется в FCM, оно должно указать, каким отправителям разрешено отправлять сообщения. Вы должны использовать один из этих идентификаторов отправителя при отправке сообщений в клиентское приложение. Если вы переключитесь на другого отправителя, существующие регистрационные токены не будут работать.
10. dimasts 22 14.10.21 17:06 Сейчас в теме
(6)
(9) Нашел более адекватное разъяснение: Идентификатор отправителя, прошедшего проверку подлинности, отличается от идентификатора отправителя для токена регистрации. Обычно это означает, что отправитель и целевой регистрационный токен не находятся в одном проекте Firebase.
11. dimasts 22 14.10.21 19:35 Сейчас в теме
Этот метод больше не будет работать в Мобильной платформе 1С, так она генерирует неадекватные токены с помощью ИдентификаторПодписчикаДоставляемыхУведомлений.ИдентификаторУстройства.

Проверил несколько разных токенов, С помощью Try this API в справке метода send в котором все авторизационные данные заполняются автоматически и надо ввести только token и data
Ответ прежний:
{
  "error": {
    "code": 403,
    "message": "SenderId mismatch",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
        "errorCode": "SENDER_ID_MISMATCH"
      }
    ]
  }
}
Показать
12. dimasts 22 19.10.21 23:20 Сейчас в теме
(11)Может я чего-то не знаю и этот SENDER_ID надо где-то регистрировать???
14. dimasts 22 30.06.22 21:00 Сейчас в теме
16. onec.developer 176 07.10.22 11:35 Сейчас в теме
(14)Получилось разобраться?
15. pitnn 08.07.22 13:08 Сейчас в теме
Спасибо за статью, код работает, push отправляется (тестировал на 8.3.20.1674).
Но отправляется только если приложение "сидит" в памяти. Если приложение выгружено, то push не приходит, хотя сервер возвращает, что операция выполнена.
В чем может быть дело и как отправлять push, есть приложение не загружено в память?
Оставьте свое сообщение

См. также

Получение/отправка сообщений RabbitMQ через REST API

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Простой пример получения и отправки сообщений в брокер сообщений RabbitMQ через REST API из 1С без сторонних компонент и middleware.

1 стартмани

23.09.2022    6196    17    NikeeNik    16    

44

#KafkaЭтоПросто: Kafka Adapter 1С (Confluent) - отправляем сообщения

Инструментарий разработчика Внешние источники данных WEB-интеграция Платформа 1С v8.3 Абонемент ($m)

Сегодня поднимем в docker kafka с confluent'om, а в 1С, в EDT загрузим проект из репозитория, создадим обработку, в которой несколькими строчками отправим сообщение в kafka через rest proxy и в confluent control center посмотрим на него. Если коротко, то: как отправить сообщение в Kafka несколькими строчками кода без компонент, регистраций и смс.

5 стартмани

24.07.2022    7949    21    huxuxuya    29    

75

Распознавание текста из изображений и PDF с помощью нейросетей Yandex Vision и 1С

Обработка документов WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Если вам нужно с помощью компьютерного зрения от Yandex быстро распознавать текст из документов и изображений, эта статья для вас!

5 стартмани

13.07.2022    7691    9    kiv1c    5    

35

Api идеи для начинающих

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Данная обработка подойдет тем, кто только начинает знакомиться с механизмами api в 1С. В обработке представлены взаимодействия с 12 простыми сайтами на примерах. Решения не затрагивают полной документации, а носят лишь ознакомительный характер. Делал на платформе 8.3.20.

1 стартмани

16.06.2022    8714    25    user676027_svikator    5    

70

Заполнение контрагентов по ИНН для УТ 10.3

Обработка справочников WEB-интеграция Платформа 1С v8.3 1С:Управление торговлей 10 Россия Абонемент ($m)

Заполнение контрагентов по ИНН (1С: Управление торговлей 10.3).

6 стартмани

17.05.2022    5810    35    kostyan7    20    

1

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Делаем табло в обозревателе из 1Ски с нуля за полчаса. Без бутстрапов, реактов и ангуляров. Жизнетрюки от kuzkov.info

Разработка внешних компонент WEB-интеграция Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

02.05.2022    8078    124    Steelvan    0    

66

Обмен данными с Web-сервисами

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка предназначена для быстрой настройки обмена данными с Web-сервисами из пользовательского интерфейса.

10 стартмани

29.04.2022    5934    33    ns_bulatov    4    

37

Сервис push-уведомлений для 1С (Push Notification Service For 1C - PNS4OneS)

WEB-интеграция Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

02.02.2022    12192    38    ltfriend    9    

87

Создание интерактивных обучающих курсов с помощью Vanessa Interactive

Инструментарий разработчика WEB-интеграция Идеи и тренды в разработке Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Приветствую Вас, коллеги. Сегодня Вам предлагается рассмотреть технологию создания интерактивных обучающих курсов, системы Onboarding, интерактивной справки для любых конфигураций разработанных на базе платформы 1С при работе в web клиенте. Прошу посмотреть ролик, кому неинтересно, как это работает, можно дальше не читать. Тестировалось на 1С:Предприятие 8.3 (8.3.20.1646).

1 стартмани

02.02.2022    6514    1    Viktor_Ermakov    2    

34

Распознавание и загрузка документов в 1С Промо

Универсальная программа-обработка для распознавания любых сканов или фото первичных документов в 1С (счета-фактуры, УПД, ТТН, акты и тд). Точность распознания до 98%.

от 11 рублей

Создание простых сайтов на основе http сервисов - tips and tricks

WEB-интеграция Платформа 1С v8.3 Абонемент ($m)

Универсальный метод, html шаблоны, страницы с авторизацией и без, многоязычность, страница авторизации, etc.

1 стартмани

22.01.2022    8511    11    vl-sher1    29    

38

1Scan. Интеграция веб-клиента 1С с устройством Android (смартфон, планшет, ТСД)

Мобильная разработка WEB-интеграция Платформа 1С v8.3 Абонемент ($m)

Получение из Android устройства данных сканера штрихода, камеры, GPS, широковещательных сообщений и передача в код модуля формы 1С для дальнейшей обработки.

1 стартмани

15.11.2021    9250    37    kild    33    

29

Расширение конфигурации для Web-доступа к 1С (1С в роли back-end)

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Для реализации того, чтобы 1С формировала и отдавала страницу, которую можно было бы открыть через браузер было написано расширение, которое позволяет публиковать из 1С произвольные ресурсы, будь то API, сайт или изображения / прочие файлы.

1 стартмани

01.04.2021    17634    20    SaschaG    4    

64

Работа с картами в 1С на примере бесплатной библиотеки Leaflet

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.

1 стартмани

31.03.2021    23434    70    Parsec1C    20    

80

BIM: взаимодействие с платформой Autodesk Forge

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Строительство Абонемент ($m)

Предлагаемый пример демонстрирует широкие возможности для взаимодействия «1С:Предприятие» с платформой Autodesk Forge и позволяет вам получить базовые представления о применения технологий информационного моделирования в строительстве. Поддерживаются все версии платформы от 8.3.12 и выше до 8.3.18.

1 стартмани

25.11.2020    78162    16    kandr    3    

6

1СПАРК РИСКИ. Сервис оценки благонадежности контрагентов. Промо

СПАРК помогает предотвратить мошенничество со стороны компаний и предпринимателей, благодаря актуальным сведениям о компаниях и системе выявления факторов риска.Сервис позволяет управлять налоговыми рисками и комплексно оценивать благонадежность контрагентов.

Генератор маршрута по "документам отгрузки" в Google.Maps

Оптовая торговля Розничная торговля WEB-интеграция Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Данная обработка будет полезна для построения маршрута по документам реализаций за выбранный период.

7 стартмани

08.11.2020    18171    18    quazare    22    

41

1С + react native

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пример реализации клиента для 1С на react native.

1 стартмани

09.10.2020    17100    12    van_za    9    

34

Учимся создавать http сервис (часть третья). Передача нескольких параметров в http сервис

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пошаговое руководство по созданию http сервиса (часть третья). Передача нескольких параметров в http сервис, a также формирование сложных JSON строк.

1 стартмани

02.10.2020    33395    10    hpi    18    

73

Взаимодействие 1С со сторонними продуктами посредством REST и Golang (middleware). Часть 1 - RabbitMQ

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Часто 1С не может взаимодействовать со сторонними продуктами, например для шины предприятия RabbitMQ создают внешние компоненты. В статье предлагается новомодный подход REST API реализованный на приложении прокладке Middleware, язык тоже трендовый Golang. В статье немного познакомлю Вас с языком Golang, опишу интеграцию на стороне 1С (8.3.16.1502). Если статья зайдет, напишу как выгружать журнал регистрации по этой схеме в ElasticSearch

1 стартмани

31.08.2020    19744    19    dmitry-irk38    15    

38

Видеокурс-практикум: как подготовить и написать ТЗ, ЗНР, ЧТЗ. Промо

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

3 500 рублей

Конвертация любых адресов, написанных в свободной форме, к ФИАС

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Допустим у нас есть база с адресами клиентов, и написаны они могут быть как душе угодно. С опечатками, без индексов, без разделителей, в совершенно любом формате. Вот было бы здорово иметь функцию, которая одним нажатием кнопки преобразует любую белиберду к строгому представлению адреса по ФИАС? Восстановит индекс, исправит опечатки и вернёт на 100% валидный адрес. Для всех, кто мечтательно сказал "ДА!", выкладываю данную обработку.

2 стартмани

30.06.2020    17573    141    XilDen    19    

28

HTTP сервисы по OpenAPI спецификациям

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Начинаем путь разработки HTTP сервисов с создания спецификаций OpenAPI. Автодокументация сервисов формата Swagger UI без зависимостей. Настройка сервисов в режиме предприятия.

1 стартмани

29.06.2020    25293    30    shmalevoz    24    

89

Конструктор HTTP-соединений в 1С (обычные и управляемые формы)

WEB-интеграция Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Иногда возникают мысли о том, чтобы прикрутить сервисы, связанные с HTTP-соединениями, в 1С. Необходимо писать обработку и анализировать результат.

1 стартмани

02.06.2020    14050    40    Denr83    0    

36

Модуль обмена с QIWI

Банковские операции WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Абонемент ($m)

Компании, которые используют систему моментальных платежей QIWI, ценят ее за удобство по скорости выплат и для платежей по запросу. Но такие переводы сложны для учета, а при большом объеме проводимых операций отнимают много времени и превращаются в дополнительную головную боль. Мы сотрудничали с компаниями, которые отправляют большое количество платеже на QIWI, и часто слышали боль бухгалтеров о том, как им сложно работать с такими переводами. Поэтому мы автоматизировали выплаты через QIWI в 1С и создали модуль интеграции 1С c API QIWI Wallet и QIWI TopUp.

5 стартмани

25.05.2020    15613    3    Neti    10    

16

oData – HTTP-сервис для ленивых.

WEB-интеграция Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Абонемент ($m)

oData одним из последних появился в инструментах интеграции поддерживаемых платформой 1С. В данной статье хотел бы показать пример его использования. О преимуществах и недостатках oData предлагаю поделиться в комментариях исходя из реального опыта использования. Цель публикации. Дать разработчикам простой инструментарий обмена между идентичными конфигурациями.

1 стартмани

10.05.2020    20441    37    Forest83    2    

58

Работа с 1С:Аналитика Промо

Онлайн-курс предусматривает изучение возможностей системы “1С:Аналитика”, которая работает как составная часть платформы “1С:Предприятие” и обеспечивает оперативный просмотр и анализ необходимых данных.

4500 рублей

DaJet QL - расширяемый язык запросов

WEB-интеграция Платформа 1С v8.3 Абонемент ($m)

DaJet QL поддерживает практический полный синтаксис SQL Server 2005-2016. Кроме этого это расширяемый язык запросов. Обращение к объектам СУБД выполняется в терминах метаданных 1С. Доступ к возможностям этого языка запросов реализован в виде web api сервиса. Результаты запросов возвращаются в виде JSON.

1 стартмани

20.04.2020    19693    12    zhichkin    19    

42

Пример работы с Trello из 1С

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Россия Управленческий учет Абонемент ($m)

Небольшая конфигурация содержит примеры обмена с онлайн-сервисом Trello.

1 стартмани

15.02.2020    25775    62    terrorion    18    

59

"Учет штрафов ГИБДД" с возможной загрузкой из открытых источников в интернет Расширение конфигурации 1С: Предприятие 8.3

Обработка документов WEB-интеграция Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Бухгалтерский учет Управленческий учет Абонемент ($m)

Расширение конфигурации Бухгалтерия предприятия, редакция 3.0 (при минимальных изменениях любой типовой конфигурации), позволяющее вести историю данных по штрафам ГИБДД для справочника транспортных средств компании. Бонусом поставляется внешняя обработка, способная загружать эти данные из открытых источников в интернет.

4 стартмани

30.12.2019    30471    43    capitan    30    

1

Односторонний файловый обмен с сайтом по ftp (1C 2 Web)

Файловый обмен (TXT, XML, DBF), FTP WEB-интеграция Платформа 1С v8.3 1С:Розница 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

09.12.2019    21549    25    LamerSoft    0    

19

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Google drive - менеджер файлов

WEB-интеграция Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Синхронизация с гугл диском легко и просто!

10 стартмани

05.12.2019    33093    49    zykov_vitaliy    28    

45

Автозаполнение адреса по КЛАДР в УПП при выгрузке контрагента с портала компании (API dadata)

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Заведение, согласование контрагентов организовано на портале компании. Далее по web-сервису контрагенты выгружаются в УПП (юр.адрес и факт.адрес выгружаются строкой). Задача автоматизировать заполнение адреса в УПП по КЛАДР.

1 стартмани

03.12.2019    16014    3    John_d    10    

27

Яндекс сервисы [Расширение]

Универсальные обработки WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Расширение для работы с Яндекс-сервисами (предиктор,переводчик,проверка орфографии)

1 стартмани

24.10.2019    21996    13    noprogrammer    12    

42

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Выгрузка номенклатуры в социальную сеть Вконтакте

WEB-интеграция Оптовая торговля Розничная торговля Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для быстрой и легкой выгрузки товаров Вконтакт. Так просто еще не было)))

2 стартмани

14.08.2019    32849    73    kaliuzhnyi    48    

44

Подключение к сайту и отправка или получение данных по API (POST, GET...) (с описанием кода)

WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Простая обработка по отправке или получение данных с любого сервера главное знать ресурс (выполняемую функцию) и тело запроса.

1 стартмани

12.08.2019    43579    92    MaxPowerr    7    

38

Конфигурация для обмена данными (интеграционная шина)

Внешние источники данных WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

4 стартмани

08.07.2019    29554    46    miha-28    17    

41

Почта России - отправка и отслеживание, интеграция с Документооборот 8; УНФ

Документооборот и делопроизводство (СЭД) WEB-интеграция Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Документооборот Россия Управленческий учет Абонемент ($m)

Выгрузка почтовых отравлений в личный кабинет отправки Почты России; отслеживание почтовых отправлений через Почту России; расширение для интеграции Документооборот 8, УНФ с Почтой России

10 стартмани

04.06.2019    27198    171    wtlz    96    

29