< Todos los temas
Imprimir

Configuración del SDK para iOS

La forma más fácil de agregar las bibliotecas Chat2Desk a su proyecto Xcode es usar Cocoapods.

Empezar con Cocoapods

  1. Instalar CocoaPods (consulte la guía de introducción a CocoaPods ).
  2. Si no tiene un Podfile , cree uno ejecutándolo pod init en el directorio de su proyecto.
  3. Agregue la dependencia Chat2Desk a Podfile.

    platform :ios, '9.0'

    target 'SDK Demo' do
       use_frameworks!
       pod 'chat2desk_sdk'
    end
  4. Ejecute el comando pod installen el directorio del proyecto para instalar el SDK.
  5. Abra su proyecto a través del archivo .xcworkspace.

Inicializando el SDK

Primero, declara los modos de fondo . Ve al archivo principal de tu proyecto, a la pestaña Canto y capacidades , haz clic en el botón ” + “   y selecciona “Modos de fondo “.

Ya está listo para crear una instancia del cliente Chat2Desk. Para ello, importe el archivo chat2desk_sdk a su clase Swift y cree una instancia como se muestra a continuación: IChat2Desk

let settings = Settings.init(
    authToken: "WIDGET_TOKEN",
    baseHost: "BASE_HOST",
    wsHost: "WS_HOST",
    storageHost: "STORAGE_HOST"
)
let chat2desk = Chat2Desk.Companion().create(settings: settings)

WIDGET_TOKEN, BASE_HOST, WS_HOST, STORAGE_HOSTdebe tomarse de la página Configuración > Widget + Chat en línea para un canal conectado específico.

Eliminación del SDK

Utilice el método IChat2Desk.closeantes de eliminar la instancia IChat2Desk para evitar pérdidas de memoria.

Conectando y desconectando

Utilice el método IChat2Desk.startpara conectarse y IChat2Desk.stopdesconectarse del servicio.

Puede rastrear el estado de la conexión a través de la propiedad  watchConnectionStatus(): СFlow<ConnectionState>.

Consulte este ejemplo de código para comprender cómo funciona:

class SomeClass: ObservableObject {
    @Published public var connectionStatus: ConnectionState? = nil
    
    let chat2desk: Chat2Desk
    
    var connectionStatusWatcher: Closeable?
    
    init(chat2desk: Chat2Desk) {
        self.chat2desk = chat2desk
        
        connectionStatusWatcher = chat2desk.watchConnectionStatus().watch { status in
            self.connectionStatus = status
        }
    }
    
    func start() {
        Task {
            try await chat2desk.start()
        }
    }
    
    func stop() {
        Task {
            try await chat2desk.stop()
        }
    }
    
    deinit {
        connectionStatusWatcher?.close()
    }
}

Recibir mensajes

Para trabajar con mensajes, la biblioteca debe estar conectada al servicio Chat2Desk.

Todos los mensajes entrantes y salientes se almacenan en caché dentro de la biblioteca de forma predeterminada y se puede acceder a ellos sin conexión.

Para obtener una lista de mensajes, debe utilizar la propiedadwatchMessages(): CFlow<[Message]>

chat2desk.watchMessages.watch { messages in
    print(messages)
}

Descargando mensajes del servidor

Para trabajar con mensajes, la biblioteca debe estar conectada al servicio Chat2Desk.

IMPORTANTE : el SDK descarga un máximo de 100 mensajes del servidor a la vez.

  • chat2desk.fetchMessages() – Obtener una lista de los mensajes más recientes. Descarga 100 mensajes.
  • chat2desk.fetchNewMessages() Permite obtener una lista de mensajes nuevos. El SDK descarga del servidor únicamente los mensajes enviados después del último mensaje recibido por el dispositivo.
  • chat2desk.fetchMessage(loadMore: true)– Obtener una lista de mensajes antiguos. En este caso, se descargan del servidor los mensajes anteriores al primero, pero no más de 100 a la vez.

Buscar mensajes

Hay dos maneras de buscar mensajes: texto completo y búsqueda por operador. Ambos métodos permiten buscar mensajes por propiedad Message.text y devolver una lista de mensajes [Message].

Búsqueda de texto completo

chat2desk.fullTextSearch(query: String): [Message]

Las palabras de la consulta se convierten en lexemas utilizando el tokenizador de acuerdo con las siguientes reglas:

  • Los tokens solo pueden constar de caracteres ASCII y el suplemento Latin-1 (idiomas occidentales). Todos los demás caracteres se consideran espacios.
  • Las palabras separadas por un guion (-) se dividen en dos tokens. Por ejemplo, “texto completo” se divide en “completo” y “texto”.
  • Los tokens no distinguen entre acentos y mayúsculas y minúsculas.

Puede buscar una palabra o frase completa o limitar sus resultados utilizando los siguientes caracteres:

  • Excluya los resultados de una palabra precediéndola con un guion “-“. Por ejemplo, “ficción -ciencia” incluye todos los resultados de búsqueda de la palabra “ficción” y excluye aquellos que contienen la palabra “ciencia”.
  • Puedes especificar prefijos colocando el carácter * al final de una palabra. Por ejemplo, fict* incluirá todos los resultados de búsqueda de ficción y ficticio. El SDK no admite actualmente la búsqueda por sufijos.

Búsqueda mediante operadores

chat2desk.searchByQuery(query: String, options: SearchOptions?): [Message]

SearchOptions.init(
  /**
    * Оператор поиска
    */
  operator: QueryStringOperator.contains, 
  /**
    * Чувствительность к регистру.
    * Только для символов ASCII и Latin-1 (западные языки)
    */
  caseSensitivity: false
)

enum QueryStringOperator {
    case beginswith
    case contains
    case endswith
    case like
    case equal
    case notequal
}

En la configuración de búsqueda, puede especificar el operador que se utilizará para buscar mensajes.
 

OperadorDescripción
beginswithSe evalúa como verdadero si la expresión de cadena izquierda comienza con la expresión de cadena derecha. Es similar a “contains”, pero solo coincide si la expresión de cadena derecha está al principio de la expresión de cadena izquierda.
containsSe evalúa como verdadero si la expresión de cadena derecha aparece en cualquier lugar de la expresión de cadena izquierda.
endswithSe evalúa como verdadero si la expresión de cadena izquierda termina con la expresión de cadena derecha. Es similar a “contains”, pero solo coincide si la expresión de cadena izquierda está al final de la expresión de cadena derecha.
likeSe evalúa como verdadero si la expresión de cadena izquierda coincide con la expresión de cadena comodín derecha. Una expresión de cadena comodín es una cadena que utiliza caracteres regulares con dos comodines especiales:El carácter * coincide con cero o más caracteres.El carácter comodín ? coincide con cualquier carácter.Por ejemplo, una cadena con el carácter comodín “d?g” coincide con las palabras “perro”, “dig” y “dug”, pero no con “ding”, “dg” o “un perro”.
equalSe evalúa como verdadero si la cadena izquierda es lexicográficamente igual a la cadena derecha.
notequalSe evalúa como verdadero si la cadena izquierda no es lexicográficamente igual a la cadena derecha.

Envío de mensajes

Para trabajar con mensajes, la biblioteca debe estar conectada al servicio Chat2Desk.

  1. Enviar mensaje:sendMessage(msg: String)chat2desk.sendMessage(msg: txt)
  2. Enviar mensaje con archivo adjunto: sendMessage(msg: String, attachedFile: AttachedFile)Para enviar un archivo adjunto, crea una instancia de la clase AttachedFiley pásala al método.let attachedFile = AttachedFile.Companion().fromURL(url: url, originalName: originalName, mimeType: mimeType, fileSize: fileSize)
    chat2desk.sendMessage(msg: txt, attachedFile: attachedFile)
  3. Reenviar mensaje: resendMessage(message: Message).chat2desk.resendMessage(message: message)

Envío de información del cliente

El servicio permite enviar información sobre el cliente. Por defecto, hay dos campos disponibles name:phone

chat2desk.sendClientParams(name: String, phone: String)

El servicio también transfiere una lista de campos personalizados definidos en la empresa customFields: CFlow<[CustomField]>.

var fields: [CustomField] = []

chat2desk.watchCustomFields().watch { customFields in
    self.fields = customFields?.compactMap({ $0 as? CustomField }) ?? []
}
let fieldSet: [KotlinInt: String] = [KotlinInt(value: self.fields[0].id): "value"]

Task {
  try await chat2desk.sendClientParams(name: "name", phone: "phone", fieldSet: fieldSet)
}

Otros ajustes

  • Información sobre el operadoroperator: CFlow<Operator?>

    chat2desk.watchOperator().watch { operator in
      print(operator)
    }
  • Recibiendo erroreserror: CFlow<Throwable?>
Close Search Window