# Uso de Apis

# WEB API

## **Configuración y uso**

La Web API proporciona una colección de métodos HTTP que sustentan la mayoría de las funciones de ZampiBot. Para comenzar a usar la Web API, siga el tutorial a continuación.

### **Uso usuario**

<span style="white-space: pre-wrap;">Realice una llamada </span>`<span class="editor-theme-code">POST</span>`<span style="white-space: pre-wrap;"> al archivo </span>`<span class="editor-theme-code">include/api.php</span>`<span style="white-space: pre-wrap;"> de su instalación de ZampiBot. Puede utilizar el siguiente código para realizar las llamadas:</span>

**PHP**

```
function zampibot_api($query) {
    $ch = curl_init('YOUR-DOMAIN/chatbot.zampisoft.com/include/api.php');
    $parameters = [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_USERAGENT => 'Support Board',
            CURLOPT_POST => true,
            CURLOPT_CONNECTTIMEOUT => 5,
            CURLOPT_POSTFIELDS => http_build_query(array_merge(['token' => 'YOUR-TOKEN'], $query))
    ];
    curl_setopt_array($ch, $parameters); 
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response, true);
}
```

**Ejemplo de uso:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">zampibot_api(['function' => 'get-user', 'user_id' => 123]);</span>`

<span style="white-space: pre-wrap;">La variable </span>`<span class="editor-theme-code">$response</span>`<span style="white-space: pre-wrap;"> contendrá la respuesta en formato </span>**JSON**<span style="white-space: pre-wrap;">. Puede añadir nuevos argumentos en el array de la consulta: </span>`<span class="editor-theme-code">['token' => '', 'function' => '', 'argument-name' => 'value', ...]</span>`.

**Reemplace las siguientes cadenas con los valores correctos:**

- <span style="white-space: pre-wrap;">Reemplace </span>`<span class="editor-theme-code">YOUR-DOMAIN</span>`<span style="white-space: pre-wrap;"> con la URL de su sitio web. La URL completa debe apuntar al archivo </span>`<span class="editor-theme-code">include/api.php</span>`<span style="white-space: pre-wrap;"> de su instalación. Debería verse así: </span>`<span class="editor-theme-code">https://TU-DOMINIO.com/chatbot.zampisoft.com/include/api.php</span>`.
    - <span style="white-space: pre-wrap;">Si usa la </span>**versión Cloud**<span style="white-space: pre-wrap;">, ingrese </span>`<span class="editor-theme-code">https://chatbot.zampisoft.com.support/script/include/api.php</span>`.
- <span style="white-space: pre-wrap;">Reemplace </span>`<span class="editor-theme-code">YOUR-TOKEN</span>`<span style="white-space: pre-wrap;"> con el token de un usuario administrador. Puede obtener el token desde el área de </span>**Usuarios**<span style="white-space: pre-wrap;"> abriendo el perfil de un usuario </span>`<span class="editor-theme-code">admin</span>`. Solo se admiten tokens de administrador y solo los administradores pueden ver los tokens.
    - <span style="white-space: pre-wrap;">Si utiliza la versión cloud, debe usar el token de </span>`<span class="editor-theme-code">Account > Installation > API token</span>`.
    - **¡Advertencia!**<span style="white-space: pre-wrap;"> Este token debe mantenerse siempre en secreto.</span>
- <span style="white-space: pre-wrap;">Reemplace </span>`<span class="editor-theme-code">METHOD-NAME</span>`<span style="white-space: pre-wrap;"> con el nombre de la función de la API que desea utilizar. Obténgalos de la lista de métodos a continuación.</span>

### Información

- <span style="white-space: pre-wrap;">Algunas funciones están protegidas por razones de seguridad. Ingrese el código </span>`<span class="editor-theme-code">$GLOBALS['SB_FORCE_ADMIN'] = true</span>`<span style="white-space: pre-wrap;"> antes de llamar a la función para ejecutarla correctamente. Ingrese el código </span>`<span class="editor-theme-code">$GLOBALS['SB_FORCE_ADMIN'] = false</span>`<span style="white-space: pre-wrap;"> inmediatamente después de la llamada a la función por seguridad.</span>
- <span style="white-space: pre-wrap;">Algunas funciones requieren los detalles del usuario activo. Use el código </span>`<span class="editor-theme-code">$GLOBALS['SB_LOGIN'] = ['id' => '', 'first_name' => '', 'last_name' => '', 'email' => '', 'user_type' => '', 'department' => ''];</span>`<span style="white-space: pre-wrap;"> para establecer el usuario activo.</span>
- **Ejemplo de Postman:**<span style="white-space: pre-wrap;"> El token también se puede pasar como un parámetro de CABECERA (HEADER).</span>
- [![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/vsbk1tpwN9BjFdo2-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/vsbk1tpwN9BjFdo2-image.png)

---

# 👥 WEB API: Usuarios

Métodos para gestionar usuarios, agentes y administradores.

### get-user

Devuelve los detalles de un usuario.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-user</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario.
- `<span class="editor-theme-code">extra</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 obtener detalles adicionales del usuario. Por defecto: </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "id": "123456",
        "first_name": "John",
        "last_name": "Doe",
        "email": "johon@example.com",
        "profile_image": "https://chatbot.zampisoft.com/user.svg",
        "user_type": "visitor",
        "creation_time": "2020-05-12 14:28:57",
        "last_activity": "2020-05-12 14:28:57",
        "department": null,
        "token": "a521773c5a566a251c3fb00e93162b20ff955b12",
        "password": "",
        "details": [
            {
                "slug": "location",
                "name": "Location",
                "value": "New York, United States"
            },
            ...
        ]
    }
}
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">{"success":true, "response":false}</span>`<span style="white-space: pre-wrap;"> si no se encuentra el usuario.</span>

---

### get-user-by

Busca un usuario con los detalles especificados y lo devuelve.

**Argumentos**

- `<span class="editor-theme-code">by</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El nombre del detalle del usuario. Valores aceptados: </span>`<span class="editor-theme-code">email</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">first_name</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">last_name</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">phone</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">[extra]</span>`<span style="white-space: pre-wrap;"> (reemplace \[extra\] con cualquier nombre de detalle adicional del usuario).</span>
- `<span class="editor-theme-code">value</span>`: El valor del campo.

**Respuesta**

JSON

```
{
    "id": "881",
    "first_name": "Don",
    "last_name": "John",
    "email": "example@example.com",
    "user_type": "visitor",
    "department": null
 }
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">{"success":true, "response":false}</span>`<span style="white-space: pre-wrap;"> si no se encuentra el usuario.</span>

---

### get-user-extra

Devuelve los detalles adicionales de un usuario.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-user-extra</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario.
- `<span class="editor-theme-code">slug</span>`<span style="white-space: pre-wrap;">: El slug del ajuste a recuperar. Si no se establece, se devuelven todos los detalles del usuario. Por defecto: </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">default</span>`<span style="white-space: pre-wrap;">: El valor por defecto a devolver si no se encuentran los detalles. Por defecto: </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "slug": "browser",
            "name": "Browser",
            "value": "Chrome"
        },
        ...
    ]
}
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">{"success":true, "response":[]}</span>`<span style="white-space: pre-wrap;"> si no se encuentra el usuario.</span>

---

### get-user-language

Devuelve el código de idioma activo utilizado por el usuario. Por defecto, es el idioma del navegador del usuario.

**Argumentos**

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

**Respuesta**<span style="white-space: pre-wrap;"> El código de idioma. Ejemplos: </span>`<span class="editor-theme-code">es</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">it</span>`<span style="white-space: pre-wrap;">. Devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si el código es </span>`<span class="editor-theme-code">en</span>`<span style="white-space: pre-wrap;"> o no se encuentra.</span>

---

### get-users

Devuelve los detalles de todos los usuarios.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-users</span>`.
- `<span class="editor-theme-code">sorting</span>`<span style="white-space: pre-wrap;">: Establece el orden de los valores devueltos. Ingrese </span>`<span class="editor-theme-code">["column", "order"]</span>`<span style="white-space: pre-wrap;"> y reemplace </span>`<span class="editor-theme-code">column</span>`<span style="white-space: pre-wrap;"> con uno de los siguientes: </span>`<span class="editor-theme-code">first_name</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">last_name</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">email</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">profile_image</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">user_type</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">creation_time</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">last_activity</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">department</span>`<span style="white-space: pre-wrap;">. Reemplace </span>`<span class="editor-theme-code">order</span>`<span style="white-space: pre-wrap;"> con </span>`<span class="editor-theme-code">ASC</span>`<span style="white-space: pre-wrap;"> o </span>`<span class="editor-theme-code">DESC</span>`.
- `<span class="editor-theme-code">user_types</span>`<span style="white-space: pre-wrap;">: Array en formato </span>**JSON**<span style="white-space: pre-wrap;"> de tipos de usuario a incluir. Sintaxis: </span>`<span class="editor-theme-code">["", "", "", ...]</span>`<span style="white-space: pre-wrap;">. Valores aceptados: </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>`. Por defecto: todos.
- `<span class="editor-theme-code">search</span>`: La cadena a buscar.
- `<span class="editor-theme-code">pagination</span>`: Entero de 1 a N para limitar el número de resultados. Ingrese 0 para los primeros 100 resultados, 1 para 101 a 200, etc.
- `<span class="editor-theme-code">extra</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 también todos los detalles extra. O como un array de slugs para incluir solo un subconjunto. Por defecto: </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">user_ids</span>`<span style="white-space: pre-wrap;">: Array de IDs. Si se establece, devuelve solo los usuarios incluidos en el array. Sintaxis: </span>`<span class="editor-theme-code">["", "", "", ...]</span>`<span style="white-space: pre-wrap;">. Por defecto: </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">department</span>`<span style="white-space: pre-wrap;">: Si se establece, devuelve solo usuarios con al menos una conversación asignada al ID de departamento provisto. Por defecto: </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">tag</span>`<span style="white-space: pre-wrap;">: Si se establece, devuelve solo usuarios con al menos una conversación asignada a la etiqueta provista. Por defecto: </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">source</span>`<span style="white-space: pre-wrap;">: Si se establece, devuelve solo usuarios con al menos una conversación del canal provisto. Fuentes: </span>`<span class="editor-theme-code">em</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">tk</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">wa</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">fb</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">ig</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">tw</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">wc</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">tx</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">gb</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">ln</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">vb</span>`<span style="white-space: pre-wrap;">. Por defecto: </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "id": "880",
            "first_name": "User",
            "last_name": "#29938",
            "email": null,
            "profile_image": "https://chatbot.zampisoft.com/user.svg",
            "user_type": "visitor",
            "creation_time": "2020-05-13 08:58:18",
            "last_activity": "2020-05-13 09:07:39",
            "department": null,
            "token": "6d969f64f5ed6263714b9b39f3d3700b66f16820"
        },
        {
            "id": "879",
            "first_name": "User",
            "last_name": "#86773",
            "email": null,
            "profile_image": "https://chatbot.zampisoft.com/user.svg",
            "user_type": "visitor",
            "creation_time": "2020-05-13 08:38:41",
            "last_activity": "2020-05-13 08:58:12",
            "department": null,
            "token": "2e5064670707d06b661d04353f4a462ec927f19a"
        }
        ...
    ]
}
```

---

### get-new-users

Devuelve los usuarios creados después de la fecha o ID proporcionado.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-new-users</span>`.
- `<span class="editor-theme-code">datetime</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: ID de usuario o fecha y hora en formato: </span>`<span class="editor-theme-code">YYYY-MM-DD HH:MM:SS</span>`<span style="white-space: pre-wrap;">. Ej. </span>`<span class="editor-theme-code">2020-05-13 13:35:59</span>`. Puede eliminar la hora y dejar solo la fecha. Las fechas en la base de datos son UTC+0.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "id": "880",
            "first_name": "User",
            "last_name": "#29938",
            "email": null,
            "profile_image": "https://chatbot.zampisoft.com/user.svg",
            "user_type": "visitor",
            "creation_time": "2020-05-13 08:58:18",
            "last_activity": "2020-05-13 09:07:39",
            "department": null,
            "token": "6d969f64f5ed6263714b9b39f3d3700b66f16820"
        },
        {
            "id": "879",
            "first_name": "User",
            "last_name": "#86773",
            "email": null,
            "profile_image": "https://chatbot.zampisoft.com/user.svg",
            "user_type": "visitor",
            "creation_time": "2020-05-13 08:38:41",
            "last_activity": "2020-05-13 08:58:12",
            "department": null,
            "token": "2e5064670707d06b661d04353f4a462ec927f19a"
        }
        ...
    ]
}
```

---

### get-online-users

Devuelve los usuarios en línea, incluyendo agentes.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-online-users</span>`.
- `<span class="editor-theme-code">exclude_id</span>`<span style="white-space: pre-wrap;">: Array de IDs de usuarios en formato JSON para excluir. Sintaxis: </span>`<span class="editor-theme-code">[123, 123, 123, ...]</span>`.
- `<span class="editor-theme-code">sorting</span>`<span style="white-space: pre-wrap;">: Nombre de la tabla de base de datos usada para ordenar. Por defecto: </span>`<span class="editor-theme-code">creation_time</span>`.
- `<span class="editor-theme-code">agents</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 devolver solo agentes y administradores. Por defecto: </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "id": "881",
            "first_name": "Don",
            "last_name": "John",
            "email": null,
            "profile_image": "https://chatbot.zampisoft.com/user.svg",
            "user_type": "visitor",
            "creation_time": "2020-05-13 09:18:59",
            "last_activity": "2020-05-13 09:32:34",
            "department": null,
            "token": "e435a5c67f4276cdb9c6fc19b7c015990ffc3268"
        },
        {
            "id": "880",
            "first_name": "User",
            "last_name": "#29938",
            "email": null,
            "profile_image": "https://chatbot.zampisoft.com/user.svg",
            "user_type": "visitor",
            "creation_time": "2020-05-13 08:58:18",
            "last_activity": "2020-05-13 09:32:28",
            "department": null,
            "token": "6d969f64f5ed6263714b9b39f3d3700b66f16820"
        }
        ...
    ]
}
```

---

### get-users-with-details

Devuelve un array con los IDs y detalles de los usuarios que tienen los detalles solicitados.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-users-with-details</span>`.
- `<span class="editor-theme-code">details</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array de detalles de usuario. Ej. </span>`<span class="editor-theme-code">[ "email", "phone" ]</span>`.
- `<span class="editor-theme-code">user_ids</span>`<span style="white-space: pre-wrap;">: Array o cadena separada por comas de IDs. Si se establece, solo se buscan estos usuarios. Use </span>`<span class="editor-theme-code">all</span>`<span style="white-space: pre-wrap;"> o </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para buscar en todos, o </span>`<span class="editor-theme-code">agents</span>`<span style="white-space: pre-wrap;"> para buscar solo agentes/admins. Por defecto: </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "email": [
        {
            "id": 4561,
            "value": "albert@example.com"
        },
        {
            "id": 98436,
            "value": "jessica@example.com"
        },
        ...
    ],
    "phone": [
        {
            "id": 12563,
            "value": "+4462367136"
        },
        {
            "id": 778956,
            "value": "+4462999345"
        },
        ...
    ],
    ...
}
```

---

### get-agent

Devuelve los detalles de un agente o administrador.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-agent</span>`.
- `<span class="editor-theme-code">agent_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del agente.

**Respuesta**

JSON

```
{
   "success": true,
   "response": {
       "id": "123456",
       "first_name": "John",
       "last_name": "Doe",
       "email": "johon@example.com",
       "profile_image": "https://chatbot.zampisoft.com/user.svg",
       "user_type": "agent",
       "creation_time": "2020-05-12 14:28:57",
       "last_activity": "2020-05-12 14:28:57",
       "department": null,
       "token": "a521773c5a566a251c3fb00e93162b20ff955b12",
       "password": "",
       "details": [
           {
               "slug": "location",
               "name": "Location",
               "value": "New York, United States"
           },
           {
               "slug": "country_code",
               "name": "Country code",
               "value": "America/New_York"
           }
           ...
       ]
   }
                                }
```

---

### get-agents-ids

Devuelve un array con los IDs de los Agentes.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-agents-ids</span>`.
- `<span class="editor-theme-code">admins</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 a los administradores. Por defecto: </span>`<span class="editor-theme-code">true</span>`.

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[881, 153, ...]</span>`

---

### get-user-from-conversation

Devuelve el ID y correo electrónico del usuario, o del último agente, de la conversación dada.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-user-from-conversation</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la conversación.
- `<span class="editor-theme-code">agent</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 obtener el último agente que respondió. Por defecto: </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
  "id": "123456",
  "email": "email@example.com"
}
```

---

### agents-online

Verifica si al menos un agente o administrador está en línea.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si hay agentes o admins en línea, o </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si todos están desconectados.</span>

---

### search-users

Devuelve los usuarios que coinciden con la búsqueda.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">search-users</span>`.
- `<span class="editor-theme-code">search</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena a buscar. Los detalles adicionales del usuario también son compatibles.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "id": "881",
            "first_name": "Don",
            "last_name": "John",
            "email": null,
            "profile_image": "https://board.support/user.svg",
            "user_type": "visitor",
            "creation_time": "2020-05-13 09:18:59",
            "last_activity": "2020-05-13 09:32:34",
            "department": null,
            "token": "e435a5c67f4276cdb9c6fc19b7c015990ffc3268"
        },
        {
            "id": "880",
            "first_name": "User",
            "last_name": "#29938",
            "email": null,
            "profile_image": "https://board.support/user.svg",
            "user_type": "visitor",
            "creation_time": "2020-05-13 08:58:18",
            "last_activity": "2020-05-13 09:32:28",
            "department": null,
            "token": "6d969f64f5ed6263714b9b39f3d3700b66f16820"
        }
        ...
    ]
}
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">{"success":true, "response":[]}</span>`<span style="white-space: pre-wrap;"> si no se encuentran usuarios.</span>

---

### add-user

Crea un nuevo usuario.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">add-user</span>`.
- `<span class="editor-theme-code">first_name</span>`<span style="white-space: pre-wrap;">: Nombre del usuario. Por defecto: </span>`<span class="editor-theme-code">User</span>`.
- `<span class="editor-theme-code">last_name</span>`<span style="white-space: pre-wrap;">: Apellido. Por defecto: </span>`<span class="editor-theme-code">#RANDOM-NUMBER</span>`.
- `<span class="editor-theme-code">email</span>`: Email del usuario. Por defecto: vacío.
- `<span class="editor-theme-code">profile_image</span>`: Foto de perfil.
- `<span class="editor-theme-code">password</span>`: Contraseña. Por defecto: vacío.
- `<span class="editor-theme-code">user_type</span>`<span style="white-space: pre-wrap;">: Tipo de usuario. Valores: </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 style="white-space: pre-wrap;">. Por defecto: </span>`<span class="editor-theme-code">visitor</span>`<span style="white-space: pre-wrap;"> si no hay email, sino </span>`<span class="editor-theme-code">user</span>`.
- `<span class="editor-theme-code">extra</span>`<span style="white-space: pre-wrap;">: Array de detalles adicionales en formato JSON. Detalles integrados (IDs): </span>`<span class="editor-theme-code">phone</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">city</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">language</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">country</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">birthday</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">company</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">facebook</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">twitter</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">linkedin</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">website</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">ip</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">country_code</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">browser</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">currency</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">location</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">os</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">time_zone</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">current_url</span>`<span style="white-space: pre-wrap;">. Sintaxis: </span>`<span class="editor-theme-code">{"ID": ["value", "Name"], ...}</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": 123456
}
```

<span style="white-space: pre-wrap;">Otras respuestas posibles: </span>**duplicate-email**<span style="color: rgb(40, 60, 73); background-color: rgb(255, 255, 255);">,</span><span style="white-space: pre-wrap;"> </span>**invalid-user-type**<span style="color: rgb(40, 60, 73); background-color: rgb(255, 255, 255);">,</span><span style="white-space: pre-wrap;"> </span>**MySQL error message**<span style="color: rgb(40, 60, 73); background-color: rgb(255, 255, 255);">.</span>

---

### update-user

Actualiza los detalles de un usuario existente.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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</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">first_name</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">last_name</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">profile_image</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">password</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">user_type</span>`.
- `<span class="editor-theme-code">email</span>`<span style="white-space: pre-wrap;">: Ingrese </span>`<span class="editor-theme-code">NULL</span>`<span style="white-space: pre-wrap;"> para eliminar el correo electrónico.</span>
- `<span class="editor-theme-code">settings_extra</span>`<span style="white-space: pre-wrap;">: Array de detalles adicionales en formato JSON. Sintaxis: </span><span style="color: rgb(49, 75, 91); background-color: rgb(236, 242, 246);">{"ID": \["value", "Name"\], "ID": \["value", "Name"\], ...}</span>

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

<span style="white-space: pre-wrap;">Other possible responses: </span>**duplicate-email**<span style="white-space: pre-wrap;">, </span>**invalid-user-type**<span style="white-space: pre-wrap;">, </span>**MySQL error message**.

---

### delete-user

Elimina un usuario y todas las conversaciones y mensajes vinculados.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">delete-user</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario a eliminar.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### delete-users

Elimina múltiples usuarios y sus datos vinculados.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">delete-users</span>`.
- `<span class="editor-theme-code">user_ids</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array de IDs de usuarios. Sintaxis: </span>`<span class="editor-theme-code">[123, 123, ...]</span>`

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### is-online

Verifica si un usuario está en línea.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">is-online</span>`.
- `<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>`<span style="white-space: pre-wrap;"> si está en línea, </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si está desconectado.</span>

---

### current-url

Obtiene o establece la URL actual de un usuario o la última visitada.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">current-url</span>`.
- `<span class="editor-theme-code">user_id</span>`: El ID del usuario.
- `<span class="editor-theme-code">url</span>`: La URL para establecer como "Current URL". Si se establece, la función solo establecerá el valor y no devolverá ninguna URL.

**Respuesta**

JSON

```
{
    "success": true,
    "response": "https://charbot.zampisoft.com"
}
```

<span style="white-space: pre-wrap;">Returns </span>**{"success":true,"response":false}**<span style="white-space: pre-wrap;"> if the URL is not found. Returns </span>**{"success":true,"response":true}**<span style="white-space: pre-wrap;"> if the </span>**url**<span style="white-space: pre-wrap;"> argument is set.</span>

---

### count-users

Devuelve el conteo total de usuarios agrupados por tipo.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">count-users</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "all": "335",
        "lead": "288",
        ...
    }
}
```

---

### update-user-to-lead

Cambia el tipo de usuario a "lead" (cliente potencial).

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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-to-lead</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### get-avatar

Genera la imagen de perfil usando la inicial del nombre y apellido, la guarda y devuelve la URL.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-avatar</span>`.
- `<span class="editor-theme-code">first_name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Nombre del usuario.
- `<span class="editor-theme-code">last_name</span>`: Apellido del usuario

```
Respuesta https://chatbot.zampisoft.com/uploads/13-04-21/9455859.png
```

---

### get-bot-id

Devuelve el ID del bot de ZampiBot.

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

---

### is-typing

Verifica si un usuario o agente está escribiendo en una conversación. (No funciona si Pusher está activo).

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">is-typing</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID del usuario o agente a verificar.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID de la conversación.

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

---

### is-agent-typing

Verifica si un agente está escribiendo y devuelve sus detalles. (No funciona si Pusher está activo).

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">is-agent-typing</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID de la conversación.

```
{
  "id": "",
  "first_name": "",
  "last_name": ""
}
```

**Respuesta**<span style="white-space: pre-wrap;"> Devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si nadie escribe, o un objeto con detalles del agente.</span>

---

### set-typing

Asigna el estado "escribiendo" a un usuario o agente en una conversación.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">set-typing</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID del usuario o agente.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID de la conversación.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### login

Inicia sesión de un usuario o agente. Puede hacerse vía email/contraseña o ID/token.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">login</span>`.
- `<span class="editor-theme-code">email</span>`<span style="white-space: pre-wrap;"> / </span>`<span class="editor-theme-code">password</span>`: Para login tradicional.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> / </span>`<span class="editor-theme-code">user_token</span>`: Para login por token.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "id": "913",
            "profile_image": "https://board.support/user.svg",
            "first_name": "User",
            "last_name": "#29902",
            "email": null,
            "user_type": "visitor",
            "token": "9b25351047ee758aa97ee4868d130cc15eb8decf"
        },
        "YXNkWGNSeTdtRTdDYVkxVG8wckN4YWF6V2s0Tk1mczBSVHdQbHBpOWdmejVUTTdOUUxEUENhdUVoYmROWn..."
    ]
}
```

<span style="white-space: pre-wrap;">El segundo valor son los datos de sesión encriptados. Use </span>`<span class="editor-theme-code">SBF.loginCookie(response[1]);</span>`<span style="white-space: pre-wrap;"> para guardarlo. Devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si falla.</span>

---

### logout

Cierra la sesión del usuario conectado.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">logout</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

<span style="white-space: pre-wrap;">También debe borrarse la cookie </span>`<span class="editor-theme-code">sb-login</span>`<span style="white-space: pre-wrap;"> del navegador.</span>

---

### update-login

Actualiza los detalles del usuario conectado. Si un detalle no se establece, se eliminará de la base de datos.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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-login</span>`.
- `<span class="editor-theme-code">profile_image</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">first_name</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">last_name</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">email</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">department</span>`.

**Respuesta**

```
YXNkWGNSeTdtRTdDYVkxVG8wckN4YWF6V2s0Tk1mczBSVHdQbHBpOWdmejVUTTdOUUxEUENhdUVoYmROWn...
```

<span style="white-space: pre-wrap;">Cadena encriptada que debe guardarse en la cookie </span>`<span class="editor-theme-code">sb-login</span>`.

---

### delete-leads

Elimina todos los leads (clientes potenciales), incluyendo conversaciones y mensajes vinculados.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">delete-leads</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### update-bot

Actualiza los detalles del perfil del bot. Si no existe, se crea uno.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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-bot</span>`.
- `<span class="editor-theme-code">name</span>`: Nombre del bot.
- `<span class="editor-theme-code">profile_image</span>`: URL de imagen del bot.

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> en caso de éxito, </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> en caso contrario.</span>

---

### csv-users

Exporta todos los usuarios a un archivo CSV y devuelve la URL.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">csv-users</span>`.
- `<span class="editor-theme-code">user_ids</span>`: Array de IDs de usuario para exportar solo específicos.

**Respuesta**

JSON

```
{
    "success": true,
    "response": "https://board.support/uploads/users.csv"
}
```

---

# WEB API: Conversaciones

Métodos para gestionar conversaciones y mensajes.

### get-conversation

Devuelve una conversación y sus mensajes.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-conversation</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la conversación.
- `<span class="editor-theme-code">user_id</span>`: El ID del usuario vinculado.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "messages": [
            {
                "id": "2044",
                "user_id": "802",
                "message": "Hello!",
                "creation_time": "2020-05-0410:06:30",
                "attachments": "",
                "status_code": "0",
                "payload": "",
                "conversation_id": "946",
                "first_name": "Don",
                "last_name": "John",
                "profile_image": "https://chatbot.zampisoft.com/user.svg",
                "user_type": "lead"
            },
            {
                "id": "2045",
                "user_id": "377",
                "message": "Hello,howcanIhelp?",
                "creation_time": "2020-05-0410:06:33",
                "attachments": "",
                "status_code": "0",
                "payload": "",
                "conversation_id": "946",
                "first_name": "Bruce",
                "last_name": "Peterson",
                "profile_image": "https://chatbot.zampisoft.com/agent.svg",
                "user_type": "agent"
            }
            ...
        ],
        "details": {
            "user_id": "802",
            "first_name": "Don",
            "last_name": "John",
            "profile_image": "https://chatbot.zampisoft.com/user.svg",
            "user_type": "lead",
            "id": "946",
            "title": "",
            "conversation_time": "2020-05-0410:06:30",
            "conversation_status_code": "3",
            "department": null
        }
    }
}
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">{"success":true,"response":{"messages":[],"details":""}}</span>`<span style="white-space: pre-wrap;"> si no se encuentra.</span>

---

### get-conversations

Devuelve todas las conversaciones. Cada una incluye el último mensaje.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-conversations</span>`.
- `<span class="editor-theme-code">pagination</span>`: Entero para paginación (0 para primeros 100, 1 para siguientes 100).
- `<span class="editor-theme-code">status_code</span>`<span style="white-space: pre-wrap;">: Códigos de estado: live = </span>`<span class="editor-theme-code">0</span>`<span style="white-space: pre-wrap;">, esperando usuario = </span>`<span class="editor-theme-code">1</span>`<span style="white-space: pre-wrap;">, esperando agente = </span>`<span class="editor-theme-code">2</span>`<span style="white-space: pre-wrap;">, archivo = </span>`<span class="editor-theme-code">3</span>`<span style="white-space: pre-wrap;">, papelera = </span>`<span class="editor-theme-code">4</span>`, all = todos.
- `<span class="editor-theme-code">routing</span>`<span style="white-space: pre-wrap;">: </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">Set it to</span><span style="white-space: pre-wrap;"> </span>**true**<span style="white-space: pre-wrap;"> </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">if the</span><span style="white-space: pre-wrap;"> </span>**queue**<span style="white-space: pre-wrap;"> </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">or</span><span style="white-space: pre-wrap;"> </span>**routing**<span style="white-space: pre-wrap;"> </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">is active in</span><span style="white-space: pre-wrap;"> </span>**Settings &gt; Miscellaneous**<span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">. Default:</span><span style="white-space: pre-wrap;"> </span>**false**<span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">.</span>
- `<span class="editor-theme-code">routing_unassigned</span>`<span style="white-space: pre-wrap;">: </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">Set it to</span><span style="white-space: pre-wrap;"> </span>**true**<span style="white-space: pre-wrap;"> </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">to also view the conversations not assigned to any agent. Default:</span><span style="white-space: pre-wrap;"> </span>**false**<span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">.</span>
- `<span class="editor-theme-code">department</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">source</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">tag</span>`: Filtros opcionales.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "message": "Hello World!",
            "message_id": "7351",
            "attachments": "",
            "payload": "",
            "message_status_code": "2",
            "last_update_time": "2023-10-02 16:00:06",
            "message_user_id": "377",
            "message_first_name": "Smart Assistant",
            "message_last_name": "",
            "message_profile_image": "https://example.com/image.jpg",
            "message_user_type": "bot",
            "conversation_id": "4084",
            "conversation_user_id": "4446",
            "conversation_status_code": "3",
            "conversation_creation_time": "2023-10-02 15:59:59",
            "department": "1",
            "agent_id": null,
            "title": "",
            "source": "tk",
            "extra": null,
            "tags": null,
            "conversation_first_name": "User",
            "conversation_last_name": "#26147",
            "conversation_profile_image": "https://example.com/image.jpg",
            "conversation_user_type": "lead"
        },
        ...
    ]
}
```

---

### get-new-conversations

Devuelve conversaciones creadas después de la fecha/ID dada o con mensajes nuevos.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-new-conversations</span>`.
- `<span class="editor-theme-code">datetime</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: ID de conversación o fecha </span>`<span class="editor-theme-code">YYYY-MM-DD HH:MM:SS</span>`.
- `<span class="editor-theme-code">routing </span>`<span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">Set it to</span><span style="white-space: pre-wrap;"> </span>**true**<span style="white-space: pre-wrap;"> </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">if the</span><span style="white-space: pre-wrap;"> </span>**queue**<span style="white-space: pre-wrap;"> </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">or</span><span style="white-space: pre-wrap;"> </span>**routing**<span style="white-space: pre-wrap;"> </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">is active in</span><span style="white-space: pre-wrap;"> </span>**Settings &gt; Miscellaneous**<span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">. Default:</span><span style="white-space: pre-wrap;"> </span>**false**<span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">.</span>
- `<span class="editor-theme-code">routing_unassigned</span>`<span style="white-space: pre-wrap;">: </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">Set it to</span><span style="white-space: pre-wrap;"> </span>**true**<span style="white-space: pre-wrap;"> </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">to also view the conversations not assigned to any agent. Default:</span><span style="white-space: pre-wrap;"> </span>**false**<span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">.</span>

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "message": "Hello World!",
            "message_id": "7351",
            "attachments": "",
            "payload": "",
            "message_status_code": "2",
            "last_update_time": "2023-10-02 16:00:06",
            "message_user_id": "377",
            "message_first_name": "Smart Assistant",
            "message_last_name": "",
            "message_profile_image": "https://example.com/image.jpg",
            "message_user_type": "bot",
            "conversation_id": "4084",
            "conversation_user_id": "4446",
            "conversation_status_code": "3",
            "conversation_creation_time": "2023-10-02 15:59:59",
            "department": "1",
            "agent_id": null,
            "title": "",
            "source": "tk",
            "extra": null,
            "tags": null,
            "conversation_first_name": "User",
            "conversation_last_name": "#26147",
            "conversation_profile_image": "https://example.com/image.jpg",
            "conversation_user_type": "lead"
        },
        ...
    ]
}
```

<span style="white-space: pre-wrap;">Return </span>**{"success":true, "response":\[\]}**<span style="white-space: pre-wrap;"> if no conversations are found.</span>

---

### get-user-conversations

Devuelve las conversaciones de un usuario.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-user-conversations</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario.
- `<span class="editor-theme-code">exclude_id</span>`: Excluir una conversación.
- `<span class="editor-theme-code">agents</span>`<span style="white-space: pre-wrap;">: </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el usuario es agente/admin.</span>

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "message": "Hello World!",
            "message_id": "7351",
            "attachments": "",
            "payload": "",
            "message_status_code": "2",
            "last_update_time": "2023-10-02 16:00:06",
            "message_user_id": "377",
            "message_first_name": "Smart Assistant",
            "message_last_name": "",
            "message_profile_image": "https://example.com/image.jpg",
            "message_user_type": "bot",
            "conversation_id": "4084",
            "conversation_user_id": "4446",
            "conversation_status_code": "3",
            "conversation_creation_time": "2023-10-02 15:59:59",
            "department": "1",
            "agent_id": null,
            "title": "",
            "source": "tk",
            "extra": null,
            "tags": null
        },
        ...
    ]
}
```

<span style="color: rgb(40, 60, 73); background-color: rgb(255, 255, 255);">Return</span><span style="white-space: pre-wrap;"> </span>**{"success":true, "response":\[\]}**<span style="white-space: pre-wrap;"> </span><span style="color: rgb(40, 60, 73); background-color: rgb(255, 255, 255);">if no conversations are found.</span>

---

### get-new-user-conversations

Devuelve conversaciones de usuario actualizadas después de la fecha dada.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-new-user-conversations</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID del usuario.
- `<span class="editor-theme-code">datetime</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">Conversation ID or date and time in the following format: YYYY-MM-DD HH:MM:SS. E.g. 2020-05-13 13:35:59. You can remove the time and leave only the date. The dates stored in the database are in UTC+0.</span>

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
       {
            "message": "Hello World!",
            "message_id": "7351",
            "attachments": "",
            "payload": "",
            "message_status_code": "2",
            "last_update_time": "2023-10-02 16:00:06",
            "message_user_id": "377",
            "message_first_name": "Smart Assistant",
            "message_last_name": "",
            "message_profile_image": "https://example.com/image.jpg",
            "message_user_type": "bot",
            "conversation_id": "4084",
            "conversation_user_id": "4446",
            "conversation_status_code": "3",
            "conversation_creation_time": "2023-10-02 15:59:59",
            "department": "1",
            "agent_id": null,
            "title": "",
            "source": "tk",
            "extra": null,
            "tags": null
        },
        ...
    ]
}
```

Return {"success":true, "response":\[\]} if no conversations are found.

---

## search-conversations

Devuelve conversaciones que coinciden con la búsqueda.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">search-conversations</span>`.
- `<span class="editor-theme-code">search</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Cadena de búsqueda (mensajes, adjuntos, emails, nombres, tags, etc.).

**Respuesta**

JSON

```
{
  "success": true,
  "response": [
        {
            "message": "Hello World!",
            "message_id": "7351",
            "attachments": "",
            "payload": "",
            "message_status_code": "2",
            "last_update_time": "2023-10-02 16:00:06",
            "message_user_id": "377",
            "message_first_name": "Smart Assistant",
            "message_last_name": "",
            "message_profile_image": "https://example.com/image.jpg",
            "message_user_type": "bot",
            "conversation_id": "4084",
            "conversation_user_id": "4446",
            "conversation_status_code": "3",
            "conversation_creation_time": "2023-10-02 15:59:59",
            "department": "1",
            "agent_id": null,
            "title": "",
            "source": "tk",
            "extra": null,
            "tags": null,
            "conversation_first_name": "User",
            "conversation_last_name": "#26147",
            "conversation_profile_image": "https://example.com/image.jpg",
            "conversation_user_type": "lead"
        },
        ...
  ]
}
```

<span style="white-space: pre-wrap;">Return </span>**{"success":true, "response":\[\]}**<span style="white-space: pre-wrap;"> if no conversations are found.</span>

---

### search-user-conversations

Busca en las conversaciones de un usuario específico.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">search-user-conversations</span>`.
- `<span class="editor-theme-code">search</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: </span><span style="color: rgb(49, 75, 91); background-color: rgb(255, 255, 255);">La función de búsqueda puede buscar por nombres de archivos adjuntos, mensajes, correo electrónico del usuario, nombre y apellido, etiquetas, ID del agente, ID del departamento, título de la conversación y más.</span>
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID del usuario.

**Respuesta**

JSON

```
{
  "exito": true,
  "respuesta": [
    {
      "id_mensaje": "7351",
      "mensaje": "¡Hola mundo!",
      "archivos_adjuntos": "",
      "carga_util": "",
      "codigo_estado_mensaje": "2",
      "hora_ultima_actualizacion": "2023-10-02 16:00:06",

      "id_usuario_mensaje": "377",
      "nombre_mensaje": "Asistente Inteligente",
      "apellido_mensaje": "",
      "imagen_perfil_mensaje": "https://example.com/image.jpg",
      "tipo_usuario_mensaje": "bot",

      "id_conversacion": "4084",
      "id_usuario_conversacion": "4446",
      "codigo_estado_conversacion": "3",
      "hora_creacion_conversacion": "2023-10-02 15:59:59",

      "departamento": "1",
      "id_agente": null,

      "titulo": "",
      "fuente": "tk",
      "extra": null,
      "etiquetas": null
    }
  ]
}
```

<span style="white-space: pre-wrap;">Returns </span>**{"success":true, "response":\[\]}**<span style="white-space: pre-wrap;"> if no conversations are found.</span>

---

### new-conversation

Crea una nueva conversación.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">new-conversation</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID del usuario vinculado.
- `<span class="editor-theme-code">status_code</span>`<span style="white-space: pre-wrap;">: Por defecto </span>`<span class="editor-theme-code">1</span>`.
- `<span class="editor-theme-code">title</span>`: Título.
- `<span class="editor-theme-code">department</span>`<span style="white-space: pre-wrap;">: ID del departamento. Por defecto </span>`<span class="editor-theme-code">-1</span>`.
- `<span class="editor-theme-code">agent_id</span>`<span style="white-space: pre-wrap;">: ID del agente asignado. Por defecto </span>`<span class="editor-theme-code">-1</span>`.
- `<span class="editor-theme-code">source</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">extra</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">tags</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "messages": [],
        "details": {
            "user_id": "882",
            "first_name": "Don",
            "last_name": "John",
            "profile_image": "https://chatbot.zampisoft.com/user.svg",
            "user_type": "lead",
            "id": "1007",
            "title": "",
            "conversation_time": "2020-05-15 12:51:39",
            "conversation_status_code": "0",
            "department": null
        }
    }
}
```

<span style="white-space: pre-wrap;">Other possible responses: </span>**Conversation details array**<span style="white-space: pre-wrap;"> on success, otherwise </span>**user-not-found**<span style="white-space: pre-wrap;">, </span>**MySQL error message**.

---

### update-conversation-status

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

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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-conversation-status</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID de la conversación.
- `<span class="editor-theme-code">status_code</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: </span>`<span class="editor-theme-code">0</span>`<span style="white-space: pre-wrap;"> (live), </span>`<span class="editor-theme-code">1</span>`<span style="white-space: pre-wrap;"> (esperando usuario), </span>`<span class="editor-theme-code">2</span>`<span style="white-space: pre-wrap;"> (esperando agente), </span>`<span class="editor-theme-code">3</span>`<span style="white-space: pre-wrap;"> (archivo), </span>`<span class="editor-theme-code">4</span>`<span style="white-space: pre-wrap;"> (papelera).</span>

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### update-conversation-department

Actualiza el departamento de una conversación.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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-conversation-department</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID de la conversación.
- `<span class="editor-theme-code">department</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: ID del departamento. Use </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para remover.</span>
- `<span class="editor-theme-code">message</span>`: Mensaje para notificar a los agentes del nuevo departamento.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### update-conversation-agent

Asigna o actualiza el agente de una conversación.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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-conversation-agent</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID de la conversación.
- `<span class="editor-theme-code">agent_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: ID del agente. </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para remover.</span>
- `<span class="editor-theme-code">message</span>`: Mensaje de notificación para el agente.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### set-rating

Asigna una calificación a una conversación.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">set-rating</span>`.
- `<span class="editor-theme-code">settings</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: JSON </span>`<span class="editor-theme-code">{ "settings" : { "conversation_id": "ID", "rating": "RATING" }}</span>`<span style="white-space: pre-wrap;">. </span>`<span class="editor-theme-code">1</span>`<span style="white-space: pre-wrap;"> positivo, </span>`<span class="editor-theme-code">0</span>`<span style="white-space: pre-wrap;"> negativo.</span>
- `<span class="editor-theme-code">payload</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">message_id</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">user_id</span>`: Opcionales para actualizar mensaje.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### get-rating

Obtiene las calificaciones asignadas a un agente.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-rating</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID del agente.

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">{"success": true, "response": [4,2]}</span>`<span style="white-space: pre-wrap;"> (4 positivas, 2 negativas).</span>

The response array: \[count of positive ratings, count of negative ratings\]. In the example above there are 4 positive ratings and 2 negative ratings.

---

### get-new-messages

Devuelve los mensajes de una conversación creados después de la fecha/ID dada.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-new-messages</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID del usuario.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID de la conversación.
- `<span class="editor-theme-code">datetime</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: ID o fecha </span>`<span class="editor-theme-code">YYYY-MM-DD HH:MM:SS</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "id": "2319",
            "user_id": "377",
            "message": "Welcome to our support chat!",
            "creation_time": "2020-05-12 18:04:50",
            "attachments": "",
            "status_code": "0",
            "payload": "",
            "conversation_id": "1004",
            "first_name": "Virtual",
            "last_name": "Agent",
            "profile_image": "https://chatbot.zampisoft.com/bot.svg",
            "user_type": "bot"
        },
        {
            "id": "2320",
            "user_id": "877",
            "message": "Thank you! I need help.",
            "creation_time": "2020-05-12 18:04:51",
            "attachments": "",
            "status_code": "0",
            "payload": "",
            "conversation_id": "1004",
            "first_name": "Don",
            "last_name": "John",
            "profile_image": "https:/chatbot.zammpisoft.com/user.svg",
            "user_type": "lead"
        },
        ...
    ]
}
```

<span style="white-space: pre-wrap;">Return </span>**{"success":true, "response":\[\]}**<span style="white-space: pre-wrap;"> if no conversations are found.</span>

---

### get-last-message

Devuelve el último mensaje de una conversación.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-last-message</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID de la conversación.
- `<span class="editor-theme-code">exclude_message</span>`: Excluir mensaje con texto específico.
- `<span class="editor-theme-code">user_id</span>`: Verificar solo mensajes de este usuario.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "message": "Welcome to our support chat!",
        "attachments": "",
        "payload": ""
    }
}
```

---

### send-message

Añade un nuevo mensaje a una conversación existente.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">send-message</span>`.
- `<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 que envía el mensaje. Utilice la API </span>`<span class="editor-theme-code">get-bot-id</span>`<span style="white-space: pre-wrap;"> para obtener el ID del bot si es el sistema quien envía el mensaje.</span>
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la conversación.
- `<span class="editor-theme-code">message</span>`: El contenido del mensaje.
- `<span class="editor-theme-code">attachments</span>`: Array de archivos adjuntos en formato JSON.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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 archivo adjunto y </span>`<span class="editor-theme-code">enlace</span>`<span style="white-space: pre-wrap;"> con la URL completa del archivo.</span>
    - **Nota:**<span style="white-space: pre-wrap;"> Es su responsabilidad subir los archivos adjuntos a un servidor remoto; este argumento solo acepta la URL de archivos que ya han sido subidos previamente.</span>
    - **Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[]</span>`.
- `<span class="editor-theme-code">conversation_status_code</span>`: El código de estado que se asignará a la conversación.
    - **Códigos de estado:**<span style="white-space: pre-wrap;"> 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 dejar el estado actual de la conversación sin cambios.</span>
- `<span class="editor-theme-code">payload</span>`: Array en formato JSON con información adicional. Puede insertar cualquier valor.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">{ "clave": valor, "clave": valor, ... }</span>`.
- `<span class="editor-theme-code">queue</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 función de Cola está activa en </span>`<span class="editor-theme-code">Configuración > Misceláneas > Cola</span>`<span style="white-space: pre-wrap;"> (</span>**Queue**<span style="white-space: pre-wrap;">). Por defecto: </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">recipient_id</span>`: El ID del usuario que recibe el mensaje. Utilice este atributo para que el sistema detecte y aplique el idioma correcto del usuario.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "status": "success",
        "message-id": 123456,
        "queue": false,
        "notifications": ["sms", "email"],
        "message": "Text of the message"
    }
}
```

<span style="white-space: pre-wrap;">Other possible responses: </span>**invalid-status-code**<span style="white-space: pre-wrap;">, </span>**MySQL error message**<span style="white-space: pre-wrap;">. The </span>**notifications**<span style="white-space: pre-wrap;"> response include the notifications sent to the user or agents.</span>

---

### update-message

Actualiza un mensaje existente.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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-message</span>`.
- `<span class="editor-theme-code">message_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del mensaje.
- `<span class="editor-theme-code">message</span>`: El contenido del mensaje.
- `<span class="editor-theme-code">attachments</span>`: Array de archivos adjuntos en formato JSON.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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 archivo adjunto y </span>`<span class="editor-theme-code">enlace</span>`<span style="white-space: pre-wrap;"> con la URL completa del archivo adjunto.</span>
    - **Nota:**<span style="white-space: pre-wrap;"> Es su responsabilidad subir los archivos adjuntos a un servidor remoto; este argumento solo acepta la URL de los archivos que ya han sido subidos previamente.</span>
    - **Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[]</span>`.
- `<span class="editor-theme-code">payload</span>`: Array en formato JSON de información adicional.
    - Puede insertar cualquier valor.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">{ "clave": valor, "clave": valor, ... }</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### delete-message

Elimina un mensaje existente.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">delete-message</span>`.
- `<span class="editor-theme-code">message_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID del mensaje.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### delete-attachments

Elimina todos los adjuntos de una conversación o mensaje (incluyendo AWS S3).

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">delete-attachments</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;">: El ID de la conversación que contiene los archivos adjuntos que desea eliminar. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">message_id</span>`<span style="white-space: pre-wrap;">: El ID del mensaje que contiene los archivos adjuntos que desea eliminar. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### update-messages-status

Actualiza el estado de múltiples mensajes a "leído".

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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-messages-status</span>`.
- `<span class="editor-theme-code">message_ids</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array de IDs de mensajes </span>`<span class="editor-theme-code">[1, 212, ...]</span>`.
- `<span class="editor-theme-code">user_id</span>`: ID del usuario (requerido para Pusher).

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### get-agents-in-conversation

Devuelve un array con todos los agentes que tienen al menos un mensaje en la conversación.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-agents-in-conversation</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: ID de conversación (puede ser un array).

**Respuesta**

JSON

```
{
     "success": true,
     "response": {
         "1546": [
             {
                 "id": 5463,
                 "first_name": "Don",
                 "last_name": "John",
                 "profile_image": "https://chatbot.zampisoft.com/user.svg",
                 "conversation_id": 1546
             },
             {
                 "id": 6413,
                 "first_name": "Steven",
                 "last_name": "Travolta",
                 "profile_image": "https://chatbot.zampisoft.com/user.svg",
                 "conversation_id": 1546
             },
             ...
         ]
     }
 }
```

---

### transcript

Exporta una conversación a CSV o TXT y devuelve la URL.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">transcript</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la conversación que desea exportar.
- `<span class="editor-theme-code">type</span>`:
    - <span style="white-space: pre-wrap;">Establézcalo en </span>`<span class="editor-theme-code">csv</span>`<span style="white-space: pre-wrap;"> para exportar la conversación como un archivo CSV.</span>
    - <span style="white-space: pre-wrap;">Establézcalo en </span>`<span class="editor-theme-code">txt</span>`<span style="white-space: pre-wrap;"> para exportar la conversación como un archivo de texto.</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 utilizar el tipo definido en </span>`<span class="editor-theme-code">Configuración > Administración > Tipo de transcripción</span>`<span style="white-space: pre-wrap;"> (</span>**Settings &gt; Admin &gt; Transcript type**).
    - **Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": "https://chatbot.zampisoft.com/uploads/conversation-1021.csv"
}
```

<span style="color: rgb(40, 60, 73); background-color: rgb(255, 255, 255);">Return</span><span style="white-space: pre-wrap;"> </span>**{"success":true, "response":false}**<span style="white-space: pre-wrap;"> </span><span style="color: rgb(40, 60, 73); background-color: rgb(255, 255, 255);">if the conversation is not found.</span>

---

### direct-message

Envía un mensaje de chat directo.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">direct-message</span>`.
- `<span class="editor-theme-code">user_ids</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array de IDs de usuario, ej. </span>`<span class="editor-theme-code">[45, 89, 65]</span>`.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El mensaje.
- `<span class="editor-theme-code">subject</span>`<span style="white-space: pre-wrap;">: El asunto. Requerido solo para correos electrónicos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### messaging-platforms-send-message

Envía un mensaje a la plataforma de mensajería vinculada (Facebook, WhatsApp, etc.).

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">messaging-platforms-send-message</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la conversación.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El mensaje.
- `<span class="editor-theme-code">attachments</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Array de archivos adjuntos en formato JSON.
- **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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 archivo adjunto y </span>`<span class="editor-theme-code">enlace</span>`<span style="white-space: pre-wrap;"> con la URL completa del archivo adjunto.</span>
- **Nota:**<span style="white-space: pre-wrap;"> Es su responsabilidad subir los archivos adjuntos a un servidor remoto; este argumento solo acepta la URL de los archivos que ya han sido subidos previamente.</span>
- `<span class="editor-theme-code">user</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array asociativo con </span>`<span class="editor-theme-code">{ "id": 123, "profile_image":</span>`
- `<span class="editor-theme-code">source</span>`<span style="white-space: pre-wrap;">: Array asociativo con </span>`<span class="editor-theme-code">{ "source": CÓDIGO DE FUENTE }</span>`<span style="white-space: pre-wrap;"> como valor.</span>
- **Códigos de fuente disponibles:**<span style="white-space: pre-wrap;"> </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">tg</span>`<span style="white-space: pre-wrap;"> (Telegram), </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>
- **Para Telegram:**<span style="white-space: pre-wrap;"> La fuente también debe incluir </span>`<span class="editor-theme-code">{ "chat_id": "123456789" }</span>`.
- **Para Facebook Messenger:**<span style="white-space: pre-wrap;"> La fuente también debe incluir </span>`<span class="editor-theme-code">{ "page_id": "123456789" }</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### count-conversations

Cuenta el número de conversaciones.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">count-conversations</span>`.
- `<span class="editor-theme-code">status_code</span>`: Filtrar por código de estado.

**Respuesta**

JSON

```
{
    "success": true,
    "response": 123456
}
```

---

### check-conversations-assignment

Verifica si una lista de conversaciones está asignada a un departamento o agente.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">check-conversations-assignment</span>`.
- `<span class="editor-theme-code">conversation_ids</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array de IDs de las conversaciones a verificar, ej. </span>`<span class="editor-theme-code">[45, 565, 68]</span>`.
- `<span class="editor-theme-code">agent_id</span>`<span style="white-space: pre-wrap;">: El ID del agente. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">department_id</span>`<span style="white-space: pre-wrap;">: El ID del departamento. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [1234, 5, ...]
}
```

---

### get-last-agent-in-conversation

Devuelve el último agente que respondió a una conversación.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-last-agent-in-conversation</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la conversación.

**Respuesta**

JSON

```
{
     "success": true,
     "response": {
        "id": 123,
        "first_name": "Don",
        "last_name": "John",
        "email": "email@example.com",
        "password": "$P$BcCpYeU21wYnXKW2LpJj/F9xRdSmLM/"
     }
 }
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si la conversación no tiene respuestas de agentes.</span>

---

### execute-bot-message

Envía un mensaje del bot y devuelve su contenido.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">execute-bot-message</span>`.
- `<span class="editor-theme-code">name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El nombre del mensaje del bot. Valores disponibles: </span>`<span class="editor-theme-code">offline</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">follow_up</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">welcome</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 que enviar el mensaje.
- `<span class="editor-theme-code">last_user_message</span>`<span style="white-space: pre-wrap;">: Úselo para mostrar diferentes extractos de texto en el área de administración y el panel de chat. Por defecto: </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">check</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 enviar el mensaje incluso si ya se envió hace menos de 10 días. Por defecto: </span>`<span class="editor-theme-code">true</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
       "message": "Lorem ipsum dolor",
       "attachments": [],
       "id": 123,
       "settings": {
          "active": true,
          "title": "",
          "message": ""
       }
    }
}
```

`<span class="editor-theme-code">ID</span>`<span style="white-space: pre-wrap;"> es el ID del mensaje que se acaba de crear.</span>

---

# ⚙️ WEB API: Configuración (Settings)

Funciones relacionadas con la configuración, artículos, traducciones y más.

### get-setting

<span style="white-space: pre-wrap;">Devuelve una configuración guardada en el área de </span>**Configuración**.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-setting</span>`.
- `<span class="editor-theme-code">setting</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El ID de la configuración. Puede obtener los IDs de todas las configuraciones del archivo </span>`<span class="editor-theme-code">resources\json\settings.json</span>`<span style="white-space: pre-wrap;"> o con la función de la API </span>`<span class="editor-theme-code">get-settings</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "option": "value",
        "option": "value",
        ...
    }
}
```

---

### get-multi-setting

Devuelve una sub-configuración de otra configuración.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-multi-setting</span>`.
- `<span class="editor-theme-code">id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El ID de la configuración principal. Puede obtener los IDs de todas las configuraciones del archivo </span>`<span class="editor-theme-code">resources\json\settings.json</span>`<span style="white-space: pre-wrap;"> o con la función de la API </span>`<span class="editor-theme-code">get-settings</span>`.
- `<span class="editor-theme-code">sub_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El ID de la sub-configuración. Puede obtener los IDs de todas las configuraciones del archivo </span>`<span class="editor-theme-code">resources\json\settings.json</span>`<span style="white-space: pre-wrap;"> o con la función de la API </span>`<span class="editor-theme-code">get-settings</span>`.
- `<span class="editor-theme-code">default</span>`<span style="white-space: pre-wrap;">: El valor a devolver si no se encuentra la configuración. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**<span style="white-space: pre-wrap;"> Devuelve el valor de la sub-configuración si está disponible; de lo contrario, devuelve el valor por defecto.</span>

---

### get-external-setting

Devuelve una configuración externa. Las configuraciones externas se guardan en una fila dedicada de la base de datos.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-external-setting</span>`.
- `<span class="editor-theme-code">name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El nombre de la configuración.
- `<span class="editor-theme-code">default</span>`<span style="white-space: pre-wrap;">: El valor a devolver si no se encuentra la configuración. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**<span style="white-space: pre-wrap;"> Devuelve el valor de la configuración si está disponible; de lo contrario, devuelve el valor por defecto.</span>

---

### get-settings

Devuelve un array con todas las configuraciones.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-settings</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "chat-manual-init": [
            false,
            "checkbox"
        ],
        "chat-login-init": [
            false,
            "checkbox"
        ],
        "init-dashboard": [
            true,
            "checkbox"
        ],
        "chat-timetable-disable": [
            false,
            "checkbox"
        ],
        "rtl": [
            false,
            "checkbox"
        ],
        "front-auto-translations": [
            true,
            "checkbox"
        ],
        ...
    }
}
```

---

### save-settings

Guarda todas las configuraciones.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">save-settings</span>`.
- `<span class="editor-theme-code">settings</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El array de configuraciones. Obténgalo de </span>`<span class="editor-theme-code">get-settings</span>`.
- `<span class="editor-theme-code">external_settings</span>`<span style="white-space: pre-wrap;">: Configuraciones guardadas en una fila dedicada de la tabla </span>`<span class="editor-theme-code">sb_settings</span>`<span style="white-space: pre-wrap;"> de la base de datos.</span>
- `<span class="editor-theme-code">external_settings_translations</span>`: Traducciones de las configuraciones externas.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### save-external-setting

Guarda una configuración externa. Las configuraciones externas se guardan en una fila dedicada de la base de datos.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">save-external-setting</span>`.
- `<span class="editor-theme-code">name</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;"> </span>**Requerido**: El valor de la configuración.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### export-settings

Exporta todas las configuraciones de ZampiBot a un archivo JSON y devuelve la URL del archivo.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">export-settings</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": "http://example.com/chatbot.zampisoft.com/uploads/settings_855776223.json"
}
```

Devuelve la URL del archivo JSON que contiene las configuraciones.

---

### import-settings

<span style="white-space: pre-wrap;">Importa las configuraciones de ZampiBot desde un archivo JSON generado a través de la función </span>`<span class="editor-theme-code">export-settings</span>`.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">import-settings</span>`.
- `<span class="editor-theme-code">file_url</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La URL del archivo JSON que contiene las configuraciones.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### get-departments

Devuelve los departamentos de ZampiBot.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-departments</span>`.

**Respuesta**

```
{
    "1": {
        "name": "Ejemplo",
        "color": "yellow",
        "image": "https://example.com/image.png"
    },
    "2": {
        "name": "Ejemplo",
        "color": "red",
        "image": "https://example.com/image.png"
    },
    ...
}
```

---

### saved-replies

Devuelve un array con todas las respuestas guardadas.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">saved-replies</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "reply-name": "hola",
            "reply-text": "¡Hola! ¿Cómo puedo ayudarte?"
        },
        {
            "reply-name": "email",
            "reply-text": "Nuestro correo electrónico es soporte@ejemplo.com."
        },
        ...
    ]
}
```

---

### get-translation

Devuelve las traducciones en el idioma dado.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-translation</span>`.
- `<span class="editor-theme-code">language_code</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El código de idioma de dos letras.

**Respuesta**

JSON

```
{
    "name": "Arabic",
    "front": {
        "Activities": "أنشطة",
        "All": "الكل",
        "All articles": "جميع المقالات",
        "All fields are required.": "جميع الحقول مطلوبة",
        ...
    },
    "admin": {
        "A conversation was started by": "",
        "Activate": "",
        "Activation complete! Page reload in progress...": "",
        "Add a saved reply": "",
        ...
    }
}
```

---

### get-translations

Devuelve las traducciones del back-end y del front-end, para todos los idiomas disponibles.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-translations</span>`.

**Respuesta**

JSON

```
{
    "ar": {
        "name": "Arabic",
        "front": {
            "Activities": "أنشطة",
            "All": "الكل",
            "All articles": "جميع المقالات",
            "All fields are required.": "جميع الحقول مطلوبة",
            ...
        },
        "admin": {
            "A conversation was started by": "",
            "Activate": "",
            "Activation complete! Page reload in progress...": "",
            "Add a saved reply": "",
            ...
        }
    },
    "da": {
        "name": "Danish",
        "front": {
            "Activities": "Aktiviteter",
            "All": "Alle",
            "All articles": "Alle artikler",
            "All fields are required.": "Alle felter skal udfyldes.",
            ...
        },
        "admin": {
            "A conversation was started by": "",
            "Activate": "",
            "Activation complete! Page reload in progress...": "",
            "Add a saved reply": "",
            ...
        }
    },
    ...
}
```

---

### save-translations

<span style="white-space: pre-wrap;">Guarda las traducciones y sobrescribe los archivos de traducción. </span>**¡Advertencia!**<span style="white-space: pre-wrap;"> Si el array de traducciones dado está corrupto, podría corromper los archivos de traducciones. Haga primero una copia de seguridad de la carpeta de traducciones (</span>`<span class="editor-theme-code">\resources\languages\</span>`<span style="white-space: pre-wrap;">). Cada vez que se guarda una traducción, se crea una copia de seguridad automáticamente en la carpeta </span>`<span class="editor-theme-code">uploads</span>`.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">save-translations</span>`.
- `<span class="editor-theme-code">translations</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El array de traducciones con todas las traducciones. Utilice el método </span>`<span class="editor-theme-code">get-translations</span>`<span style="white-space: pre-wrap;"> para obtener el array.</span>

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### translate-string

Traduce una cadena al idioma del código de idioma especificado. Esta función solo funciona para traducciones del front-end.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">translate-string</span>`.
- `<span class="editor-theme-code">string</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena a traducir.
- `<span class="editor-theme-code">language_code</span>`<span style="white-space: pre-wrap;">: El código de idioma de dos letras. Establézcalo en </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> para usar el idioma del usuario activo. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**<span style="white-space: pre-wrap;"> Devuelve la cadena traducida si se encuentra la traducción; de lo contrario, devuelve la cadena original.</span>

---

# 📄 WEB API: Artículos

Funciones de Artículos y Base de Conocimientos.

### get-articles

Devuelve un array con todos los artículos o un solo artículo.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-articles</span>`.
- `<span class="editor-theme-code">id</span>`<span style="white-space: pre-wrap;">: El ID del artículo. Para obtener los IDs de los artículos, ejecute este método nuevamente sin argumentos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">-1</span>`.
- `<span class="editor-theme-code">count</span>`<span style="white-space: pre-wrap;">: El número máximo de artículos devueltos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> todos.</span>
- `<span class="editor-theme-code">full</span>`<span style="white-space: pre-wrap;">: Booleano. Establézcalo en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> para obtener el contenido completo de los artículos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">categories</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 obtener el array de todas las categorías; en tal caso, la respuesta es un array doble (el primer elemento son los artículos, el segundo son las categorías).</span>
    - Establézcalo en el ID de la categoría para obtener solo los artículos de la categoría dada.
    - **Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">articles_language</span>`<span style="white-space: pre-wrap;">: Obtiene los artículos en el idioma del código de idioma dado. Si no hay artículos en el código de idioma dado, se devuelven los artículos en el idioma por defecto. Establézcalo en </span>`<span class="editor-theme-code">all</span>`<span style="white-space: pre-wrap;"> para obtener todas las traducciones. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "id": "6P2Oq",
            "title": "What's new with the API V2?",
            "content": "The API V2 is the new iteration of o ...",
            "link": "https://chatbot.zampisoft.com",
            "categories": ["K92kl"]
        },
        {
            "title": "Should I move to the new system?",
            "content": "Yes. The newest version of the Actions ...",
            "link": "https://chatbot.zampisoft.com",
            "id": "qf7kD",
            "categories": ["ols85"]
        },
        ...
    ]
}
```

**Respuesta (Un solo artículo):**

JSON

```
{
    "success": true,
    "response": {
        "id": "6P2Oq",
        "title": "What's new with the API V2?",
        "content": "The API V2 is the new iteration of our developer API. The new API integrates...",
        "link": "https://board.support",
        "categories": ["K92kl"]
    }
}
```

---

### save-article

Guarda todos los artículos. Esta función elimina todos los artículos existentes y los reemplaza con los del array dado.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">save-article</span>`.
- `<span class="editor-theme-code">article</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array de artículos. Utilice la función </span>`<span class="editor-theme-code">get-articles</span>`<span style="white-space: pre-wrap;"> para obtener la estructura del artículo.</span>

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### search-articles

Devuelve los artículos que coinciden con la búsqueda.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">search-articles</span>`.
- `<span class="editor-theme-code">search</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena a buscar. La función de búsqueda admite título y contenido.
- `<span class="editor-theme-code">articles_language</span>`<span style="white-space: pre-wrap;">: Busca solo los artículos en el idioma del código de idioma dado. Si no hay artículos en el código de idioma dado, la búsqueda devuelve los artículos en el idioma por defecto. Establézcalo en </span>`<span class="editor-theme-code">all</span>`<span style="white-space: pre-wrap;"> para obtener todas las traducciones. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
         {
             "id": "118",
             "title": "Hello world!",
             "content": "Lorem ipsum dolor sit amet...",
             "editor_js": "",
             "link": "",
             "category": "basements",
             "parent_category": "video",
             "language": "",
             "parent_id": null,
             "slug": "images-and-photos",
             "update_time": "2024-06-04"
         },
         {
             "id": "127",
             "title": "How to develop an app",
             "content": "Resitor Lorem ipsum dolor sit amet...",
             "editor_js": "",
             "link": "",
             "category": "",
             "parent_category": "",
             "language": "",
             "parent_id": null,
             "slug": null,
             "update_time": "2024-05-24"
         },
         ...
    ]
}
```

---

### get-articles-categories

Devuelve un array con todas las categorías de artículos.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-articles-categories</span>`.

**Respuesta**

```
{
    "success": true,
    "response": [
        {
            "title": "Audio",
            "description": "Lorem ipsum dolor sit amet. ",
            "image":"https://example.com/image.jpg",
            "id": "audio",
            "parent": true,
            "languages": {
                "es": {
                    "title": "Audio",
                    "description": "Es eorem ipsum dolor sit amet. "
                }
            }
        },
        {
            "title": "Video",
            "description": "Lorem ipsum dolor.",
            "image": "https://example.com/image.jpg",
            "id": "video",
            "languages": []
        },
        ...
    ]
}
```

---

### save-articles-categories

Guarda o actualiza el array de categorías de artículos.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">save-articles-categories</span>`.
- `<span class="editor-theme-code">categories</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array de categorías. Obtenga el array de categorías existentes con la función </span>`<span class="editor-theme-code">get-articles-categories</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### article-ratings

Obtiene las calificaciones de un artículo o añade una nueva calificación al mismo.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">article-ratings</span>`.
- `<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;">: 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. Si se establece este argumento, el método añade la calificación; de lo contrario, devuelve las calificaciones existentes. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": "[-1, 1, 1, -1]"
}
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si el argumento </span>`<span class="editor-theme-code">rating</span>`<span style="white-space: pre-wrap;"> está establecido.</span>

---

# ➕ WEB API: Más métodos

### send-email

<span style="white-space: pre-wrap;">Envía un correo electrónico a un usuario existente utilizando las plantillas de correo de la sección </span>`<span class="editor-theme-code">Configuración > Notificaciones</span>`.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">send-email</span>`.
- `<span class="editor-theme-code">recipient_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario al cual enviar el correo electrónico.
- `<span class="editor-theme-code">sender_id</span>`: El ID del usuario remitente.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El mensaje del correo electrónico.
- `<span class="editor-theme-code">attachments</span>`: Array de archivos adjuntos en formato JSON.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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 archivo adjunto y </span>`<span class="editor-theme-code">enlace</span>`<span style="white-space: pre-wrap;"> con la URL completa del archivo.</span>
    - **Nota:**<span style="white-space: pre-wrap;"> Es su responsabilidad subir los archivos adjuntos a un servidor remoto; este argumento solo acepta la URL de los archivos que ya han sido subidos previamente.</span>
    - **Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[]</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

**Otras posibles respuestas:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">missing-user-id-or-message</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">security-error</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">user-email-not-found</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">user-or-sender-not-found</span>`.

---

### send-custom-email

<span style="white-space: pre-wrap;">Envía un correo electrónico genérico a una dirección de correo. El correo y nombre del remitente son los configurados en </span>`<span class="editor-theme-code">Configuración > Notificaciones > Configuración de correo electrónico</span>`.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">send-custom-email</span>`.
- `<span class="editor-theme-code">to</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La dirección de correo electrónico del destinatario.
- `<span class="editor-theme-code">subject</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El asunto del correo.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El mensaje del correo.
- `<span class="editor-theme-code">sender_suffix</span>`<span style="white-space: pre-wrap;">: Añade el texto proporcionado al nombre del remitente. </span>**Por defecto:**<span style="white-space: pre-wrap;"> vacío.</span>

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### email-piping

<span style="white-space: pre-wrap;">Ejecuta la sincronización de </span>**email piping**<span style="white-space: pre-wrap;"> con ZampiBot y convierte los correos electrónicos en mensajes de chat.</span>

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">email-piping</span>`.
- `<span class="editor-theme-code">force</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 forzar la ejecución de la sincronización; por defecto, la sincronización se ejecuta un máximo de una vez por minuto. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### send-sms

<span style="white-space: pre-wrap;">Envía un mensaje de texto (SMS) a un usuario o agente. Si el argumento </span>`<span class="editor-theme-code">template</span>`<span style="white-space: pre-wrap;"> es verdadero (</span>`<span class="editor-theme-code">true</span>`), el mensaje se traduce automáticamente.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">send-sms</span>`.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El mensaje de texto.
- `<span class="editor-theme-code">to</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El número de teléfono. Incluya el código de país.
- `<span class="editor-theme-code">template</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 enviar solo el mensaje sin el contenido de la plantilla. </span>**Por defecto:**<span style="white-space: pre-wrap;"> el mensaje se envía dentro de la plantilla configurada en </span>`<span class="editor-theme-code">Configuración > Notificaciones SMS</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;">: Establézcalo si el mensaje contiene el campo de combinación </span>`<span class="editor-theme-code">{conversation_url_parameter}</span>`.
- `<span class="editor-theme-code">attachments</span>`<span style="white-space: pre-wrap;">: Array de adjuntos. Sintaxis: </span>`<span class="editor-theme-code">[["nombre", "enlace"], ["nombre", "enlace"], ...]</span>`<span style="white-space: pre-wrap;"> o </span>`<span class="editor-theme-code">["enlace", "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.</span>
    - Es su responsabilidad subir los archivos a un servidor remoto.
    - **Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">recipient_id</span>`: El ID del usuario al cual enviar el mensaje de texto. Este argumento es requerido para que funcionen las traducciones.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "sid": "SM1f0e8ae6ade43cb3c0ce4525424e404f",
        "date_created": "Fri, 13 Aug 2010 01:16:24 +0000",
        "date_updated": "Fri, 13 Aug 2010 01:16:24 +0000",
        "date_sent": null,
        "account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "to": "+15305431221",
        "from": "+15104564545",
        "body": "A Test Message",
        "status": "queued",
        "flags": [
            "outbound"
        ],
        "api_version": "2010-04-01",
        "price": null,
        "uri": "/2010-04-01/Accounts/ACXXXX/Messages/SM1f004f.json"
    }
}
```

---

### push-notification

Envía una notificación Push a un agente, un grupo de agentes o a todos los agentes. Las notificaciones Push deben estar habilitadas en el área de configuración.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">push-notification</span>`.
- `<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">interests</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Se aceptan los siguientes valores:
    - ID de Agente o usuario.
    - <span style="white-space: pre-wrap;">Array de IDs de agentes o usuarios (ej. </span>`<span class="editor-theme-code">[1, 2, 3]</span>`).
    - <span style="white-space: pre-wrap;">Ingrese </span>`<span class="editor-theme-code">agents</span>`<span style="white-space: pre-wrap;"> para enviar la notificación a todos los agentes y administradores.</span>
    - <span style="white-space: pre-wrap;">Ingrese </span>`<span class="editor-theme-code">department-ID</span>`<span style="white-space: pre-wrap;"> para enviar la notificación a todos los agentes y administradores asignados al departamento dado o a aquellos sin departamento asignado. Reemplace </span>`<span class="editor-theme-code">ID</span>`<span style="white-space: pre-wrap;"> con el ID del departamento.</span>
- `<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.
- `<span class="editor-theme-code">icon</span>`<span style="white-space: pre-wrap;">: La URL del icono de la notificación. </span>**Por defecto:**<span style="white-space: pre-wrap;"> Icono de ZampiBot o icono de notificaciones.</span>

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "id": "8b1c4e05-5e08-4926-86b0-a56ab7817e25",
        "external_id": null,
        "errors": {}
    }
}
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si las notificaciones Push están deshabilitadas en el área de configuración.</span>

---

### get-versions

Devuelve las versiones instaladas de ZampiBot y las Apps.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-versions</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "sb": "3.0.4",
        "dialogflow": "1.0.2",
        "slack": "1.0.3"
    }
}
```

---

### cron-jobs

Ejecuta las tareas programadas (cron jobs).

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">cron-jobs</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### pusher-trigger

Dispara un evento en un canal de Pusher.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">pusher-trigger</span>`.
- `<span class="editor-theme-code">channel</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El nombre del canal.
- `<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>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### chat-css

Devuelve el estilo CSS para los colores del chat.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">chat-css</span>`.
- `<span class="editor-theme-code">color_1</span>`<span style="white-space: pre-wrap;">: El primer color en formato RGB o HEX. </span>**Por defecto:**<span style="white-space: pre-wrap;"> el primer color guardado en el área de configuración.</span>
- `<span class="editor-theme-code">color_2</span>`<span style="white-space: pre-wrap;">: El segundo color en formato RGB o HEX. </span>**Por defecto:**<span style="white-space: pre-wrap;"> el segundo color guardado en el área de configuración.</span>
- `<span class="editor-theme-code">color_3</span>`<span style="white-space: pre-wrap;">: El tercer color en formato RGB o HEX. </span>**Por defecto:**<span style="white-space: pre-wrap;"> el tercer color guardado en el área de configuración.</span>

**Respuesta**<span style="white-space: pre-wrap;"> El código CSS.</span>

---

### text-formatting-to-html

<span style="white-space: pre-wrap;">Convierte el </span>**formato de texto**<span style="white-space: pre-wrap;"> de los mensajes de chat a los códigos HTML equivalentes y devuelve el mensaje.</span>

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">text-formatting-to-html</span>`.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El mensaje de texto.

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">Lorem ipsum dolor <b>sit amet</b>, <i>consectetur adipiscing elit</i>, sed do eiusmod tempor incididunt.</span>`

---

### clear-text-formatting

<span style="white-space: pre-wrap;">Elimina el </span>**formato de texto**<span style="white-space: pre-wrap;"> de los mensajes de chat.</span>

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">clear-text-formatting</span>`.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El mensaje de texto.

**Respuesta**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</span>`

---

### get-notes

Devuelve las notas internas de una conversación.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">get-notes</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la conversación.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [
        {
            "id": 98207,
            "user_id": "1538",
            "name": "Lorem ipsum dolor sit amet",
            "message": "Lorem ipsum dolor sit amet, consectetur elit, sed do eiusmod tempor incididunt."
        },
        {
            "id": 76986,
            "user_id": "1596",
            "name": "Lorem ipsum dolor",
            "message": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor."
        },
        ...
    ]
}
```

---

### add-note

Añade una nueva nota a una conversación.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">add-note</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 vincular la nota.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del agente o administrador que crea la nota.
- `<span class="editor-theme-code">name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El nombre de la nota.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El mensaje de la nota.

**Respuesta**

JSON

```
{
    "success": true,
    "response": 33560
}
```

Devuelve el ID de la nota.

---

### delete-note

Elimina una nota de una conversación.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">delete-note</span>`.
- `<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 nota.
- `<span class="editor-theme-code">note_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la nota.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### automations-get

Devuelve todas las automatizaciones.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">automations-get</span>`.

**Respuesta**

JSON

```
[
    {
        "emails": [
            {
                "id": "0BOaG",
                "conditions": [
                    [
                        "datetime",
                        "is-between",
                        "10/04/2021 - 13/04/2021"
                    ],
                    [
                        "include_urls",
                        "contains",
                        "https://example.com"
                    ],
                    ...
                ],
                "name": "Excepteur sint",
                "message": "Excepteur sint occaecat cupidatat non proident.",
                "subject": "Cupidatat non proident"
            },
            ...
        ],
        "sms": [
            {
                "id": "vo2sY",
                "conditions": [
                    [
                        "datetime",
                        "is-exactly",
                        "13/04/2021"
                    ]
                ],
                "name": "Excepteur sint",
                "message": "Excepteur sint occaecat cupidatat non caecat cupidatat non proident"
            },
            {
                "id": "hwkmQ",
                "name": "Excepteur sint occaecat cupidatat non proident",
                "message": "Excepteur sint occaecat cupidatat non  occaecat cupidatat non proident"
            },
            ...
        ],
        "messages": [],
        "popups": [
            {
                "id": "ckN24",
                "conditions": [
                    [
                        "user_type",
                        "is-user"
                    ],
                    [
                        "languages",
                        "en"
                    ]
                ],
                "name": "s",
                "message": "Excepteur sint occaecat cupidatat non prcaecat cupidatat non proident",
                "title": "Excepteur sint occaecat",
                "profile_image": "https://example.com/image.jpg"
            },
            ...
        ],
        "design": [
            {
                "id": "bX1qA",
                "conditions": [
                    [
                        "user_type",
                        "is-user"
                    ]
                ],
                "name": "Excepteur sint",
                "message": "Excepteur sint occaecat cupidatat caecat cupidatat non proident",
                "title": "",
                "color_1": "rgb(0, 235, 26)",
                "color_2": "rgb(255, 0, 0)",
                "color_3": "rgb(255, 0, 0)",
                "background": "https://example.com/image.jpg",
                "brand": "https://example.com/image.jpg",
                "icon": "https://example.com/image.jpg"
            },
            ...
        ]
    },
    {
        "fr": {
            "messages": [
                {
                    "id": "y6hNE",
                    "name": "XXXX",
                    "message": "XXXX"
                }
            ]
        },
        ...
    }
]
```

---

### automations-save

Guarda todas las automatizaciones.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">automations-save</span>`.
- `<span class="editor-theme-code">automations</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array de automatizaciones. Obténgalo de la función </span>`<span class="editor-theme-code">automations-get</span>`.
- `<span class="editor-theme-code">translations</span>`<span style="white-space: pre-wrap;">: Array de traducciones de automatizaciones. Obténgalo de la función </span>`<span class="editor-theme-code">automations-get</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### automations-validate

Valida una automatización.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">automations-validate</span>`.
- `<span class="editor-theme-code">automation</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La automatización.

**Respuesta**

JSON

```
{
      "conditions": [
          [
              "user_type",
              "is-user"
          ],
          ...
      ],
      "repeat_id": ""
  }
```

<span style="white-space: pre-wrap;">Devuelve solo las condiciones del lado del cliente y las condiciones del servidor inválidas que pueden validarse en un momento posterior. Si no se devuelven condiciones, la automatización es válida y puede ejecutarse. Devuelve </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> si la automatización es inválida.</span>

---

### automations-run-all

Valida todas las automatizaciones, ejecuta las válidas y devuelve las automatizaciones con condiciones del lado del cliente, condiciones del servidor inválidas y automatizaciones de popup y diseño.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">automations-run-all</span>`.

**Respuesta**

JSON

```
[
    {
        "id": "0BOaG",
        "conditions": [
            [
                "datetime",
                "is-between",
                "10/04/2021 - 13/04/2021"
            ],
            [
                "include_urls",
                "contains",
                "https://example.com"
            ],
            ...
        ],
        "name": "Excepteur sint",
        "message": "Excepteur sint occaecat cupidatat non proident.",
        "subject": "Cupidatat non proident",
        "type": "emails"
    },
    {
        "id": "bX1qA",
        "conditions": [
            [
                "user_type",
                "is-user"
            ]
        ],
        "name": "Excepteur sint",
        "message": "Excepteur sint occaecat cupidatat caecat cupidatat non proident",
        "title": "",
        "color_1": "rgb(0, 235, 26)",
        "color_2": "rgb(255, 0, 0)",
        "color_3": "rgb(255, 0, 0)",
        "background": "https://example.com/image.jpg",
        "brand": "https://example.com/image.jpg",
        "icon": "https://example.com/image.jpg",
        "type": "design"
    },
    ...
]
```

---

### automations-run

Ejecuta una sola automatización y opcionalmente la valida antes de ejecutarla.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">automations-run</span>`.
- `<span class="editor-theme-code">automation</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La automatización.
- `<span class="editor-theme-code">validate</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 validar la automatización antes de ejecutarla. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### automations-is-sent

Verifica si una automatización ya ha sido enviada a un usuario.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">automations-is-sent</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario a verificar.
- `<span class="editor-theme-code">automation</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: La automatización. Puede ser </span>`<span class="editor-theme-code">["id" => 123]</span>`<span style="white-space: pre-wrap;"> donde 123 es el ID de la automatización.</span>
- `<span class="editor-theme-code">repeat_id</span>`<span style="white-space: pre-wrap;">: Establézcalo solo si la automatización se puede enviar múltiples veces al usuario. Obténgalo de </span>`<span class="editor-theme-code">sb_automations_validate</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**<span style="white-space: pre-wrap;"> Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si la automatización ya ha sido enviada; de lo contrario, devuelve </span>`<span class="editor-theme-code">false</span>`.

---

### clean-data

Esta función realiza las siguientes tareas: Elimina visitantes con una antigüedad mayor a 24h, elimina mensajes en la papelera con una antigüedad mayor a 30 días, y archiva mensajes donde la última respuesta fue de un agente y tienen una antigüedad mayor a 24h.

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

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">clean-data</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### reports

Devuelve los reportes especificados.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">reports</span>`.
- `<span class="editor-theme-code">name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El nombre del reporte. Valores disponibles: </span>`<span class="editor-theme-code">conversations</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">missed-conversations</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">conversations-time</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">visitors</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">leads</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">users</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">agents-response-time</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">agents-conversations</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">agents-conversations-time</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">agents-ratings</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">countries</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">languages</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">browsers</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">os</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">subscribe</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">follow-up</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">registrations</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">articles-searches</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">articles-ratings</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">articles-views-single</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">articles-views</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">sms-automations</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">email-automations</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">message-automations</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">direct-sms</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">direct-emails</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">direct-messages</span>`.
- `<span class="editor-theme-code">date_start</span>`<span style="white-space: pre-wrap;">: La fecha de inicio de los reportes. Formato: </span>`<span class="editor-theme-code">dd/mm/yyyy</span>`<span style="white-space: pre-wrap;"> o </span>`<span class="editor-theme-code">yyyy-mm-dd</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">date_end</span>`<span style="white-space: pre-wrap;">: La fecha de finalización de los reportes. Formato: </span>`<span class="editor-theme-code">dd/mm/yyyy</span>`<span style="white-space: pre-wrap;"> o </span>`<span class="editor-theme-code">yyyy-mm-dd</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">timezone</span>`<span style="white-space: pre-wrap;">: La zona horaria del usuario que llama a esta función, ej. </span>`<span class="editor-theme-code">Europe/London</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

```
{
   "title": "New conversations",
   "description": "Count of new conversations started by users.",
   "data": {
       "03/2021": [
           2
       ],
       "04/2021": [
           0
       ],
       "05/2021": [
           0
       ],
       ...
   },
   "table": [
       "Date",
       "Count"
   ],
   "table_inverse": true,
   "label_type": 1,
   "chart_type": "line"
}
```

---

### reports-update

<span style="white-space: pre-wrap;">Añade una nueva fila a la tabla </span>`<span class="editor-theme-code">sb_reports</span>`<span style="white-space: pre-wrap;"> de la base de datos.</span>

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">reports-update</span>`.
- `<span class="editor-theme-code">name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El nombre del reporte (ver valores disponibles en la función </span>`<span class="editor-theme-code">reports</span>`).
- `<span class="editor-theme-code">value</span>`<span style="white-space: pre-wrap;">: El valor de la fila. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">external_id</span>`<span style="white-space: pre-wrap;">: Un ID externo. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">extra</span>`<span style="white-space: pre-wrap;">: Un valor extra. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### updates-available

Comprueba si hay actualizaciones disponibles para ZampiBot y las aplicaciones de ZampiBot.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">updates-available</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si hay al menos una actualización disponible; de lo contrario, devuelve </span>`<span class="editor-theme-code">false</span>`.

---

### newsletter

<span style="white-space: pre-wrap;">Añade un suscriptor al servicio de boletín configurado en </span>`<span class="editor-theme-code">Configuración > Misceláneas > Newsletter</span>`<span style="white-space: pre-wrap;">. El ajuste </span>`<span class="editor-theme-code">Configuración > Misceláneas > Newsletter > Activo</span>`<span style="white-space: pre-wrap;"> debe estar habilitado.</span>

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">newsletter</span>`.
- `<span class="editor-theme-code">email</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La dirección de correo electrónico del suscriptor.
- `<span class="editor-theme-code">first_name</span>`<span style="white-space: pre-wrap;">: El nombre del suscriptor. </span>**Por defecto:**<span style="white-space: pre-wrap;"> vacío.</span>
- `<span class="editor-theme-code">last_name</span>`<span style="white-space: pre-wrap;">: El apellido del suscriptor. </span>**Por defecto:**<span style="white-space: pre-wrap;"> vacío.</span>

**Respuesta**<span style="white-space: pre-wrap;"> Devuelve la respuesta del servicio de newsletter.</span>

---

### upload-path

Devuelve la ruta de subidas (uploads) de ZampiBot.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">upload-path</span>`.
- `<span class="editor-theme-code">url</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 obtener la URL en su lugar. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">date</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 obtener también la carpeta de fecha relativa a la fecha actual. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": "\var\www\htdocs\chatbot.zampisoft.com\uploads\10-03-23"
}
```

o

JSON

```
{
    "success": true,
    "response": "https://www.example.com/chatbot.zampisoft.com/uploads/10-03-23"
}
```

---

### is-allowed-extension

Comprueba si está permitido subir archivos con la extensión especificada.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">is-allowed-extension</span>`.
- `<span class="editor-theme-code">extension</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: La extensión del archivo, ej. </span>`<span class="editor-theme-code">jpg</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si la extensión está permitida; de lo contrario, devuelve </span>`<span class="editor-theme-code">false</span>`.

---

### system-requirements

Comprueba si la máquina host cumple con los requisitos del sistema de ZampiBot.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">system-requirements</span>`.

**Respuesta**

JSON

```
{
  "success": true,
  "response": {
      "php-version": true,
      "zip-archive": true,
      "plugin-folder": true,
      "uploads-folder": true,
      "apps-folder": true,
      "languages-folder": true,
      "ajax": true,
      "curl": true,
      "UTF8mb4": true
  }
}
```

---

### logs

Añade un mensaje de registro al archivo de log.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">logs</span>`.
- `<span class="editor-theme-code">string</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El mensaje de registro.
- `<span class="editor-theme-code">user</span>`<span style="white-space: pre-wrap;">: Establézcalo para incluir el ID de usuario en el mensaje de registro. Este valor puede ser </span>`<span class="editor-theme-code">["id" => 123]</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

```
{
  "success": true,
  "response": true
}
```

---

### aws-s3

<span style="white-space: pre-wrap;">Sube un archivo a Amazon S3, o elimina un archivo de Amazon S3. Amazon S3 debe estar activo y configurado en </span>`<span class="editor-theme-code">Configuración > Misceláneas > Amazon S3</span>`.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">aws-s3</span>`.
- `<span class="editor-theme-code">file_path</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La ruta al archivo para subir o la URL del archivo de Amazon S3 para eliminar.
- `<span class="editor-theme-code">action</span>`<span style="white-space: pre-wrap;">: Establézcalo en </span>`<span class="editor-theme-code">PUT</span>`<span style="white-space: pre-wrap;"> para subir un archivo. Establézcalo en </span>`<span class="editor-theme-code">DELETE</span>`<span style="white-space: pre-wrap;"> para eliminar un archivo. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">PUT</span>`.
- `<span class="editor-theme-code">bucket_name</span>`<span style="white-space: pre-wrap;">: El nombre del bucket. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
  "success": true,
  "response": "https://example.s3.amazonaws.com/example.txt"
}
```

Devuelve la URL del archivo de Amazon S3.

---

# 🧠 WEB API: Inteligencia Artificial

<span style="white-space: pre-wrap;">La </span>**aplicación de Inteligencia Artificial**<span style="white-space: pre-wrap;"> es necesaria para utilizar este conjunto de APIs.</span>

### dialogflow-message

Envía un mensaje a Dialogflow y devuelve la respuesta.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">dialogflow-message</span>`.
- `<span class="editor-theme-code">conversation_id</span>`: El ID de una conversación. Si se proporciona, la respuesta se añade a la conversación como un nuevo mensaje.
- `<span class="editor-theme-code">message</span>`: La cadena que contiene el texto del mensaje.
- `<span class="editor-theme-code">attachments</span>`: Array de archivos adjuntos en formato JSON.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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 archivo adjunto y </span>`<span class="editor-theme-code">enlace</span>`<span style="white-space: pre-wrap;"> con la URL completa del archivo. Dialogflow puede leer este array.</span>
- `<span class="editor-theme-code">language</span>`<span style="white-space: pre-wrap;">: El idioma del bot. </span>**Por defecto:**<span style="white-space: pre-wrap;"> el idioma principal del bot.</span>
- `<span class="editor-theme-code">event</span>`: Dispara un evento de Dialogflow.
- `<span class="editor-theme-code">parameters</span>`: Array de información opcional.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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 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>`.
- `<span class="editor-theme-code">token</span>`: El token de acceso de Dialogflow. Por razones de rendimiento, incluya siempre este token. Obtendrá el token después de la primera llamada de esta función, dentro de la respuesta.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "token": "ya29.a0AfH6SE4SVIeOPWSfxRVfHNcJIoR-IvRTtrEe4P9VXHa",
        "messages": [
            {
                "message": "Hi! How are you doing?",
                "attachments": []
            }
        ],
        "response": {
            "responseId": "1a5e30d0-d6d4-4f0c-83e3-2fb9e31c2a5e-e15c53b8",
            "queryResult": {
                "queryText": "Hello",
                "action": "input.welcome",
                "parameters": [],
                "allRequiredParamsPresent": true,
                "fulfillmentText": "Hi! How are you doing?",
                "fulfillmentMessages": [
                    {
                        "platform": "ACTIONS_ON_GOOGLE",
                        "simpleResponses": {"simpleResponses": [ { "textToSpeech": "Example"} ]}
                    },
                    {
                        "text": { "text": [ "Hi! How are you doing?" ]  }
                    }
                ],
                "intent": {
                    "name": "projects/api-project-657752147/agent/intents/fe27e-f39d-4db3-92c2",
                    "displayName": "Default Welcome Intent"
                },
                "intentDetectionConfidence": 1,
                "languageCode": "en"
            },
            "alternativeQueryResults": [
                {
                    "queryText": "Hello",
                    "languageCode": "en"
                }
            ]
        }
    }
}
```

**Otras posibles respuestas:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">dialogflow-not-active</span>`<span style="white-space: pre-wrap;">, mensaje de error de </span>`<span class="editor-theme-code">MySQL</span>`<span style="white-space: pre-wrap;"> o </span>`<span class="editor-theme-code">cURL</span>`.

---

### dialogflow-get-intents

Devuelve la Intención (Intent) de Dialogflow especificada o todas las Intenciones.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">dialogflow-get-intents</span>`.
- `<span class="editor-theme-code">intent_name</span>`: El nombre de la intención.
- `<span class="editor-theme-code">language</span>`<span style="white-space: pre-wrap;">: El idioma del agente. </span>**Por defecto:**<span style="white-space: pre-wrap;"> el idioma principal del agente.</span>

**Respuesta**

JSON

```
[
  {
    "name": "projects/example/agent/intents/1655ee2c-8116-45f1-95fu-93700ff32e8d",
    "displayName": "Default Welcome Intent",
    "priority": 500000,
    "mlEnabled": true,
    "events": [ "WELCOME" ],
    "trainingPhrases": [
      {
        "name": "43ca0e72-6055-4b88-af13-b0d241",
        "type": "EXAMPLE",
        "parts": [
          {
            "text": "just going to say hi"
          }
        ]
      },
      {
        "name": "5159aabc-8524-404f-b679-f2228db1",
        "type": "EXAMPLE",
        "parts": [
          {
            "text": "Hello"
          }
        ]
      },
      ...
    ],
    "action": "input.welcome",
    "messages": [
      {
        "text": {
          "text": [ "Hi! How are you doing?", "Hello! How can I help you?" ]
        }
      }
    ]
  },
  ...
]
```

---

### dialogflow-create-intent

Crea una nueva Intención (Intent) en Dialogflow. La nueva Intención se vinculará al agente sincronizado en el área de administración.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">dialogflow-create-intent</span>`.
- `<span class="editor-theme-code">expressions</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array con las frases de entrenamiento. </span>**Sintaxis del array:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">["", "", ...]</span>`.
- `<span class="editor-theme-code">response</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Cadena que contiene la respuesta del bot cuando la entrada del usuario coincide con una expresión del usuario.
- `<span class="editor-theme-code">agent_language</span>`<span style="white-space: pre-wrap;">: El código de idioma de la intención. </span>**Por defecto:**<span style="white-space: pre-wrap;"> idioma principal del agente. Para ver la lista de códigos de idiomas, visite la documentación de Dialogflow. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### dialogflow-update-intent

Actualiza una Intención (Intent) de Dialogflow.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">dialogflow-update-intent</span>`.
- `<span class="editor-theme-code">intent_name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El nombre de la Intención. Obténgalo con la función </span>`<span class="editor-theme-code">dialogflow-get-intents</span>`.
- `<span class="editor-theme-code">expressions</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Array con las frases de entrenamiento. </span>**Sintaxis del array:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">["", "", ...]</span>`.
- `<span class="editor-theme-code">agent_language</span>`<span style="white-space: pre-wrap;">: El código de idioma de la intención. </span>**Por defecto:**<span style="white-space: pre-wrap;"> idioma principal del agente.</span>

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### dialogflow-entity

Crea una nueva Entidad en Dialogflow. La nueva Entidad se vinculará al agente sincronizado en el área de administración.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">dialogflow-entity</span>`.
- `<span class="editor-theme-code">entity_name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El nombre único de la Entidad.
- `<span class="editor-theme-code">synonyms</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Array de valores de la Entidad.
    - **Sintaxis de valor único:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">['value' => '', 'synonyms' => ['', '', ...]]</span>`.
- `<span class="editor-theme-code">agent_language</span>`<span style="white-space: pre-wrap;">: El código de idioma de la intención. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

---

### dialogflow-get-entity

Devuelve una Entidad de Dialogflow, o todas las Entidades del agente.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">dialogflow-get-entity</span>`.
- `<span class="editor-theme-code">entity_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El ID de la Entidad. Déjelo vacío o inserte </span>`<span class="editor-theme-code">all</span>`<span style="white-space: pre-wrap;"> para obtener todas las Entidades. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">all</span>`.
- `<span class="editor-theme-code">agent_language</span>`<span style="white-space: pre-wrap;">: El código de idioma de la intención. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
      "name":"projects/small-talk-43da7/agent/entityTypes/t5td1425-2k13-16cc-a7bb-f119b8d94112a",
      "displayName":"woocommerce-products",
      "kind":"KIND_MAP",
      "autoExpansionMode":"AUTO_EXPANSION_MODE_DEFAULT",
      "entities":[
         {
            "value":"Abstract Print Cotton Blouse",
            "synonyms":[
               "Abstract Print Cotton Blouse"
            ]
         },
         {
            "value":"Cashmere Carpenter Beanie",
            "synonyms":[
               "Cashmere Carpenter Beanie"
            ]
         },
         ...
      ],
      "enableFuzzyExtraction":true
    }
}
```

---

### google-get-token

Genera un nuevo Token de Dialogflow y lo devuelve. El token es válido por 1 hora.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">google-get-token</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": "ya27.a1AfH6SMDu9dn0TfRbNVAIEsSoeJPD1_jr1JpfL15..."
}
```

---

### dialogflow-get-agent

Devuelve los detalles del agente de Dialogflow.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">dialogflow-get-agent</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "parent":"projects/woocommerce-abcde",
        "displayName": "ABCDE",
        "defaultLanguageCode": "en",
        "timeZone": "Europe/Madrid",
        "enableLogging": true,
        "matchMode": "MATCH_MODE_HYBRID" ,
        "classificationThreshold": 0.6,
        "apiVersion": "API_VERSION_V2",
        "tier": "TIER_STANDARD"
    }
}
```

---

### dialogflow-set-active-context

Activa un contexto de Dialogflow en la sesión del usuario activo.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">dialogflow-set-active-context</span>`.
- `<span class="editor-theme-code">context_name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El nombre del contexto.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario vinculado al contexto.
- `<span class="editor-theme-code">parameters</span>`<span style="white-space: pre-wrap;">: Array de parámetros de Dialogflow vinculados al contexto. Ejemplo: </span>`<span class="editor-theme-code">{ "woocommerce-products": "Running Shoes" }</span>`.
- `<span class="editor-theme-code">life_span</span>`<span style="white-space: pre-wrap;">: La vida útil del contexto. </span>**Por defecto:**<span style="white-space: pre-wrap;"> 5.</span>
- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;">: Token de Sesión de Dialogflow (no es el Token de Actualización). Páselo si lo tiene; de lo contrario, se generará uno. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">language</span>`<span style="white-space: pre-wrap;">: El idioma del agente. </span>**Por defecto:**<span style="white-space: pre-wrap;"> idioma principal del agente.</span>

**Respuesta**

JSON

```
{
   "success":true,
   "response": {
      "responseId":"09f2f825-3dbf-4c27-a5bb-6bd0b71e44b9-1d846bd2",
      "queryResult":{
         "queryText":"sb-trigger-context",
         "outputContexts":[
            {
               "name":"projects/abcde/agent/sessions/208/contexts/abcde",
               "lifespanCount":4,
               ...
            }
         ],
         "languageCode":"en"
      }
   }
}
```

---

### dialogflow-curl

Envía datos a Dialogflow. Utilice este método para enviar consultas a Dialogflow.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">dialogflow-curl</span>`.
- `<span class="editor-theme-code">query</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La consulta de Dialogflow en formato JSON.
- `<span class="editor-theme-code">language</span>`<span style="white-space: pre-wrap;">: El idioma del agente de Dialogflow. </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;">: El tipo de llamada. Valores soportados: </span>`<span class="editor-theme-code">POST</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">GET</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">PATCH</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">POST</span>`.
- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;">: Token de Sesión de Dialogflow (no es el Token de Actualización). Páselo si lo tiene; de lo contrario, se generará uno. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
   "success": true,
   "response": "..."
}
```

Devuelve la respuesta de Dialogflow.

---

### dialogflow-human-takeover

Dispara la toma de control humana (human takeover) de Dialogflow.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">dialogflow-human-takeover</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la conversación.
- `<span class="editor-theme-code">auto_messages</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 también mensajes de fuera de línea (</span>**offline**), seguimiento (**follow\_up**<span style="white-space: pre-wrap;">) y suscripción si están activos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
   "success": true,
   "response": [true, true, ...]
}
```

---

### dialogflow-smart-reply

Devuelve las sugerencias de respuesta inteligente (Smart Reply).

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">dialogflow-smart-reply</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID de la conversación.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El mensaje de texto a partir del cual generar las sugerencias.
- `<span class="editor-theme-code">dialogflow_language</span>`<span style="white-space: pre-wrap;">: El idioma del agente de Dialogflow. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;">: El token de acceso de Dialogflow. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;"> (Segundo parámetro con el mismo nombre en la doc original, se refiere a OpenAI): Establézcalo para habilitar las sugerencias de OpenAI. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
   "suggestions": [
	   "I would be happy to help!",
	   "What can I do for you?",
       ...
	],
	"token": "ya29.a0AVvZVsrU7gAannWzuztBR-AphpjdWr0JrPoq9au0Ai",
	"detected_language": false,
	"smart_reply": false
}
```

---

### open-ai-message

Envía un mensaje a OpenAI y devuelve la respuesta, opcionalmente añade la respuesta a una conversación existente como un nuevo mensaje.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">open-ai-message</span>`.
- `<span class="editor-theme-code">message</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: La cadena que contiene el texto del mensaje.
- `<span class="editor-theme-code">max_tokens</span>`<span style="white-space: pre-wrap;">: El número máximo de tokens de OpenAI que se pueden usar para generar el mensaje. Este parámetro cambia la longitud del mensaje de respuesta. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;">. Si este parámetro es falso, el valor por defecto es el guardado en </span>`<span class="editor-theme-code">Configuración > Inteligencia Artificial > OpenAI > Max tokens</span>`, o se calcula automáticamente.
- `<span class="editor-theme-code">model</span>`<span style="white-space: pre-wrap;">: El modelo de OpenAI. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;">. Si este parámetro es falso, el valor por defecto es el guardado en </span>`<span class="editor-theme-code">Configuración > Inteligencia Artificial > OpenAI > Model</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;">: El ID de la conversación. Si se establece, la respuesta de OpenAI se añade a una conversación existente como un nuevo mensaje. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">audio</span>`<span style="white-space: pre-wrap;">: URL 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>`.

**Respuesta**

JSON

```
{
     "success": true,
     "response": [
         true,
         "I am an AI digital assistant. How can I help you today?",
         false,
         false
     ]
}
```

<span style="white-space: pre-wrap;">Devuelve un array con el primer valor establecido en </span>`<span class="editor-theme-code">true</span>`<span style="white-space: pre-wrap;"> si es exitoso, </span>`<span class="editor-theme-code">false</span>`<span style="white-space: pre-wrap;"> en caso de error. El segundo valor es el mensaje de OpenAI si es exitoso, o el mensaje de error si falla.</span>

---

### open-ai-curl

Llama a la API de OpenAI (ChatGPT) y devuelve la respuesta.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">open-ai-curl</span>`.
- `<span class="editor-theme-code">url_part</span>`<span style="white-space: pre-wrap;">: La parte de la URL de la API. Por ejemplo, si quiere llamar a </span>`<span class="editor-theme-code">https://api.openai.com/v1/completions</span>`<span style="white-space: pre-wrap;">, ingrese solo </span>`<span class="editor-theme-code">completions</span>`.
- `<span class="editor-theme-code">post_fields</span>`: Los parámetros de la API en formato JSON.
- `<span class="editor-theme-code">type</span>`<span style="white-space: pre-wrap;">: El tipo de llamada HTTP. Valores permitidos: </span>`<span class="editor-theme-code">GET</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">POST</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">UPLOAD</span>`.

**Respuesta**

JSON

```
{
   "success": true,
   "response": "..."
}
```

Devuelve la respuesta de OpenAI.

---

### google-translate

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

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">google-translate</span>`.
- `<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>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": [ "Ciao mondo", "Come stai?", ...]
}
```

---

### google-language-detection-update-user

Detecta el idioma de un texto y lo asigna a un usuario.

**Parámetros**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">google-language-detection-update-user</span>`.
- `<span class="editor-theme-code">string</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El texto del cual detectar el idioma.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario.

**Respuesta**

JSON

```
{
   "success": true,
   "response": true
}
```

---

# 📱 WEB API: WhatsApp

<span style="white-space: pre-wrap;">La aplicación de </span>**WhatsApp**<span style="white-space: pre-wrap;"> es necesaria para utilizar este conjunto de APIs.</span>

### whatsapp-send-message

Envía un mensaje a un número de WhatsApp.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">whatsapp-send-message</span>`.
- `<span class="editor-theme-code">to</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El número de teléfono del destinatario. Incluya el código del país. Ej. </span>`<span class="editor-theme-code">+39321305455</span>`.
- `<span class="editor-theme-code">message</span>`: El mensaje.
- `<span class="editor-theme-code">attachments</span>`: Array de adjuntos en formato JSON.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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.</span>
    - <span style="white-space: pre-wrap;">Es su responsabilidad subir los archivos a un servidor remoto; este argumento solo acepta la URL de archivos ya subidos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[]</span>`.
- `<span class="editor-theme-code">phone_id</span>`<span style="white-space: pre-wrap;">: El ID del número de teléfono. Obténgalo de </span>`<span class="editor-theme-code">Configuración > WhatsApp</span>`<span style="white-space: pre-wrap;">. Este ajuste es necesario solo si ha sincronizado múltiples números de WhatsApp. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
     "success": true,
     "response": {
         "messaging_product": "whatsapp",
         "contacts": [
             {
                 "input": "+16315551234",
                 "wa_id": "+16315551234"
             }
         ],
         "messages": [
             {
                 "id": "wamid.HBgLMTY1MDM4Nzk0MzkVAgARGBI3N0EyQUJDMjFEQzZCQUMzODMA"
             }
         ]
     }
 }
```

---

### whatsapp-send-template

Envía una plantilla de WhatsApp a un número de WhatsApp.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">whatsapp-send-template</span>`.
- `<span class="editor-theme-code">to</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El número de teléfono del destinatario. Incluya el código del país. Ej. </span>`<span class="editor-theme-code">+39321305455</span>`.
- `<span class="editor-theme-code">template_name</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El nombre de la plantilla. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">Configuración > WhatsApp > Cloud API template fallback > Template name</span>`.
- `<span class="editor-theme-code">template_languages</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: Una cadena separada por comas de todos los códigos de idioma disponibles para la plantilla. Ej. </span>`<span class="editor-theme-code">en_US,it_IT</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">Configuración > WhatsApp > Cloud API template fallback > Template languages</span>`.
- `<span class="editor-theme-code">phone_id</span>`<span style="white-space: pre-wrap;">: El ID del número de teléfono. Obténgalo de </span>`<span class="editor-theme-code">Configuración > WhatsApp > Cloud API numbers</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">parameters</span>`<span style="white-space: pre-wrap;">: El array de parámetros de la plantilla en formato JSON. Ej. </span>`<span class="editor-theme-code">["A", "B,C", "D,E"]</span>`.
    - <span style="white-space: pre-wrap;">El primer elemento del array son los parámetros del </span>**encabezado (header)**.
    - <span style="white-space: pre-wrap;">El segundo son los parámetros del </span>**cuerpo (body)**.
    - <span style="white-space: pre-wrap;">El tercero son los parámetros de los </span>**botones (button)**.
    - Cada parámetro es una cadena separada por una coma.
    - **Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">Configuración > WhatsApp > Cloud API template fallback</span>`.
- `<span class="editor-theme-code">language</span>`<span style="white-space: pre-wrap;">: El idioma de la plantilla. </span>**Por defecto:**<span style="white-space: pre-wrap;"> cadena vacía.</span>
- `<span class="editor-theme-code">conversation_url_parameter</span>`<span style="white-space: pre-wrap;">: Establézcalo si el texto de la plantilla contiene el campo de combinación </span>`<span class="editor-theme-code">{conversation_url_parameter}</span>`<span style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> cadena vacía.</span>
- `<span class="editor-theme-code">user_name</span>`<span style="white-space: pre-wrap;">: Establézcalo si el texto de la plantilla contiene el campo de combinación </span>`<span class="editor-theme-code">{recipient_name}</span>`.
- `<span class="editor-theme-code">user_email</span>`<span style="white-space: pre-wrap;">: Establézcalo si el texto de la plantilla contiene el campo de combinación </span>`<span class="editor-theme-code">{recipient_email}</span>`.
- `<span class="editor-theme-code">recipient_id</span>`<span style="white-space: pre-wrap;">: El ID de usuario de ZampiBot al que le está enviando la plantilla. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
     "success": true,
     "response": {
         "messaging_product": "whatsapp",
         "contacts": [ ... ],
         "messages": [
             {
                 "id": "wamid.HBgLMTY1MDM4Nzk0MzkVAgARGBI3N0EyQUJDMjFEQzZCQUMzODMA"
             }
         ]
     }
 }
```

---

# 💬 WEB API: Messenger

<span style="white-space: pre-wrap;">La aplicación de </span>**Messenger**<span style="white-space: pre-wrap;"> es necesaria para utilizar este conjunto de APIs.</span>

### messenger-send-message

Envía un mensaje a Messenger o Instagram.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">messenger-send-message</span>`.
- `<span class="editor-theme-code">psid</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El PSID. Para obtener esta información, el usuario primero debe enviarle un mensaje a través de Facebook. Obténgalo usando la función </span>`<span class="editor-theme-code">get-user</span>`.
- `<span class="editor-theme-code">facebook_page_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El ID de la Página de Facebook. Para obtener esta información, el usuario primero debe enviarle un mensaje a través de Facebook. Obténgalo usando la función </span>`<span class="editor-theme-code">get-conversation</span>`<span style="white-space: pre-wrap;">. El ID es el valor </span>`<span class="editor-theme-code">extra</span>`.
- `<span class="editor-theme-code">message</span>`: El mensaje.
- `<span class="editor-theme-code">attachments</span>`: Array de adjuntos en formato JSON.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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.</span>
    - <span style="white-space: pre-wrap;">Es su responsabilidad subir los archivos a un servidor remoto; este argumento solo acepta la URL de archivos ya subidos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[]</span>`.
- `<span class="editor-theme-code">metadata</span>`<span style="white-space: pre-wrap;">: Proporcione el ID del mensaje de ZampiBot vinculado a este mensaje. Inclúyalo siempre que sea posible para evitar problemas. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "recipient_id": "89995542233",
        "message_id": "11445777889"
    }
}
```

---

# ✈️ WEB API: Telegram

<span style="white-space: pre-wrap;">La aplicación de </span>**Telegram**<span style="white-space: pre-wrap;"> es necesaria para utilizar este conjunto de APIs.</span>

### telegram-send-message

Envía un mensaje a Telegram.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">telegram-send-message</span>`.
- `<span class="editor-theme-code">chat_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El Chat ID. Para obtener esta información, el usuario primero debe enviarle un mensaje a través de Telegram. Obténgalo usando la función </span>`<span class="editor-theme-code">get-conversation</span>`<span style="white-space: pre-wrap;">. El ID es el valor </span>`<span class="editor-theme-code">extra</span>`.
- `<span class="editor-theme-code">message</span>`: El mensaje.
- `<span class="editor-theme-code">attachments</span>`: Array de adjuntos en formato JSON.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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.</span>
    - <span style="white-space: pre-wrap;">Es su responsabilidad subir los archivos a un servidor remoto; este argumento solo acepta la URL de archivos ya subidos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[]</span>`.
- `<span class="editor-theme-code">conversation_id</span>`<span style="white-space: pre-wrap;">: Esta configuración es necesaria solo si ha sincronizado múltiples bots de Telegram. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "ok": true,
        "result": {
            "message_id": 2030,
            "from": {
                "id": 21202173,
                "is_bot": true,
                "first_name": "joe",
                "username": "sb_officialbot"
            },
            "chat": {
                "id": 148766722,
                "first_name": "Fede",
                "last_name": "Schio",
                "username": "fedechioc",
                "type": "private"
            },
            "date": 1699621061,
            "text": "Hello!"
        }
    }
}
```

---

# 🟣 WEB API: Viber

<span style="white-space: pre-wrap;">La aplicación de </span>**Viber**<span style="white-space: pre-wrap;"> es necesaria para utilizar este conjunto de APIs.</span>

### viber-send-message

Envía un mensaje a Viber.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">viber-send-message</span>`.
- `<span class="editor-theme-code">viber_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El Viber ID. Para obtener esta información, el usuario primero debe enviarle un mensaje a través de Viber. Obténgalo usando la función </span>`<span class="editor-theme-code">get-user</span>`.
- `<span class="editor-theme-code">message</span>`: El mensaje.
- `<span class="editor-theme-code">attachments</span>`: Array de adjuntos en formato JSON.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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.</span>
    - <span style="white-space: pre-wrap;">Es su responsabilidad subir los archivos a un servidor remoto; este argumento solo acepta la URL de archivos ya subidos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[]</span>`.

**Respuesta**

JSON

```
{
   "status":0,
   "status_message":"ok",
   "message_token":5741311803571721087,
   "chat_hostname":"SN-CHAT-05_",
   "billing_status":1
}
```

---

# 🟢 WEB API: LINE

<span style="white-space: pre-wrap;">La aplicación de </span>**LINE**<span style="white-space: pre-wrap;"> es necesaria para utilizar este conjunto de APIs.</span>

### line-send-message

Envía un mensaje a LINE.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">line-send-message</span>`.
- `<span class="editor-theme-code">line_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El LINE ID. Para obtener esta información, el usuario primero debe enviarle un mensaje a través de LINE. Obténgalo usando la función </span>`<span class="editor-theme-code">get-user</span>`.
- `<span class="editor-theme-code">message</span>`: El mensaje.
- `<span class="editor-theme-code">attachments</span>`: Array de adjuntos en formato JSON.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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.</span>
    - <span style="white-space: pre-wrap;">Es su responsabilidad subir los archivos a un servidor remoto; este argumento solo acepta la URL de archivos ya subidos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[]</span>`.

**Respuesta**

JSON

```
{
    "sentMessages": [
        {
            "id": "481156985669026149",
            "quoteToken": "fKOxH1EKOAKYFLW6fe8vFGoKl2I2UZocU6KcoZgwtVrSTQjLbXFVer3Z-..."
        }
    ]
}
```

---

# 🟢 WEB API: WeChat

<span style="white-space: pre-wrap;">La aplicación de </span>**WeChat**<span style="white-space: pre-wrap;"> es necesaria para utilizar este conjunto de APIs.</span>

### wechat-send-message

Envía un mensaje a WeChat.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">wechat-send-message</span>`.
- `<span class="editor-theme-code">open_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**<span style="white-space: pre-wrap;">: El WeChat ID. Para obtener esta información, el usuario primero debe enviarle un mensaje a través de WeChat. Obténgalo usando la función </span>`<span class="editor-theme-code">get-user</span>`.
- `<span class="editor-theme-code">message</span>`: El mensaje.
- `<span class="editor-theme-code">attachments</span>`: Array de adjuntos en formato JSON.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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.</span>
    - <span style="white-space: pre-wrap;">Es su responsabilidad subir los archivos a un servidor remoto; este argumento solo acepta la URL de archivos ya subidos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[]</span>`.
- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;">: El token de Google. Obténgalo de la respuesta de esta función. Inclúyalo siempre que sea posible por razones de rendimiento. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
[
   "{...}",
   "5741311803571721087"
]
```

El primer elemento del array es la respuesta, el segundo elemento es el token.

---

# 💬 WEB API: Slack

<span style="white-space: pre-wrap;">La aplicación de </span>**Slack**<span style="white-space: pre-wrap;"> es necesaria para utilizar este conjunto de APIs.</span>

### send-slack-message

Envía un mensaje a Slack.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">send-slack-message</span>`.
- `<span class="editor-theme-code">user_id</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: El ID del usuario vinculado al mensaje.
- `<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;">: La imagen de perfil del remitente, aparecerá en Slack a la izquierda del mensaje. 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 style="white-space: pre-wrap;">. </span>**Por defecto:**<span style="white-space: pre-wrap;"> vacío.</span>
- `<span class="editor-theme-code">message</span>`: El contenido del mensaje.
- `<span class="editor-theme-code">attachments</span>`: Array de adjuntos en formato JSON.
    - **Sintaxis del array:**<span style="white-space: pre-wrap;"> </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.</span>
    - <span style="white-space: pre-wrap;">Es su responsabilidad subir los archivos a un servidor remoto; este argumento solo acepta la URL de archivos ya subidos. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">[]</span>`.
- `<span class="editor-theme-code">channel</span>`: El canal de Slack vinculado al mensaje. Por razones de rendimiento, incluya siempre el canal. Obtendrá el canal después de la primera llamada de esta función, desde la respuesta (ejemplo: C011JFFGSKY).

**Respuesta**

JSON

```
{"success":true,"response":["C011JFFGSKY"]}
```

**Otras posibles respuestas:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">slack-not-active</span>`<span style="white-space: pre-wrap;">, mensaje de error de </span>`<span class="editor-theme-code">MySQL</span>`<span style="white-space: pre-wrap;"> o </span>`<span class="editor-theme-code">cURL</span>`.

### archive-slack-channels

<span style="white-space: pre-wrap;">Archiva todos los canales de Slack. Si tiene muchos canales, esta operación puede tardar mucho tiempo en completarse y podría necesitar ejecutarla varias veces. </span>**Importante:**<span style="white-space: pre-wrap;"> Todos sus canales de Slack serán archivados.</span>

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">archive-slack-channels</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": true
}
```

### slack-users

Devuelve la información de conexión de los miembros agentes-slack.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">slack-users</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": {
        "slack_users": [
            {
                "id": "U328T701Z",
                "name": "Support Schio"
            },
            {
                "id": "UR5F0GK7T",
                "name": "Robert Pitt"
            }
            ...
        ],
        "agents": [
            {
                "id": "2",
                "name": "Alex Smith"
            },
            {
                "id": "445",
                "name": "Federico Schiocchet"
            },
            {
                "id": "724",
                "name": "Alberto Prade"
            }
            ...
        ],
        "saved": {
            "U328T701Z": "445",
            "UR5F0GK7T": "2"
            ...
        }
    }
}
```

---

### slack-presence

Comprueba si un agente de Slack está en línea, si al menos un agente está en línea, o devuelve todos los usuarios en línea.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">slack-presence</span>`.
- `<span class="editor-theme-code">agent_id</span>`<span style="white-space: pre-wrap;">: El ID del agente a verificar. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.
- `<span class="editor-theme-code">list</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 devolver todos los usuarios en línea. </span>**Por defecto:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">false</span>`.

**Respuesta**

JSON

```
{
    "success": true,
    "response": online
}
```

<span style="white-space: pre-wrap;">Devuelve </span>`<span class="editor-theme-code">online</span>`<span style="white-space: pre-wrap;"> u </span>`<span class="editor-theme-code">offline</span>`<span style="white-space: pre-wrap;"> para la verificación de un solo agente. Devuelve un array de IDs de usuarios para la verificación de múltiples usuarios.</span>

---

### slack-channels

Devuelve la lista de todos los canales de Slack, incluyendo los canales archivados.

**Argumentos**

- `<span class="editor-theme-code">token</span>`<span style="white-space: pre-wrap;"> </span>**Requerido**: Su token secreto de administrador.
- `<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">slack-channels</span>`.

**Respuesta**

JSON

```
{
    "ok": true,
    "channels": [
        {
            "id": "C012AB3CD",
            "name": "general",
            "is_channel": true,
            "is_group": false,
            "is_im": false,
            "created": 1449252889,
            "creator": "U012A3CDE",
            "is_archived": false,
            "is_general": true,
            "unlinked": 0,
            "name_normalized": "general",
            "is_shared": false,
            "is_ext_shared": false,
            "is_org_shared": false,
            "pending_shared": [],
            "is_pending_ext_shared": false,
            "is_member": true,
            "is_private": false,
            "is_mpim": false,
            "updated": 1678229664302,
            "topic": {
                "value": "Company-wide announcements and work-based matters",
                "creator": "",
                "last_set": 0
            },
            "purpose": {
                "value": "This channel is for team-wide communication and announcements. All team members are in this channel.",
                "creator": "",
                "last_set": 0
            },
            "previous_names": [],
            "num_members": 4
        },
        {
            "id": "C061EG9T2",
            "name": "random",
            "is_channel": true,
            "is_group": false,
            "is_im": false,
            "created": 1449252889,
            "creator": "U061F7AUR",
            "is_archived": false,
            "is_general": false,
            "unlinked": 0,
            "name_normalized": "random",
            "is_shared": false,
            "is_ext_shared": false,
            "is_org_shared": false,
            "pending_shared": [],
            "is_pending_ext_shared": false,
            "is_member": true,
            "is_private": false,
            "is_mpim": false,
            "updated": 1678229664302,
            "topic": {
                "value": "Non-work banter and water cooler conversation",
                "creator": "",
                "last_set": 0
            },
            "purpose": {
                "value": "A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber you'd prefer to keep out of more focused work-related channels.",
                "creator": "",
                "last_set": 0
            },
            "previous_names": [],
            "num_members": 4
        }
    ],
    "response_metadata": {
        "next_cursor": "dGVhbTpDMDYxRkE1UEI="
    }
}
```

---

### slack-message-sent

Webhook enviado cuando se envía un mensaje a Slack.

**Respuesta**

JSON

```
{
    "function": "slack-message-sent",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "message": "Hi! How are you doing?",
        "conversation_id": "1057",
        "slack_channel": "C028BGU6TTT"
    }
}
```

---

# 🪝 WEB API: Webhooks

Los Webhooks son mensajes automatizados enviados desde ZampiBot a una URL cuando ocurre algo. Contienen datos personalizados y se envían a una URL única definida por usted.

### Uso

1. <span style="white-space: pre-wrap;">Inicie sesión en el área de administración y vaya a </span>`<span class="editor-theme-code">Configuración > Misceláneas > Webhooks</span>`.
2. **URL de destino:**<span style="white-space: pre-wrap;"> Ingrese la URL a donde ZampiBot enviará los datos. Esta URL debe apuntar a un archivo </span>**PHP**<span style="white-space: pre-wrap;"> que pueda leer los datos recibidos. Puede usar el siguiente código para capturar los datos: </span>`<span class="editor-theme-code">$response = json_decode(file_get_contents('php://input'), true);</span>`<span style="white-space: pre-wrap;"> La variable </span>`<span class="editor-theme-code">$response</span>`<span style="white-space: pre-wrap;"> será un array.</span>
3. **Clave secreta (Secret key):**<span style="white-space: pre-wrap;"> Ingrese una contraseña secreta de su elección. Esta clave se incluye en todos los Webhooks; utilícela para validar el Webhook y asegurarse de que fue enviado por ZampiBot y no por un tercero.</span>
4. Active los Webhooks y guarde. ZampiBot comenzará a enviar los Webhooks de la lista a continuación a su URL.

**Notas:**

- <span style="white-space: pre-wrap;">La clave </span>`<span class="editor-theme-code">sender-url</span>`<span style="white-space: pre-wrap;"> se incluye en todos los Webhooks y contiene la URL desde la cual se envía el webhook.</span>
- <span style="white-space: pre-wrap;">La configuración </span>**Webhooks activos**<span style="white-space: pre-wrap;"> define qué webhooks están habilitados. Ingrese los nombres de los webhooks separados por comas. Déjelo vacío para habilitar todos.</span>

**¿Falta algún Webhook?**<span style="white-space: pre-wrap;"> ¿Necesita un Webhook que aún no está disponible? ¡Contáctenos y lo agregaremos!</span>

---

### message-sent

Webhook enviado cuando un usuario o un agente envía un nuevo mensaje.

**Respuesta**

```
{
    "function": "message-sent",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "user_id": "947",
        "conversation_user_id": "947",
        "conversation_id": "1057",
        "conversation_status_code": "2",
        "conversation_source": "wa",
        "message_id": "2574",
        "message": "Hello! How are you?",
        "attachments": [["name","https://example.com/image.png"],["name","https://example.com/file.txt"]]
    }
}
```

---

### email-sent

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

**Respuesta**

```
{
    "function": "email-sent",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "recipient_id": "957",
        "message": "Hello! How can I help you?",
        "attachments": [["name","https://example.com/image.png"],["name","https://example.com/file.txt"]]
     }
}
```

---

### sms-sent

Webhook enviado cuando un usuario o un agente envía un nuevo mensaje de texto (SMS).

**Respuesta**

```
{
    "function": "sms-sent",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "recipent_id": "947",
        "message": "Hello! How are you?",
        "Body": "Hello! How are you?",
        "From": "+15104564545",
        "To": "+15305431221",
        "response": {
            "sid": "SM1f0e8ae6ade43cb3c0ce4525424e404f",
            "date_created": "Fri, 13 Aug 2010 01:16:24 +0000",
            "date_updated": "Fri, 13 Aug 2010 01:16:24 +0000",
            "date_sent": null,
            "account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            "to": "+15305431221",
            "from": "+15104564545",
            "body": "A Test Message",
            "status": "queued",
            "flags":["outbound"],
            "api_version": "2010-04-01",
            "price": null,
            "uri": "/2010-04-01/Accounts/ACXXXX/Messages/SM1f004f.json"
        }
    }
}
```

---

### new-messages

<span style="white-space: pre-wrap;">Webhook enviado cuando se reciben nuevos mensajes en el widget de chat o en el área de administración. Si desea recibir mensajes enviados por usuarios desde plataformas externas como WhatsApp o Instagram, utilice </span>`<span class="editor-theme-code">message-sent</span>`<span style="white-space: pre-wrap;"> en su lugar.</span>

**Respuesta**

```
{
    "function": "new-messages",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "details": {
            "message": "Hello world!",
            "message_id": "10231",
            "attachments": "",
            "payload": "",
            "message_status_code": "0",
            "last_update_time": "2024-04-02 16:57:19",
            "message_user_id": "1964",
            "message_first_name": "Don",
            "message_last_name": "John",
            "message_profile_image": "https://example.com/image.jpg",
            "message_user_type": "admin",
            "department": null,
            "agent_id": null,
            "title": "",
            "source": null,
            "extra": null,
            "tags": null,
            "id": "4607",
            "user_id": "4747",
            "creation_time": "2024-04-02 16:57:17",
            "status_code": "1"
        },
        "messages": [
            {
                "details": {
                    "message": "Hello world!",
                    "attachments": "",
                    "payload": {},
                    "status_code": "0",
                    "id": "10231",
                    "profile_image": "https://example.com/image.jpg",
                    "first_name": "Don",
                    "last_name": "John",
                    "user_id": "1964",
                    "user_type": "admin",
                    "full_name": "Don John",
                    "creation_time": "2024-04-02 16:57:19"
                }
            }
        ]
    }
}
```

---

### dialogflow-message

Webhook enviado cuando Dialogflow envía una respuesta a un mensaje de usuario.

**Respuesta**

```
{
    "function": "dialogflow-message",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "response": {
            "token": "ya29.a0Afkjh8MADFYeT4BgCy3917xqSDdVvw4mgVHrgrLDcgRk9ajWoQAgdjv5e...",
            "messages": [
                {
                    "message": "Hi! How are you doing?"
                }
            ],
            "response": {
                "responseId": "46d2c208-2a7f-4ca2-bd7d-6636982b8bee-0f0e27e1",
                "queryResult": {
                    "queryText": "hi",
                    "action": "input.welcome",
                    "allRequiredParamsPresent": "true",
                    "fulfillmentText": "Hi! How are you doing?",
                    "fulfillmentMessages": [ ... ],
                    "outputContexts": [ ... ],
                    "intent": {
                        "name": "projects/api-project-655517752147/agent/intents...",
                        "displayName": "Default Welcome Intent"
                    },
                    "intentDetectionConfidence": "1",
                    "languageCode": "en"
                },
                "alternativeQueryResults": [ ... ]
            }
        },
        "message": "Hello",
        "conversation_id": 123456
    }
}
```

---

### message-deleted

Webhook enviado cuando se elimina un mensaje.

**Respuesta**

```
{
    "function": "message-deleted",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": "2595"
}
```

<span style="white-space: pre-wrap;">La clave </span>`<span class="editor-theme-code">data</span>`<span style="white-space: pre-wrap;"> contiene el ID del mensaje eliminado.</span>

---

### rich-message

Webhook enviado cuando el usuario presiona el botón de envío y los valores ingresados en el Mensaje Enriquecido (Rich Message) se envían a ZampiBot. Todos los Mensajes Enriquecidos que requieren el envío de datos activan este Webhook; algunos de ellos son el formulario de correo electrónico de seguimiento, el formulario de registro y los botones.

**Respuesta**

```
{
    "function": "rich-message",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "result": true,
        "data": {
            "type": "inputs",
            "result": {
                "name": [
                    "Don Jhon",
                    "Name"
                ],
                "your-email": [
                    "example@gmail.com",
                    "Your Email"
                ],
                "site-url": [
                    "www.example.com",
                    "Site URL"
                ]
            }
        },
        "id": "example"
    }
}
```

---

### new-conversation

Webhook enviado cuando se recibe una nueva conversación en el widget de chat del usuario.

**Respuesta**

```
{
    "function": "new-conversation-received",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "messages": [
            {
                "id": "10222",
                "user_id": "4746",
                "message": "Hi there!",
                "creation_time": "2024-04-02 07:26:18",
                "attachments": "",
                "status_code": "0",
                "payload": "",
                "conversation_id": "4605",
                "first_name": "User",
                "last_name": "#19332",
                "profile_image": "https://example.com/image.png",
                "user_type": "lead"
            },
            {
                "id": "10223",
                "user_id": "377",
                "message": "How are you?",
                "creation_time": "2024-04-02 07:26:22",
                "attachments": "",
                "status_code": "2",
                "payload": "{\"follow_up_message\":true,\"preview\":\"Preview text!\"]\"}",
                "conversation_id": "4605",
                "first_name": "Smart Assistant",
                "last_name": "",
                "profile_image": "https://example.com/image.png",
                "user_type": "bot"
            }
        ],
        "details": {
            "user_id": "4746",
            "first_name": "User",
            "last_name": "#19332",
            "profile_image": "https://example.com/image.png",
            "user_type": "lead",
            "id": "4605",
            "title": "",
            "status_code": "0",
            "creation_time": "2024-04-02 07:26:17",
            "department": null,
            "agent_id": null,
            "source": null,
            "extra": null,
            "extra_2": null,
            "extra_3": null,
            "tags": null,
            "busy": false
        }
    }
}
```

### new-conversation-created

Webhook enviado cuando se crea una nueva conversación.

**Respuesta**

```
{
    "function": "new-conversation-created",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "messages": [
            {
                "id": "10222",
                "user_id": "4746",
                "message": "Hi there!",
                "creation_time": "2024-04-02 07:26:18",
                "attachments": "",
                "status_code": "0",
                "payload": "",
                "conversation_id": "4605",
                "first_name": "User",
                "last_name": "#19332",
                "profile_image": "https://example.com/image.png",
                "user_type": "lead"
            },
            {
                "id": "10223",
                "user_id": "377",
                "message": "How are you?",
                "creation_time": "2024-04-02 07:26:22",
                "attachments": "",
                "status_code": "2",
                "payload": "{\"follow_up_message\":true,\"preview\":\"Preview text!\"]\"}",
                "conversation_id": "4605",
                "first_name": "Smart Assistant",
                "last_name": "",
                "profile_image": "https://example.com/image.png",
                "user_type": "bot"
            }
        ],
        "details": {
            "user_id": "4746",
            "first_name": "User",
            "last_name": "#19332",
            "profile_image": "https://example.com/image.png",
            "user_type": "lead",
            "id": "4605",
            "title": "",
            "status_code": "0",
            "creation_time": "2024-04-02 07:26:17",
            "department": null,
            "agent_id": null,
            "source": null,
            "extra": null,
            "extra_2": null,
            "extra_3": null,
            "tags": null,
            "busy": false
        }
    }
}
```

---

### conversation-status-updated

Webhook enviado cuando cambia el código de estado de una conversación.

**Respuesta**

```
{
    "function": "conversation-status-updated",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "conversation_id": "1057",
        "status_code": "0"
    }
}
```

**Códigos de estado:**<span style="white-space: pre-wrap;"> activo = </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>`.

---

### login

Webhook enviado cuando un usuario inicia sesión correctamente desde el formulario de inicio de sesión del chat. Este Webhook se envía solo si el inicio de sesión es exitoso.

**Respuesta**

```
{
    "function": "login",
    "key": "xxxxxxxx",
    "data": {
        "details": {
            "id": "18",
            "profile_image": "https://schiocco.s3.amazonaws.com/3045506.png",
            "first_name": "Fede",
            "last_name": "",
            "email": "fede@fede.com",
            "user_type": "user",
            "token": "ec83c134e5d53be98abd0025145473eec0ff814e",
            "url": "https://sandbox.cloud.board.support\/script",
            "password": "$2y$10$vYtwWDEqOt7jMSBcCmPigOrqw06tdD8ZSFm70L6c1PLEQ8j938l2W",
            "conversation_id": "false"
        }
    },
    "sender-url": "http:\/\/localhost\/"
}
```

---

### registration

Webhook enviado cuando un usuario se registra correctamente desde el formulario de registro del chat. Este Webhook se envía solo si el registro es exitoso. También se envía si el registro se actualiza a través del formulario de registro de un Mensaje Enriquecido.

**Respuesta**

```
{
    "function": "registration",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "id": "example",
        "conversation_id": "123", 
        "user": {
            "profile_image": [
                "https://board.support/user.svg",
                "Profile image"
            ],
            "first_name": [
                "Don",
                "First name"
            ],
            "last_name": [
                "John",
                "Last name"
            ],
            "email": [
                "example@email.com",
                "Email"
            ],
            "password": [
                "12345678",
                "Password"
            ],
            "password-check": [
                "12345678",
                "Repeat password"
            ],
            "user_type": [
                "user",
                ""
            ]
        },
        "extra": {
            "phone": [
                "+02123456789",
                "Phone"
            ],
            "city": [
                "London",
                "City"
            ]
        }
    }
}
```

---

### user-deleted

Webhook enviado cuando se elimina un usuario.

**Respuesta**

```
{
    "function": "user-deleted",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": "951"
}
```

<span style="white-space: pre-wrap;">La clave </span>`<span class="editor-theme-code">data</span>`<span style="white-space: pre-wrap;"> contiene el ID del usuario eliminado.</span>

---

### new-email-address

Webhook enviado cuando un usuario registra su correo electrónico a través de un mensaje de seguimiento, mensaje de suscripción o mensaje enriquecido de correo electrónico.

**Respuesta**

```
{
    "function": "new-email-address",
    "key": "xxxxxxxx",
    "sender-url": "https://example.com",
    "data": {
        "name": "John Doe",
        "email": "email@example.com"
    }
}
```

---

# 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>`.

# CASOS DE USO

# 📚 Casos de uso (Use cases)

Los casos de uso son ejemplos del mundo real de la API. Pueden ser una combinación de diferentes lenguajes, APIs y configuraciones. Están diseñados para completar tareas específicas.

## 👤 Registrar un usuario personalizado e iniciar sesión

<span style="white-space: pre-wrap;">Este caso de uso explica cómo registrar manualmente un usuario personalizado e iniciar sesión antes de iniciar el chat. Se recomiendan los métodos: </span>**VARIABLE JS**<span style="white-space: pre-wrap;">, </span>**API PHP**<span style="white-space: pre-wrap;"> y </span>**API PHP + JS + WEB**.

### Método 1: VARIABLE JS

<span style="white-space: pre-wrap;">Simplemente ingrese la variable </span>`<span class="editor-theme-code">SB_DEFAULT_USER</span>`<span style="white-space: pre-wrap;">. </span>**Consulte la documentación de la API JS para más detalles sobre esta variable.**

---

### Método 2: API PHP

**1. Registrar al usuario e iniciar sesión**<span style="white-space: pre-wrap;"> Verifique si un usuario activo ya ha iniciado sesión comprobando el correo electrónico. Si es así, inicie sesión; de lo contrario, registre un nuevo usuario.</span>

```php
require_once($_SERVER["DOCUMENT_ROOT"] . "/chatbot.zampisoft.com/include/functions.php");
$active_user = sb_get_active_user();

if (!$active_user || $active_user["email"] != "don.john@email.com") {
    $response = sb_add_user_and_login([ 
        "profile_image" => "https://chatbot.zampisoft.com/media/docs/user.png", 
        "first_name" => "Don", 
        "last_name" => "John", 
        "email" => "don.john@email.com", 
        "password" => "12345678"
    ], [
        "phone" => ["123456789", "Phone"], 
        "city" => ["London", "City"]
    ]);

    if ($response == "duplicate-email") {
        $response = sb_login("don.john@email.com", "12345678");
    }
}
```

---

### Método 3: API PHP + JS + WEB

**1. Habilitar la inicialización manual**<span style="white-space: pre-wrap;"> Vaya a </span>`<span class="editor-theme-code">Configuración > Chat</span>`<span style="white-space: pre-wrap;">, marque la opción </span>**Inicialización manual**<span style="white-space: pre-wrap;"> y guarde.</span>

**2. Imprimir el código JS para registrar e iniciar sesión**<span style="white-space: pre-wrap;"> Genere un código JS para insertar en todas las páginas que contienen el chat.</span>

```php
$existing_user_email = 'don.john@email.com';
$sb_user = supportboard_curl(['function' => 'get-user-by', 'by' => 'email', 'value' => $existing_user_email]);
$code_login_existing_user = '';

if (isset($sb_user['success']) && $sb_user['success']) {
   $sb_user = $sb_user['response']; 
   $code_login_existing_user = 'SBF.login("", "", "' . $sb_user['id'] . '", "' . $sb_user['token'] . '", () => { SBChat.initChat(); });';
}  

$code = 'jQuery(document).on("SBReady", function () {
            SBF.getActiveUser(true, () => {
                if (!SBF.activeUser() || (SBF.activeUser().email != "' . $existing_user_email . '")) {
                    SBF.ajax({
                        function: "add-user-and-login",
                        settings: { profile_image: "https://chatbot.zampisoft.com/media/docs/user.png", first_name: "Don", last_name: "John", email: "don.john@email.com" },
                        settings_extra: { phone: ["123456789", "Phone"], city: ["London", "City"] }
                    }, (response) => {
                        if (!SBF.errorValidation(response)) {
                            SBF.loginCookie(response[1]);
                            SBF.activeUser(new SBUser(response[0]));
                            SBChat.initChat();
                        } else if (response[1] == "duplicate-email") {
                           ' . $code_login_existing_user . '
                        } else {
                            SBChat.initChat();
                        }
                     });
                  }
              });
          });';
echo $code;
```

---

### Método 4: API JAVASCRIPT

**1. Habilitar la inicialización manual**<span style="white-space: pre-wrap;"> Vaya a </span>`<span class="editor-theme-code">Configuración > Chat</span>`<span style="white-space: pre-wrap;">, marque la opción </span>**Inicialización manual**<span style="white-space: pre-wrap;"> y guarde.</span>

**2. Registrar al usuario e iniciar sesión**<span style="white-space: pre-wrap;"> </span>**¡Advertencia! Este método no es seguro, la contraseña y los detalles del usuario son visibles para todos.**

```javascript
jQuery(document).on("SBReady", function () {
    SBF.getActiveUser(true, () => {
        if (!SBF.activeUser() || (SBF.activeUser().email != "don.john@email.com")) {
            SBF.ajax({
                function: "add-user-and-login",
                settings: { profile_image: "https://chatbot.zampisoft.com/media/docs/user.png", first_name: "Don", last_name: "John", email: "don.john@email.com", password: "12345678" },
                settings_extra: { phone: ["123456789", "Phone"], city: ["London", "City"] }
            }, (response) => {
                if (!SBF.errorValidation(response)) {
                    SBF.loginCookie(response[1]);
                    SBF.activeUser(new SBUser(response[0]));
                    SBChat.initChat();
                } else if (response[1] == "duplicate-email") {
                    SBF.login("don.john@email.com", "12345678", "", "", () => { SBChat.initChat(); });
                } else console.log(response);
            });
        } else {
            SBChat.initChat();
        }
    });
});
```

---

## 📄 Mostrar el chat solo en páginas específicas

Este caso de uso explica cómo mostrar el chat solo en páginas específicas.

Este caso de uso explica cómo mostrar el chat únicamente en páginas específicas.

**1. Habilitar la inicialización manual**<span style="white-space: pre-wrap;"> Vaya a </span>`<span class="editor-theme-code">Configuración > Chat</span>`<span style="white-space: pre-wrap;">, marque la opción </span>**Inicialización manual**<span style="white-space: pre-wrap;"> y guarde.</span>

**2. Inicializar el chat**<span style="white-space: pre-wrap;"> Inicialice el chat con la función </span>`<span class="editor-theme-code">SBChat.initChat()</span>`<span style="white-space: pre-wrap;"> de la </span>**API de JavaScript**<span style="white-space: pre-wrap;">. Puede utilizar la variable JS </span>`<span class="editor-theme-code">window.location.href</span>`<span style="white-space: pre-wrap;"> para obtener la URL y mostrar el chat solo si la URL coincide con sus criterios. Tenga en cuenta que también puede utilizar la variable JavaScript </span>`<span class="editor-theme-code">SB_DISABLED = true</span>`<span style="white-space: pre-wrap;"> para deshabilitar el chat en páginas específicas.</span>

```javascript
$(document).on("SBReady", function () {
    // Ejemplo: mostrar el chat solo en la página de contacto
    if (window.location.href.indexOf("/contact") > 0) {
        SBChat.initChat();
    }
    // Ejemplo: mostrar el chat solo en la página de inicio
    if (window.location.href == "https://example.com") {
        SBChat.initChat();
    }
});
```

---

## 🖱️ Abrir el chat al hacer clic

<span style="white-space: pre-wrap;">Este caso de uso explica cómo abrir el chat solo cuando el usuario hace clic en un botón. La forma más sencilla es 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 ese elemento.</span>

```
<a class="sb-open-chat">Clic aquí</a>
```

<span style="white-space: pre-wrap;">También puede usar la función </span>`<span class="editor-theme-code">SBChat.open()</span>`:

```
<a href="javascript:SBChat.open()">Clic aquí</a>
```

---

## 👁️ Mostrar el chat al hacer clic

Este caso de uso muestra el chat solo después de que el usuario hace clic en un botón.

**1. Habilitar inicialización manual y apertura automática**<span style="white-space: pre-wrap;"> Habilite </span>`<span class="editor-theme-code">Configuración > Chat > Inicialización manual</span>`<span style="white-space: pre-wrap;"> y </span>`<span class="editor-theme-code">Configuración > Chat > Abrir automáticamente</span>`, y guarde.

**2. Mostrar el chat**<span style="white-space: pre-wrap;"> Use </span>`<span class="editor-theme-code">SBChat.initChat()</span>`<span style="white-space: pre-wrap;">. Para abrirlo en móviles, use también </span>`<span class="editor-theme-code">SBChat.open()</span>`.

```html
<a href="javascript:SBChat.initChat();SBChat.open()">Clic aquí</a>
```

---

## 🔄 Mostrar y ocultar el chat al hacer clic

El primer clic muestra el chat, el segundo lo oculta.

**1. Habilitar la inicialización manual**<span style="white-space: pre-wrap;"> Vaya a </span>`<span class="editor-theme-code">Configuración > Chat</span>`<span style="white-space: pre-wrap;">, marque la opción </span>**Inicialización manual**<span style="white-space: pre-wrap;"> y guarde.</span>

**2. Añadir el código de eventos de clic**<span style="white-space: pre-wrap;"> Reemplace </span>`<span class="editor-theme-code">button-id</span>`<span style="white-space: pre-wrap;"> con el ID de su botón.</span>

```javascript
$("body").on("click", "#button-id", function () {
    SBChat.initChat();
    $(".sb-chat-btn").show();
    setTimeout(function () {
        SBChat.open();
     }, 500);
});

$("body").on("click", ".sb-chat .sb-chat-btn", function () {
    $(this).hide();
});
```

---

## 🏢 Crear conversación y asignar departamento

<span style="white-space: pre-wrap;">Este caso de uso explica cómo crear una nueva conversación, asignarle un departamento y abrirla en el chat. Si desea que todas las conversaciones se asignen automáticamente a un departamento fijo, utilice la variable de JavaScript </span>`<span class="editor-theme-code">SB_DEFAULT_DEPARTMENT</span>`<span style="white-space: pre-wrap;">. Puede obtener los IDs en </span>`<span class="editor-theme-code">Configuración > Misceláneas > Departamentos</span>`.

**1. Crear una nueva conversación y abrirla**<span style="white-space: pre-wrap;"> Cree una nueva conversación con la función </span>`<span class="editor-theme-code">SBChat.newConversation()</span>`<span style="white-space: pre-wrap;"> de la </span>**API de JavaScript**<span style="white-space: pre-wrap;"> y pase el ID del departamento </span>`<span class="editor-theme-code">2</span>`<span style="white-space: pre-wrap;"> en los argumentos de la función. Después de crear la conversación, esta se abre con la función </span>`<span class="editor-theme-code">SBChat.openConversation()</span>`. En el fragmento de código a continuación, la conversación se crea solo si el usuario no tiene otras conversaciones.

```javascript
$(document).on("SBInit", function () {
    if (SBF.activeUser() != false && SBF.activeUser().conversations.length == 0) {
        // ID de departamento es el primer argumento (2)
        SBChat.newConversation(2, -1, "", [ ], 2, null, function (conversation) {
            SBChat.openConversation(conversation.id);
        });
    }
});
```

---

## 🕵️ Crear conversación y asignar agente

Este caso de uso explica cómo crear una nueva conversación, asignarle un agente existente y permitir que solo ese agente vea la conversación en el área de administración.

**1. Habilitar el enrutamiento**<span style="white-space: pre-wrap;"> Vaya a </span>`<span class="editor-theme-code">Configuración > Misceláneas</span>`<span style="white-space: pre-wrap;">, marque la opción </span>**Enrutamiento**<span style="white-space: pre-wrap;"> y guarde.</span>

**2. Crear una nueva conversación y abrirla**<span style="white-space: pre-wrap;"> Cree una nueva conversación con la función </span>`<span class="editor-theme-code">SBChat.newConversation()</span>`<span style="white-space: pre-wrap;"> de la </span>**API de JavaScript**<span style="white-space: pre-wrap;"> y pase el ID del agente </span>`<span class="editor-theme-code">445</span>`<span style="white-space: pre-wrap;"> en los argumentos de la función. Después de crear la conversación, esta se abre con la función </span>`<span class="editor-theme-code">SBChat.openConversation()</span>`.

```javascript
$(document).on("SBInit", function () {
    if (SBF.activeUser() != false && SBF.activeUser().conversations.length == 0) {
        // ID de agente es el sexto argumento (445)
        SBChat.newConversation(2, -1, "", [], null, 445, function (conversation) {
            SBChat.openConversation(conversation.id);
        });
    }
});
```

---

## 📌 Forzar una conversación específica

Este caso de uso explica cómo establecer una conversación específica cuando se cumple una condición y obliga al usuario a utilizar únicamente dicha conversación mientras la condición siga siendo válida.

El siguiente código utiliza el título de la conversación para identificar cuál es la conversación correcta a utilizar: busca la conversación específica usando su título y, si la encuentra, la abre; de lo contrario, crea una nueva conversación con el título buscado. Este caso de uso se puede utilizar en diferentes escenarios, por ejemplo, si desea obligar al usuario a utilizar una conversación diferente para distintas páginas.

**1. Inserte este código JavaScript en su sitio web**

```javascript
(function ($) {
    jQuery(document).on("SBInit", function () {
        let conversation_title = "CONVERSATION-NAME";
        let conversations = SBF.activeUser().conversations;
        if (conversations) {
            for (var i = 0; i < conversations.length; i++) {
                if (conversations[i].get("title") == conversation_title) {
                    SBChat.openConversation(conversations[i].id);
                    return;
                }
            }
        }
        SBF.ajax({
            function: "new-conversation",
            title: conversation_title
        }, (response) => {
            SBChat.setConversation(new SBConversation([], response["details"]));
        });
    });
}(jQuery));
```

---

## 🏢 Forzar un departamento específico

<span style="white-space: pre-wrap;">Busca una conversación con el departamento deseado, si la encuentra la abre, si no, crea una nueva. Reemplace </span>`<span class="editor-theme-code">YOUR-DEPARTMENT-ID</span>`<span style="white-space: pre-wrap;"> con el ID del departamento.</span>

```javascript
(function ($) {
    jQuery(document).on("SBInit", function () {
        let active_department = "YOUR-DEPARTMENT-ID";
        let conversations = SBF.activeUser().conversations;
        SBChat.default_department = active_department;
        
        if (conversations) {
            for (var i = 0; i < conversations.length; i++) {
                if (conversations[i].get("department") == active_department) {
                    setTimeout(() => { SBChat.openConversation(conversations[i].id) }, 300);
                    return;
                }
            }
        }
        SBChat.open(false);
        SBF.ajax({
            function: "new-conversation",
            department: active_department
        }, (response) => {
            SBChat.setConversation(new SBConversation([], response["details"]));
        });
    });
}(jQuery));
```

---

## 🕵️ Forzar un agente específico

<span style="white-space: pre-wrap;">Busca una conversación con el agente deseado (definido en </span>`<span class="editor-theme-code">SB_DEFAULT_AGENT</span>`), si la encuentra la abre, si no, crea una nueva.

**1. Insertar el código JavaScript**<span style="white-space: pre-wrap;"> En cada página, inserte </span>`<span class="editor-theme-code"><script>var SB_DEFAULT_AGENT = 123</script></span>`<span style="white-space: pre-wrap;"> cambiando 123 por el ID del agente.</span>

```javascript
(function ($) {
    if (typeof SB_DEFAULT_AGENT != 'undefined') {
         jQuery(document).on("SBInit", function () {
            if (!SBF.activeUser()) return;
            let conversations = SBF.activeUser().conversations;
            if (conversations) {
                for (var i = 0; i < conversations.length; i++) {
                    if (conversations[i].get("agent_id") == SB_DEFAULT_AGENT) {
                        setTimeout(() => { SBChat.openConversation(conversations[i].id) }, 300);
                        return;
                    }
                }
            }
            $('.sb-list').sbLoading(true);
            SBChat.open(false);
            SBF.ajax({
                function: "new-conversation",
                agent_id: SB_DEFAULT_AGENT
            }, (response) => {
                SBChat.clear();
                $('.sb-list').sbLoading(false);
                SBChat.setConversation(new SBConversation([], response["details"]));
            });
        });
    }
}(jQuery));
```

---

## 📨 Enviar mensaje y abrir chat

Este caso de uso explica cómo enviar un nuevo mensaje y abrir el chat después de que el mensaje haya sido enviado.

**1. Enviar el mensaje y abrir el chat**<span style="white-space: pre-wrap;"> Verifique si el mismo mensaje ya existe en la conversación con el método </span>`<span class="editor-theme-code">searchMessages()</span>`<span style="white-space: pre-wrap;"> de la </span>**API de JavaScript**<span style="white-space: pre-wrap;">. Si el mensaje no está en la conversación, envíe un nuevo mensaje con la función </span>`<span class="editor-theme-code">SBChat.sendMessage()</span>`<span style="white-space: pre-wrap;">. Después de enviar el mensaje, abra la conversación con la función </span>`<span class="editor-theme-code">SBChat.openConversation()</span>`<span style="white-space: pre-wrap;">, verifique si el chat está abierto y, si no lo está, ábralo con la función </span>`<span class="editor-theme-code">SBChat.open()</span>`.

```javascript
$(document).on("SBInit", function () {
    let message = "¿Desea comprar el producto de esta página?";
    if (SBChat.conversation == false || SBChat.conversation.searchMessages(message).length == 0) {
        SBChat.sendMessage(SBF.setting("bot-id"), message, [], function (response) {
            SBChat.openConversation(response["conversation_id"]);
            if (!SBChat.chat_open) {
                SBChat.open();
            }
        });
    }
});
```

## 📜 Mostrar pop-up al hacer scroll

Este caso de uso explica cómo mostrar un mensaje emergente (pop-up) cuando el usuario desplaza la página hasta cierta posición; en este ejemplo, cuando el desplazamiento de la página alcanza los 500 px.

**1. Comprobar el desplazamiento de la página y mostrar el pop-up**<span style="white-space: pre-wrap;"> Verifique el desplazamiento de la página mediante JavaScript y muestre el pop-up con la función </span>`<span class="editor-theme-code">popup()</span>`<span style="white-space: pre-wrap;"> de la </span>**API de JavaScript**.🎨 Mostrar chat en admin de WordPress

Muestra el chat dentro del área de administración de WordPress e identifica automáticamente al usuario conectado.

**1. Editar `<strong class="editor-theme-bold editor-theme-code">functions.php</strong>`**<span style="white-space: pre-wrap;"> Agregue el siguiente código al final del archivo </span>`<span class="editor-theme-code">functions.php</span>`<span style="white-space: pre-wrap;"> de su tema.</span>

```php
$(document).on("SBInit", function () {
    var showed = false;
    $(window).scroll(function () {
        var scroll = $(window).scrollTop();
        if (scroll > 500 && !showed) {
            SBChat.popup(false, { title: "You reached 500 px!", message: "Insert here your message." });
            showed = true;
        }
    });
});
```

<span style="white-space: pre-wrap;">Si tiene configurado un dominio de cookie, añada </span>`<span class="editor-theme-code">domain=SU-VALOR</span>`<span style="white-space: pre-wrap;"> a la cadena de la cookie.</span>