Получение и создание обсуждений

Для отправки и получения сообщений нужно получить обсуждения. Для этого СистемаВзаимодействия имеет несколько методов:

  • ПолучитьНепрочитанныеОбсуждения() — возвращает список идентификаторов непрочитанных обсуждений. Количество можно выставить в параметре ЛимитОбсуждений. Максимальное число обсуждений, полученных за один раз, не может превышать 100 (даже если таких обсуждений больше).
  • ПолучитьОбсуждения() — возвращает список обсуждений, которые соответствуют указанным в параметрах идентификаторам.
  • НайтиОбсуждение() — возвращает обсуждение системы взаимодействия (ОбсуждениеСистемыВзаимодействия) по его идентификатору или ключу.
  • НайтиОбсуждения() — возвращает список обсуждений, которые соответствуют установленным отборам. Важно отметить, что контекстные обсуждения доступны, если у текущего пользователя взаимодействия есть права на чтение сущностей, которые указаны в контекстах обсуждений. Для того чтобы получить все обсуждения, а не только те, в которых участвует активный пользователь, необходимо вызов метода осуществлять в привилегированном режиме.
  • СоздатьОбсуждение () — создает новое групповое обсуждение с указанными в методе параметрами.
  • СоздатьЛичноеОбсуждение() — создает новое обсуждение между двумя пользователями.

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


// создание обсуждения (пользователь1 с пользователем2)
попытка
    пер НазваниеОбсуждения = "Название обсуждения"
    пер КлючОбсуждения = "Ключ обсуждения"
   
    ИдОбсуждения = СистемаВзаимодействия.СоздатьОбсуждение([ИдПользователяСВ1, ИдПользователяСВ2], НазваниеОбсуждения, КлючОбсуждения)
    // Сохраните идентификатор обсуждения системы взаимодействия ИдОбсуждения
поймать Исключение : ИсключениеСистемыВзаимодействия
    // Обработка исключения
;
   
// создание сообщения (от пользователя1 к пользователю2)
попытка
    пер МассивПолучателейСообщения : Массив<Ууид> = новый Массив<Ууид>()
    МассивПолучателейСообщения.Добавить(ИдПользователяСВ2)
  
  
    пер ТекстСообщения : Строка = "Привет, пользователь!"
    ИдСообщения = СистемаВзаимодействия.СоздатьСообщение(ИдОбсуждения, МассивПолучателейСообщения, ТекстСообщения)
   
    // Сохраните идентификатор сообщения системы взаимодействия ИдСообщения
поймать Исключение : ИсключениеСистемыВзаимодействия
    // Обработка исключения
;
 
//
// ... можно создать еще сообщения ...
//
 
// получение непрочитанных сообщений
попытка
    пер МассивНовыхСообщений = СистемаВзаимодействия.ПолучитьНепрочитанныеСообщения(ИдОбсуждения)
   
    //Непрочитанные сообщения
    для Сообщение из МассивНовыхСообщений
        // Обработка непрочитанных сообщений
    ;
   
поймать Исключение : ИсключениеСистемыВзаимодействия
    // Обработка исключения
;
   

Получение непрочитанных обсуждений и сообщений


// подключение, инициализация, создание сообщения и т.д.
// ...

попытка
    // получаем непрочитанные обсуждения
    пер МассивИдентификаторовНепрочитанныхОбсуждений = СистемаВзаимодействия.ПолучитьНепрочитанныеОбсуждения(10)
   
    // получаем непрочитанные сообщения каждого непрочитанного обсуждения (выдаются в хронологическом порядке)    
    для ИдентификаторНепрочитанногоОбсуждения из МассивИдентификаторовНепрочитанныхОбсуждений
        //Консоль.Записать("Обсуждение # " + ИдентификаторНепрочитанногоОбсуждения)
   
        пер МассивНовыхСообщений = СистемаВзаимодействия.ПолучитьНепрочитанныеСообщения(ИдентификаторНепрочитанногоОбсуждения)
        для Сообщение из МассивНовыхСообщений
            //Консоль.Записать("Сообщение # " + Сообщение.Ид + " : " + Сообщение.Текст)
   
            // устанавливаем прочитанное сообщение как последнее прочитанное
            СистемаВзаимодействия.УстановитьПоследнееПрочитанноеСообщение(ИдентификаторНепрочитанногоОбсуждения, Сообщение.Ид)
        ;
    ;
   
поймать Исключение : ИсключениеСистемыВзаимодействия
    // Обработка исключения
;

Получение обсуждения по пользовательскому ключу


метод ПолучитьОбсуждениеДляУведомлений(КлючОбсужденияДляУведомлений: Строка): Обсуждение
    // Поиск обсуждения по ключу
    знч СписокОбсуждений = СистемаВзаимодействия.НайтиОбсуждения(Ключ = КлючОбсужденияДляУведомлений)
    
    если СписокОбсуждений.Пусто()
        возврат СоздатьОбсуждениеДляУведомленийПользователя(КлючОбсужденияДляУведомлений)
    ;

    возврат СписокОбсуждений.Первый()
;

метод ПолучитьИдентификаторОбсужденияДляУведомлений(): Ууид
    // фиктивый ключ для примера, на самом деле он вычисляется по пользователю приложения
    знч КлючОбсужденияДляУведомлений = "Notification#105ea6f2-2e8f-11ed-a261-0242ac120002"
    
    знч Обсуждение = ПолучитьОбсуждениеДляУведомлений(КлючОбсужденияДляУведомлений)
    возврат Обсуждение.Ид
;

метод СоздатьОбсуждениеДляУведомленийПользователя(КлючОбсужденияДляУведомлений: Строка): Обсуждение
    знч НазваниеОбсуждения: Строка = "" // Получение наименования обсуждения
    знч УчастникиОбсуждения: Массив<Ууид> = [] // Получение участников обсуждения
   
    знч ИдОбсуждения = СистемаВзаимодействия.СоздатьОбсуждение(
                                                Название = НазваниеОбсуждения,
                                                Участники = УчастникиОбсуждения,
                                                Ключ = КлючОбсужденияДляУведомлений)
    возврат СистемаВзаимодействия.НайтиОбсуждение(ИдОбсуждения)!
;
           

Добавление нового участника в существующее обсуждение

метод ДобавитьУчастникаВСуществующееОбсуждение(ИдОбсуждения: Ууид, Пользователь: Пользователи.Ссылка)
    знч Обсуждение = СистемаВзаимодействия.НайтиОбсуждение(ИдОбсуждения)
    если Обсуждение == Неопределено
        возврат
    ;

    пер ИдПользователя: Ууид? = СистемаВзаимодействия.ПолучитьИдПользователяВзаимодействия(Пользователь)
    если ИдПользователя == Неопределено
        возврат
    ;

    пер СписокУчастников = новый Массив<Ууид>(Обсуждение.ИдУчастников)
    СписокУчастников.Добавить(ИдПользователя)

    СистемаВзаимодействия.РедактироватьОбсуждение(
        ИдОбсуждения = ИдОбсуждения, 
        Участники = СписокУчастников, 
        Название = Обсуждение.Название)
;