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
- Instalar CocoaPods (consulte la guía de introducción a CocoaPods ).
- Si no tiene un Podfile , cree uno ejecutándolo
pod init
en el directorio de su proyecto. - Agregue la dependencia Chat2Desk a Podfile.
platform :ios, '9.0'
target 'SDK Demo' do
use_frameworks!
pod 'chat2desk_sdk'
end - Ejecute el comando
pod install
en el directorio del proyecto para instalar el SDK. - 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_HOST
debe 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.close
antes de eliminar la instancia IChat2Desk
para evitar pérdidas de memoria.
Conectando y desconectando
Utilice el método IChat2Desk.start
para conectarse y IChat2Desk.stop
desconectarse 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.
Operador | Descripción |
beginswith | Se 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. |
contains | Se evalúa como verdadero si la expresión de cadena derecha aparece en cualquier lugar de la expresión de cadena izquierda. |
endswith | Se 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. |
like | Se 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”. |
equal | Se evalúa como verdadero si la cadena izquierda es lexicográficamente igual a la cadena derecha. |
notequal | Se 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.
- Enviar mensaje:
sendMessage(msg: String)
chat2desk.sendMessage(msg: txt)
- Enviar mensaje con archivo adjunto:
sendMessage(msg: String, attachedFile: AttachedFile)
Para enviar un archivo adjunto, crea una instancia de la claseAttachedFile
y pásala al método.let attachedFile = AttachedFile.Companion().fromURL(url: url, originalName: originalName, mimeType: mimeType, fileSize: fileSize)
chat2desk.sendMessage(msg: txt, attachedFile: attachedFile) - 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 operador
operator: CFlow<Operator?>
chat2desk.watchOperator().watch { operator in
print(operator)
} - Recibiendo errores
error: CFlow<Throwable?>