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

Inicio con Cocoapods

  1. Instale CocoaPods (consulte la Guía de inicio de CocoaPods).

  2. Si no tienes un Podfile, crea uno ejecutándolo en el directorio del proyecto. pod init

  3. Agregue la dependencia Chat2Desk al archivo Pod.

    platform :ios, '9.0'

    target ‘SDK Demo’ do
       use_frameworks!
       pod ‘chat2desk_sdk’
    end

  4. Ejecute el comando en el directorio del proyecto para instalar el SDK.pod install

  5. Abra su proyecto a través del archivo ..xcworkspace

Inicialización del SDK

Para comenzar, declara los modos de fondo. Ve al archivo principal de tu proyecto, a la pestaña Signing & Capabilities, haz clic en el botón «+» y selecciona Background modes.

Inicialización del SDK

Ahora está listo para crear una instancia del cliente Chat2Desk. Para ello, importe a su clase swift y cree una instancia como se muestra a continuación: chat2desk_sdk 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_HOST debe obtener el > Widget + Chat en vivo desde la página Configuración para un canal conectado específico.

Quitar el SDK

Utilice el método de eliminación previa a la instancia para evitar pérdidas de memoria.IChat2Desk.close IChat2Desk.

Conexión y desconexión

Utilice el método para conectarse y desconectarse del servicio.IChat2Desk.startIChat2Desk.stop

Puede realizar un seguimiento del 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()
    }
}

Recepción de 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 usar el comando watchMessages(): CFlow<[Message]>

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

Carga de mensajes desde el servidor

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

IMPORTANTE: KFOR carga un máximo de 100 mensajes desde el servidor a la vez.

  • chat2desk.fetchMessages() – Obtén una lista de mensajes recientes. Sube 100 mensajes.
  • chat2desk.fetchNewMessages() Le permite obtener una lista de mensajes nuevos. El SDK solo descarga mensajes del servidor que se enviaron después del último mensaje recibido por el dispositivo.
  • chat2desk.fetchMessage(loadMore: true) – Obtén una lista de mensajes antiguos. En este caso, los mensajes anteriores al primero se cargan desde el servidor, pero no más de 100 a la vez.

Buscar mensajes

Hay dos formas de buscar mensajes: texto completo y búsqueda a través de operadores. Ambos métodos le permiten buscar mensajes por propiedad y devolver una lista de mensajes. Message.text [Message].

Búsqueda de texto completo

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

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

  • Los tokens solo pueden constar de caracteres ASCII y el complemento Latin-1 (idiomas occidentales). Todos los demás caracteres se consideran espacios.
  • Las palabras separadas por un guión (-) se separan en dos tokens. Por ejemplo, el texto completo se divide en texto completo y texto.
  • Los tokens no son sensibles a los signos diacríticos ni a las mayúsculas y minúsculas.

Puede buscar una palabra o frase completa, o limitar los resultados con los siguientes caracteres:

  • Excluya los resultados de una palabra precediéndola con un guión “-“. 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.
  • Puede especificar prefijos colocando el * al final de la palabra. Por ejemplo, fict* incluirá todos los resultados de búsqueda de ficción y ficticio. El SDK aún no admite búsquedas de sufijos.

Búsqueda a través de 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. 

Operador

Descripción

beginswith

Expresa true si la expresión de cadena izquierda comienza con la expresión de cadena derecha. Esto es similar a contains, pero solo coincide si la expresión de cadena derecha está al principio de la expresión de cadena izquierda.

contains

Expresa true si la expresión de cadena derecha aparece en cualquier parte de la expresión de cadena izquierda.

endswith

Expresa true si la expresión de cadena izquierda termina con una expresión de cadena derecha. Esto es similar a contains, pero solo coincide si la expresión de cadena izquierda está al final de la expresión de cadena derecha.

like

Expresa true si la expresión de cadena izquierda coincide con el comodín de la expresión de cadena derecha. Una expresión de cadena comodín es una cadena que utiliza caracteres regulares con dos caracteres especiales comodín:

  • El carácter * corresponde a cero o más de cualquier carácter.
  • ¿Comodín? coincide con cualquier carácter.

Por ejemplo, la cadena comodín “d?g” coincide con las palabras “dog”, “dig” y “dug”, pero no con “ding”, “dg” o “a dog”.

equal

Expresa true si la cadena izquierda es lexicográficamente igual a la derecha.

notequal

Expresa true 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 un mensaje: sendMessage(msg: String)
  2. chat2desk.sendMessage(msg: txt)
  3. Enviar un mensaje con un archivo adjunto: . Para enviar un archivo adjunto, cree una instancia de la clase y pásela al método.sendMessage(msg: String, attachedFile: AttachedFile)AttachedFilelet attachedFile = AttachedFile.Companion().fromURL(url: url, originalName: originalName, mimeType: mimeType, fileSize: fileSize)
    chat2desk.sendMessage(msg: txt, attachedFile: attachedFile)
  4. 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. De forma predeterminada, hay dos campos disponibles y .namephone

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

El servicio también envía 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 del operador operator: CFlow<Operator?>

    chat2desk.watchOperator().watch { operator in
      print(operator)
    }

  • Obtención de errores error: CFlow<Throwable?>

Demo

Demostración del SDK de Swift: muestra la funcionalidad básica del SDK.

Was this article helpful?
YesNo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Close Search Window