- Предисловие
Не так давно столкнулся с задачей интеграции облачной АТС и 1с CRM. Типовой функционал предполагает получения http-запросов через http-сервис. Обработкой запросов занимается сервер и создается документ «Телефонный звонок». И все бы ничего если данного функционала хватило для работы, но данной статьи тогда бы не было.
Дополнительная задача заключалась в открытии форм существующего документа по клиенту «Интерес» и обработки «Мастер формирования интереса».
- Поиск решения
Проблема была проста: при приеме http-запроса работает только Сервер, вызова Клиента не происходит. Вопрос, как реализовать открытие форм и отображение их конкретному пользователю?
За день «гуглежа» энтузиазм устремился в минус бесконечность пока не наткнулся на статью, посвященную функционалу «Обсуждения» добавленного в платформу 8.3.11.2867.
Сервис представляет собой открытие обсуждения между пользователями информационной базы в форме чата.
Данная статья подразумевает передачу данных с сервера на клиент путем отправки сообщения конкретному пользователю системы.
- Реализация
Код в основном использовался из статьи указанной выше лишь с малыми изменениями необходимыми для решения моих задач.
Для начала каждому пользователю необходимо создать свое «Служебное обсуждение», ориентироваться будем по Ключу, который (в моем случаи) формируется из идентификатора пользователя в системе обсуждения (уид пользователя в системе обсуждения и уид в информационной базе разный) и произвольного префикса (оставил как в статье, для меня это было не принципиально).
&НаСервере
Процедура СоздатьСлужебноеОбсуждение(КлючСлужебногоОбсуждения) Экспорт
Если СистемаВзаимодействия.ПолучитьОбсуждение(КлючСлужебногоОбсуждения) = Неопределено Тогда
Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение();
Обсуждение.Отображаемое = Ложь;
Обсуждение.Ключ = КлючСлужебногоОбсуждения;
Обсуждение.Участники.Добавить(СистемаВзаимодействия.ИдентификаторТекущегоПользователя());
Обсуждение.Записать();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция КлючСлужебногоОбсуждения() Экспорт
Возврат "Сообщения сервера " + СистемаВзаимодействия.ИдентификаторТекущегоПользователя();
КонецФункции
Функция для генерации ключа «Служебного обсуждения» возвращает сформированный ключ и процедура, в которую передаем ключ, для формирования самого обсуждения.
Участники обсуждения добавляются по идентификатору пользователя в системе обсуждения.
СистемаВзаимодействия.ИдентификаторТекущегоПользователя() – возвращает идентификатор в системе по текущему пользователю информационной базы.
СистемаВзаимодействия.ПолучитьИдентификаторПользователя(ПользовательИБ.УникальныйИдентификатор) – возвращает идентификатор пользователя по уникальному идентификатору пользователя информационной базы.
Обсуждение.Отображаемое = Ложь – скрываем обсуждение от пользователя (а зачем оно ему?).
Обсуждение создано, пользователь подвязан, следующий этап – добавление возможности пользователя получать эти самые «Служебные обсуждения».
Для этого будем использовать процедуру, которую мы будем вызывать 1 раз за сеанс, в моем случаи я подключаю ее при входе в рабочее место «Телефония» и до конца действия сеанса. Все поступившие сообщения для пользователя сохраняются в системе даже если сеанс неактивен, после выполнения процедуры все сообщения будут воспроизведены.
&НаКлиенте
Процедура ПодписатьсяНаСлужебноеОбсуждение(КлючСлужебногоОбсуждения) Экспорт
ОшибкаПодключения = Новый ОписаниеОповещения( , , , "ОшибкаПодключения", БИТ_СерверВзаимодействия);
ОбработкаСообщенийСервера = Новый ОписаниеОповещения("ОбработкаСообщенийСервера", БИТ_СерверВзаимодействия);
СистемаВзаимодействия.НачатьПодключениеОбработчикаНовыхСообщений(ОшибкаПодключения, КлючСлужебногоОбсуждения, ОбработкаСообщенийСервера);
КонецПроцедуры
Процедура проста: на вход передаем Ключ и заводим описания вызова процедур. ОшибкаПодключения – по желанию, если что-то пошло не так, то система проинформирует и ОбработкаСообщенийСервера – то, что и будет обрабатывать наше сообщение в моменте его поступления.
Следующее что нам необходимо сделать – создать сообщение, которое мы и будем обрабатывать.
В моем случаи я получаю данные из http-запроса, типовым функционалом формируется документ «Телефонный звонок», а дальше забираю входящий номер телефона, внутренний телефон менеджера и сам документ себе в процедуру формирования служебного сообщения.
&НаСервере
Процедура ВыполнитьДействиеПриЗвонке(НомерТелефонаВх, НомерПользователя, ДокументЗвонка) Экспорт
ПользовательСВ = ПолучитьПользователяСВ(НомерПользователя);
Ключ = "Сообщения сервера " + ПользовательСВ;
СлужебноеОбсуждение = СистемаВзаимодействия.ПолучитьОбсуждение(Ключ);
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("Значение", ДокументЗвонка);
СтруктураДанных.Вставить("СпособОбработки", "Индикатор");
СтруктураДанных.Вставить("НомерТелефона", НомерТелефонаВх);
Сообщение = СистемаВзаимодействия.СоздатьСообщение(СлужебноеОбсуждение.Идентификатор);
Сообщение.Данные = СтруктураДанных;
Сообщение.Записать();
КонецПроцедуры
Функция ПолучитьПользователяСВ(НомерПользователя) – получает данные по внутреннему номеру АТС пользователя. Сначала я получаю пользователя информационной базы, после чего по уникальному идентификатору получаю пользователя системы взаимодействия.
Далее по ключу ищу его «Служебное обсуждение» и завожу в него структуру с данными. Так же через структуру можно передать название «клиентской» процедуры или функции и в обработке данного сообщения ее вызвать (Выполнить(«НазваниеПроцедуры()») – для процедуры и Вычислить(«НазваниеФункции()») – для функции).
Создаем сообщение в «Служебном обсуждении» и записываем его.
Осталось нам только обработать новое сообщение у пользователя.
&НаКлиенте
Процедура ОбработкаСообщенийСервера(Сообщение, ДополнительныеПараметры) Экспорт
СтруктураЗвонка(Сообщение.Данные.НомерТелефона, Сообщение.Данные.Значение);
КонецПроцедуры
&НаКлиенте
Процедура СтруктураЗвонка(НомерТелефона, Документ)
…
КонецПроцедуры
Это та самая процедура которую мы подключаем в ОбработкаСообщенийСервера.
Возможно это особенность конфигурации, но сам сервер взаимодействия устанавливать не пришлось. Как установить сервер взаимодействия можно посмотреть здесь.
Касательно новых конфигурации, например Управление торговлей 11.4 включение сервиса взаимодействий находится в НСИ и администрирование -> Интернет-поддержка и сервисы -> Группа "Обсуждения"
На этом все.
Моя первая статья, особо ногами не пинайте)