Интеграция с корпоративным чатом на matrix.org

24.12.18

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

Интеграция с очередным мессенджером. Описание основных функций, примеры использования. Тестировалось на УТ релиз 11.4.6.174 от 17.12.18. Платформе релиз 8.3.13.1644 от 28.11.18.

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

Наименование Файл Версия Размер
Расширение для интеграции с корпоративным чатом matrix посредством их родного API:
.cfe 19,89Kb
8
.cfe 19,89Kb 8 Скачать

Как только в 2017ом заговорили про блокировку Telegram, наше руководство начало беспокоиться, где мы будем в дальнейшем общаться. Выбор почему-то пал на matrix.org. Переезд давался сложно, мы сопротивлялись как могли, но нашлись и положительные стороны данной штуки. Я упомяну плюсы списочно, а потом расскажу какие мастхэв можно делать прямо из 1С и что можно предложить бизнесу реализовать на базе вот таких мессенджеров.

Сначала минусы:

1) свободное распространение. как следствие - разбирайся с документацией сам. Если найдешь вообще. А ещё она не актуальна. Точнее вот тут актуальна, а здесь актуальна только на половину. А тут мы пирожки пекли. а здесь рыбу заворачивали.

2) дизайн. 

3) не всегда сообщит тебе о входящем сообщении, звонке. А если сообщит то не всегда у тебя получится его принять. А если получится и ты в блютуз наушниках - ты ещё хлопот получишь. В общем работает, но не стабильно.

Теперь плюсы:

1) Бесплатно, ну или почти. 

Мы все не любим платить, так что если не считать стоимости серверов, времени админа и нашей собственной боли он интерфейса данного приложения - оно бесплатно. Вы можете абсолютно свободно скачать ПО с сайта https://matrix.org/ установить к себе на сервера и развернуть у себя базу. Пару взмахов бубном, две сотни кругов вокруг gitHub елки - и оно ваше.

2) Кажется, это называлось кроссплатформенность. 

Я не могу сказать в адрес их интерфейса много положительных моментов, но у них есть:

 - доступ через веб интерфейс в любом браузере 

- доступ через Андроид приложение

- доступ c iOS

-  и ещё много всего, чем мне не удалось воспользоваться, но это описано тут

3) Понятный интерфейс.

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

4) Защищенные чаты.

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

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

Включается шифрование на чате в настройках комнаты.

5) можно звонить

и даже видео звонки есть, но без многопользовательских видеоконференций. И даже те есть в альфа тестировании вроде, но я не пользовалась.

6) У них есть Api с документацией.

Ну как документацией.. Явно немного устаревшая, но если покопаться то разобраться с ней можно. Запросы, JSON, и спасибо им за это :)

Identity Service API

Application Service API 

Federation API   

И собственно то Api, которым вам потребуется использовать, если вы решите обращаться к вашему серверу из 1С: Client-Server API

 

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

ОбщийМодуль.Matrix_Интеграция - содержит запросы к API, которые я описываю в данной статье.

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

Обработка.ШаблоныИспользования предназначена для демонстрации военной мощи использования функций общего модуля.

По коду встречается строка "<YourServerName>" перед тестированием рекомендую заменить её на имя вашего сервера, иначе чуда не произойдет.

Реализованные функции:

Формат ИДПользователя     "@<Login>:<RegServer>"  - пользователь зарегистрированный на общем сервере будет выглядеть примерно как  @cheeky_monkey:matrix.org, всегда можно посмотреть в профиле.

Формат ИДКомнаты             "!<КодКомнаты>:<YourServerName>"  - например !21d41d8cd:matrix.org , всегда можно посмотреть в адресной строке в открытом окне чата из браузера, или в настройках чата, если вы работаете из мобильного приложения.

 

Функции:

СоздатьПользователя - на вход получает строку с логином будущего пользователя, убирает из него все непотребные знаки, переводит на латиницу, выставляет в нижний регистр и создает пользователя на сервере чата. На выход отдает структуру с булево success и текстом ошибки(в случае неудачи) или логином и паролем, в случае успеха. Демонстрация функции есть в обработке ШаблоныИспользования.

СоздатьКомнату(ИмяКомнаты,ТемаЧатика,Токен, МассивПользователей,ДоступККомнате = "private")

Токен - ваш токен, вы автоматически назначаетесь администратором.

Имя комнаты - которое будут видеть все.

ТемаЧатика -подпись мелким шрифтом под темой чата.

Массив пользователей - массив тех, кого необходимо добавить сразу в момент создания чата. в массив добавляем строки с ИДПользователя. Автора чата указывать не нужно - он добавится автоматом. Массив может быть пустым.

АвторизоватьсяНаСервере - на вход ждет структуру содержащую свойства Login и Pass. У меня есть справочник с такими реквизитами - я просто кидаю на вход ссылку на элемент справочника. На выход процедура возвращает вам Токен. Если чуда не произошло - пришлет пустую строку.

ПолучитьУчастниковКомнаты(ИДКомнаты,Токен) - если вы пригласили пользователя в комнату, а он еще не принял приглашение - он ещё не участник. Возвращает массив ИДПользователей

ПрисоединитьсяКГруппе(ИДКомнаты,Токен) - если вам пришло приглашение в группу, вы можете его принять и присоединиться к группе. 

ПолучитьСообщенияИзЧата(ИДКомнаты,Токен,КоличествоСообщений=0,filter = "") - получает ограниченное количество последних сообщений чата. Если не укажете сколько должен получить - я по умолчанию задаю 1000. Фильтр - ограничивает типы сообщений. В документации достаточно многословно про это написано. Я ограничилась только одним типом m.room.message, именно он будет по умолчанию, если вы пришлете в этот параметр пустую строку. Возвращает структуру и тут надо рассказать чуть подробнее.

Структура имеет вид:

{
  "start": "t47429-4392820_219380_26003_2265", //внутренняя отметка времени крайнего сообщения из выбранных по всей видимости. 
  "end": "t47409-4357353_219380_26003_2265",
  "chunk": [                                   //массив сообщений
    {
      "origin_server_ts": 1444812213737,       //отметка времени, в юникс формате? можно рассчитать когда отправлено
      "sender": "@alice:example.com",
      "event_id": "$1444812213350496Caaaa:example.com", //UID сообщения. с его помощью можно отвечать на сообщения, удалять их, редактировать.
      "content": {
        "body": "hello world",
        "msgtype": "m.text"
      },
      "room_id": "!Xq3620DUiqCaoxq:example.com",
      "type": "m.room.message",                 //наш отфильтрованный тип сообщений. Если не фильтровать - здесь может быть звонок, смена названия комнаты, добавление пользователей и многое другое.
      "age": 1042                               //ещё одна отметка времени, по всей видимости отображает как давно оно отправлено
    }
  ]
}

 

ПолучитьСобытия(Токен, since = "", filter="") - возвращает вам все доступные для вас события. Здесь будут сообщения в чатах, звонки, и абсолютно всё, что вы можете увидеть, использовать и имеете доступ.

Вот здесь вам точно пригодятся фильтры и понимание как работает тот самый внутренний формат времени. При стартовом вызове этой процедуры я рекомендую прислать вам пустую строку в поле since - пользователю вернётся всё, что происходило на сервере, и текущая отметка времени(next_batch) - её необходимо сохранить в настройках пользователя, чтобы в следующий раз запросить дельту, а не всё события с начала времен.

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

ТСтрукт = Новый структура();   
ТСтрукт.Вставить("room",Новый структура());
	ТСтрукт.room.Вставить("timeline",Новый структура());
		
        ТМассив = Новый массив();
        ТМассив.Добавить("m.room.message");
        ТСтрукт.room.timeline.Вставить("types",ТМассив);
		
    ТСтрукт.room.Вставить("state",Новый структура());
		
        ТМассив = Новый массив();
	    ТМассив.Добавить("m.room.member");
        ТСтрукт.room.state.Вставить("types",ТМассив);
		
    ТСтрукт.room.Вставить("ephemeral",Новый структура());
		
        ТМассив = Новый массив();
	    ТМассив.Добавить("m.*");
        ТСтрукт.room.ephemeral.Вставить("not_types",ТМассив);
		
    ТСтрукт.room.Вставить("account_data",Новый структура());
		
        ТМассив = Новый массив();
	    ТМассив.Добавить("*");
	    //ТМассив.Добавить("m.fully_read");           //на него почему то не срабатывает!!!
    ТСтрукт.room.account_data.Вставить("not_types",ТМассив);   
	
ТМассив = Новый массив();
ТМассив.Добавить("type");
ТМассив.Добавить("content");
ТМассив.Добавить("sender");
ТСтрукт.Вставить("event_fields",ТМассив);
	
ЗаписьJSON=Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON,ТСтрукт);
filter=ЗаписьJSON.Закрыть(); 

Вот здесь достаточно полно описано построение фильтра

А вот тут актуальный вид документации по фильтрам для функции синхронизации

 

Процедуры:

УстановитьИмяПользователю(ИДПользователя, Имя, Токен) - устанавливает пользователю удобочитаемое имя. Логин у вас user1, а все будут видеть, что общаются с Сергеем Геннадьевичем. Демонстрация функции есть в обработке ШаблоныИспользования.

Токен - пользователя, которому планируем изменить представление. 

ДобавитьПользователяВЧат(ИДКомнаты, Токен, ИДПользователя) - высылает приглашение пользователю на добавление в чат.

Токен - токен администратора чата.

ИДПользователя - тот кого мы хотели бы добавить. 

УдалитьПользователяИзЧата(ИДКомнаты,Токен,ИДПользователя,Причина="")

ОтправитьСообщениеВЧат(ИДКомнаты,Токен,ТекстСообщения) - матрикс позволяет отправлять не только текстовые сообщения, но и видео, аудио. но я привожу функцию отправки только текста.

 

Зачем интеграция с 1С?

Потому что могу. А если серьёзно, то есть несколько полезных кейсов:

1) проходит регламент и он отрабатывает с ошибкой. Как часто в течение дня я загляну в статус регламентных заданий? ну хорошо если пару раз за день, а так робот сам мне напишет в чатик, что что-то пошло не так. 

2) а пусть пользователей известит, что кто-то внес правки в документ из закрытого периода и всем расскажет, кто виновник торжества. 

3) у нас есть несколько событий в 1С и на различных других внешних системах обработки данных, которые надо контролировать. Например потерялся в пути заказ. Или заказ не можем вручить уже неделю. Писать ответственным на почту - вероятность прочтения близка к нулю, в этой почте у них и без того свалка. А вот чат они на удивление быстро обрабатывают. 

4) интеграция с маркетплейс. Видели как у приложений доставки есть окошко общения с оператором? мы реализовали его через matrix+маркетплейс+1С+наши операторы call-центра.

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

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

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15751    10    17    

11

Интеграция 1С — Битрикс24. Обмен задачами

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

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17559    6    15    

13

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16365    42    49    

23

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25746    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88593    160    215    

318
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. alk20 7 01.11.23 21:08 Сейчас в теме
Подскажите получилось ли у вас считывать зашифрованные сообщения из комнаты?
Оставьте свое сообщение