24 апреля, 2024

Пример использования PUSH-сообщений

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

Для работы системы со стороны 1С понадобится процедура отправки POST-запроса на сервер сообщений, пример кода есть в этой заметке, а также HTTP-сервис, который примет и обработает ответ от мобильного устройства. Кроме этого в базе 1С необходимы несколько вспомогательных «хранилищ»: нужно сохранять токены идентификации устройств — они генерируются на устройстве и, в принципе, изменяются редко, но теоретически могут измениться, по этому стоит продумать регулярную отправку токенов с устройства в базу; ещё одно хранилище для отслеживания состояния запроса — после отправки сообщения нужно ждать появления ответа с устройства и при получении ответа нужно понять, к какому объекту он относится.

Итак, теперь пошагово, как работает всё вместе:

  • На форме документа бухгалтер нажимает кнопку «Запрос подтверждения»: формируется набор данных для запроса, в который входит токен получателя, идентификатор документа из которого отправляется запрос, текст сообщения, которое будет показано на устройстве; при отправке запроса идентификатор документа записывается в регистр для отслеживания статуса; в форме запускается процедура проверки статуса с интервалом в несколько секунд (ПодключитьОбработчикОжидания).

Пример формирования сообщения. Здесь основная структура данных это ПараметрыСообщения, в ней поле «to» — токен получателя, «data» — данные самого сообщения — заголовок, тело и произвольные поля, которые можно добавить на своё усмотрение, тут добавлено поле с идентификатором документа «document_guid». Чтобы на устройстве появилось уведомление в строке состояния нужно вставить поле «notification», которое также содержит заголовок, тело и данные — это в структуре ПараметрыУведомления. Если приложение на мобильном устройстве запущено, будут обработаны данные из структуры ПараметрыСообщения, если приложение не запущено или «не в фокусе», появится уведомление и приложению будут переданы данные из ПараметрыУведомления. Чтобы упростить обработку, в оба набора данных вставлено одинаковое по содержанию поле «data».

ТелоСообщения = Новый Структура;
ТелоСообщения.Вставить("title", ДанныеСообщения.Заголовок);
ТелоСообщения.Вставить("body", ДанныеСообщения.Сообщение);
ТелоСообщения.Вставить("document_guid", ДанныеСообщения.Идентификатор);
	
ПараметрыУведомления = Новый Структура;
ПараметрыУведомления.Вставить("title", ДанныеСообщения.Заголовок);
ПараметрыУведомления.Вставить("body", ДанныеСообщения.Сообщение);
ПараметрыУведомления.Вставить("data", ТелоСообщения);
	
ПараметрыСообщения = Новый Структура;
ПараметрыСообщения.Вставить("to", ТокенПолучателя);
ПараметрыСообщения.Вставить("data", ТелоСообщения);
ПараметрыСообщения.Вставить("notification", ПараметрыУведомления);
  • Формируется и отправляется запрос на сервер сообщений, от сервера должен прийти ответ — строка в JSON формате, если отправка успешна, в поле «success» будет число 1. Пример разбора ответа:
Успех = 0;
ТекстОтветСервера = Ответ.ПолучитьТелоКакСтроку();
ЧтениеДанных = Новый ЧтениеJSON;
ЧтениеДанных.УстановитьСтроку(ТекстОтветСервера);
СтруктураОтвет  = ПрочитатьJSON(ЧтениеДанных);
ЧтениеДанных.Закрыть();
СтруктураОтвет.Свойство("success", Успех);
Если Успех = 1 Тогда
     //отправка прошла успешно
КонецЕсли;
  • После этого на устройстве должно сработать отображение сообщения и отправка назад ответа пользователя, в этом примере это Да или Нет; в исходном сообщении передавался идентификатор документа, теперь он будет передан назад вместе с кодом ответа; 1С должна принять этот ответ и записать изменение статуса в регистр, за которым следит документ.
  • Как только документ считывает изменение в регистре, обработка ожидания отключается, а результат отображается на форме.

Описание протокола для отправки сообщений через Firebase Cloud Messaging.