Skip to main content

События SDK

События чата​

Для отслеживания событий чата, необходимо подписаться на поток messagingEventsStream()

@MainActor
final class ChatViewModel: ObservableObject {
private var eventsTask: Task<Void, Never>?
private var connectionTask: Task<Void, Never>?

func connect() async {
if eventsTask == nil {
let events = await ChatHDE.shared.messagingEventsStream()
eventsTask = Task { @MainActor in
for await event in events {
// Обработать event
}
}
}

if connectionTask == nil {
let states = await ChatHDE.shared.connectionState()
connectionTask = Task { @MainActor in
for await state in states {
// Обработать state
}
}
}

await ChatHDE.shared.connect()
}

func destroy() async {
eventsTask?.cancel()
connectionTask?.cancel()
eventsTask = nil
connectionTask = nil
await ChatHDE.shared.destroy()
}
}

Правила работы с подписками:

  • Создавайте подписку до вызова connect().
  • Храните Task подписки в свойстве.
  • Не создавайте новый Task, пока существует текущий.
  • Перед destroy() отмените Task подписки.
  • После destroy() снова вызовите configure().

События чата включают в себя:

  • initWidget - Инициирующее сообщение, содержит информацию о чате, пользователе и др.
  • newMessage - Новое сообщение пользователя или агента
  • prependMessages - Предыдущие сообщения
  • setStaff - Агент был назначен (или снят) на чат
  • startChat - Подтверждение сервера что был начат новый чат
  • ticketCreated - Тикет был создан
  • startVisitorChat - Старт нового чата (после ввода данных пользователя в тикете и нажатия кнопки отправки)
  • loadTicket - Был запрос загрузки предыдущих сообщений тикета
  • visitorIsTyping - Пользователь вводит текст сообщения
  • loadingMessage - Сообщение отправлено но еще не подтверждено сервером
  • closeChat - Закрытие чата
  • rateChat - Пользователь оценил чат
  • rateSuccess - Сервер подтвердил оценку чата

Обработка initWidget:

if case .initWidget = event {
print("Init widget")
}

Соединение с сервером​

Для отслеживания состояния соединения подпишитесь на connectionState(), как в примере выше.

Состояния соединения включают в себя:

  • neverConnected - Еще ни разу не был вызван connect()
  • disconnected - Ранее было соединение, но сейчас нет
  • connecting - Идет подключение
  • connected - Соединение установлено
  • error - Ошибка подключения

Обработка connected:

if case .connected = state {
print("Connected")
}