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

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

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

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

// Создание обсуждения между двумя пользователями.
пер ИдОбсуждения: Ууид
пер ИдСообщения: Ууид

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

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

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

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

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

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

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

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

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

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

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

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

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