Получение и создание обсуждений
Работа с обсуждениями в коде
Для отправки и получения сообщений нужно получить обсуждения. Для этого используются следующие методы типа СистемаВзаимодействия
:
ПолучитьНепрочитанныеОбсуждения()
— возвращает список идентификаторов непрочитанных обсуждений. Количество можно выставить в параметреЛимитОбсуждений
. Максимальное число обсуждений, полученных за один раз, не может превышать 100 (даже если таких обсуждений больше).ПолучитьОбсуждения()
— возвращает список обсуждений, которые соответствуют указанным в параметрах идентификаторам.НайтиОбсуждение()
— возвращает обсуждение системы взаимодействия (ОбсуждениеВзаимодействия
) по его идентификатору или ключу.НайтиОбсуждения()
— возвращает список обсуждений, которые соответствуют установленным фильтрам. Контекстные обсуждения доступны, только если у текущего пользователя взаимодействия есть права на чтение сущностей, указанных в контекстах обсуждений. Чтобы получить все обсуждения, а не только те, в которых участвует активный пользователь, необходимо вызвать метод в привилегированном режиме.СоздатьОбсуждение()
— создает новое групповое об суждение с указанными в методе параметрами.СоздатьЛичноеОбсуждение()
— создает новое обсуждение между двумя пользователями.
Создание обсуждения и сообщений, получение непрочитанных сообщений
// Создание обсуждения между двумя пользователями.
пер ИдОбсужден ия: Ууид
пер ИдСообщения: Ууид
попытка
знч НазваниеОбсуждения = "Название обсуждения"
знч КлючОбсуждения = "Ключ обсуждения"
// Создание обсуждения между двумя пользователями.
// Сохраните идентификатор обсуждения.
ИдОбсуждения = СистемаВзаимодействия.СоздатьОбсуждение([ИдПользователяСВ1, ИдПользователяСВ2],
НазваниеОбсуждения, КлючОбсуждения)
поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения...
;
// Создание сообщения для второго пользователя.
попытка
пер МассивПолучателейСообщения: Массив<Ууид> = новый Массив<Ууид>()
МассивПолучателейСообщения.Добавить(ИдПользователяСВ2)
знч ТекстСообщения = "Привет, пользователь!"
// Сохраните идентификатор сообщения системы взаимодействия.
ИдСообщения = СистемаВзаимодействия.СоздатьСообщение(ИдОбсуждения,
МассивПолучателейСообщения, ТекстСообщения)
поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения...
;
// Создание других сообщений.
// ...
// Получение непрочитанных сообщений.
попытка
пер МассивНовыхСообщений = СистемаВзаимодействия.ПолучитьНепрочитанныеСообщения(ИдОбсуждения)
// Обход массива непрочитанных сообщений.
для Сообщение из МассивНовыхСообщений
// Обработка непрочитанных сообщений...
;
поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения...
;
Получение непрочитанных обсуждений и сообщений
попытка
// Получение непрочитанных обсуждений.
пер МассивИдНепрочитанныхОбсуждений = СистемаВзаимодействия.ПолучитьНепрочитанныеОбсуждения(ЛимитОбсуждений = 10)
// Получение непрочитанных сообщений из каждого непрочитанного обсуждения (выдаются в хронологическом порядке).
для ИдНепрочитанногоОбсуждения из МассивИдНепрочитанныхОбсуждений
// Консоль.Записать("Обсуждение # " + ИдНепрочитанногоОбсуждения)
пер Массив НовыхСообщений = СистемаВзаимодействия.ПолучитьНепрочитанныеСообщения(ИдНепрочитанногоОбсуждения)
для Сообщение из МассивНовыхСообщений
// Консоль.Записать("Сообщение # " + Сообщение.Ид + " : " + Сообщение.Текст)
// Установка прочитанного сообщения как последнего прочитанного.
СистемаВзаимодействия.УстановитьПоследнееПрочитанноеСообщение(ИдНепрочитанногоОбсуждения, Сообщение.Ид)
;
;
поймать Исключение : ИсключениеСистемыВзаимодействия
// Обработка исключения...
;
Получение обсуждения по пользовательскому ключу
метод ПолучитьОбсуждениеДляУведомлений(КлючОбсужденияДляУведомлений: Строка): ОбсуждениеВзаимодействия
// Поиск обсуждения по ключу.
знч СписокОбсуждений = СистемаВзаимодействия.НайтиОбсуждения(Ключ = КлючОбсужденияДляУведомлений)
если СписокОбсуждений.Пусто()
возврат СоздатьОбсуждениеДляУведомленийПользо вателя(КлючОбсужденияДляУведомлений)
;
возврат СписокОбсуждений.Первый()
;
метод ПолучитьИдентификаторОбсужденияДляУведомлений(): Ууид
// В примере используется фиктивный ключ.
// В обычном случае он вычисляется по пользователю приложения.
знч КлючОбсужденияДляУведомлений = "Notification#105ea6f2-2e8f-11ed-a261-0242ac120002"
знч Обсуждение = ПолучитьОбсуждениеДляУведомлений(КлючОбсужденияДляУведомлений)
возврат Обсуждение.Ид
;
метод СоздатьОбсуждениеДляУведомленийПользователя(КлючОбсужденияДляУведомлений: Строка):
ОбсуждениеВзаимодействия
знч НазваниеОбс уждения: Строка = "" // Получение наименования обсуждения.
знч УчастникиОбсуждения: Массив<Ууид> = [] // Получение участников обсуждения.
знч ИдОбсуждения = СистемаВзаимодействия.СоздатьОбсуждение(
Название = НазваниеОбсуждения,
Участники = УчастникиОбсуждения,
Ключ = КлючОбсужденияДляУведомлений)
возврат СистемаВзаимодействия.НайтиОбсуждение(ИдОбсуждения)!
;
Добавление нового участника в существующее обсуждение
метод ДобавитьУчастникаВСуществующееОбсуждение(ИдОбсуждения: Ууид, ИдНовогоУчастника: Ууид)
знч Обсуждение = СистемаВзаимодействия.НайтиОбсуждение(ИдОбсуждения)
если Обсуждение == Неопределено
возврат
;
пер СписокУчастников = новый Массив<Ууид>(Обсуждение.ИдУчастников)
СписокУчастников.Добавить(ИдНовогоУчастника)
СистемаВзаимодействия.РедактироватьОбсуждение(
ИдОбсуждения = ИдОбсуждения,
Участники = СписокУчастников,
Заголовок = Обсуждение.Заголовок)
;
Подписка на уведомления в обсуждениях
В групповых обсуждениях подписка на уведомления осуществляется автоматически при включении пользователя в список участников. В контекстных обсуждениях подписка осуществляется только тогда, когда пользователь написал сообщение в обсуждении или его упомянули в нем.
При подписке на уведомления в обсуждениях пользователь может получать уведомления из контекстных обсуждений, в которых его не упоминали. Чтобы подписаться на уведомления или отписаться от них, используются следующие методы объекта СистемаВзаимодействия:
ПодписатьсяНаОбсуждение(ИдОбсуждения: Ууид, Таймаут: Длительность = 15с)
— подписывает текущего пользователя на новые сообщения в обсуждении с идентификатором ИдОбсуждения.ОтписатьсяОтОбсуждения(ИдОбсуждения: Ууид, Таймаут: Длительность = 15с)
— отписывает текущего пользователя от получения новых сообщений в обсуждении с идентификатором ИдОбсуждения. Если пользователь не подписан на обсуждение, то исключение не выбрасывается.
Методы выбрасывают следующие исключения:
ИсключениеЗапретаДоступаСистемыВзаимодействия
— если к обсуждению нет доступа;ИсключениеНеНайденОбъектСистемыВзаимодействия
— если обсуждения не существует.
Пример подписки на контекстное обсуждение
метод ПодписатьсяНаКонтекстноеОбсуждение(ИдОбсуждения: Ууид)
попытка
СистемаВзаимодействия.ПодписатьсяНаОбсуждение(ИдОбсуждения)
поймать
Исключение: ИсключениеЗапретаДоступаСистемыВзаимодействия | ИсключениеНеНайденОбъектСистемыВзаимодействия
// ...
;
;