# JAVASCRIPT API

La API de JavaScript proporciona una colección de funciones y eventos que sustentan la mayor parte de la funcionalidad de ZampiBot. Para comenzar a usar la API de JavaScript, siga el tutorial a continuación.

---

## ⚙️ Configuración y Uso

<span style="white-space: pre-wrap;">Asegúrese de cargar el chat incluyendo el siguiente script en la página donde desea utilizar las APIs e inclúyalo </span>**antes**<span style="white-space: pre-wrap;"> del script del chat. Asegúrese de que los enlaces sean correctos. Si está utilizando la versión de WordPress, este paso no es necesario.</span>

<span style="white-space: pre-wrap;">Si está utilizando la </span>**versión Cloud**<span style="white-space: pre-wrap;">, incluya solo jQuery y el código de inserción (embed) desde su panel de control. Vea el ejemplo a continuación (reemplace </span>`<span class="editor-theme-code">12345678</span>`<span style="white-space: pre-wrap;"> con su propio ID).</span>

HTML

```
<script src="https://chatbot.zampisoft.com/script/js/min/jquery.min.js"></script>
<script id="chat-init" src="https://chatbot.zampisoft.com/account/js/init.js?id=12345678"></script>
```

Ingrese los fragmentos de código, funciones y métodos de esta documentación dentro de una de las funciones a continuación:

JavaScript

```
(function ($) {
    $(document).on("SBInit", function () {
        // Su código aquí
    });
}(jQuery));
```

<span style="white-space: pre-wrap;">Si el evento </span>`<span class="editor-theme-code">SBInit</span>`<span style="white-space: pre-wrap;"> no se dispara, utilice el evento </span>`<span class="editor-theme-code">SBReady</span>`<span style="white-space: pre-wrap;"> en su lugar.</span>

---

### Parámetros de Función

<span style="white-space: pre-wrap;">Ingrese los parámetros de la función en el mismo orden de esta documentación, por ejemplo: </span>`<span class="editor-theme-code">SBChat.sendMessage(user_id, message, attachments)</span>`.

---

### Depuración (Debug)

Verifique la consola del navegador para ver errores e información de depuración.

---

## 📦 Objetos

Los objetos de JavaScript utilizados por ZampiBot se enumeran a continuación. En algunos casos, necesitará usar estos objetos para utilizar una función.

### 👤 SBUser

Representa a un usuario.

**Uso:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">new SBUser(settings, extra)</span>`

- `<span class="editor-theme-code">settings</span>`<span style="white-space: pre-wrap;">: Array con los detalles del usuario, ej. </span>`<span class="editor-theme-code">{ first_name: "", last_name: "", profile_image: "", email: "", user_type: "" }</span>`
- `<span class="editor-theme-code">extra</span>`<span style="white-space: pre-wrap;">: Array con los detalles adicionales del usuario, ej. </span>`<span class="editor-theme-code">{ phone: "", city: "", language: "", country: "", birthday: "" }</span>`

**Métodos:**

- `<span class="editor-theme-code">id</span>`: Devuelve el ID del usuario.
- `<span class="editor-theme-code">type</span>`<span style="white-space: pre-wrap;">: Devuelve el tipo de usuario. Valores disponibles: </span>`<span class="editor-theme-code">visitor</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">lead</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">user</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">agent</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">admin</span>`.
- `<span class="editor-theme-code">name</span>`: Devuelve el nombre completo del usuario (nombre y apellido).
- `<span class="editor-theme-code">nameBeautified</span>`: Devuelve el nombre completo del usuario si está disponible; de lo contrario, devuelve el nombre de visitante predeterminado.
- `<span class="editor-theme-code">image</span>`: Devuelve la imagen de perfil del usuario.
- `<span class="editor-theme-code">get(key)</span>`<span style="white-space: pre-wrap;">: Devuelve el detalle del usuario de la clave dada si está disponible; de lo contrario, devuelve una cadena vacía. Ej. </span>`<span class="editor-theme-code">get("email")</span>`.
- `<span class="editor-theme-code">getExtra(key)</span>`<span style="white-space: pre-wrap;">: Devuelve el detalle adicional del usuario de la clave dada si está disponible; de lo contrario, devuelve una cadena vacía. Ej. </span>`<span class="editor-theme-code">get("phone")</span>`.
- `<span class="editor-theme-code">set(key, value)</span>`<span style="white-space: pre-wrap;">: Actualiza un detalle de usuario o añade uno nuevo. Ej. </span>`<span class="editor-theme-code">set("phone", "(02) 123 456789")</span>`.
- `<span class="editor-theme-code">setExtra(key, value)</span>`: Actualiza un detalle adicional de usuario o añade uno nuevo.
- `<span class="editor-theme-code">update(function(){})</span>`: Conecta a la base de datos y actualiza los detalles del usuario y los detalles adicionales con datos frescos. Opcionalmente ejecuta una función al finalizar. Este método es asíncrono y requiere el ID del usuario para funcionar.
- `<span class="editor-theme-code">getConversations(function(conversations){}, exclude_id)</span>`<span style="white-space: pre-wrap;">: Conecta a la base de datos y obtiene las conversaciones del usuario; cada conversación incluye un extracto del último mensaje. Opcionalmente ejecuta una función al finalizar. El parámetro </span>`<span class="editor-theme-code">exclude_id</span>`<span style="white-space: pre-wrap;"> puede ser cualquier ID de conversación y excluirá esa conversación del valor devuelto. Este método es asíncrono y requiere el ID del usuario para funcionar.</span>
- `<span class="editor-theme-code">getConversationsCode(conversations)</span>`<span style="white-space: pre-wrap;">: Devuelve el código HTML de la lista de conversaciones. Opcionalmente acepta un array de objetos </span>`<span class="editor-theme-code">SBConversation</span>`.
- `<span class="editor-theme-code">getFullConversation(conversation_id, function(conversation){})</span>`: Conecta a la base de datos y devuelve una conversación completa, incluyendo todos los mensajes. Opcionalmente ejecuta una función al finalizar. Este método es asíncrono y requiere un ID de conversación para funcionar.
- `<span class="editor-theme-code">getConversationByID(conversation_id, index)</span>`<span style="white-space: pre-wrap;">: Busca una conversación con el ID dado y la devuelve; de lo contrario, devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;">. Establezca </span>`<span class="editor-theme-code">index</span>`<span style="white-space: pre-wrap;"> en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para obtener la posición en el array de conversaciones.</span>
- `<span class="editor-theme-code">addConversation(conversation)</span>`<span style="white-space: pre-wrap;">: Añade una nueva conversación al objeto de usuario. El parámetro </span>`<span class="editor-theme-code">conversation</span>`<span style="white-space: pre-wrap;"> debe ser un objeto </span>`<span class="editor-theme-code">SBConversation</span>`. Este método no actualiza la base de datos.
- `<span class="editor-theme-code">removeConversation(conversation_id)</span>`: Elimina una conversación.
- `<span class="editor-theme-code">getLastConversation()</span>`<span style="white-space: pre-wrap;">: Devuelve la última conversación si existe; de lo contrario, devuelve </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">isConversationsEmpty()</span>`<span style="white-space: pre-wrap;">: Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el usuario tiene al menos 1 conversación; de lo contrario, devuelve </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">isExtraEmpty()</span>`<span style="white-space: pre-wrap;">: Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si los detalles adicionales del usuario ya han sido establecidos; de lo contrario, devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;">. Este método devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> también si la lista de detalles adicionales está vacía, pero está establecida.</span>
- `<span class="editor-theme-code">delete(function(){})</span>`: Elimina al usuario de la base de datos y todas las conversaciones y mensajes vinculados permanentemente. Opcionalmente ejecuta una función al finalizar. Este método es asíncrono y requiere el ID del usuario para funcionar.
- `<span class="editor-theme-code">language()</span>`: Devuelve el idioma del usuario.

**Variables:**

- `<span class="editor-theme-code">details</span>`: Array con los detalles del usuario.
- `<span class="editor-theme-code">extra</span>`: Array con los detalles adicionales del usuario.
- `<span class="editor-theme-code">conversations</span>`: Array con las conversaciones del usuario. Cada conversación contiene solo el último mensaje.

---

### ✉️ SBMessage

Representa un mensaje de una conversación.

**Uso:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">new SBMessage(details)</span>`

- `<span class="editor-theme-code">details</span>`<span style="white-space: pre-wrap;">: Array con los detalles del mensaje, ej. </span>`<span class="editor-theme-code">{ "id": "2319", "user_id": "377", "message": "...", ... }</span>`

**Métodos:**

- `<span class="editor-theme-code">id</span>`: Devuelve el ID del mensaje.
- `<span class="editor-theme-code">attachments</span>`: Devuelve el array de adjuntos.
- `<span class="editor-theme-code">message</span>`: Devuelve el texto del mensaje.
- `<span class="editor-theme-code">get(key)</span>`<span style="white-space: pre-wrap;">: Devuelve el contenido de la clave dada si está disponible; de lo contrario, devuelve una cadena vacía. Ej. </span>`<span class="editor-theme-code">get("message")</span>`.
- `<span class="editor-theme-code">set(key, value)</span>`<span style="white-space: pre-wrap;">: Actualiza un detalle del mensaje o añade uno nuevo. Ej. </span>`<span class="editor-theme-code">set("message", "Hello!")</span>`.
- `<span class="editor-theme-code">payload(key, value)</span>`<span style="white-space: pre-wrap;">: Establece u obtiene el payload. El payload es un array asociativo que contiene datos extra. Si el valor </span>`<span class="editor-theme-code">value</span>`<span style="white-space: pre-wrap;"> se establece, el método añade o actualiza la clave con el valor dado.</span>
- `<span class="editor-theme-code">getCode(translation)</span>`<span style="white-space: pre-wrap;">: Devuelve el código HTML del mensaje, listo para ser insertado en el elemento DOM del chat. Este método procesa adjuntos, Mensajes Enriquecidos y formato de texto. Establezca </span>`<span class="editor-theme-code">translation</span>`<span style="white-space: pre-wrap;"> en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para obtener el mensaje traducido si está disponible.</span>
- `<span class="editor-theme-code">render(message)</span>`: Renderiza el mensaje y le da formato añadiendo estilos como negrita y cursiva, y convirtiendo URLs en enlaces clicables. Opcionalmente acepta una cadena y la renderiza en su lugar.
- `<span class="editor-theme-code">strip(message)</span>`: Elimina el formato de texto. Opcionalmente acepta una cadena y elimina el formato de texto de ella en su lugar.

**Variables:**

- `<span class="editor-theme-code">details</span>`: Array con los detalles del mensaje.

---

### 💬 SBConversation

Representa una conversación.

**Uso:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">new SBConversation(messages, details)</span>`

- `<span class="editor-theme-code">messages</span>`<span style="white-space: pre-wrap;">: Array de objetos </span>`<span class="editor-theme-code">SBMessage</span>`.
- `<span class="editor-theme-code">details</span>`<span style="white-space: pre-wrap;">: (Opcional) Array con los detalles de la conversación, ej. </span>`<span class="editor-theme-code">{ conversation_status_code: "2", ... }</span>`

**Métodos:**

- `<span class="editor-theme-code">id</span>`: Devuelve el ID de la conversación.
- `<span class="editor-theme-code">get(key)</span>`: Devuelve el contenido de la clave dada si está disponible; de lo contrario, devuelve una cadena vacía.
- `<span class="editor-theme-code">set(key, value)</span>`: Actualiza un detalle de la conversación o añade uno nuevo.
- `<span class="editor-theme-code">getMessage(ID)</span>`<span style="white-space: pre-wrap;">: Devuelve el mensaje con el ID dado. Devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si no se encuentra.</span>
- `<span class="editor-theme-code">getLastMessage()</span>`<span style="white-space: pre-wrap;">: Devuelve el último mensaje de la conversación. Devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si no hay mensajes.</span>
- `<span class="editor-theme-code">getLastUserMessage(index, agent)</span>`<span style="white-space: pre-wrap;">: Devuelve el último mensaje enviado por el usuario (excluye bots, agentes, admins). Opcionalmente acepta un </span>`<span class="editor-theme-code">index</span>`<span style="white-space: pre-wrap;"> para iniciar la búsqueda en orden inverso.</span>
    - `<span class="editor-theme-code">agent</span>`<span style="white-space: pre-wrap;">: </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> (último de agentes/admins), </span>`<span class="editor-theme-code">bot</span>`<span style="white-space: pre-wrap;"> (último del bot), </span>`<span class="editor-theme-code">no-bot</span>`<span style="white-space: pre-wrap;"> (usuario o agente excluyendo bot), </span>`<span class="editor-theme-code">all</span>`<span style="white-space: pre-wrap;"> (agente o bot).</span>
- `<span class="editor-theme-code">getNextMessage(message_id, user_type)</span>`<span style="white-space: pre-wrap;">: Devuelve el mensaje siguiente al del ID proporcionado. </span>`<span class="editor-theme-code">user_type</span>`<span style="white-space: pre-wrap;"> puede ser </span>`<span class="editor-theme-code">user</span>`<span style="white-space: pre-wrap;"> o </span>`<span class="editor-theme-code">agent</span>`.
- `<span class="editor-theme-code">updateMessage(ID, message)</span>`<span style="white-space: pre-wrap;">: Actualiza el mensaje con el ID dado. El parámetro </span>`<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> debe ser un objeto </span>`<span class="editor-theme-code">SBMessage</span>`.
- `<span class="editor-theme-code">addMessages(messages)</span>`<span style="white-space: pre-wrap;">: Añade nuevos mensajes a la conversación. El parámetro </span>`<span class="editor-theme-code">messages</span>`<span style="white-space: pre-wrap;"> debe ser un objeto </span>`<span class="editor-theme-code">SBMessage</span>`<span style="white-space: pre-wrap;"> único o un array de ellos.</span>
- `<span class="editor-theme-code">getCode(text_only)</span>`: Devuelve el código HTML, o el texto formateado, del mensaje.
- `<span class="editor-theme-code">deleteMessage(ID)</span>`: Elimina el mensaje con el ID dado del objeto de conversación. No actualiza la base de datos.
- `<span class="editor-theme-code">searchMessages(search, exact_match)</span>`<span style="white-space: pre-wrap;">: Busca la cadena especificada en todos los mensajes y devuelve un array de coincidencias. </span>`<span class="editor-theme-code">exact_match</span>`<span style="white-space: pre-wrap;"> en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para coincidencia exacta.</span>
- `<span class="editor-theme-code">getUserMessages(user_type)</span>`<span style="white-space: pre-wrap;">: Devuelve un array conteniendo solo los mensajes enviados por el usuario, el bot o los agentes. Valores: </span>`<span class="editor-theme-code">user</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">agents</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">bot</span>`<span style="white-space: pre-wrap;">. Por defecto: </span>`<span class="editor-theme-code">user</span>`.
- `<span class="editor-theme-code">getAttachments()</span>`: Devuelve un array con todos los adjuntos de la conversación.
- `<span class="editor-theme-code">getLastConversationID()</span>`<span style="white-space: pre-wrap;">: Devuelve el ID de la última conversación si existe; de lo contrario, devuelve </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">updateMessagesStatus(ids)</span>`<span style="white-space: pre-wrap;">: Actualiza el código de estado de múltiples mensajes a leído. </span>`<span class="editor-theme-code">ids</span>`<span style="white-space: pre-wrap;"> es un array opcional de IDs de mensaje; si se proporciona, se añade el icono de check pero no se actualiza en la base de datos.</span>

**Variables:**

- `<span class="editor-theme-code">details</span>`: Array con los detalles de la conversación.

---

## 🔣 Variables Globales

Las variables en la lista a continuación son accesibles públicamente vía JavaScript.

<table id="bkmrk-variabledescripci%C3%B3ns"><colgroup><col style="width: 225px;"></col><col></col></colgroup><tbody><tr><td>Variable

</td><td>Descripción

</td></tr><tr><td>`<span class="editor-theme-code">SB_ARTICLES_PAGE</span>`

</td><td><span style="white-space: pre-wrap;">Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para mostrar la página de artículos en lugar del chat.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SB_LOCAL_SETTINGS</span>`

</td><td><span style="white-space: pre-wrap;">Sobrescribe las configuraciones predeterminadas del lado del cliente. El valor es un array de claves y valores (ej. </span>`<span class="editor-theme-code">{ registration-required: false }</span>`). Solo afecta configuraciones del cliente.

</td></tr><tr><td>`<span class="editor-theme-code">SB_DISABLED</span>`

</td><td><span style="white-space: pre-wrap;">Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> e insértelo en una página para prevenir que el chat o el área de tickets carguen.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SB_REGISTRATION_REQUIRED</span>`

</td><td>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para deshabilitar el registro obligatorio, </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para deshabilitar el registro.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SB_TICKETS</span>`

</td><td><span style="white-space: pre-wrap;">Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para forzar la carga del área de tickets en lugar del chat. Requiere la App de Tickets.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SB_DEFAULT_USER</span>`

</td><td>Establece los detalles del usuario por defecto para nuevos visitantes. Si un usuario registrado visita y su login difiere, se cierra sesión e inicia con los nuevos detalles. Incluya email y hash de contraseña para asegurar el funcionamiento.

</td></tr><tr><td>`<span class="editor-theme-code">SB_DEFAULT_DEPARTMENT</span>`

</td><td><span style="white-space: pre-wrap;">Asigne un </span>**ID de departamento**<span style="white-space: pre-wrap;"> para asignar automáticamente ese departamento a nuevas conversaciones creadas desde la página.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SB_DEFAULT_AGENT</span>`

</td><td><span style="white-space: pre-wrap;">Asigne un </span>**ID de agente**<span style="white-space: pre-wrap;"> para asignar automáticamente ese agente a nuevas conversaciones. Úselo con la opción "Ocultar conversaciones de otros agentes".</span>

</td></tr><tr><td>`<span class="editor-theme-code">SBChat.initialized</span>`

</td><td>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el chat está inicializado.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SBChat.conversation</span>`

</td><td><span style="white-space: pre-wrap;">Devuelve la conversación activa. </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si no hay ninguna.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SBChat.is_busy</span>`

</td><td>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el chat está en modo ocupado (no se pueden enviar mensajes).</span>

</td></tr><tr><td>`<span class="editor-theme-code">SBChat.chat_open</span>`

</td><td>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el chat está abierto.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SBChat.agent_id</span>`

</td><td><span style="white-space: pre-wrap;">ID del agente activo en la conversación. </span>`<span class="editor-theme-code">-1</span>`<span style="white-space: pre-wrap;"> si no hay.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SBChat.agent_online</span>`

</td><td>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el agente activo está en línea.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SBChat.user_online</span>`

</td><td>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el usuario está en línea.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SBChat.timetable</span>`

</td><td>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si la hora actual está dentro del horario de oficina.</span>

</td></tr><tr><td>`<span class="editor-theme-code">SBChat.dashboard</span>`

</td><td>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el panel de control está activo y visible.</span>

</td></tr></tbody></table>

---

# ⚡ Funciones

Funciones para gestionar el chat, usuarios, conversaciones y mensajes.

### SBChat.submit()

Ejecuta el evento de clic del botón de envío del editor de chat, envía un mensaje con el contenido insertado por el usuario (mensaje y/o adjuntos) y limpia el editor.

---

### SBChat.sendMessage()

Añade un nuevo mensaje a la conversación activa.

**Parámetros**

- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;">: El ID del usuario que envía el mensaje. Utilice la función </span>`<span class="editor-theme-code">SBF.setting("bot-id")</span>`<span style="white-space: pre-wrap;"> para obtener el ID del bot. </span>**Por defecto:**<span style="white-space: pre-wrap;"> -1 (ID del usuario activo).</span>
- `<span class="editor-theme-code">message</span>`: El texto del mensaje.
- `<span class="editor-theme-code">attachments</span>`<span style="white-space: pre-wrap;">: Array de adjuntos. Sintaxis del array: </span>`<span class="editor-theme-code">[["nombre", "enlace"], ["nombre", "enlace"], ...]</span>`<span style="white-space: pre-wrap;">. Reemplace </span>`<span class="editor-theme-code">nombre</span>`<span style="white-space: pre-wrap;"> con el nombre del adjunto y </span>`<span class="editor-theme-code">enlace</span>`<span style="white-space: pre-wrap;"> con la URL completa del adjunto. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[]</span>`.
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar cuando la operación se completa. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`<span style="white-space: pre-wrap;">. La respuesta es la misma que la del evento </span>`<span class="editor-theme-code">SBMessageSent</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">payload</span>`<span style="white-space: pre-wrap;">: Array asociativo conteniendo datos extra, ej. </span>`<span class="editor-theme-code">{ "event": "delete-message" }</span>`.
- `<span class="editor-theme-code">conversation_status_code</span>`<span style="white-space: pre-wrap;">: El código de estado de la conversación, si se crea una nueva. Códigos de estado: activo (live) = </span>`<span class="editor-theme-code">0</span>`<span style="white-space: pre-wrap;">, esperando respuesta del usuario = </span>`<span class="editor-theme-code">1</span>`<span style="white-space: pre-wrap;">, esperando respuesta del agente = </span>`<span class="editor-theme-code">2</span>`<span style="white-space: pre-wrap;">, archivado = </span>`<span class="editor-theme-code">3</span>`<span style="white-space: pre-wrap;">, papelera = </span>`<span class="editor-theme-code">4</span>`<span style="white-space: pre-wrap;">. Establézcalo en </span>`<span class="editor-theme-code">skip</span>`<span style="white-space: pre-wrap;"> para mantener el estado actual.</span>

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> El usuario debe estar activo.</span>

---

### SBChat.updateMessage()

Cambia el texto de un mensaje existente.

**Parámetros**

- `<span class="editor-theme-code">message_id</span>`: El ID del mensaje.
- `<span class="editor-theme-code">message</span>`: El texto del mensaje.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> El usuario debe estar activo.</span>
- Si el usuario activo es un agente o administrador, se pueden actualizar los mensajes de cualquier usuario. Si el usuario activo es un usuario final, solo puede actualizar sus propios mensajes.

---

### SBChat.sendEmail()

<span style="white-space: pre-wrap;">Envía un correo electrónico a los usuarios o agentes devueltos por </span>`<span class="editor-theme-code">getRecipientUserID()</span>`.

**Parámetros**

- `<span class="editor-theme-code">message</span>`: El texto del mensaje.
- `<span class="editor-theme-code">attachments</span>`<span style="white-space: pre-wrap;">: Array de adjuntos. Sintaxis del array: </span>`<span class="editor-theme-code">[["nombre", "enlace"], ["nombre", "enlace"], ...]</span>`. Dialogflow puede leer este array.
- `<span class="editor-theme-code">send_to_active_user</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para enviar el correo al usuario activo. Establézcalo en un ID de usuario para enviarlo a ese usuario específico. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar cuando se completa. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

---

### SBChat.sendSMS()

<span style="white-space: pre-wrap;">Envía un mensaje de texto (SMS) a los usuarios o agentes devueltos por </span>`<span class="editor-theme-code">getRecipientUserID()</span>`.

**Parámetros**

- `<span class="editor-theme-code">message</span>`: El texto del mensaje.

---

### SBChat.desktopNotification()

Envía una notificación de escritorio (Notificación Web) al usuario, o al agente conectado si la notificación se envía desde el área de administración.

**Parámetros**

- `<span class="editor-theme-code">title</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El título de la notificación.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El texto del mensaje.
- `<span class="editor-theme-code">icon</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El icono de la notificación.
- `<span class="editor-theme-code">conversation_id</span>`: El ID de la conversación que se abrirá cuando el usuario haga clic en la notificación.

---

### SBChat.getRecipientUserID()

Determina el destinatario adecuado basándose en el contexto.

- <span style="white-space: pre-wrap;">Si el usuario activo es un </span>**usuario**<span style="white-space: pre-wrap;">: devuelve el ID del último agente que respondió la conversación; de lo contrario, el ID del agente asignado; si no, el ID del departamento asignado; de lo contrario devuelve </span>`<span class="editor-theme-code">agents</span>`<span style="white-space: pre-wrap;"> (significa todos los agentes).</span>
- <span style="white-space: pre-wrap;">Si el usuario activo es un </span>**admin o agente**: devuelve el ID del usuario activo.

---

### SBChat.initChat()

Inicializa el chat y muestra el botón de chat.

**Información**

- <span style="white-space: pre-wrap;">Use esta función en combinación con el ajuste </span>**Inicialización manual**<span style="white-space: pre-wrap;"> del área </span>`<span class="editor-theme-code">Configuración > Chat</span>`.
- <span style="white-space: pre-wrap;">Este método no debe insertarse en el evento </span>`<span class="editor-theme-code">$(document).on("SBInit", function () { ... });</span>`<span style="white-space: pre-wrap;">, use </span>`<span class="editor-theme-code">$(document).on("SBReady", function () { ... });</span>`<span style="white-space: pre-wrap;"> en su lugar.</span>

---

### SBChat.open()

<span style="white-space: pre-wrap;">Abre o cierra la ventana del chat. También puede añadir la clase o ID </span>`<span class="editor-theme-code">sb-open-chat</span>`<span style="white-space: pre-wrap;"> a cualquier elemento (por ejemplo, un botón) para abrir o cerrar el chat cuando se haga clic en él.</span>

**Parámetros**

- `<span class="editor-theme-code">open</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para cerrar el chat. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">true</span>`.

---

### SBChat.openConversation()

Abre una conversación y la muestra en la ventana de chat.

**Parámetros**

- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El ID de la conversación a abrir. Solo se pueden abrir las conversaciones del usuario activo. Use la función </span>`<span class="editor-theme-code">SBF.activeUser().conversations</span>`<span style="white-space: pre-wrap;"> para obtener la lista.</span>

---

### SBChat.update()

Actualiza la conversación activa y comprueba si hay nuevos mensajes. Esta función se dispara automáticamente cada 1000ms.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> Debe haber una conversación activa.</span>
- **Requisito:**<span style="white-space: pre-wrap;"> El usuario debe estar activo.</span>

---

### SBChat.populateConversations()

Puebla la lista de conversaciones del usuario en el panel (dashboard) con todas las conversaciones del usuario.

**Parámetros**

- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(conversations) { ... }</span>`.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> El usuario debe estar activo.</span>

---

### SBChat.updateConversations()

Actualiza la lista de conversaciones del usuario en el panel y comprueba si hay nuevas conversaciones. Esta función se dispara automáticamente cada 10000ms.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> El usuario debe estar activo.</span>

---

### SBChat.newConversation()

Crea una nueva conversación y opcionalmente añade el primer mensaje a ella.

**Parámetros**

- `<span class="editor-theme-code">status_code</span>`<span style="white-space: pre-wrap;">: El código de estado de la conversación. </span>**Por defecto:**<span style="white-space: pre-wrap;"> 0. (0=activo, 1=esperando usuario, 2=esperando agente, 3=archivo, 4=papelera).</span>
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;">: El ID del usuario vinculado a la nueva conversación. </span>**Por defecto:**<span style="white-space: pre-wrap;"> -1 (ID usuario activo).</span>
- `<span class="editor-theme-code">message</span>`: El texto del mensaje.
- `<span class="editor-theme-code">attachments</span>`: Array de adjuntos.
- `<span class="editor-theme-code">department</span>`<span style="white-space: pre-wrap;">: El ID de un departamento. Puede obtener los IDs en </span>`<span class="editor-theme-code">Configuración > Misceláneas > Departamentos</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> NULL.</span>
- `<span class="editor-theme-code">agent_id</span>`<span style="white-space: pre-wrap;">: El ID del agente asignado. </span>**Por defecto:**<span style="white-space: pre-wrap;"> NULL.</span>
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(conversation) { ... }</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> El usuario debe estar activo.</span>

---

### SBChat.setConversation()

Establece una conversación existente como la conversación activa.

**Parámetros**

- `<span class="editor-theme-code">conversation</span>`<span style="white-space: pre-wrap;">: La conversación. Debe ser un objeto </span>`<span class="editor-theme-code">SBConversation</span>`.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> El usuario debe estar activo.</span>

---

### SBChat.startRealTime()

Inicia la comprobación en tiempo real de nuevos mensajes para la conversación activa cada 1000ms.

---

### SBChat.stopRealTime()

Detiene la comprobación en tiempo real de nuevos mensajes.

---

### SBChat.busy()

Muestra u oculta el icono de carga y habilita o deshabilita el modo ocupado del chat. Cuando el chat está en modo ocupado, no se pueden enviar mensajes ni adjuntos.

**Parámetros**

- `<span class="editor-theme-code">value</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para mostrar el icono de carga, </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para ocultarlo.</span>

**Información**

- El icono de carga aparece solo en el área de conversación, no en el panel (dashboard) ni en otros paneles.
- **Requisito:**<span style="white-space: pre-wrap;"> El usuario debe estar activo.</span>

---

### SBChat.lastAgent()

Devuelve el último agente de la conversación activa.

**Parámetros**

- `<span class="editor-theme-code">bot</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para excluir al bot. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">true</span>`.

**Respuesta**

JSON

```
{
    "user_id": "123456",
    "full_name": "Don John",
    "profile_image": "https://zampisoft.com/agent.svg"
}
```

---

### SBChat.scrollBottom()

Desplaza el chat hacia el final (abajo).

**Parámetros**

- `<span class="editor-theme-code">top</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para desplazar hacia el principio (arriba). </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

---

### SBChat.isBottom()

Comprueba si el chat está desplazado hasta el final.

---

## SBChat.showDashboard()

Muestra el panel de control (dashboard).

---

### SBChat.hideDashboard()

Oculta el panel de control.

---

### SBChat.showPanel()

Muestra el área especificada dentro del widget de chat.

**Parámetros**

- `<span class="editor-theme-code">name</span>`<span style="white-space: pre-wrap;">: El nombre del panel. Valores disponibles: </span>`<span class="editor-theme-code">articles</span>`.

---

### SBChat.hidePanel()

Oculta el panel activo dentro del widget de chat.

---

### SBChat.clear()

Limpia el área de conversación del widget de chat y deshabilita la conversación activa.

---

### SBChat.updateNotifications()

Actualiza el contador rojo de notificaciones del botón de chat que alerta al usuario de nuevos mensajes y conversaciones.

**Parámetros**

- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la conversación vinculada a la actualización del contador.
- `<span class="editor-theme-code">message_id</span>`<span style="white-space: pre-wrap;">: El ID del mensaje no leído, establézcalo para incrementar el contador en 1. Establézcalo en </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para decrementar el contador en 1. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

---

### SBChat.setConversationStatus()

Actualiza el código de estado de una conversación.

**Parámetros**

- `<span class="editor-theme-code">status_code</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El código de estado a asignar. (0=activo, 1=esperando usuario, 2=esperando agente, 3=archivo, 4=papelera).

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> El usuario debe estar activo.</span>

---

### SBChat.typing()

Gestiona la etiqueta "escribiendo..." del encabezado del chat.

**Parámetros**

- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;">: El ID del usuario activo (o del agente activo si está en el admin). </span>**Por defecto:**<span style="white-space: pre-wrap;"> -1.</span>
- `<span class="editor-theme-code">action</span>`: Valores disponibles:
    - `<span class="editor-theme-code">check</span>`: Comprueba si el usuario con el ID dado está escribiendo y actualiza el encabezado.
    - `<span class="editor-theme-code">set</span>`: Asigna el estado de escribiendo al usuario y actualiza el encabezado.
    - `<span class="editor-theme-code">start</span>`: Muestra el estado de escribiendo en el encabezado.
    - `<span class="editor-theme-code">stop</span>`: Oculta el estado de escribiendo del encabezado.

**Información**

- La etiqueta de escribiendo es visible solo cuando una conversación está abierta.

### SBChat.showArticles()

Muestra el área de artículos o un solo artículo.

**Parámetros**

- `<span class="editor-theme-code">id</span>`<span style="white-space: pre-wrap;">: El ID de un artículo para mostrar. Use </span>`<span class="editor-theme-code">SBChat.getArticles()</span>`<span style="white-space: pre-wrap;"> para obtener la lista. </span>**Por defecto:**<span style="white-space: pre-wrap;"> -1.</span>

### SBChat.getArticles()

Devuelve la lista de artículos o el contenido de un solo artículo.

**Parámetros**

- `<span class="editor-theme-code">id</span>`<span style="white-space: pre-wrap;">: El ID de un artículo a mostrar. Añada múltiples IDs separados por comas. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">category</span>`<span style="white-space: pre-wrap;">: Devuelve solo los artículos de la categoría dada. Si es </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> devuelve también la lista de categorías. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">true</span>`.
- `<span class="editor-theme-code">count</span>`<span style="white-space: pre-wrap;">: El número máximo de artículos a devolver. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">true</span>`.

**Respuesta**

JSON

```
[
    {
        "id": "6P2Oq",
        "title": "What's new with the API V2?p",
        "content": "The API V2 is the new iteration of our developer API ...",
        "link": "https://board.support",
        "categories": ["Nv9PG"]
    },
    {
        "title": "Which API version am I currently using?",
        "content": "The API version is configured separately for each ...",
        "link": "",
        "id": "IDkft",
        "categories": []
    },
    ...
]
```

Si es un solo artículo, el valor devuelto es el artículo:

```
{ "id" : "6P2Oq" , "title" : "¿Qué novedades trae la API V2?p" , "content" : "La API V2 es la nueva versión de nuestra API para desarrolladores. Esta nueva API integra Google Cloud Spe. La API V2 es la nueva versión de nuestra API para desarrolladores." , "link" : "https://zampisoft.com" }
    
```

**Información**

- Cada artículo de la lista contiene solo un extracto del contenido.

---

### SBChat.getArticleCategories()

Devuelve las categorías de artículos.

**Parámetros**

- `<span class="editor-theme-code">category_type</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">parent</span>`<span style="white-space: pre-wrap;"> para devolver solo las categorías padres. Establézcalo en </span>`<span class="editor-theme-code">normal</span>`<span style="white-space: pre-wrap;"> para devolver todas las categorías excepto las padres. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

```
[
  {
    "id": "audio",
    "titulo": "Audio",
    "descripcion": "Lorem ipsum dolor adipiscing elit.",
    "imagen": "https://example.com/image.png",
    "parent": true,
    "idiomas": {
      "es": {
        "titulo": "Audio",
        "descripcion": "Leorem ipsum dolor consectetur adipiscing elit."
      }
    }
  },
  {
    "id": "audio_digital",
    "titulo": "Audio digital",
    "descripcion": "Lorem ipsum dolor sit amet, adipiscing.",
    "imagen": "",
    "parent": false,
    "idiomas": {}
  }
]

```

---

### SBChat.searchArticles()

Muestra los artículos que coinciden con la búsqueda en la caja de artículos del panel (dashboard).

**Parámetros**

- `<span class="editor-theme-code">search</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Cadena con los términos de búsqueda. La función de búsqueda soporta el título y el contenido.
- `<span class="editor-theme-code">button</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El objeto del botón de búsqueda.
- `<span class="editor-theme-code">target</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El objeto HTML donde se insertarán los artículos.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> El panel (dashboard) debe estar activo.</span>
- **Requisito:**<span style="white-space: pre-wrap;"> Los artículos deben estar activos.</span>

---

### SBChat.setArticleRating()

Establece la calificación de un artículo.

**Parámetros**

- `<span class="editor-theme-code">article_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del artículo.
- `<span class="editor-theme-code">rating</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: La calificación a añadir. Ingrese </span>`<span class="editor-theme-code">1</span>`<span style="white-space: pre-wrap;"> para una calificación positiva o </span>`<span class="editor-theme-code">0</span>`<span style="white-space: pre-wrap;"> para una negativa.</span>
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

---

### SBChat.categoryEmoji()

Selecciona una categoría de la caja de emojis.

**Parámetros**

- `<span class="editor-theme-code">category</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El nombre de la categoría. Valores disponibles: </span>`<span class="editor-theme-code">Smileys</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">People</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">Animals</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">Food</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">Travel</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">Activities</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">Objects</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">Symbols</span>`.

---

### SBChat.searchEmoji()

Busca emojis que coincidan con los términos de búsqueda y los muestra en la caja de emojis.

**Parámetros**

- `<span class="editor-theme-code">search</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El texto de búsqueda.

---

### SBChat.insertText()

Inserta una cadena en el editor de chat.

**Parámetros**

- `<span class="editor-theme-code">text</span>`: La cadena a insertar en el editor.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> Debe haber una conversación activa y abierta.</span>

---

### SBChat.privacy()

Muestra el mensaje de privacidad y obliga al usuario a aceptar los términos antes de iniciar el chat.

---

### SBChat.popup()

Muestra un mensaje emergente (pop-up) o lo cierra.

**Parámetros**

- `<span class="editor-theme-code">close</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para cerrar el pop-up. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">content</span>`<span style="white-space: pre-wrap;">: Array con el contenido del pop-up. Sintaxis del array: </span>`<span class="editor-theme-code">{ image: "", title: "", message: "" }</span>`<span style="white-space: pre-wrap;">. Establézcalo en </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para usar el contenido de </span>`<span class="editor-theme-code">Configuración > Chat > Mensaje emergente</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> El chat debe estar cerrado.</span>

---

### SBChat.slackMessage()

Envía un mensaje a Slack.

**Parámetros**

- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El ID del usuario activo (o el ID del agente activo si está en el área de administración). Utilice la función </span>`<span class="editor-theme-code">SBF.activeUser().id</span>`<span style="white-space: pre-wrap;"> para obtener el ID del usuario activo (utilice la variable </span>`<span class="editor-theme-code">SB_ACTIVE_AGENT["id"]</span>`<span style="white-space: pre-wrap;"> para obtener el ID del agente activo si está en el área de administración). Utilice la variable </span>`<span class="editor-theme-code">SBChat.agent_id</span>`<span style="white-space: pre-wrap;"> para obtener el ID del último agente de la conversación. </span>**Por defecto:**<span style="white-space: pre-wrap;"> -1.</span>
- `<span class="editor-theme-code">full_name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El nombre del remitente, aparecerá en Slack a la izquierda del mensaje. Debería ser el nombre de un agente si el mensaje proviene de un agente, o el nombre del usuario en caso contrario.
- `<span class="editor-theme-code">profile_image</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: La imagen de perfil del remitente, aparecerá en Slack a la izquierda del mensaje. Debería ser la imagen de perfil de un agente si el mensaje proviene de un agente, o la imagen del usuario en caso contrario. Formatos soportados: </span>`<span class="editor-theme-code">PNG</span>`<span style="white-space: pre-wrap;"> y </span>`<span class="editor-theme-code">JPG</span>`.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El texto del mensaje.
- `<span class="editor-theme-code">attachments</span>`<span style="white-space: pre-wrap;">: Array de adjuntos. Sintaxis del array: </span>`<span class="editor-theme-code">[["nombre", "enlace"], ["nombre", "enlace"], ...]</span>`<span style="white-space: pre-wrap;">. Reemplace </span>`<span class="editor-theme-code">nombre</span>`<span style="white-space: pre-wrap;"> con el nombre del adjunto y </span>`<span class="editor-theme-code">enlace</span>`<span style="white-space: pre-wrap;"> con la URL completa del adjunto.</span>

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> Debe haber una conversación activa.</span>

---

### SBChat.deleteMessage()

Elimina un mensaje de la base de datos y de la conversación activa si está disponible.

**Parámetros**

- `<span class="editor-theme-code">message_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El ID del mensaje a eliminar. Utilice la función </span>`<span class="editor-theme-code">SBChat.conversation.messages</span>`<span style="white-space: pre-wrap;"> para obtener la lista de mensajes de la conversación activa.</span>

**Información**

- Solo se pueden eliminar los mensajes de las conversaciones del usuario activo.
- **Requisito:**<span style="white-space: pre-wrap;"> Debe haber una conversación activa.</span>

---

### SBChat.registration()

Muestra el área de registro o de inicio de sesión, o comprueba si el registro es obligatorio.

**Parámetros**

- `<span class="editor-theme-code">check</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para comprobar si el registro es obligatorio. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">type</span>`<span style="white-space: pre-wrap;">: Ingrese </span>`<span class="editor-theme-code">registration</span>`<span style="white-space: pre-wrap;"> para mostrar el formulario de registro, inserte </span>`<span class="editor-theme-code">login</span>`<span style="white-space: pre-wrap;"> para mostrar el formulario de inicio de sesión.</span>

---

### SBChat.addUserAndLogin()

<span style="white-space: pre-wrap;">Registra un nuevo usuario como </span>**visitante**<span style="white-space: pre-wrap;"> y lo conecta (login) automáticamente después del registro. Opcionalmente ejecuta una función al completar.</span>

**Parámetros**

- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

```
[
    {
        "id": "913",
        "profile_image": "https://zampisoft.com/user.svg",
        "first_name": "Don",
        "last_name": "John",
        "email": "hello@example.com",
        "user_type": "user",
        "token": "9b25351047ee758aa97ee4868d130cc1ceb8decf"
    },
    "YXNkWGNSeTdtRTdDYVkxVG8wckN4YWF6V2s0Tk1mczBSVHdQbHBpOWdmejVUTTdOUUxEUENhdUVoYmROWn..."
]
```

<span style="white-space: pre-wrap;">El último valor son los datos de inicio de sesión encriptados listos para ser almacenados en el Web Storage del navegador del usuario. Utilice la función </span>`<span class="editor-theme-code">SBF.loginCookie(response[1]);</span>`<span style="white-space: pre-wrap;"> para almacenarlo.</span>

**Información**

- Si un usuario ya ha iniciado sesión, se requiere recargar la página para activar el nuevo usuario.

---

### SBChat.getDepartmentCode()

<span style="white-space: pre-wrap;">Devuelve un código HTML con los detalles del departamento dado o de todos los departamentos. Detalles del departamento: </span>`<span class="editor-theme-code">id</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">color</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">image</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">name</span>`.

**Parámetros**

- `<span class="editor-theme-code">department_id</span>`: El ID del departamento. Si este parámetro no se establece o es nulo, la función devuelve el código de todos los departamentos.
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`.

**Respuesta**

HTML

```
<div data-color="red"><img src="sales.jpg" /><div>Sales<div></div>
```

---

### SBChat.offlineMessage()

Comprueba si el mensaje de fuera de línea puede enviarse y lo envía.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> Debe haber una conversación activa.</span>

---

### SBChat.isInitDashboard()

Comprueba si el panel (dashboard) se muestra por defecto cuando se inicializa el widget de chat.

---

### SBChat.closeChat()

Archiva una conversación y la oculta del widget de chat.

**Parámetros**

- `<span class="editor-theme-code">update_conversation_status</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para solo ocultar la conversación del widget de chat sin establecer su estado como archivado. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">true</span>`.

---

### SBChat.flashNotification()

Inicia la notificación parpadeante (flash).

---

### SBChat.playSound()

Reproduce el sonido que suena cuando se recibe un nuevo mensaje.

**Parámetros**

- `<span class="editor-theme-code">repeat</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para repetir el sonido tantas veces como se haya configurado en los ajustes. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

---

### SBChat.automations.runAll()

Comprueba todas las automatizaciones y las ejecuta si las condiciones de activación se validan.

---

# 🧩 JAVASCRIPT API: Apps

Lista de funciones de las aplicaciones de ZampiBot.

### SBApps.is()

Comprueba si una app está disponible.

**Parámetros**

- `<span class="editor-theme-code">name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El nombre de la app, ej. </span>`<span class="editor-theme-code">dialogflow</span>`.

---

### SBApps.wordpress.ajax()

Realiza una llamada AJAX de WordPress.

**Parámetros**

- `<span class="editor-theme-code">action</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: La acción. Valores disponibles: </span>`<span class="editor-theme-code">wp-login</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">wp-registration</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">button-purchase</span>`<span style="white-space: pre-wrap;">. Otros valores pueden estar disponibles, revise el archivo </span>`<span class="editor-theme-code">main.js</span>`<span style="white-space: pre-wrap;"> para todos los valores.</span>
- `<span class="editor-theme-code">data</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Los parámetros de la acción, revise el archivo </span>`<span class="editor-theme-code">main.js</span>`<span style="white-space: pre-wrap;"> para más detalles.</span>
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

---

### SBApps.dialogflow.message()

Envía un mensaje a Dialogflow y añade la respuesta de Dialogflow a la conversación activa como un nuevo mensaje.

**Parámetros**

- `<span class="editor-theme-code">message</span>`: El texto del mensaje.
- `<span class="editor-theme-code">attachments</span>`<span style="white-space: pre-wrap;">: Array de adjuntos. Sintaxis del array: </span>`<span class="editor-theme-code">[["nombre", "enlace"], ["nombre", "enlace"], ...]</span>`<span style="white-space: pre-wrap;">. Reemplace </span>`<span class="editor-theme-code">nombre</span>`<span style="white-space: pre-wrap;"> con el nombre del adjunto y </span>`<span class="editor-theme-code">enlace</span>`<span style="white-space: pre-wrap;"> con la URL completa del adjunto.</span>
- `<span class="editor-theme-code">delay</span>`: Retraso de la respuesta del bot en milisegundos.
- `<span class="editor-theme-code">parameters</span>`<span style="white-space: pre-wrap;">: Array de información opcional. Sintaxis del array: </span>`<span class="editor-theme-code">{ "nombre": "valor", "nombre": "valor", ...}</span>`.
- `<span class="editor-theme-code">audio</span>`<span style="white-space: pre-wrap;">: URL o ruta de un archivo de audio para el reconocimiento de voz. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> La aplicación de Inteligencia Artificial es requerida y Dialogflow debe estar activo en el área de </span>**Configuración**.
- **Requisito:**<span style="white-space: pre-wrap;"> El usuario debe estar activo.</span>
- <span style="white-space: pre-wrap;">Use </span>`<span class="editor-theme-code">SBApps.dialogflow.project_id = AGENT_ID</span>`<span style="white-space: pre-wrap;"> para cambiar el agente de Dialogflow por defecto.</span>

---

### SBApps.dialogflow.active()

Comprueba si Dialogflow y OpenAI están activos o los desactiva.

**Parámetros**

- `<span class="editor-theme-code">active</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para deshabilitar Dialogflow y OpenAI y detener el chatbot. Establézcalo en </span>`<span class="editor-theme-code">activate</span>`<span style="white-space: pre-wrap;"> para activar el chatbot. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">true</span>`.
- `<span class="editor-theme-code">check_dialogflow</span>`<span style="white-space: pre-wrap;">: Para verificar solo la activación de OpenAI, cámbielo a </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">true</span>`.
- `<span class="editor-theme-code">check_open_ai</span>`<span style="white-space: pre-wrap;">: Para verificar solo la activación de Dialogflow, cámbielo a </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">true</span>`.

**Respuesta**<span style="white-space: pre-wrap;"> Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el bot de Dialogflow está activo; de lo contrario, devuelve </span>`<span class="editor-theme-code">false</span>`.

---

### SBApps.dialogflow.welcome()

Dispara la Intención de Bienvenida (Welcome Intent) de Dialogflow y muestra el mensaje de bienvenida de Dialogflow.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> La aplicación de Inteligencia Artificial es requerida y Dialogflow debe estar activo en el área de </span>**Configuración**.

---

### SBApps.dialogflow.openAI()

Envía un mensaje a OpenAI (ChatGPT), devuelve la respuesta y opcionalmente añade la respuesta como un nuevo mensaje.

**Parámetros**

- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El mensaje.
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`.
- `<span class="editor-theme-code">audio</span>`<span style="white-space: pre-wrap;">: URL o ruta de un archivo de audio para el reconocimiento de voz. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Información**

- **Requisito:**<span style="white-space: pre-wrap;"> La aplicación de Inteligencia Artificial es requerida y </span>`<span class="editor-theme-code">Configuración > Inteligencia Artificial > OpenAI > Chatbot</span>`<span style="white-space: pre-wrap;"> debe estar activo.</span>
- Si hay una conversación activa, la respuesta de OpenAI se añade automáticamente como un nuevo mensaje.

---

### SBApps.dialogflow.typing()

Inicia la animación de "escribiendo" del widget de chat.

---

### SBApps.dialogflow.humanTakeover()

<span style="white-space: pre-wrap;">Inicia la toma de control humana (human takeover) de Dialogflow configurada en </span>`<span class="editor-theme-code">Configuración > Inteligencia Artificial > Toma de control humana</span>`.

---

### SBApps.dialogflow.humanTakeoverActive()

Comprueba si la toma de control humana está activa para la conversación activa.

---

### SBApps.dialogflow.translate()

Traduce múltiples cadenas a través de Google Translate.

**Parámetros**

- `<span class="editor-theme-code">strings</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array de las cadenas a traducir, ej. </span>`<span class="editor-theme-code">["Hello world", "How are you?"]</span>`.
- `<span class="editor-theme-code">language_code</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El código de idioma de dos letras al que desea traducir. Para Chino Tradicional use </span>`<span class="editor-theme-code">zt</span>`<span style="white-space: pre-wrap;">, para Chino Simplificado use </span>`<span class="editor-theme-code">zh</span>`<span style="white-space: pre-wrap;">, para Portugués Brasileño use </span>`<span class="editor-theme-code">pt</span>`.
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`.

---

# 🎫 JAVASCRIPT API: Tickets

Lista de funciones de la App de Tickets.

### SBTickets.showPanel()

Muestra un panel o el área de conversación.

**Parámetros**

- `<span class="editor-theme-code">name</span>`<span style="white-space: pre-wrap;">: El nombre del panel a mostrar. Nombres disponibles: </span>`<span class="editor-theme-code">new-ticket</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">privacy</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">articles</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">edit-profile</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">login</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">registration</span>`. Déjelo vacío para mostrar el área de conversación principal.
- `<span class="editor-theme-code">title</span>`: El título a mostrar como nombre del panel.

---

### SBTickets.showSidePanels()

Muestra u oculta los paneles laterales.

**Parámetros**

- `<span class="editor-theme-code">show</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para ocultar los paneles.</span>

---

### SBTickets.setAgent()

Obtiene los detalles del agente y puebla el área de perfil del agente del panel derecho.

**Parámetros**

- `<span class="editor-theme-code">agent_id</span>`: El ID del agente.

---

### SBTickets.activateConversation()

Activa y muestra una conversación.

**Parámetros**

- `<span class="editor-theme-code">conversation</span>`<span style="white-space: pre-wrap;">: La conversación a activar como un objeto </span>`<span class="editor-theme-code">SBConversation</span>`.

---

### SBTickets.selectConversation()

Establece el estilo de una conversación del panel izquierdo como la conversación activa.

**Parámetros**

- `<span class="editor-theme-code">conversation_id</span>`: El ID de la conversación.

---

### SBTickets.getActiveConversation()

---

Devuelve el objeto HTML DOM de la conversación activa.

**Parámetros**

- `<span class="editor-theme-code">type</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">ID</span>`<span style="white-space: pre-wrap;"> para obtener solo el ID de la conversación.</span>

---

# 📡 JAVASCRIPT API: Pusher

<span style="white-space: pre-wrap;">Lista de funciones para Pusher. Más detalles en </span>`<span class="editor-theme-code">pusher.com</span>`.

### SBPusher.init()

Inicializa Pusher y opcionalmente ejecuta una función al completar la inicialización.

**Parámetros**

- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`.

---

### SBPusher.start()

<span style="white-space: pre-wrap;">Inicia Pusher y las notificaciones Push. Ejecute esta función después de </span>`<span class="editor-theme-code">SBPusher.init()</span>`<span style="white-space: pre-wrap;"> y después de que el usuario esté activo.</span>

---

### SBPusher.subscribe()

Suscribe al usuario activo a un canal de Pusher.

**Parámetros**

- `<span class="editor-theme-code">channel_name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El nombre del canal.
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`.

**Información**

- Si Pusher no está inicializado, la función lo inicializa automáticamente.
- <span style="white-space: pre-wrap;">Puede acceder al canal desde </span>`<span class="editor-theme-code">SBPusher.channels['NOMBRE DEL CANAL']</span>`.

---

### SBPusher.event()

Suscribe al usuario activo a un evento de un canal de Pusher y ejecuta la función dada cuando se recibe el evento.

**Parámetros**

- `<span class="editor-theme-code">event</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El nombre del evento.
- `<span class="editor-theme-code">callback</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Función a ejecutar una vez que se recibe el evento. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`.
- `<span class="editor-theme-code">channel</span>`<span style="white-space: pre-wrap;">: El nombre del canal. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">private-user-[ID usuario activo]</span>`.

**Información**

- Si Pusher no está inicializado, la función lo inicializa automáticamente.
- Si el usuario no está suscrito al canal, la función suscribe al usuario automáticamente.

---

### SBPusher.trigger()

Dispara un evento en un canal de Pusher.

**Parámetros**

- `<span class="editor-theme-code">event</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El nombre del evento.
- `<span class="editor-theme-code">data</span>`<span style="white-space: pre-wrap;">: Array de valores. Sintaxis: </span>`<span class="editor-theme-code">{ "nombre": "valor" }</span>`.
- `<span class="editor-theme-code">channel</span>`<span style="white-space: pre-wrap;">: El nombre del canal. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">private-user-[ID usuario activo]</span>`.

---

### SBPusher.presence()

Suscribe al usuario activo al canal de presencia utilizado para el estado en línea de usuarios y administradores.

**Parámetros**

- `<span class="editor-theme-code">index</span>`<span style="white-space: pre-wrap;">: El índice del canal de presencia. </span>**Por defecto:**<span style="white-space: pre-wrap;"> 1.</span>
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar al completar. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`.

**Información**

- Si Pusher no está inicializado, la función lo inicializa automáticamente.

---

### SBPusher.presenceUnsubscribe()

Desuscribe al usuario activo del canal de presencia.

---

### SBF.serviceWorker.pushNotification()

Envía una notificación Push al último agente de la conversación, o a todos los agentes si ningún agente ha respondido aún.

**Parámetros**

- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El texto del mensaje.
- `<span class="editor-theme-code">interests</span>`<span style="white-space: pre-wrap;">: Los destinatarios. Puede ser un ID de usuario o agente, o las siguientes cadenas: </span>`<span class="editor-theme-code">agents</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">department-123</span>`<span style="white-space: pre-wrap;"> (reemplace 123 con el ID del departamento). </span>**Por defecto:**<span style="white-space: pre-wrap;"> asignado automáticamente a los destinatarios correctos.</span>

**Información**

- Esta función solo funciona si las notificaciones Push están activas en el área de configuración.
- Actualmente, las notificaciones Push solo son compatibles con dispositivos Mac, Windows y Android. Los iPhones y dispositivos iOS no son compatibles.

# ➕ JAVASCRIPT API: Más funciones

Lista de varias funciones que realizan diferentes tareas.

### SBF.translate()

Traduce una cadena al idioma del usuario activo.

**Parámetros**

- `<span class="editor-theme-code">string</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena a traducir.

**Información**

- Devuelve la cadena traducida si está disponible; de lo contrario, devuelve la cadena original.
- <span style="white-space: pre-wrap;">Esta función funciona solo para las traducciones del </span>**front-end**.
- Para más detalles sobre el idioma activo, consulte la documentación de traducciones.

---

### SBF.activeUser()

<span style="white-space: pre-wrap;">Devuelve el usuario activo como un objeto </span>`<span class="editor-theme-code">SBUser</span>`<span style="white-space: pre-wrap;">, devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si no se encuentra el usuario activo.</span>

**Representación JSON del usuario activo:**

JSON

```
{
    "details": {
        "id": "914",
        "profile_image": "https://zampisoft.com/user.svg",
        "first_name": "User",
        "last_name": "#23262",
        "email": null,
        "user_type": "visitor",
        "token": "bc308e274473fb685a729abe8a4bf82d3c49cd2f"
    },
    "extra": {},
    "conversations": []
}
```

**Información**

- <span style="white-space: pre-wrap;">Para los métodos del usuario y más detalles, consulte la documentación de </span>`<span class="editor-theme-code">SBUser</span>`.

---

### SBF.getActiveUser()

Activa el usuario conectado (logueado) y devuelve los detalles del usuario.

**Parámetros**

- `<span class="editor-theme-code">db</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para verificar que el usuario existe en la base de datos.</span>
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar cuando la función se completa. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`.

**Respuesta**

JSON

```
{
    "id": "914",
    "profile_image": "https://zampisoft.com/user.svg",
    "first_name": "Don",
    "last_name": "John",
    "email": "hello@example.com",
    "user_type": "user",
    "token": "bc308e274473fb685a729abe8a4bf82d3c49cd2f"
}
```

**Información**

- <span style="white-space: pre-wrap;">Para los métodos del usuario y más detalles, consulte la documentación de </span>`<span class="editor-theme-code">SBUser</span>`.

---

### SBF.cors()

Ejecuta una petición HTTP POST o GET a una URL y devuelve la respuesta.

**Parámetros**

- `<span class="editor-theme-code">method</span>`<span style="white-space: pre-wrap;">: Inserte </span>`<span class="editor-theme-code">POST</span>`<span style="white-space: pre-wrap;"> o </span>`<span class="editor-theme-code">GET</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">GET</span>`.
- `<span class="editor-theme-code">url</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Ingrese la URL completa de la petición.
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Función a ejecutar cuando la función se completa. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`.

---

### SBF.null()

Comprueba si una variable existente es nula o vacía.

**Parámetros**

- `<span class="editor-theme-code">variable</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La variable a comprobar.

**Información**

- <span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si la variable es una cadena vacía, </span>`<span class="editor-theme-code">null</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">'null'</span>`<span style="white-space: pre-wrap;">, o </span>`<span class="editor-theme-code">undefined</span>`.

---

### SBF.deactivateAll()

Oculta todas las ventanas emergentes (pop-ups) y las ventanas. Esta función se utiliza principalmente en el área de administración.

---

### SBF.getURL()

Busca un parámetro en la URL y devuelve su valor, o devuelve un array con todos los parámetros.

**Parámetros**

- `<span class="editor-theme-code">name</span>`<span style="white-space: pre-wrap;">: El parámetro a buscar. Devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si el parámetro no se encuentra. Si no se proporciona el nombre del parámetro, se devuelve un array con todos los parámetros. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">url</span>`<span style="white-space: pre-wrap;">: La URL de la cual extraer los parámetros. </span>**Por defecto:**<span style="white-space: pre-wrap;"> URL actual.</span>

---

### SBF.restoreJson()

Convierte una cadena codificada en JSON a texto normal.

**Parámetros**

- `<span class="editor-theme-code">value</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena a convertir.

---

### SBF.stringToSlug()

<span style="white-space: pre-wrap;">Convierte una cadena a un slug eliminando todos los caracteres especiales, reemplazando todos los espacios con el carácter </span>`<span class="editor-theme-code">-</span>`, y convirtiendo la cadena a minúsculas.

**Parámetros**

- `<span class="editor-theme-code">value</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena a convertir.

**Información**

- <span style="white-space: pre-wrap;">Utilice la función </span>`<span class="editor-theme-code">slugToString(slug)</span>`<span style="white-space: pre-wrap;"> para convertir un slug de nuevo a una cadena.</span>

---

### SBF.settingsStringToArray()

<span style="white-space: pre-wrap;">Convierte una cadena a un array de valores. Formato de la cadena: </span>`<span class="editor-theme-code">nombre:valor,nombre:valor,...</span>`.

**Parámetros**

- `<span class="editor-theme-code">value</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena a convertir.

**Respuesta**

JSON

```
{
    "name": "value",
    "name": "value",
    ...
}
```

---

### SBF.random()

Devuelve una cadena alfanumérica aleatoria.

---

### SBF.isAgent()

<span style="white-space: pre-wrap;">Comprueba si un tipo de usuario es un agente. Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> solo si el tipo de usuario es </span>`<span class="editor-theme-code">agent</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">admin</span>`<span style="white-space: pre-wrap;">, o </span>`<span class="editor-theme-code">bot</span>`.

**Parámetros**

- `<span class="editor-theme-code">user_type</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena del tipo de usuario a comprobar.

---

### SBF.error()

Dispara el error de JavaScript personalizado de ZampiBot.

**Parámetros**

- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Cadena con el mensaje de error o un objeto </span>`<span class="editor-theme-code">Error</span>`.

---

### SBF.errorValidation()

Comprueba si una respuesta de una llamada AJAX es un error de validación.

**Parámetros**

- `<span class="editor-theme-code">response</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La respuesta de la llamada AJAX.

### SBF.login()

Inicia sesión de un usuario o un agente. El inicio de sesión se puede completar de dos maneras: vía correo electrónico y contraseña, o vía ID de usuario y token.

**Parámetros**

- `<span class="editor-theme-code">email</span>`<span style="white-space: pre-wrap;">: El correo electrónico del usuario para iniciar sesión. Si se establece este atributo, también debe establecer la contraseña. </span>**Por defecto:**<span style="white-space: pre-wrap;"> cadena vacía.</span>
- `<span class="editor-theme-code">password</span>`<span style="white-space: pre-wrap;">: La contraseña del usuario para iniciar sesión. Si se establece este atributo, también debe establecer el correo electrónico. </span>**Por defecto:**<span style="white-space: pre-wrap;"> cadena vacía.</span>
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;">: El ID del usuario para iniciar sesión. Si se establece este atributo, también debe establecer el token. </span>**Por defecto:**<span style="white-space: pre-wrap;"> cadena vacía.</span>
- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;">: El token del usuario para iniciar sesión. Si se establece este atributo, también debe establecer el ID del usuario. Puede obtener el token desde el área de </span>**Usuarios**<span style="white-space: pre-wrap;"> abriendo el cuadro de perfil de un usuario, solo si usted es un administrador. </span>**Por defecto:**<span style="white-space: pre-wrap;"> cadena vacía.</span>
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;">: Función a ejecutar cuando la función se completa. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
[
    {
        "id": "913",
        "profile_image": "https://board.support/user.svg",
        "first_name": "Don",
        "last_name": "John",
        "email": "example@domain.com",
        "user_type": "user",
        "token": "9b25351047ee758aa97ee4868d130cc1ceb8decf"
    },
    "YXNkWGNSeTdtRTdDYVkxVG8wckN4YWF6V2s0Tk1mczBSVHdQbHBpOWdmejVUTTdOUUxEUENhdUVoYmROWn..."
]
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si el inicio de sesión no es exitoso.</span>

---

## SBF.logout()

Cierra la sesión del usuario conectado y recarga la página.

---

### SBF.loginCookie()

Crea o actualiza la cookie de inicio de sesión.

**Parámetros**

- `<span class="editor-theme-code">value</span>`: La cadena de inicio de sesión encriptada.

---

### SBF.reset()

Cierra la sesión del usuario, elimina todos los datos almacenados de ZampiBot y recarga la página.

---

### SBF.lightbox()

Muestra el contenido dado en una ventana modal (lightbox).

**Parámetros**

- `<span class="editor-theme-code">content</span>`<span style="white-space: pre-wrap;">: El contenido a mostrar. Puede ser cualquier contenido HTML; para mostrar una imagen use el código </span>`<span class="editor-theme-code"><img src="image.jpg" ></span>`.

---

### SBF.storage()

Gestiona el almacenamiento local (Local Storage) de ZampiBot. El almacenamiento local es una tecnología que guarda datos en el navegador de forma permanente.

**Parámetros**

- `<span class="editor-theme-code">key</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del valor a establecer o recuperar.
- `<span class="editor-theme-code">value</span>`: El valor a guardar. Si no se establece, la función devuelve el valor de la clave dada.

---

### SBF.storageTime()

Guarda una clave y la fecha y hora actual en el almacenamiento local para comprobar en el futuro si está dentro del número de horas dado o si ha expirado.

**Parámetros**

- `<span class="editor-theme-code">key</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La clave a guardar o comprobar.
- `<span class="editor-theme-code">hours</span>`: El número de horas para comparar con la fecha y hora guardada.

**Respuesta**<span style="white-space: pre-wrap;"> Si el atributo </span>`<span class="editor-theme-code">hours</span>`<span style="white-space: pre-wrap;"> está establecido, devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si la suma de la fecha guardada y las horas dadas es menor que la fecha y hora actual; de lo contrario, devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;">. Ejemplo: si la hora guardada es 5:00 pm, e inserta 3, la función devolverá </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> solo si la hora actual es 8:01 pm o más.</span>

---

### SBF.setting()

Devuelve el valor de una configuración, o le asigna un valor.

**Parámetros**

- `<span class="editor-theme-code">key</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El nombre de la configuración.
- `<span class="editor-theme-code">value</span>`<span style="white-space: pre-wrap;">: El valor de la configuración. </span>**Por defecto:**<span style="white-space: pre-wrap;"> -1.</span>

**Configuraciones disponibles**<span style="white-space: pre-wrap;"> Algunas de las configuraciones disponibles y sus valores se encuentran en la lista a continuación.</span>

JSON

```
{
    "registration-required": "",
    "registration-timetable": false,
    "registration-offline": false,
    "registration-link": "",
    "visitors-registration": false,
    "privacy": false,
    "popup": true,
    "popup-mobile-hidden": true,
    "welcome": false,
    "welcome-trigger": "open",
    "welcome-delay": 0,
    "follow": false,
    "follow-delay": "1000",
    "chat-manual-init": false,
    "chat-login-init": false,
    "sound": ["code": "n", "volume": 0.5, "repeat": 5],
    "header-name": true,
    "desktop-notifications": "all",
    "flash-notifications": "all",
    "push-notifications": true,
    "notifications-icon": "",
    "bot-id": "377",
    "bot-name": "Bruce Peterson",
    "bot-image": "",
    "bot-delay": 0,
    "dialogflow-office-hours": false,
    "dialogflow-active": true,
    "dialogflow-human-takeover": false,
    "slack-active": false,
    "rich-messages": [
        "email",
        "registration",
        "login",
        "timetable",
        "articles",
        "immagine",
        "video"
    ],
    "display-users-thumb": true,
    "hide-agents-thumb": true,
    "notify-user-email": true,
    "notify-agent-email": false,
    "translations": false,
    "auto-open": false,
    "office-hours": true,
    "disable-office-hours": false,
    "disable-offline": false,
    "timetable": false,
    "timetable-hide": [
        false,
        "checkbox"
    ],
    "articles": true,
    "articles-title": "",
    "init-dashboard": false,
    "wp": false,
    "wp-users-system": "sb",
    "queue": false,
    "queue-message": "",
    "queue-message-success": "",
    "queue-response-time": "",
    "routing": false,
    "webhooks": true,
    "agents-online": false,
    "timetable-message": "",
    "tickets-registration-required": true,
    "tickets-registration-redirect": "",
    "tickets-default-form": "login",
    ...
}
```

---

### SBF.shortcode()

Convierte un shortcode en un array que contiene el nombre del shortcode y la configuración del mismo.

**Parámetros**

- `<span class="editor-theme-code">shortcode</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: La cadena del shortcode, ej. </span>`<span class="editor-theme-code">[rating title="Califique su conversación" message="Cuéntenos su experiencia." success="¡Gracias!"]</span>`.

**Respuesta**

JSON

```
[
    "rating",
    {
        "title": "Califique su conversación",
        "message": "Cuéntenos su experiencia.",
        "success": "¡Gracias!"
    }
]
```

---

### SBF.openWindow()

Abre una página web en una nueva ventana.

**Parámetros**

- `<span class="editor-theme-code">link</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El enlace a abrir.
- `<span class="editor-theme-code">width</span>`: El ancho de la ventana en px.
- `<span class="editor-theme-code">height</span>`: La altura de la ventana en px.

---

### SBF.loadResource()

<span style="white-space: pre-wrap;">Incluye un archivo .js o .css en el área </span>`<span class="editor-theme-code"><head></span>`<span style="white-space: pre-wrap;"> de la página.</span>

**Parámetros**

- `<span class="editor-theme-code">url</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La URL del archivo a cargar.
- `<span class="editor-theme-code">script</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para archivos .js. </span>**Por defecto:**<span style="white-space: pre-wrap;"> archivos .css.</span>

---

### SBF.debounce()

Ejecuta la función dada solo una vez por el tiempo en milisegundos dado; el temporizador se reinicia en cada llamada.

**Parámetros**

- `<span class="editor-theme-code">bounceFunction</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Función a ejecutar cuando la función se completa. Sintaxis: </span>`<span class="editor-theme-code">function() { ... }</span>`.
- `<span class="editor-theme-code">id</span>`: Inserte una cadena única y aleatoria nunca usada por otras instancias de debounce. Las cadenas #1, #2, #3, #4, ... están reservadas y no pueden usarse.
- `<span class="editor-theme-code">interval</span>`<span style="white-space: pre-wrap;">: El tiempo mínimo en milisegundos entre la nueva ejecución y la anterior. </span>**Por defecto:**<span style="white-space: pre-wrap;"> 500.</span>

---

### SBF.translate()

Traduce una cadena utilizando las traducciones de ZampiBot.

**Parámetros**

- `<span class="editor-theme-code">string</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena a traducir.

---

### SBF.escape()

Escapa una cadena (sanitización).

**Parámetros**

- `<span class="editor-theme-code">string</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena a escapar.

---

### SBF.convertUTCDateToLocalDate()

Convierte una fecha a la hora local.

**Parámetros**

- `<span class="editor-theme-code">datetime</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena de fecha y hora. Formato: Y/m/d H:i:s.
- `<span class="editor-theme-code">UTCoffset</span>`<span style="white-space: pre-wrap;">: Un desplazamiento UTC. </span>**Por defecto:**<span style="white-space: pre-wrap;"> 0.</span>

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">Mon Jan 30 2023 10:45:00 GMT+0000 (Greenwich Mean Time)</span>`

---

### SBF.getLocationTimeString()

Devuelve una cadena que contiene la ubicación y la hora local actual de la zona horaria dada.

**Parámetros**

- `<span class="editor-theme-code">details</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array con los detalles de la ubicación, ej. </span>`<span class="editor-theme-code">{ "timezone" : "", "country" : "", "city" : "" }</span>`<span style="white-space: pre-wrap;">. Esta función acepta el método </span>`<span class="editor-theme-code">extra</span>`<span style="white-space: pre-wrap;"> de cualquier objeto </span>`<span class="editor-theme-code">SBUser</span>`<span style="white-space: pre-wrap;">, ej. </span>`<span class="editor-theme-code">SBF.getLocationTimeString(activeUser().extra, function(){})</span>`.
- `<span class="editor-theme-code">onSuccess</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Función a ejecutar cuando la función se completa. Sintaxis: </span>`<span class="editor-theme-code">function(response) { ... }</span>`.

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">05:15 AM in London, United Kingdom</span>`

---

### SBF.beautifyTime()

Convierte una fecha al formato local y realiza otras optimizaciones para hacer la fecha más amigable.

**Parámetros**

- `<span class="editor-theme-code">date</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Fecha y hora en el siguiente formato: YYYY-MM-DD HH:MM:SS. Ej. 2020-05-13 13:35:59. Puede eliminar la hora y dejar solo la fecha. Las fechas almacenadas en la base de datos están en UTC+0.
- `<span class="editor-theme-code">extended</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para incluir minutos y segundos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">future</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si la fecha es una fecha futura. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code"><span>30/01/2023</span></span>`

---

### SBF.dateDB()

Convierte un formato de fecha al formato de fecha de la base de datos y establece el UTC en +0.

**Parámetros**

- `<span class="editor-theme-code">date</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Fecha y hora en el siguiente formato: YYYY-MM-DD HH:MM:SS. Ej. 2020-05-13 13:35:59. Puede eliminar la hora y dejar solo la fecha. Ingrese </span>`<span class="editor-theme-code">now</span>`<span style="white-space: pre-wrap;"> para obtener la fecha y hora actual. Las fechas almacenadas en la base de datos están en UTC+0.</span>

---

### SBF.UTC()

<span style="white-space: pre-wrap;">Devuelve la fecha y hora especificada en formato unix utilizando el desplazamiento UTC establecido en </span>`<span class="editor-theme-code">Configuración > Misceláneas > Zona horaria</span>`.

**Parámetros**

- `<span class="editor-theme-code">datetime</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena de fecha y hora.

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">1675075500000</span>`

---

### SBF.unix()

<span style="white-space: pre-wrap;">Obtiene el valor de la marca de tiempo (timestamp) unix de una cadena de fecha y hora con formato </span>`<span class="editor-theme-code">yyyy-mm-dd hh:mm:ss</span>`.

**Parámetros**

- `<span class="editor-theme-code">datetime</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena de fecha y hora.

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">1675075500000</span>`

---

# ⚡ JAVASCRIPT API: Eventos

Los eventos le permiten interceptar las acciones de ZampiBot en tiempo real y ejecutar código JavaScript personalizado cuando se dispara una acción.

### Uso

<span style="white-space: pre-wrap;">Utilice el código a continuación y reemplace </span>`<span class="editor-theme-code">EVENT-NAME</span>`<span style="white-space: pre-wrap;"> con el nombre del evento. La </span>`<span class="editor-theme-code">response</span>`<span style="white-space: pre-wrap;"> (respuesta) representa el valor devuelto si solo hay un atributo; de lo contrario, es un array de valores. Se requiere </span>**JQuery**.

JavaScript

```
$(document).on("EVENT-NAME", function (e, response) {
    // Su código aquí
});
```

**Ejemplo:**

JavaScript

```
$(document).on("SBMessageSent", function (e, response) {
    console.log(response["user_id"]);
    console.log(response["conversation_id"]);
    console.log(response["message"]);
});
```

---

### SBReady

<span style="white-space: pre-wrap;">Evento disparado al cargar la página después de que el script del chat </span>`<span class="editor-theme-code">main.js</span>`<span style="white-space: pre-wrap;"> se haya cargado. Este evento también se dispara en el área de administración.</span>

---

### SBInit

Evento disparado al cargar la página cuando el chat ha completado la inicialización.

---

### SBTicketsInit

Evento disparado al cargar la página cuando el área de tickets ha completado la inicialización. Este evento está disponible solo cuando la App de Tickets está activa.

---

### SBLogout

Evento disparado cuando el usuario activo cierra sesión.

---

### SBError

Evento disparado cuando ocurre un error en ZampiBot.

**Respuesta**

- `<span class="editor-theme-code">message</span>`: El mensaje de error.
- `<span class="editor-theme-code">function_name</span>`: El nombre de la función que generó el error.

---

### SBDoubleLoginError

Evento disparado en la inicialización del chat si un agente o un administrador ya ha iniciado sesión.

---

### SBUserDeleted

Evento disparado cuando se elimina un usuario.

**Respuesta**<span style="white-space: pre-wrap;"> El ID del usuario que ha sido eliminado.</span>

---

### SBMessageSent

Evento disparado cuando se ha enviado un nuevo mensaje.

**Respuesta**

- `<span class="editor-theme-code">user_id</span>`: El ID del usuario que envió el mensaje.
- `<span class="editor-theme-code">user</span>`: El objeto de usuario.
- `<span class="editor-theme-code">conversation_id</span>`: El ID de la conversación vinculada al mensaje.
- `<span class="editor-theme-code">conversation_status</span>`: El código de estado de la conversación vinculada al mensaje. (0=activo, 1=esperando usuario, 2=esperando agente, 3=archivo, 4=papelera).
- `<span class="editor-theme-code">message_id</span>`: El ID del mensaje.
- `<span class="editor-theme-code">message</span>`: El texto del mensaje.
- `<span class="editor-theme-code">attachments</span>`: Los adjuntos del mensaje.
- `<span class="editor-theme-code">conversation_source</span>`<span style="white-space: pre-wrap;">: La fuente de la conversación. Fuentes disponibles: </span>`<span class="editor-theme-code">em</span>`<span style="white-space: pre-wrap;"> (Email), </span>`<span class="editor-theme-code">tk</span>`<span style="white-space: pre-wrap;"> (Ticket), </span>`<span class="editor-theme-code">wa</span>`<span style="white-space: pre-wrap;"> (WhatsApp), </span>`<span class="editor-theme-code">fb</span>`<span style="white-space: pre-wrap;"> (Facebook Messenger), </span>`<span class="editor-theme-code">ig</span>`<span style="white-space: pre-wrap;"> (Instagram), </span>`<span class="editor-theme-code">tw</span>`<span style="white-space: pre-wrap;"> (Twitter), </span>`<span class="editor-theme-code">wc</span>`<span style="white-space: pre-wrap;"> (WeChat), </span>`<span class="editor-theme-code">tx</span>`<span style="white-space: pre-wrap;"> (Mensaje de texto), </span>`<span class="editor-theme-code">gb</span>`<span style="white-space: pre-wrap;"> (Google Business Messages), </span>`<span class="editor-theme-code">ln</span>`<span style="white-space: pre-wrap;"> (LINE), </span>`<span class="editor-theme-code">vb</span>`<span style="white-space: pre-wrap;"> (Viber).</span>

---

### SBBotMessage

Evento disparado cuando el chatbot responde a un mensaje.

**Respuesta**

- `<span class="editor-theme-code">response</span>`: El array de respuesta en formato JSON de Dialogflow.
- `<span class="editor-theme-code">message</span>`: El mensaje de entrada del usuario.

---

### SBSlackMessageSent

Evento disparado cuando se envía un mensaje a Slack.

**Respuesta**

- `<span class="editor-theme-code">message</span>`: El texto del mensaje.
- `<span class="editor-theme-code">conversation_id</span>`: El ID de la conversación vinculada al mensaje.

---

### SBEmailSent

Evento disparado cuando se envía un correo electrónico de notificación a un usuario o un agente.

**Respuesta**

- `<span class="editor-theme-code">recipent_id</span>`: El ID del usuario que recibirá el correo.
- `<span class="editor-theme-code">message</span>`: El mensaje del correo.
- `<span class="editor-theme-code">attachments</span>`: Los adjuntos del correo.

---

### SBNotificationsUpdate

Evento disparado cuando se actualiza el contador rojo de notificaciones del botón de chat que alerta al usuario de nuevos mensajes y conversaciones.

**Respuesta**

- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;">: La acción puede ser </span>`<span class="editor-theme-code">add</span>`<span style="white-space: pre-wrap;"> si el contador aumenta en 1, o </span>`<span class="editor-theme-code">remove</span>`<span style="white-space: pre-wrap;"> si disminuye en 1.</span>
- `<span class="editor-theme-code">message_id</span>`<span style="white-space: pre-wrap;">: El ID del mensaje no leído; si se establece, el contador aumenta en 1. Si es </span>`<span class="editor-theme-code">false</span>`, el contador disminuye en 1.

---

### SBConversationOpen

Evento disparado cuando una conversación está completamente cargada y se abre en el chat.

**Respuesta**

- `<span class="editor-theme-code">response</span>`<span style="white-space: pre-wrap;">: La conversación como un objeto </span>`<span class="editor-theme-code">SBConversation</span>`.

---

### SBNewMessagesReceived

Evento disparado cuando hay nuevos mensajes en la conversación activa.

**Respuesta**

- `<span class="editor-theme-code">messages</span>`<span style="white-space: pre-wrap;">: Array de objetos </span>`<span class="editor-theme-code">SBMessage</span>`.
- `<span class="editor-theme-code">conversation_id</span>`: El ID de conversación vinculado a los mensajes.

---

### SBMessageDeleted

Evento disparado cuando se elimina un mensaje.

**Respuesta**<span style="white-space: pre-wrap;"> El ID del mensaje que ha sido eliminado.</span>

---

### SBNewConversationReceived

Evento disparado cuando se recibe una nueva conversación.

**Respuesta**<span style="white-space: pre-wrap;"> La nueva conversación como un objeto </span>`<span class="editor-theme-code">SBConversation</span>`.

---

### SBNewConversationCreated

Evento disparado cuando se crea una nueva conversación.

**Respuesta**<span style="white-space: pre-wrap;"> La nueva conversación como un objeto </span>`<span class="editor-theme-code">SBConversation</span>`.

---

### SBActiveConversationChanged

Evento disparado cuando se cambia la conversación activa.

**Respuesta**<span style="white-space: pre-wrap;"> La nueva conversación activa como un objeto </span>`<span class="editor-theme-code">SBConversation</span>`.

---

### SBActiveConversationStatusUpdated

Evento disparado cuando se actualiza el código de estado de la conversación activa.

**Respuesta**

- `<span class="editor-theme-code">conversation_id</span>`: El ID de la conversación.
- `<span class="editor-theme-code">status_code</span>`: El nuevo código de estado de la conversación. (0=activo, 1=esperando usuario, 2=esperando agente, 3=archivo, 4=papelera).

---

### SBPopulateConversations

Evento disparado después de que se han obtenido todas las conversaciones del usuario.

**Respuesta**

- `<span class="editor-theme-code">conversations</span>`<span style="white-space: pre-wrap;">: Array de conversaciones como objetos </span>`<span class="editor-theme-code">SBConversation</span>`.

---

### SBChatOpen

Evento disparado cuando se abre el chat.

---

### SBChatClose

Evento disparado cuando se cierra el chat.

---

### SBQueueUpdate

Evento disparado cuando se inicia la cola y cada vez que la cola se actualiza.

**Respuesta**<span style="white-space: pre-wrap;"> La posición del usuario en la cola. Si la posición es 0, la cola ha terminado y el usuario puede iniciar el chat.</span>

---

### SBBusy

Evento disparado cuando cambia el estado de "ocupado" del chat. El chat está ocupado si está operando, como enviando un mensaje. Cuando el chat está ocupado, algunas funciones no se pueden disparar, como enviar un nuevo mensaje.

**Respuesta**<span style="white-space: pre-wrap;"> Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el chat está ocupado, de lo contrario </span>`<span class="editor-theme-code">false</span>`.

---

### SBDashboard

Evento disparado cuando se muestra el panel de control (dashboard).

---

### SBDashboardClosed

Evento disparado cuando se cierra el panel de control y se muestra una conversación en su lugar.

---

### SBTyping

Evento disparado cuando un usuario o un agente está escribiendo en el editor.

**Respuesta**<span style="white-space: pre-wrap;"> Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el usuario o agente está escribiendo, de lo contrario devuelve </span>`<span class="editor-theme-code">false</span>`.

---

### SBArticles

Evento disparado cuando se muestra el panel de artículos o cuando se abre un solo artículo.

**Respuesta**

- `<span class="editor-theme-code">id</span>`<span style="white-space: pre-wrap;">: El ID del artículo. Este valor es </span>`<span class="editor-theme-code">-1</span>`<span style="white-space: pre-wrap;"> si se muestra el panel de artículos.</span>
- `<span class="editor-theme-code">articles</span>`: Puede ser el array con los detalles del artículo individual o el array con la lista de todos los artículos.

---

### SBPrivacy

Evento disparado en la inicialización del chat si se muestra el formulario de privacidad.

---

### SBPopup

Evento disparado cuando se muestra un mensaje emergente (pop-up).

**Respuesta**<span style="white-space: pre-wrap;"> El array con el contenido del pop-up: </span>`<span class="editor-theme-code">{ image: "", title: "", message: "" }</span>`.

---

### SBFollowUp

Evento disparado cuando se envía el mensaje de seguimiento.

---

### SBWelcomeMessage

Evento disparado cuando se envía el mensaje de bienvenida.

---

### SBLoginForm

Evento disparado cuando el usuario inicia sesión correctamente desde el formulario de inicio de sesión del chat. Este evento se dispara solo si el inicio de sesión es exitoso.

**Respuesta**<span style="white-space: pre-wrap;"> El usuario como un objeto </span>`<span class="editor-theme-code">SBUser</span>`.

---

### SBRegistrationForm

Evento disparado cuando el usuario se registra correctamente desde el formulario de registro del chat. Este evento se dispara solo si el registro es exitoso. También se dispara si el registro se actualiza a través del formulario de Mensaje Enriquecido.

**Respuesta**

- `<span class="editor-theme-code">user</span>`: Array con los detalles del usuario.
- `<span class="editor-theme-code">extra</span>`: Array con los detalles adicionales del usuario.

---

### SBRichMessageShown

Evento disparado cuando se muestra un Mensaje Enriquecido (Rich Message) cargado asíncronamente.

**Respuesta**

- `<span class="editor-theme-code">name</span>`: El nombre del Mensaje Enriquecido.
- `<span class="editor-theme-code">settings</span>`: La configuración del Mensaje Enriquecido.
- `<span class="editor-theme-code">response</span>`: El código HTML del Mensaje Enriquecido.

---

### SBRichMessageSubmit

Evento disparado cuando se recibe la respuesta de un Mensaje Enriquecido.

**Respuesta**

- `<span class="editor-theme-code">result</span>`: La respuesta del Mensaje Enriquecido.
- `<span class="editor-theme-code">data</span>`: Los detalles del Mensaje Enriquecido y los datos enviados por el usuario.
- `<span class="editor-theme-code">id</span>`: El ID del Mensaje Enriquecido.

---

### SBAttachments

Evento disparado cuando el usuario adjunta un archivo.

---

### SBNewEmailAddress

Evento disparado cuando un usuario registra su correo electrónico a través del mensaje de seguimiento o el formulario de registro.

**Respuesta**

- `<span class="editor-theme-code">name</span>`: El nombre completo del usuario.
- `<span class="editor-theme-code">email</span>`: El correo electrónico del usuario.
- `<span class="editor-theme-code">ID</span>`: El ID del mensaje enriquecido.

---

### SBPanelActive

Evento disparado cuando se abre un panel del área de Tickets. Este evento está disponible solo cuando la App de Tickets está activa.

**Respuesta**

- `<span class="editor-theme-code">name</span>`<span style="white-space: pre-wrap;">: El nombre del panel activo. Valores: </span>`<span class="editor-theme-code">new-ticket</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">privacy</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">articles</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">edit-profile</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">login</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">registration</span>`. Si el valor está vacío, el área de conversación principal está activa.
- `<span class="editor-theme-code">email</span>`: El correo electrónico del usuario.

---

### SBBotPayload

<span style="white-space: pre-wrap;">Evento disparado cuando un mensaje de Dialogflow contiene un Payload de ZampiBot. Ejemplos de payload: </span>`<span class="editor-theme-code">human-takeover</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">redirect</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">woocommerce-update-cart</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">woocommerce-checkout</span>`.

**Respuesta**<span style="white-space: pre-wrap;"> El nombre del payload.</span>

---

### SBBotAction

<span style="white-space: pre-wrap;">Evento disparado cuando un mensaje de Dialogflow contiene una acción de Dialogflow. Actualmente solo está disponible la acción </span>`<span class="editor-theme-code">end</span>`<span style="white-space: pre-wrap;"> (Finalizar conversación).</span>

**Respuesta**<span style="white-space: pre-wrap;"> El nombre de la acción.</span>

---

### SBSMSSent

Evento disparado cuando se envía una notificación por mensaje de texto a un usuario o un agente.

**Respuesta**

- `<span class="editor-theme-code">recipent_id</span>`: El ID del usuario que recibirá el mensaje de texto.
- `<span class="editor-theme-code">message</span>`: El mensaje de texto.
- `<span class="editor-theme-code">response</span>`: La respuesta de Twilio.

---

### SBActiveUserLoaded

Evento disparado cuando el usuario activo ha sido cargado.

**Respuesta**

- `<span class="editor-theme-code">recipent_id</span>`: El ID del usuario que recibirá el mensaje de texto.
- `<span class="editor-theme-code">message</span>`: El mensaje de texto.
- `<span class="editor-theme-code">response</span>`: La respuesta de Twilio.

---

### SBOpenAIMessage

Evento disparado cuando OpenAI (ChatGPT) devuelve una respuesta.

**Respuesta**

- `<span class="editor-theme-code">response</span>`: La respuesta de OpenAI.
- `<span class="editor-theme-code">message</span>`: El mensaje de texto.
- `<span class="editor-theme-code">response</span>`: La respuesta de Twilio.

---

### SBGetUser

Evento disparado cuando los detalles de un usuario son obtenidos de la base de datos.

**Respuesta**<span style="white-space: pre-wrap;"> El usuario como un objeto </span>`<span class="editor-theme-code">SBUser</span>`.

---

### SBSettingsSaved

Evento disparado cuando se guardan las configuraciones del área de administración.

**Respuesta**

- `<span class="editor-theme-code">settings</span>`: Las configuraciones.
- `<span class="editor-theme-code">external_settings</span>`: Configuraciones guardadas en una entrada dedicada de la base de datos.
- `<span class="editor-theme-code">external_settings_translations</span>`: Traducciones de configuraciones externas.

---

# 🔄 MISCELÁNEOS: AJAX

### Funciones AJAX

Lista de funciones AJAX. Las funciones AJAX son similares a la WEB API: utilizan el mismo nombre de función, los mismos parámetros y devuelven las mismas respuestas.

Utilice la función a continuación para iniciar una llamada AJAX:

JavaScript

```
SBF.ajax({
    function: 'NOMBRE-DE-LA-FUNCION',
    parameter: value,
    parameter: value,
    ...
}, (response) => {
   // Su código va aquí
});
```

<span style="white-space: pre-wrap;">Reemplace </span>`<span class="editor-theme-code">NOMBRE-DE-LA-FUNCION</span>`<span style="white-space: pre-wrap;"> con el nombre de una de las funciones a continuación. Reemplace la lista de </span>`<span class="editor-theme-code">parameter: value</span>`<span style="white-space: pre-wrap;"> con los parámetros de la función. Los parámetros y respuestas son los mismos que en la WEB API. La respuesta está en formato JSON.</span>

**¡Advertencia!**<span style="white-space: pre-wrap;"> No incluya el token en los parámetros. El token debe mantenerse siempre en secreto.</span>

---

### Lista de Funciones Disponibles

**Las funciones marcadas como "Función de Admin" requieren permisos especiales.**

- **upload-path**: Función de Admin (requiere admin).
- **update-bot**: Función de Admin (requiere admin).
- **get-last-message**: Función de Admin (requiere admin).
- **delete-attachments**: Función de Admin (requiere admin).
- **execute-bot-message**: Si es usuario final, solo conversaciones propias. Si es agente/admin, cualquier conversación.
- **logs**: Función de Admin (requiere agente o admin).
- **newsletter**: Función de Admin (requiere agente o admin).
- **get-last-agent-in-conversation**: Función de Admin (requiere agente o admin).
- **messaging-platforms-send-message**: Función de Admin (requiere agente o admin).
- **aws-s3**: Si es usuario final, solo su ID. Si es agente/admin, cualquier usuario.
- **is-allowed-extension**: Si es usuario final, solo su ID. Si es agente/admin, cualquier usuario.
- **translate-string**: Si es usuario final, solo su ID. Si es agente/admin, cualquier usuario.
- **saved-replies**
- **get-settings**: Función de Admin (requiere admin).
- **save-settings**: Función de Admin (requiere admin).
- **get-multi-setting**: Función de Admin (requiere admin).
- **save-external-setting**: Función de Admin (requiere admin).
- **get-external-setting**: Función de Admin (requiere admin).
- **export-settings**: Función de Admin (requiere admin).
- **import-settings**: Función de Admin (requiere admin).
- **is-online**: Función de Admin (requiere agente o admin).
- **add-user**<span style="white-space: pre-wrap;">: Los atributos principales van en </span>`<span class="editor-theme-code">settings</span>`<span style="white-space: pre-wrap;"> y los extra en </span>`<span class="editor-theme-code">extra_settings</span>`.
- **add-user-and-login**
- **get-user**: Restringido al propio usuario si no es admin/agente.
- **get-user-by**: Función de Admin (requiere admin).
- **get-users**: Función de Admin (requiere agente o admin).
- **get-new-users**: Función de Admin (requiere agente o admin).
- **get-user-extra**: Restringido al propio usuario si no es admin/agente.
- **get-user-language**: Función de Admin (requiere agente o admin).
- **get-online-users**: Función de Admin (requiere agente o admin).
- **get-user-from-conversation**: Función de Admin (requiere agente o admin).
- **agents-online**
- **search-users**: Función de Admin (requiere agente o admin).
- **delete-user**: Función de Admin (requiere admin).
- **delete-users**: Función de Admin (requiere admin).
- **update-user**<span style="white-space: pre-wrap;">: Los atributos principales van en </span>`<span class="editor-theme-code">settings</span>`<span style="white-space: pre-wrap;"> y los extra en </span>`<span class="editor-theme-code">extra_settings</span>`. Restringido al propio ID si no es admin/agente.
- **update-user-to-lead**: Restringido al propio ID si no es admin/agente.
- **count-users**: Función de Admin (requiere agente o admin).
- **get-conversations**<span style="white-space: pre-wrap;">: Función de Admin (requiere agente o admin). Argumento </span>`<span class="editor-theme-code">routing</span>`<span style="white-space: pre-wrap;"> disponible.</span>
- **get-new-conversations**<span style="white-space: pre-wrap;">: Función de Admin (requiere agente o admin). Argumento </span>`<span class="editor-theme-code">queue</span>`<span style="white-space: pre-wrap;"> disponible.</span>
- **get-conversation**: Restringido a conversaciones propias si no es admin/agente.
- **get-user-conversations**: Restringido a propias si no es admin/agente.
- **get-new-user-conversations**: Restringido a propias si no es admin/agente.
- **search-conversations**: Función de Admin (requiere agente o admin).
- **search-user-conversations**<span style="white-space: pre-wrap;">: Restringido a propias si no es admin/agente. </span>`<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> no requerido (por defecto usuario activo).</span>
- **new-conversation**: Restringido a propias si no es admin/agente.
- **update-conversation-status**
- **update-conversation-department**: Restringido a propias si no es admin/agente.
- **update-conversation-agent**: Restringido a propias si no es admin/agente.
- **get-new-messages**: Restringido a propias si no es admin/agente.
- **send-message**: Restringido a propias si no es admin/agente.
- **send-email**: Si es usuario final, solo a agentes/admins. Si es agente/admin, a cualquiera.
- **send-slack-message**: Restringido a propias si no es admin/agente.
- **update-message**: Restringido a mensajes propios si no es admin/agente.
- **update-messages-status**: Restringido a mensajes propios si no es admin/agente.
- **delete-message**: Restringido a mensajes propios si no es admin/agente.
- **slack-users**: Función de Admin (requiere agente o admin).
- **archive-slack-channels**: Función de Admin (requiere agente o admin).
- **slack-channels**: Función de Admin (requiere admin).
- **current-url**
- **set-rating**: Restringido a conversaciones propias si no es admin/agente.
- **get-rating**: Función de Admin (requiere agente o admin).
- **get-articles**
- **save-article**: Función de Admin (requiere agente o admin).
- **search-articles**
- **get-articles-categories**: Función de Admin (requiere agente o admin).
- **save-articles-categories**: Función de Admin (requiere agente o admin).
- **article-ratings**
- **get-versions**
- **update**: Función de Admin (requiere agente o admin).
- **app-get-key**: Función de Admin (requiere admin).
- **app-activation**: Función de Admin (requiere admin).
- **csv-users**: Función de Admin (requiere admin o agente).
- **transcript**: Restringido a conversaciones propias si no es admin/agente.
- **is-agent-typing**: Función de Admin (requiere admin o agente).
- **dialogflow-message**: Funciona solo para el usuario activo.
- **dialogflow-get-intents**: Función de Admin (requiere admin).
- **dialogflow-create-intent**: Función de Admin (requiere admin).
- **dialogflow-update-intent**: Función de Admin (requiere admin).
- **dialogflow-entity**: Función de Admin (requiere admin).
- **dialogflow-get-entity**: Función de Admin (requiere admin o agente).
- **google-get-token**
- **dialogflow-get-agent**: Función de Admin (requiere admin o agente).
- **dialogflow-set-active-context**: Restringido a usuario activo si no es admin/agente.
- **dialogflow-curl**: Función de Admin (requiere admin).
- **dialogflow-human-takeover**: Restringido a usuario activo si no es admin/agente.
- **dialogflow-smart-reply**: Función de Admin (requiere admin o agente).
- **cron-jobs**
- **woocommerce-get-customer**: Función de Admin (requiere admin o agente).
- **woocommerce-get-user-orders**: Función de Admin (requiere admin o agente).
- **woocommerce-get-order**: Función de Admin (requiere admin o agente).
- **woocommerce-get-product**: Función de Admin (requiere admin o agente).
- **woocommerce-get-products**: Función de Admin (requiere admin o agente).
- **woocommerce-search-products**: Función de Admin (requiere admin o agente).
- **woocommerce-get-taxonomies**: Función de Admin (requiere admin).
- **woocommerce-get-attributes**: Función de Admin (requiere admin).
- **woocommerce-get-product-id-by-name**: Función de Admin (requiere admin o agente).
- **woocommerce-get-product-images**: Función de Admin (requiere admin o agente).
- **woocommerce-get-product-taxonomies**: Función de Admin (requiere admin o agente).
- **woocommerce-get-attribute-by-term**: Función de Admin (requiere admin o agente).
- **woocommerce-get-attribute-by-name**: Función de Admin (requiere admin o agente).
- **woocommerce-is-in-stock**: Función de Admin (requiere admin o agente).
- **woocommerce-coupon**: Función de Admin (requiere admin o agente).
- **woocommerce-coupon-check**: Función de Admin (requiere admin o agente).
- **woocommerce-coupon-delete-expired**: Función de Admin (requiere admin o agente).
- **woocommerce-get-url**: Función de Admin (requiere admin o agente).
- **woocommerce-get-session**: Función de Admin (requiere admin).
- **woocommerce-get-session-key**: Función de Admin (requiere admin o agente).
- **woocommerce-payment-methods**: Función de Admin (requiere admin o agente).
- **woocommerce-shipping-locations**: Función de Admin (requiere admin o agente).
- **chat-css**
- **get-avatar**: Restringido a usuario activo si no es admin/agente.
- **get-agents-ids**: Función de Admin (requiere admin o agente).
- **get-users-with-details**: Función de Admin (requiere admin o agente).
- **send-custom-email**: Función de Admin (requiere admin o agente).
- **send-sms**: Restringido a usuario activo si no es admin/agente.
- **email-piping**
- **get-notes**: Función de Admin (requiere admin o agente).
- **add-note**: Función de Admin (requiere admin o agente).
- **delete-note**: Función de Admin (requiere admin o agente).
- **automations-get**
- **automations-save**: Función de Admin (requiere admin).
- **automations-validate**
- **automations-run-all**
- **automations-run**
- **automations-is-sent**: Función de Admin (requiere agente o admin).
- **get-agents-in-conversation**: Restringido a conversaciones propias si no es admin/agente.
- **get-departments**
- **login**
- **logout**
- **update-login**: Restringido a conversaciones propias si no es admin/agente.
- **is-typing**
- **set-typing**
- **clean-data**: Función de Admin (requiere admin o agente).
- **get-translation**
- **get-translations**
- **save-translations**: Función de Admin (requiere agente o admin).
- **delete-leads**: Función de Admin (requiere admin).
- **reports**: Función de Admin (requiere admin).
- **reports-update**: Función de Admin (requiere admin).
- **direct-message**: Función de Admin (requiere agente o admin).
- **count-conversations**: Función de Admin (requiere agente o admin).
- **updates-available**: Función de Admin (requiere admin).
- **google-translate**: Función de Admin (requiere admin o agente).
- **google-language-detection-update-user**: Restringido a conversaciones propias si no es admin/agente.
- **check-conversations-assignment**: Función de Admin (requiere admin o agente).

---

### Más funciones AJAX

Las siguientes funciones están disponibles solo a través de AJAX.

## close-message

<span style="white-space: pre-wrap;">Envía el mensaje de cierre a una conversación. Puede establecer el mensaje de cierre en el área </span>`<span class="editor-theme-code">Configuración > Chat</span>`.

**Requisitos**<span style="white-space: pre-wrap;"> Esta es una función de administración y funciona solo si el usuario activo es un </span>**agente**.

**Parámetros**

- `<span class="editor-theme-code">function</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Inserte </span>`<span class="editor-theme-code">close-message</span>`.
- `<span class="editor-theme-code">bot_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El ID del bot. Use la función </span>`<span class="editor-theme-code">SBF.setting("bot-id")</span>`<span style="white-space: pre-wrap;"> para obtener el ID del bot. Si está en el área de administración use </span>`<span class="editor-theme-code">SB_ADMIN_SETTINGS['bot-id']</span>`<span style="white-space: pre-wrap;"> en su lugar.</span>
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la conversación a la cual enviar el mensaje.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "status": "success",
        "message-id": 123456,
        "queue": false
    }
}
```

---

#### update-user-and-message

Actualiza los detalles de un usuario y el contenido de un mensaje.

**Requisitos**<span style="white-space: pre-wrap;"> Si el usuario activo es un </span>**usuario**<span style="white-space: pre-wrap;">, solo se puede actualizar el usuario activo y solo los mensajes vinculados a las conversaciones del usuario. Si el usuario activo es un </span>**agente**<span style="white-space: pre-wrap;"> o </span>**admin**, la función funciona para cualquier usuario y cualquier mensaje.

**Parámetros**

- `<span class="editor-theme-code">function</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Ingrese </span>`<span class="editor-theme-code">update-user-and-message</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario a actualizar.
- `<span class="editor-theme-code">settings</span>`<span style="white-space: pre-wrap;">: Array con los detalles del usuario. Ej: </span>`<span class="editor-theme-code">{ first_name: "Don", last_name: "John", profile_image: "image.jpg", email: "example@gmail.com", user_type: "admin" }</span>`.
- `<span class="editor-theme-code">settings_extra</span>`<span style="white-space: pre-wrap;">: Array con detalles adicionales del usuario. Sintaxis del array: </span>`<span class="editor-theme-code">{ "ID": ["valor", "Nombre"], ...}</span>`.
- `<span class="editor-theme-code">message_id</span>`: El ID del mensaje a actualizar.
- `<span class="editor-theme-code">message</span>`: El texto del mensaje.
- `<span class="editor-theme-code">payload</span>`<span style="white-space: pre-wrap;">: Array asociativo conteniendo datos extra, ej. </span>`<span class="editor-theme-code">{"rich-messages":{"123":{"type":"buttons","result":"Premium Plan"}}}</span>`.

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">true</span>`

---

#### get-agent

Devuelve los detalles de un agente, administrador o bot.

**Parámetros**

- `<span class="editor-theme-code">agent_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del agente.

**Respuesta**

JSON

```
{
    "id": "2",
    "first_name": "Don",
    "last_name": "John",
    "department": null,
    "flag": "gb.png",
    "country_code": "GB",
    "details": [
        {
            "slug": "city",
            "name": "City",
            "value": "London"
        },
        {
            "slug": "country",
            "name": "Country",
            "value": "United Kingdom"
        },
        {
            "slug": "sport",
            "name": "Sport",
            "value": "email@example.com"
        },
        {
            "slug": "timezone",
            "name": "Timezone",
            "value": "Europe/London"
        }
        ...
    ]
}
```

---

#### user-autodata

Obtiene los siguientes detalles sobre el usuario activo y actualiza los detalles del usuario: IP, ciudad, ubicación, país, zona horaria, moneda, navegador, idioma del navegador, sistema operativo.

**Parámetros**

- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario.

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">true</span>`

---

#### get-agent-department

Devuelve el departamento del agente o administrador activo.

**Respuesta**<span style="white-space: pre-wrap;"> Devuelve el ID del departamento si está establecido; de lo contrario, devuelve </span>`<span class="editor-theme-code">false</span>`.