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

от автора

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

Бухгалтер закрывает квартал. При проведении документа 1С выдает ошибку — набор терминов платформы, непонятно даже, что вбить в поиск. Бухгалтер сворачивает 1С и открывает мессенджер: там сохранился чат с поддержкой еще с прошлого раза. Отправляет скриншот. Ждет.

Взгляд падает на десяток вкладок с недоделанной отчетностью. Работа встала, пока проблему не решат.

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

Меня зовут Павел Ванин, и я разработчик, который это делал. Несмотря на то, что в платформе есть Система взаимодействия со встроенным чатом, готового способа связи между разными компаниями нет. Дальше расскажу, как мы с командой это обошли.

Фундамент решения: Система взаимодействия

Систему взаимодействия фирма «1С» анонсировала в декабре 2016 года в своем технологическом блоге «Заметки из Зазеркалья», и о ней есть подробная статья от самой фирмы прямо здесь, на Хабре. В чем суть:

Система взаимодействия — это встроенный в платформу 1С механизм обмена сообщениями, файлами и видеозвонками между пользователями. Клиентская часть встроена прямо в платформу 1С:Предприятие. Серверная часть — либо развернута локально через 1С:Сервер взаимодействия, либо в облаке через сервис «1С:Диалог» (1cdialog.com).

В Системе взаимодействия есть термин «абонент» — это владелец одной или нескольких информационных баз, привязанных к его email. Между базами одного абонента сообщения ходят напрямую через штатный механизм. А вот между базами разных абонентов система ничего не передает. 

Это ограничение нам и пришлось обходить.

Почему решили создать дополнительный канал поддержки

Блокировки мессенджеров. Исторически мы общались с заказчиками через мессенджеры и звонки. Идея перенести поддержку внутрь в 1С появилась еще в 2022 году. Я собрал первый MVP и рассказал о нем на конференции Infostart Event. Дальше проект отложили: появились другие дела, острой необходимости развивать его не было. 

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

Утечки данных. Есть и другая причина — она больше касается заказчиков, чем нас. Когда сотрудник клиента пишет в поддержку через личный Telegram или WhatsApp, все общение остается в его аккаунте. Если сотрудник увольняется, переписка уходит вместе с ним, а там могли храниться детали учетных проблем, внутренние процессы и чувствительные данные. 

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

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

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

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

Архитектура: «Два абонента, один вебхук»

Система взаимодействия построена на WebSocket. По умолчанию WebSocket-соединение связывает клиентское приложение с сервером взаимодействия, и через него сообщения доставляются между пользователями одной информационной базы. Между разными базами одного абонента обмен идет так же, если включено совместное использование приложений — тогда несколько баз объединяются в общий контур. А между базами разных абонентов канала нет: платформа не дает им обмениваться напрямую.

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

Архитектура решения построена на штатных механизмах обмена сообщениями и вебхуках

Архитектура решения построена на штатных механизмах обмена сообщениями и вебхуках

Мы используем штатную структуру JSON-сообщения системы взаимодействия и в поле data передаем собственную полезную нагрузку:

  • идентификатор клиентской базы, 

  • идентификатор обсуждения, 

  • идентификатор пользователя, 

  • тип сообщения,

  • содержимое сообщения.

Стандартное тело запроса в вебхуке, который создает новое сообщения в обсуждении

Стандартное тело запроса в вебхуке, который создает новое сообщения в обсуждении
Пример заполнения полей сообщения системы взаимодействия при отправке обычного текстового сообщения

Пример заполнения полей сообщения системы взаимодействия при отправке обычного текстового сообщения

Как это работает:

1. Клиент устанавливает расширение и подтверждает подключение к линии поддержки.

2. При первом подключении в его базе создается вебхук-интеграция и обсуждение.

3. В нашу базу прилетает JSON с данными о клиентской базе, точке входа и идентификаторе обсуждения.

4. Когда консультант отвечает на обращение, ответ пакуется в JSON и уходит обратно.

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

Три ограничения — и как их обошли

Для некоторых рабочих сценариев готовых решений не оказалось: отправка больших изображений, видеозвонок между разными абонентами, скрытая переписка консультантов. Чтобы реализовать в расширении привычный для мессенджеров функционал, пришлось искать обходные пути.

Как передавать большие изображения

В первом MVP 2022 года для отправки картинок я поднимал отдельный HTTP-сервис — костыль, написанный до того, как платформа получила нативную поддержку файлов в интеграциях. Когда вышла 8.3.23 с этой поддержкой, я отказался от своего сервиса и перевел решение на штатный механизм.

Вот только картинки передавались не всегда. Маленькие доставлялись нормально. Крупные — обрывались на середине, без внятной ошибки, без исключения, за которое можно зацепиться в логе. Я довольно долго не мог понять, в чем дело. Грешил на код, перепроверял сериализацию, смотрел на сетевые запросы. Оказалось, дело не в коде вообще, а в ограничении на размер вложения на стороне сервера взаимодействия. На локальном сервере его можно настроить самому. В облачном — оно жесткое: 63 535 байт, и никак не меняется.

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

Часть кода, который из нескольких частей собирает картинку на стороне получателя

Часть кода, который из нескольких частей собирает картинку на стороне получателя
Пример JSON, который передается в поле data и содержит одну из трех частей файла-вложения

Пример JSON, который передается в поле data и содержит одну из трех частей файла-вложения

Как организовать видеозвонок между базами разных абонентов

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

Зато для обычных пользователей в Системе взаимодействия есть штатный механизм гостевых звонков. Он задуман, чтобы приглашать в звонок стороннего человека: кандидата на собеседование или подрядчика. Мы адаптировали этот механизм под свою задачу. 

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

Консультант в 1С инициирует звонок, пользователь подключается через браузер. Пользователь может включить демонстрацию экрана

Консультант в 1С инициирует звонок, пользователь подключается через браузер. Пользователь может включить демонстрацию экрана

Как скрыть служебную переписку от клиента

При запуске чата поддержки возникла еще одна задача — скрывать от заказчика внутреннюю переписку консультантов. Например: «Я сейчас занят, подключись вместо меня» или «Принял, беру вопрос на себя». В старом расширении 2022 года такой возможности не было. Консультанты и клиенты видели всю переписку в общем чате. 

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

Работает это через два отдельных чата. Одна копия переписки живет в нашей базе, вторая — в базе клиента, и они синхронизируются между собой. Если консультант отправляет сообщение как внутреннее, оно остается только в нашем чате и клиент его не получает. 

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

Окно консультанта: скрытая переписка между коллегами выделена фоном

Окно консультанта: скрытая переписка между коллегами выделена фоном
Так чат выглядит для клиента — скрытые сообщения консультантов не попадают в общую переписку

Так чат выглядит для клиента — скрытые сообщения консультантов не попадают в общую переписку

Что решили не обходить

Не все ограничения платформы мы стали обходить. Есть три вещи, которые сознательно оставили как есть.

Безопасность вебхук-соединения полностью обеспечивает Система взаимодействия. Генерация токенов, авторизация и обмен сообщениями работают на штатных механизмах. Мы не стали строить собственную модель безопасности поверх них — для нашей задачи гарантий платформы уже достаточно.

Недоступность сервера. Если сервер взаимодействия недоступен, сообщение просто не отправится. Очередей сообщений и повторной отправки платформа не предусматривает. Это ограничение самого механизма, и в нашем расширении оно никак не компенсируется.

Контроль доставки. Платформа не позволяет отследить, доставлено ли сообщение между разными базами. Если клиент офлайн, консультант об этом не узнает и сможет судить о доставке только по ответному сообщению. Мы уже думаем над тем, как добавить такую проверку, но пока это открытый вопрос.

Что дальше

Сейчас расширение поддерживает чат, передачу файлов, демонстрацию экрана, голосовые и видеозвонки. 

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

Но сначала нужно понять, насколько новые возможности окажутся полезны в реальной работе.

Как получить такое же решение

Собрать похожее решение может любая команда, знакомая с платформой 1С. Наше расширение работает на версии 8.3.26 и выше.

Если возиться с разработкой с нуля не хочется, а чат с поддержкой внутри 1С нужен, есть два варианта.

Конечным заказчикам — расширение «Персональный консультант». Для клиентов, которые обслуживаются в implecs по 1С:ИТС, чат с консультантом уже включен бесплатно. Другие компании тоже могут подключить расширение бесплатно и протестировать его в течение 30 дней. После окончания тест-драйва можно перейти на платное сопровождение.

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

Свяжитесь с нами, чтобы узнать подробности.

ссылка на оригинал статьи https://habr.com/ru/articles/1064532/