Для удобства взаимодействия с большим число разрозненных офисов и сотрудников решил попробовать найти подходящий чат, для себя ставил ряд думаю очевидных критериев: бесплатный, свой сервер, api для управления, функциональность (вложения, оформления и т.д.), симпатичный, кроссплатформенный. Выбор остановил на этом, как удовлетворяющий всем им. Из недостатков: есть Enterprise Edition которая богаче функциональнее именно в административном плане, но стоит при этом резко больше бесплатной. И так:
Mattermost
Это корпоративный чат позиционирующий себя как альтернатива известному Slack. Интерфейс построен по принципу каналов, разделенных на виды:
- Публичный - доступен всем желающим
- Приватный - каналы по приглашению
- Личный - тет-а-тет переписка (можно небольшой группой)
Чат имеет обширную api и описание к нему, через которые я смог реализовать все необходимое мне в 1С. А так же поддерживает плагины, но лично я не нашел необходимые/подходящее мне. Функционал плагинов ещё в стадии беты, поэтому нужно посмотреть что будет дальше. Отдельно хочу отметить штатную функцию "Ответить" создающую как бы под ветку канала, объединяя все сообщения в одну линию - удобно.
Поддерживаются все популярные платформы:
Установку сервера производил по инструкции из документации. Работа в линуксе мне не привычна, погуглив всякое смог установить и настроить и https. В первый раз ставил через докер (изучение заняло пару дней), но потом пришел к мнению что лучше ставить напрямую (поставил за час используя багаж знаний с первой попытки), так как это и так выделенный сервер (для справки: 2 гб, 2 ядра).
1C MattermostService
Для управления чатом написал отдельную конфигурацию. В своей разработке, я всегда стараюсь выносить дополнительный функционал отдельно от рабочей базы. Выстраивая процесс обмена так: Рабочая база (изолирована из вне) сама инициализирует обмен с нужной сервисной базой выгружая и получая данные. Это позволяет обезопасить рабочую базу, и оставляет мне контроль над сервисными функциями. Конфигурация имеет только блок управления сервером Mattermost, механизмы обмена с рабочей базы вынесены в расширение и не представлены в публикации (так как имеют узкоспециальное назначение под клиента в специально разработанной под него конфигурации).
Механика управления следующая: После установки сервера Mattermost в нём создается специальный пользователь-аля бот. Его данные прописываются в параметрах сервера, и все дальнейшие действия выполняются от его имени. Конфигурация позволяет:
- Управлять командами и каналами: создавать, обновлять и получать данные с сервера.
- Управлять пользователями: создавать и удалять пользователей, регистрировать в командах и каналах.
- Настраивать вебхук на канал для блокировки сообщений в нем.
По поводу вебхука: Я его использую для "ленты новостей" - т.е. публичный канал, в который по умолчанию подключаются все пользователи. Так как функции администрирования в Mattermost доступны только в платной редакции, я реализовал это через 1С. Когда пользователь пишет сообщение в этот чат, вызывается исходящий вебхук к серверу 1С, который проверяет, может ли пользователь сообщения писать в нем. Если нет, то посылает команду на удаление этого сообщения. В идеале, хотелось бы ещё добавить уведомление в приват для этого пользователя, что туда писать нельзя, поэтому сообщение удалено. Думаю в будущем добавлю.
Работает на 1С:Предприятие 8.3 (8.3.13.1513)
Mattermost Версия: 5.10.0 Версия Схемы Базы Данных: 5.10.0 База данных: postgres
П.С.
Конфигурация распространяется "как есть" работает у меня ) Вы можете пилить под себя как хочется. Из опыта могу сказать, что пытался встроить чат прям в обычную форму через ПолеHTMLДокумента, переводя (через реестр) на использование в 1С IE11. Чат работал, но утекала память. На новой версии платформы с встроенным "webkit`ом" у меня не заработало. Поэтому пришлось от этой идеи отказаться.
У меня маленький опыт работы в управляемых формах и организации поэтапных вызовов (клиент-сервер-фоновые задания) поэтому если я что-то сделал не правильно - буду рад совету "как правильно".
В конфигурации содержится КонсольЗаданий за авторством (c) Душелов'2009 - спасибо ему за разработку.