Перейти к основному содержимому
Версия: 5.9.0

Сообщения и счётчик непрочитанных

Программная отправка сообщений

Метод send(message:) отправляет сообщение в активный чат без участия пользователя — например, контекст заказа или текущую локацию.

func send(message: ChatMessage) throws(ChatCenterUISendMessageError)

Параметры:

  • message: ChatMessage — модель сообщения для отправки.

Выбрасывает: ChatCenterUISendMessageError — см. Справочник ошибок.

Пример использования:

do {
// Отправка текстового сообщения
try chatCenterSDK.send(message: .text("Информация по заказу №12345"))
} catch {
print("Ошибка отправки: \(error)")
}

Типы сообщений (ChatMessage)

ТипОписаниеОграничения
.text(String)Текстовое сообщениеМаксимум 4000 символов
.image(UIImage)ИзображениеОграничение по размеру файла (настраивается на сервере)
.location(CGPoint)Локация пользователя (системное)Повторная отправка той же точки игнорируется. x — широта, y — долгота. Семантика согласована с серверной стороной edna; SDK сам по себе не интерпретирует значения.

Примеры:

do {
// Текст
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)))
} catch {
print("Ошибка отправки: \(error)")
}

Длинные текстовые сообщения

.messageTooLong бросается при попытке отправки текста длиннее 4000 символов. На стороне приложения предусмотрите:

  1. Pre-flight проверку перед send — обрезать или попросить пользователя сократить:

    let maxLength = 4000

    func sendUserText(_ text: String) {
    guard text.count <= maxLength else {
    showAlert("Сообщение длиннее \(maxLength) символов — сократите текст или разбейте на несколько")
    return
    }
    do {
    try chatCenterSDK.send(message: .text(text))
    } catch {
    handleSendError(error)
    }
    }
  2. Разбивка на части — если разбиение допустимо для UX, делите по границам предложений, а не посимвольно. Каждая часть отправляется отдельным send(message:) и приходит к оператору самостоятельным сообщением — ни SDK, ни сервер не склеивают части и не добавляют маркировку «1/N».

В UI экрана чата SDK сам обрезает ввод длиннее 4000 символов с iOS 5.6.0 (см. Инструкции по миграции) — но для программной отправки через send(message:) ограничение должен соблюдать клиентский код.

Ошибки отправки

send(message:) выбрасывает ChatCenterUISendMessageError. Полный список кейсов, рекомендации по обработке и пример с catch — в Справочнике ошибок.

Управление поведением WebSocket (когда возможна .webSocketNotActive) — см. Настройки SDK.


Счётчик непрочитанных сообщений

func getUnreadMessagesCount(completion: @escaping (Result<Int, Error>) -> Void) throws(ChatCenterUIError)

Запрашивает количество непрочитанных сообщений с сервера.

Выбрасывает: ChatCenterUIError.userNotAuthorized, если пользователь не авторизован.

Пример использования:

do {
try chatCenterSDK.getUnreadMessagesCount { [weak self] result in
switch result {
case let .success(count):
// chatButton — UI-элемент родительского приложения
self?.chatButton.badge = count > 0 ? "\(count)" : nil
case let .failure(error):
print("Ошибка получения счётчика: \(error)")
}
}
} catch {
print("Пользователь не авторизован: \(error)")
}
Автоматическое обновление счётчика

Для автоматического обновления счётчика используйте ChatConfig.unreadMessageCountDelay (Int, секунды; 0 — отключено) или подпишитесь на делегат ChatCenterUISDKDelegate.chatCenterUI(chatCenter:didChangeUnreadMessages:).


Связанные разделы