Сообщения и счётчик непрочитанных
Программная отправка сообщений
SDK позволяет отправлять сообщения в активный чат программно, без участия пользователя. Это полезно для автоматической отправки контекстных данных (например, информации о заказе или локации).
func send(message: ChatMessage) throws(ChatCenterUISendMessageError)
Параметры:
message:ChatMessage— модель сообщения для отправки.
Условия:
- Пользователь авторизован через
authorize(user:auth:) - WebSocket-соединение активно (чат открыт или
keepSocketActive = true)
Выбрасывает: ChatCenterUISendMessageError
Пример использования:
do {
// Отправка текстового сообщения
try chatCenterSDK.send(message: .text("Информация по заказу №12345"))
} catch {
print("Ошибка отправки: \(error)")
}
Типы сообщений (ChatMessage)
| Тип | Описание | Ограничения |
|---|---|---|
.text(String) | Текстовое сообщение | Максимум 4000 символов |
.image(UIImage) | Изображение | Ограничение по размеру файла (настраивается на сервере) |
.location(CGPoint) | Локация пользователя (системное) | Повторная отправка той же точки игнорируется |
Примеры:
// Текст
try chatCenterSDK.send(message: .text("Здравствуйте"))
// Изображение
if let image = UIImage(named: "screenshot") {
try chatCenterSDK.send(message: .image(image))
}
// Локация
try chatCenterSDK.send(message: .location(CGPoint(x: 55.7558, y: 37.6173)))
Ошибки отправки (ChatCenterUISendMessageError)
| Ошибка | Описание | Причина | Рекомендация |
|---|---|---|---|
.userNotAuthorized | Пользователь не авторизован | authorize() не был вызван | Вызовите authorize(user:) перед отправкой |
.webSocketNotActive | WebSocket-соединение неактивно | Чат закрыт, keepSocketActive = false | Включите keepSocketActive = true или отправляйте только пока чат открыт |
.chatNotOpened | Чат не открыт | getChat() не был вызван | Убедитесь, что экран чата отображается |
.messageNotSent | Не удалось отправить сообщение | Временная ошибка сервера | Повторите попытку через несколько секунд |
.messageIsEmpty | Текст сообщения пустой | Передана пустая строка | Проверьте текст перед отправкой |
.messageTooLong | Текст превышает 4000 символов | Слишком длинный текст | Обрежьте сообщение до 4000 символов |
.messageImageTooLarge | Изображение превышает допустимый размер | Превышен серверный лимит | Уменьшите разрешение изображения перед отправкой |
.messageImageCompressionError | Ошибка сжатия изображения | Некорректный UIImage | Проверьте корректность UIImage объекта |
Связь .webSocketNotActive с keepSocketActive
По умолчанию WebSocket-соединение активно только пока открыт экран чата. Ошибка .webSocketNotActive при программной отправке означает, что соединение уже закрыто.
Решения:
keepSocketActive = true— держать WebSocket активным всегда, пока пользователь авторизованkeepSocketActiveDuringOperatorSession = true— держать соединение до закрытия диалога оператором- Отправлять сообщения только пока экран чата открыт — если фоновая отправка не нужна
Подробнее о параметрах — в разделе Настройки SDK.
Счётчик непрочитанных сообщений
func getUnreadMessagesCount(completion: @escaping (Result<Int, Error>) -> Void) throws(ChatCenterUIError)
Запрашивает количество непрочитанных сообщений с сервера.
Выбрасывает: ChatCenterUIError.userNotAuthorized, если пользователь не авторизован.
Пример использования:
do {
try chatCenterSDK.getUnreadMessagesCount { result in
switch result {
case let .success(count):
print("Непрочитанных: \(count)")
// Обновить бейдж на кнопке чата
case let .failure(error):
print("Ошибка получения счётчика: \(error)")
}
}
} catch {
print("Пользователь не авторизован: \(error)")
}
Для автоматического обновления счётчика используйте ChatConfig.unreadMessageCountDelay (интервал в секундах) или подпишитесь на делегат ChatCenterUISDKDelegate.chatCenterUI(chatCenter:didChangeUnreadMessages:).
Связанные разделы
- Делегат SDK — получение событий об изменении счётчика
- Настройки SDK — параметры
keepSocketActiveиunreadMessageCountDelay - Справочник ошибок — ошибки
ChatCenterUISendMessageError - Управление пользователем — авторизация перед отправкой