# 🤖 Guía Completa de ZampiBot

# 📝 Manual de Usuario

<div id="bkmrk-">  
</div>### **🚀 Instalación y Requisitos**

Para integrar el chat, acceda a [https://chatbot.zampisoft.com/account/?tab=installation](https://chatbot.zampisoft.com/account/?tab=installation), copie el código de inserción y péguelo dentro de las etiquetas `<head></head>` o `<footer></footer>` de cada página donde desee mostrar el chat.

**Ejemplo de implementación:**

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

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/8mwlu6t3tNJk7rhD-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/8mwlu6t3tNJk7rhD-image.png)

<div id="bkmrk--3">---

</div><details id="bkmrk-%23users-info-%C2%A0"><summary>\#users-info</summary>

</details>### **Configuración óptima**

ZampiBot es una herramienta potente, pero su gran cantidad de funciones puede dificultar su configuración rápida. Para agilizar el proceso, proporcionamos una lista de las funciones más utilizadas que recomendamos configurar. Al incorporar todas estas funciones, tendrá acceso a las más esenciales y beneficiosas.

1. Activar notificaciones por correo electrónico desde **Configuración &gt; Notificaciones** Asegúrese de activar las siguientes opciones: **Notificaciones por correo electrónico del agente**, **Administrador de sonidos &gt; Conversaciones y mensajes entrantes**, y **Notificaciones push.** Para obtener más información sobre cómo funcionan las notificaciones. [![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/9klLtMWVjIxDlgSU-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/9klLtMWVjIxDlgSU-image.png)
2. Configurar el servidor SMTP en **Configuración &gt; Notificaciones &gt; SMTP** Para más detalles, consulta la sección de <a class="scroll-to">notificaciones por correo electrónico</a> . Si usas la [versión en la nube](https://zampibotpage.zampisoft.com/docs/#cloud-version) , el SMTP ya está activado, pero puedes usar el tuyo de todas formas. [![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/ESBvGLTgs5Y5eVgl-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/ESBvGLTgs5Y5eVgl-image.png)
3. Navega a **Configuración &gt; Mensajes y formularios** y configura el [mensaje de seguimiento](https://zampibotpage.zampisoft.com/docs/#follow-up-message) y [el mensaje fuera de línea](https://zampibotpage.zampisoft.com/docs/#offline-message). [![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/r4S6ZUZMvdAJLhNa-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/r4S6ZUZMvdAJLhNa-image.png)
4. Pusher ya está activado.
5. Optimizar el [rendimiento](https://zampibotpage.zampisoft.com/docs/#performance) del sistema .
6. En caso de que estés utilizando el chatbot, asegúrate de consultar la configuración óptima [aquí](https://zampibotpage.zampisoft.com/docs/#optimal-configuration-ai) .
7. Si tiene dificultades para sincronizar servicios como Google o WhatsApp, nuestro equipo puede ayudarle a configurarlos. Al usar sus cuentas personales, como las de **Google** o **Facebook**, podrá disfrutar de créditos y cuotas gratuitas, y c**ostos significativamente más bajos** que con otros servicios de chat. Además, tendrá control total y transparencia sobre sus datos y gastos.

---

#### ¿Tienes problemas?

Si tiene algún problema, contacte con nuestro equipo de soporte a través del chat a la derecha de esta página. Antes de contactarnos, asegúrese de que su servidor cumpla con todos los requisitos mencionados anteriormente.

#### 403 Forbidden Error

El error 403 Prohibido es estrictamente un problema del servidor relacionado con los permisos de archivo o una regla de firewall que bloquea el acceso al recurso. No podemos ayudarle porque no está relacionado con nuestro producto. Envíe este mensaje y la URL del recurso bloqueado al soporte técnico de su servidor para que resuelvan el problema. A continuación, encontrará las causas más comunes del error 403 Prohibido.

- **Complemento de WordPress**— Si está utilizando la versión de WordPress, asegúrese de no tener ningún complemento de seguridad que genere el problema.
- **Permisos de archivos**— Los permisos de archivo del recurso son incorrectos. Deberían ser 644 para archivos y 755 para carpetas.
- **Cortafuegos**El firewall de tu servidor está bloqueando el recurso. Puedes comprobarlo desactivándolo o usando una VPN.
- **ModSecurity**— El ModSecurity de tu servidor está bloqueando el recurso. Puedes comprobarlo desactivándolo o usando una VPN.
- **Cloudflare**— El firewall de Cloudflare está bloqueando el recurso. Puedes comprobarlo desactivándolo o usando una VPN. Puedes solucionar el problema abriendo la configuración de tu sitio web de Cloudflare y comprobando..

---

#### Bloquear el zoom en dispositivos iOS

Al usar el chat en iPhones, el área de texto se amplía automáticamente cuando el usuario comienza a escribir un mensaje nuevo. Para detener el zoom, introduzca el código a continuación.**&lt;head&gt;**área de todas las páginas que incluyen el chat.

```
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no" />
```

---

#### El widget de chat no se muestra

Es posible que el chat no se muestre debido a los siguientes motivos:

- Es posible que no veas el chat porque lo has desactivado en la configuración. Para solucionarlo, visita la sección de configuración y desmarca todas las opciones relacionadas: **Chat &gt; ​​Inicialización manual**,**Chat &gt; ​​Inicialización de inicio de sesión**,**Chat &gt; ​​Ocultar el chat fuera del horario de oficina**,**WordPress &gt; Inicialización manual**. [![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/JBb54OMB0mQoTe2X-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/JBb54OMB0mQoTe2X-image.png)
- Intenta deshabilitar cualquier complemento de rendimiento o técnicas como la caché o la minimización de JavaScript en tu sitio web, ya que podrían estar causando problemas. Una vez deshabilitados, vuelve a verificar.
- Intente deshabilitar cualquier CDN o proxy (por ejemplo, CloudFlare). Una vez deshabilitado, vuelva a verificar.

---

#### Las conversaciones no son visibles para los administradores o agentes.

Es posible que las conversaciones no se muestren debido a los siguientes motivos.

<div class="label label-docs" id="bkmrk-al-agente-se-le-ha-a">1. Al agente se le ha asignado un [departamento](https://zampibotpage.zampisoft.com/docs/#departments) , pero las conversaciones no se han asignado a ese departamento específico.
2. Se han activado una o más de las siguientes configuraciones: 
    - **Misceláneas &gt; Enrutamiento**
    - **Misceláneas &gt; Cola**
    - **Misceláneas &gt; Ocultar conversaciones de otros agentes**
3. Estás utilizando el chatbot y la función [de toma de control humana](https://zampibotpage.zampisoft.com/docs/#human-takeover) está activada. [![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/AhVuz3UZC8WxfoSC-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/AhVuz3UZC8WxfoSC-image.png)

</div>Para los casos 1 y 2, asegúrese de iniciar sesión con el administrador/agente correcto o revise su perfil para comprobar que no haya [departamentos](https://zampibotpage.zampisoft.com/docs/#departments) asignados. En el caso 3, revise las conversaciones archivadas.

---

## **CONVERSACIONES**

### **Gestionar conversaciones**

Las conversaciones tienen un total de cuatro estados diferentes: **marcar como leído**, **archivo**, **borrar** y **restaurar.** Puedes administrar el estado de una conversación abriéndola en el área de conversaciones y luego haciendo clic en cualquiera de los botones de ícono correspondientes en la parte superior derecha de la ventana de conversación.

#### Buscar conversaciones

Puede buscar conversaciones por ID de departamento, ID de agente asignado, título de la conversación, ID de la conversación, texto del mensaje, nombre de los archivos adjuntos, nombre del usuario, apellido del usuario y correo electrónico del usuario. Si busca un texto de mensaje específico, la conversación que lo contiene se mostrará en la posición correcta y se resaltará.

#### Información

- Cuando se vacía la papelera, todas las conversaciones en la papelera se eliminan de forma permanente.
- Cuando un usuario envía un mensaje nuevo a una conversación archivada o eliminada, la conversación se restaura automáticamente y ahora será visible en la **bandeja de entrada**.
- Las conversaciones eliminadas se eliminan automáticamente después de 30 días.
- Cuando se elimina un usuario, todas las conversaciones y mensajes también se eliminan de forma permanente.
- Un agente puede eliminar sus mensajes abriendo el menú de mensajes y haciendo clic **Borrar.** El menú del mensaje se hace visible cuando pasa el cursor del mouse sobre el mensaje.
- La lista de conversaciones de la izquierda utiliza paginación automática, que está limitada a 100 resultados por desplazamiento.

---

#### Responder a un mensaje

Puedes responder a un mensaje abriendo el menú del mensaje y haciendo clic en **Responder a.** La función de respuesta solo es compatible con los siguientes servicios de mensajería:**WhatsApp**, **Telegrama**,**Facebook Messenger**.


---

### **Funciones editor de texto y mensajes automatizado**

El editor de texto del área de administración y los mensajes automatizados (ejemplo: mensajes de bienvenida y suscripción) se pueden utilizar para crear mensajes estilizados:

1. Formato de enlacesTodos los enlaces de texto se convierten automáticamente en hipervínculos clicables. Para establecer el nombre del enlace, añada la siguiente cadena a la URL:**\#sb-ejemplo**. Reemplazar **ejemplo** con el nombre del enlace deseado y espacios en blanco con**--**.
2. Formato de textoEl editor también admite la sintaxis de formato de texto: 
    1. 1. - **Negrita:**`*texto*`
            - **Cursiva:**`__texto__`
            - **Tachado:**`~texto~`
            - **Código:**``texto``
            - **Bloque de código:**````texto````

- HTML y otros lenguajes de programación: por razones de seguridad, no se permite HTML, JavaScript (JS) ni otros lenguajes de programación. Sin embargo, puede usar fragmentos de HTML mediante mensajes enriquecidos personalizados (que se explican más adelante).
- Para insertar un salto de línea en un mensaje, utilice la combinación de teclado **MAYÚS + ENTER** o **CTRL + ENTER**.

---

#### Fusionar campos 

Los campos de combinación son cadenas que se reemplazan por valores externos cuando se usan. Pueden usarse en cualquier mensaje o mensaje automatizado, incluidos los mensajes de chatbot.

<div id="bkmrk-c%C3%B3digo-descripci%C3%B3n-%7B"><table class="table table-bordered" style="width:100%;"><thead><tr><th style="width:27.0672%;">Código</th><th style="width:72.8289%;">Descripción</th></tr></thead><tbody><tr><td style="width:27.0672%;">```
{user_name}
```

</td><td style="width:72.8289%;">Nombre completo del usuario activo.</td></tr><tr><td style="width:27.0672%;">```
{user_email}
```

</td><td style="width:72.8289%;">Correo electrónico del usuario activo.</td></tr><tr><td style="width:27.0672%;">```
{agent_name}
```

</td><td style="width:72.8289%;">Nombre completo del agente activo.</td></tr><tr><td style="width:27.0672%;">```
{agent_email}
```

</td><td style="width:72.8289%;">Correo electrónico del agente activo.</td></tr></tbody></table>

---

</div>### **Mensajes enriquecidos**

Los mensajes enriquecidos son mensajes especiales con funciones interactivas como botones, menús desplegables o entradas. Permiten que un agente solicite información al usuario mediante un formulario de entrada o muestre contenido interactivo. Se pueden insertar en un mensaje de chat mediante códigos cortos. Estos códigos aceptan diversos parámetros, como el título y la descripción. Los mensajes enriquecidos disponibles se enumeran a continuación.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/tLLurENrmU7QTOwc-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/tLLurENrmU7QTOwc-image.png)

---

<table class="table table-bordered" id="bkmrk-nombre-c%C3%B3digo-corto-"><thead><tr><td style="width:12.3902%;">**Nombre**</td><td style="width:49.6756%;">**Código Corto (Shortcode)**</td><td style="width:37.9233%;">**Descripción**</td></tr></thead><tbody><tr><td style="width:12.3902%;">**Email**</td><td style="width:49.6756%;">`[email name="true" last-name="true" phone="true" placeholder=""]`</td><td style="width:37.9233%;">Formulario para recopilar correo y teléfono.</td></tr></tbody></table>

⚠️ Notas Importantes

<div id="bkmrk--16">---

</div>#### Parámetros globales

Todos los mensajes enriquecidos admiten los siguientes parámetros:

<div id="bkmrk-parameters-descripti">---

<table class="table table-bordered"><thead><tr><th class="align-center" style="width:19.9465%;">Parameters</th><th style="width:80.0408%;">Description</th></tr></thead><tbody><tr><td style="width:19.9465%;">```
id="123"
```

</td><td style="width:80.0408%;">El ID del mensaje enriquecido (utilizado también para guardar los datos JSON).</td></tr><tr><td style="width:19.9465%;">```
title="ABC"
```

</td><td style="width:80.0408%;">El título del mensaje enriquecido.</td></tr><tr><td style="width:19.9465%;">```
message="ABC"
```

</td><td style="width:80.0408%;">La descripción enriquecida del mensaje que aparece debajo del título.</td></tr><tr><td style="width:19.9465%;">```
success="ABC"
```

</td><td style="width:80.0408%;">El mensaje que aparece cuando el usuario completa y envía el mensaje enriquecido. La entrada del usuario se adjunta a este mensaje.</td></tr><tr><td style="width:19.9465%;">```
settings="ABC"
```

</td><td style="width:80.0408%;">Campo adicional para valores extra opcionales.</td></tr></tbody></table>

---

</div>
#### Utilice mensajes enriquecidos en el chatbot

Debes crear un [chatbot de Dialogflow](https://zampibotpage.zampisoft.com/docs/#dialogflow-bot) y luego simplemente ingresar el código corto del mensaje enriquecido en el **respuesta de texto** del **Intención**.

---

#### Respuesta de mensaje enriquecido

Cuando un usuario completa un mensaje enriquecido, los datos de respuesta se guardan en formato JSON en la base de datos en la tabla **mensajes\_sb** y columna**carga útil**. Ejemplo:

```c#
{"rich-messages":{"4Voyu":{"type":"email","result":{"email":["example@email.com","Your email..."]}}}}
```

<div id="bkmrk--18">---

</div>#### Traducciones de mensajes enriquecidos

Para traducir una cadena de mensaje enriquecido, el texto original del mensaje enriquecido debe estar en inglés; agregue el texto exacto en inglés y sus traducciones en **Configuración &gt; Traducciones &gt; Interfaz.**

---

#### Mostrar un mensaje enriquecido al inicializar el chat

Para mostrar un mensaje enriquecido, como una lista de botones, cuando un usuario inicia un chat por primera vez, inserte el código corto del mensaje enriquecido en el [mensaje de bienvenida](https://zampibotpage.zampisoft.com/docs/#welcome-message) .

---

#### Mensajes enriquecidos personalizados

Puede crear mensajes enriquecidos personalizados con su propio contenido personalizado yendo a **Configuración &gt; Varios**Actualmente, los mensajes enriquecidos personalizados son estáticos y no ofrecen opciones interactivas como los códigos cortos. Sin embargo, puedes insertar códigos HTML personalizados.

---

#### Códigos HTML

Al crear un mensaje enriquecido personalizado, puede utilizar los siguientes códigos:

<div id="bkmrk-code-description-%3Ca-"><table class="table table-bordered" style="width:102.619%;"><thead><tr><th style="width:88.8098%;">Code</th><th style="width:11.2055%;">Description</th></tr></thead><tbody><tr><td style="width:88.8098%;">```
<a href="https://www.google.com" target="_blank" class="sb-rich-btn sb-btn">Click here</a> 
```

</td><td style="width:11.2055%;">Link with button design.</td></tr><tr><td style="width:88.8098%;">```
<a href="https://www.google.com" target="_blank" class="sb-rich-btn sb-btn-text">Click here</a> 
```

</td><td style="width:11.2055%;">Link.</td></tr><tr><td style="width:88.8098%;">```
<div class="sb-image"><img src="https://via.placeholder.com/1500x600" class="sb-image" /></div> 
```

</td><td style="width:11.2055%;">Image that zoom on click.</td></tr></tbody></table>

---

</div><details id="bkmrk-%23welcome-message-%C2%A0"><summary>\#welcome-message</summary>

</details>### **Mensajes integrados**

Los mensajes integrados son mensajes preprogramados que envía automáticamente en ZampiBot. Puedes encontrarlos en **Configuración &gt; Mensajes**.

#### Mensaje de bienvenida

Envía un mensaje a los nuevos usuarios cuando visitan el sitio web por primera vez.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/IrsYoK0gCTqS6wnC-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/IrsYoK0gCTqS6wnC-image.png)

- Se admite [el formato de texto .](https://board.support/docs/#text-editor)
- Se admiten [campos de combinación .](https://board.support/docs/#merge-fields)
- Se admiten [mensajes enriquecidos .](https://board.support/docs/#rich-messages)
- El mensaje de bienvenida no se envía a Slack.
- Las conversaciones que contienen sólo el mensaje de bienvenida (y ninguna respuesta) se archivan automáticamente.

---

<details id="bkmrk-%23follow-up-message-%C2%A0"><summary>\#follow-up-message</summary>

</details>#### Mensaje de seguimiento

Si ningún agente responde dentro del intervalo de tiempo especificado, se enviará un mensaje para solicitar los detalles del usuario, como su correo electrónico.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/9DgJgpUpMZwbMSG2-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/9DgJgpUpMZwbMSG2-image.png)

- Se admite [el formato de texto .](https://board.support/docs/#text-editor)
- Se admiten [campos de combinación .](https://board.support/docs/#merge-fields)
- Puede enviar un correo electrónico de confirmación al usuario completando el formulario **Correo electrónico de seguimiento** campos. El correo electrónico utiliza la plantilla definida en **Configuración &gt; Notificaciones &gt; Plantilla de correo electrónico**.
- Si la **demora** no está configurado, se utiliza un intervalo de tiempo dinámico y se determina de la siguiente manera: Si **Configuración &gt; Varios &gt; Horario de oficina.** Si está configurado y la hora actual coincide con el horario de oficina definido, o si al menos un agente está conectado, el retraso se establecerá en 15 segundos. En todos los demás casos, el retraso se establecerá en 5 segundos.
- Los mensajes de seguimiento se envían un máximo de una vez cada 24 horas.
- Si el usuario proporciona una dirección de correo electrónico y la función [de boletín informativo](https://board.support/docs/#newsletter) está habilitada, se suscribirá a la dirección de correo electrónico.
- El mensaje de seguimiento se envía solo a usuarios sin dirección de correo electrónico.
- [Si la función de toma de control humana](https://board.support/docs/#human-takeover) del chatbot está activada, el mensaje de seguimiento solo se envía durante la toma de control humana.

---

<details id="bkmrk-%23rating-%C2%A0"><summary>\#rating</summary>

</details>#### Calificación

Muestra el formulario de comentarios para calificar la conversación cuando esté archivada.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/tq36Y3Bva1H7jDFI-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/tq36Y3Bva1H7jDFI-image.png)

- El mensaje de calificación es compatible con los canales de mensajería. Los botones de calificación no se muestran en los canales de mensajería. Sin embargo, si se configuran Inteligencia Artificial y OpenAI, se analizará la respuesta del usuario para extraer la calificación.
- La calificación es visible en el panel derecho de la área de conversaciones, la calificaciones de los agentes se muestra en la área de informe y en el perfil del agente.
- Habilite el recordatorio de correo electrónico de calificación configurando el retraso (en horas). En el opción **Retraso en el recordatorio por correo electrónico** . El correo electrónico recuerda al usuario que debe proporcionar comentarios y se envía solo si no ha calificado la conversación después del tiempo establecido. Para que esta función funcione, también debe configurar la opción **URL de redirección** — Ingrese cualquier URL que incluya el widget de chat (por ejemplo, la URL de su sitio web). Una vez que el usuario haga clic en el widget **Útil** o **No es útil**Al acceder al enlace del correo electrónico, se redirigirá a la URL de redireccionamiento especificada y la calificación se guardará automáticamente. Se abrirá el chat con el panel de calificación, que permite al usuario proporcionar comentarios adicionales.
- Los correos electrónicos se envían a través de los [trabajos cron](https://board.support/docs/#cron-jobs) .

---

<details id="bkmrk-%23offline-message-%C2%A0"><summary>\#offline-message</summary>

</details>#### Mensaje fuera de línea

Notificar al usuario cuando su mensaje se envía fuera del horario de oficina programado o todos los agentes están fuera de línea.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/NhR8z6hllH6Eoktz-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/NhR8z6hllH6Eoktz-image.png)

- Se admite [el formato de texto .](https://board.support/docs/#text-editor)
- Se admiten [campos de combinación .](https://board.support/docs/#merge-fields)
- Para conocer más sobre la opción de horario de oficina, haga clic [aquí](https://board.support/docs/#office-hours) .
- El mensaje sin conexión se envía al mismo usuario máximo 1 vez por hora.
- De forma predeterminada, el mensaje de desconexión también se envía si todos los agentes están desconectados, incluso en horario de oficina. Para evitarlo, active la opción **Deshabilitar la verificación de agentes**.
- [Si la función de toma de control humana](https://board.support/docs/#human-takeover) del chatbot está activada, el mensaje sin conexión solo se envía durante la toma de control humana.
- Si usted o cualquier otro agente está en línea usando [Slack](https://board.support/docs/#slack) , ZampiBot también lo considerará como agente en línea.

---

<details id="bkmrk-%23privacy-message-%C2%A0"><summary>\#privacy-message</summary>

</details>#### Mensaje de privacidad

Presenta un mensaje de privacidad con los botones "Aceptar" y "Rechazar". Se requiere la aprobación del usuario al hacer clic en el botón "Aceptar" para comenzar a usar el chat. Esta función garantiza el cumplimiento de la política de privacidad y el RGPD.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/bfPLx7jIclYVN3jw-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/bfPLx7jIclYVN3jw-image.png)

- El mensaje de privacidad no se muestra si la opción **Configuración &gt; Usuarios &gt; Requerir registro** está habilitada.
- El mensaje de privacidad también se envía a canales de mensajería como WhatsApp, pero el usuario no puede aceptar o rechazar la política de privacidad. Las funciones de mensajería tampoco se bloquean. El mensaje se envía después de que el usuario inicie la conversación enviando su primer mensaje.

---

<details id="bkmrk-%23pop-up-message-%C2%A0"><summary>\#pop-up-message</summary>

</details>#### Mensaje emergente

Mostrar una notificación emergente a todos los usuarios.

- El mensaje emergente siempre se muestra hasta que el usuario lo cierra manualmente; luego permanece cerrado.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-02/scaled-1680-/88HoyOg6ULOVBtYg-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-02/88HoyOg6ULOVBtYg-image.png)

---

#### Archivos adjuntos

Aquí podrás acceder a información sobre la carga de archivos y los adjuntos de los mensajes.

- Los siguientes formatos de imagen se muestran automáticamente:**.jpg, .jpeg, .png**.
- Para obtener instrucciones sobre cómo enviar archivos adjuntos con un chatbot, haga clic [aquí](https://board.support/docs/#dialogflow-info) .

---

### ***Información***

Aquí puede acceder a información sobre una variedad de funciones asociadas con las conversaciones.

<details id="bkmrk-%23tags-%C2%A0"><summary>\#tags</summary>

</details>#### Etiquetas

Las etiquetas permiten una organización y agrupación más eficiente de las conversaciones. Consulte la información a continuación para obtener más detalles.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/6r2IHdZcMjOyaSlD-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/6r2IHdZcMjOyaSlD-image.png)

- Puedes administrar las etiquetas desde **Configuración &gt; Administrador &gt; Etiquetas**.
- Las etiquetas se pueden asignar a las conversaciones a través de diferentes métodos: a través del área de administración navegando a **Configuración &gt; Automatizaciones &gt; Más**, a través de [acciones de Dialogflow](https://board.support/docs/#dialogflow-actions) y insertando la variable de JS **SB\_DEFAULT\_TAGS** en una página que muestre el chat o en una página web que muestre el chat o el panel de tickets.
- Para encontrar conversaciones con etiquetas específicas, simplemente introduzca los nombres de las etiquetas en la barra de búsqueda ubicada en la esquina superior izquierda del área de conversaciones de administración, o puede seleccionar la etiqueta deseada en el menú de filtros dedicado en la esquina superior izquierda. El filtro de etiquetas solo es visible si hay al menos una etiqueta asignada a una conversación.
- Comprueba la opción **Etiqueta destacada** para mostrar el icono de la etiqueta destacada en el área de conversaciones. Esto permite seleccionar las conversaciones asignadas a la primera etiqueta con un solo clic. La primera etiqueta en la parte superior siempre es la etiqueta destacada.
- Puedes desactivar las etiquetas desde **Configuración &gt; Administrador &gt; Deshabilitar funciones &gt; Etiquetas**.

<details id="bkmrk-%23notes-%C2%A0"><summary>\#notes</summary>

</details>#### Notas

Las notas permiten a los agentes y administradores agregar comentarios a las conversaciones.

- Las notas solo son visibles para agentes y administradores.
- Si está utilizando OpenAI, le sugerimos habilitar la opción [de extracción de datos de notas](https://board.support/docs/#open-ai-settings) .
- Administrar la configuración de notas desde **Configuración &gt; Administración&gt; Configuración de notas**.[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/90tl1JOMxFFLDts4-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/90tl1JOMxFFLDts4-image.png)
- Puedes desactivar las etiquetas desde **Configuración &gt; Administrador &gt; Deshabilitar funciones &gt; Notas**.
- Activa funciones avanzadas de IA con la app de Inteligencia Artificial. Más información [aquí](https://board.support/docs/#note-data-scraping) .

<details id="bkmrk-%23transcript-%C2%A0"><summary>\#transcript</summary>

</details>#### Transcripción

El agente o administrador puede enviar la conversación completa al usuario como un archivo de transcripción.

- Los agentes y administradores pueden enviar transcripciones de conversaciones a los usuarios haciendo clic en el botón **Transcripción** botón en la esquina superior derecha de la ventana de conversación del administrador.
- Los agentes y administradores pueden enviar automáticamente la transcripción al usuario cuando se archiva la conversación mediante el uso de **cerrar mensaje** disponible en**Configuración &gt; Mensajes y formularios &gt; Cerrar mensaje**.
- La transcripción se puede enviar al usuario sólo si el usuario tiene una dirección de correo electrónico.
- Si la conversación ha sido traducida, la transcripción también incluirá los mensajes traducidos.

#### Misceláneas

- El formato de fecha y hora se detecta automáticamente según la configuración de idioma del navegador.

---

## **USUARIOS**

### **Administrar usuarios**

Administrar usuarios desde el **Área de usuarios**en el menú izquierdo del área de administración.

##### ***Importar usuarios***

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/22BGy8dSVuOqvEwp-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/22BGy8dSVuOqvEwp-image.png)

Puedes importar usuarios desde **Configuración &gt; Usuarios &gt; Importar usuarios** Solo se admiten archivos CSV. Puede descargar un archivo CSV de ejemplo [aquí](https://board.support/docs/files/users.csv) . En el archivo de ejemplo, la primera fila es el encabezado y las columnas...**Altura** y **Color de pelo** ¿Se agregan campos de usuario personalizados desde? **Configuración &gt; Usuarios &gt; Campos personalizados**.

#### Buscar usuarios

Puede buscar usuarios por nombre, apellido, correo electrónico y campos personalizados.

#### Eliminar usuarios

Puedes eliminar un usuario abriendo la opción de **edición de usuario**y luego hacer clic **Eliminar usuario.** Para eliminar varios usuarios a la vez, seleccione los usuarios que desea eliminar de la tabla Usuarios y luego haga clic en la esquina superior derecha. **Eliminar icono**.

- Cuando se elimina un usuario, todas sus conversaciones y mensajes se eliminan automáticamente de forma permanente.
- Los archivos adjuntos de la conversación se eliminarán permanentemente. Si [AWS S3](https://zampibotpage.zampisoft.com/docs/#aws) está habilitado, también se eliminarán los archivos de AWS S3.
- Si un usuario de un usuario eliminado regresa al sitio web, se crea automáticamente un nuevo usuario.
- Los visitantes se eliminan automáticamente cada 24 horas.

#### Fusionar usuarios

Puede fusionar dos usuarios en una misma tabla de usuarios. Seleccione dos usuarios y haga clic en el botón **Fusionar usuarios** botón en la parte superior.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/f2fGHAcv9WzhYTIr-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/f2fGHAcv9WzhYTIr-image.png)

- Cuando se fusionan dos usuarios, todas sus conversaciones se combinan en la nueva cuenta de usuario.
- El sistema identifica y fusiona automáticamente la información relevante de ambos usuarios en la nueva cuenta.

<details id="bkmrk-%23user-table-extra-co"><summary>\#user-table-extra-columns</summary>

</details>#### Columnas adicionales de la tabla de usuarios

Para mostrar columnas adicionales en la tabla de usuario, vaya a **Configuración &gt; Administración&gt; Columnas adicionales de la tabla de Usuarios** y agregue las nuevas columnas. El valor de cada columna es el slug del detalle del usuario o del detalle adicional que desea mostrar. El slug está en minúsculas y los espacios se reemplazan por el carácter**-**Por ejemplo, el slug del detalle adicional de usuario "Fecha de nacimiento" es "fecha-de-nacimiento".

#### Tipos de usuarios

<table class="table table-bordered" id="bkmrk-tipo-descripci%C3%B3n-usu"><thead><tr><th style="width:16.8097%;">Tipo</th><th style="width:83.1795%;">Descripción</th></tr></thead><tbody><tr><td style="width:16.8097%;">```
usuario
```

</td><td style="width:83.1795%;">Un "usuario" es cualquier usuario con un correo electrónico.</td></tr><tr><td style="width:16.8097%;">```
Lead
```

</td><td style="width:83.1795%;">Un "lead" es cualquier usuario sin detalles de usuario, que se registra automáticamente y con al menos una conversación.</td></tr><tr><td style="width:16.8097%;">```
visitante
```

</td><td style="width:83.1795%;">Un "visitante" es cualquier usuario que no haya iniciado una conversación. Nota: Los visitantes se eliminan automáticamente cada 24 horas.</td></tr></tbody></table>

<details id="bkmrk-https%3A%2F%2Fdocs.zampiso"><summary>manual-de-usuario#agents</summary>

</details>### **Administrar agentes y administradores**

Administrar, crear y eliminar agentes y administradores desde **Área de usuarios**.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/eaNAKg4ojbuJduGz-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/eaNAKg4ojbuJduGz-image.png)

- Configurar los privilegios y permisos de los agentes desde **Configuración &gt; Administración &gt; Privilegios del agente**.
- Puede crear un supervisor a partir de **Configuración &gt; Administración&gt; Supervisor.** El supervisor es un agente especial con privilegios específicos y debe ser administrador. Puede agregar varios supervisores añadiendo ID de administrador separados por comas.
- Para crear un agente o administrador de anuncios, vaya a área de **usuarios** y haga clic en el botón **Agregar usuario e**n la parte superior derecha.
- Solo los agentes y administradores pueden iniciar sesión en el área de administración de ZampiBot.
- Cuando activa el complemento ZampiBot en WordPress, se crea automáticamente una cuenta de administrador utilizando el mismo nombre de usuario y contraseña que el usuario actualmente conectado.

---

### **Recopilar detalles del usuario**

Puede recopilar detalles del usuario, como su nombre y correo electrónico, a través de varios métodos:

- Con un formulario de pre-chat utilizando el [formulario de registro](https://zampibotpage.zampisoft.com/docs/#registration) .
- Con el mensaje [de seguimiento](https://zampibotpage.zampisoft.com/docs/#built-in-messages) .
- Con [flows](https://zampibotpage.zampisoft.com/docs/#open-ai-flows) en el chat .

---

<details id="bkmrk-%23registration-%C2%A0"><summary>\#registration</summary>

</details>### **Registro**

El **formulario de registro** es una herramienta previa al chat que requiere que el usuario ingrese información específica antes de iniciar la conversación. Es ideal para solicitar datos clave, como el nombre y el correo electrónico, asegurando que cada contacto esté debidamente identificado.

#### Configuración y Activación

Para gestionar las opciones de registro, diríjase a: `Configuración > Usuarios`

---

#### Funcionamiento del Formulario

- **Uso como Formulario Pre-Chat:** Puede limitar la información solicitada (por ejemplo, pedir solo el nombre de usuario o el email) configurando la opción **Requerir registro** en la modalidad **Formulario de inscripción** y habilitando los campos deseados en la lista de **Campos de registro**.
- **Visibilidad del Inicio de Sesión:** El formulario de inicio de sesión solo se mostrará si el campo de correo electrónico ha sido habilitado previamente en los ajustes.
- **Integración con WordPress:** El campo de contraseña se mostrará siempre de forma automática cuando el sistema de usuarios esté configurado para sincronizarse con **WordPress**.
- **Inicio de Sesión Automático:** El sistema permite que un usuario inicie sesión automáticamente mediante el uso de **parámetros de URL**, lo que agiliza la experiencia del cliente.
- [![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/5yK4idxZiwIzGydQ-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/5yK4idxZiwIzGydQ-image.png)

#### Gestión de Usuarios Existentes (OTP)

Si un usuario intenta registrarse utilizando un correo electrónico que ya se encuentra en su base de datos, Zampibot enviará automáticamente una **OTP** (Contraseña de un solo uso) a su email para permitirle autenticarse e iniciar sesión de forma segura.

> \[!NOTE\] En situaciones de uso real, los registros duplicados son poco frecuentes ya que los usuarios suelen permanecer conectados en el mismo dispositivo; esta función es especialmente útil para evitar conflictos durante las fases de prueba del sistema.

---

### **Información**

#### Contraseña (OTP)

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/ZVhNdVFNzmMF3Bkz-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/ZVhNdVFNzmMF3Bkz-image.png)

La función OTP verifica el correo electrónico del usuario durante el registro mediante el envío de un código de un solo uso a su dirección de correo electrónico. El usuario debe introducir este código en el formulario de registro. Habilítela desde **Configuración &gt; Usuarios &gt; Verificación de correo electrónico**, y personaliza el correo electrónico OTP desde **Configuración &gt; Usuarios &gt; Correo electrónico de verificación de correo electrónico.** El correo electrónico también utiliza la plantilla definida en **Configuración &gt; Notificaciones &gt; Plantilla de correo electrónico.** Tenga en cuenta que la OTP siempre se envía, incluso si la función está deshabilitada, cuando un usuario intenta registrarse con un correo electrónico ya registrado.


<details id="bkmrk-%23login-verification-"><summary>\#login-verification-url #login-link</summary>

</details>#### URL de verificación de inicio de sesión

La función de URL de verificación de inicio de sesión se puede encontrar en **Configuración &gt; Usuarios &gt; URL de verificación de inicio de sesión.** En ZampiBot esta función permite autenticar un inicio de sesión externo y registrar e iniciar sesión automáticamente al usuario. ZampiBot enviará una solicitud a la URL especificada, añadiendo la dirección de correo electrónico del usuario y la contraseña ingresada en el formulario de inicio de sesión del chat como parámetros de URL. Los parámetros se denominan****email** y **password**** Ejemplo:**https://ejemplo.com/login.php?email=ejemplo@mail.com&amp;contraseña=12345678.** La respuesta esperada de la URL debe ser un objeto JSON como el siguiente:

```c#
{ "first_name": "John", "last_name": "Doe", "email": "johon@example.com", "profile_image": "https://zampisoft.com/user.svg", "department": null, "password": "", "details": { "location": [ "Location", "New York, United States" ], "country_code": [ "Country code", "America/New_York" ] } }
```

> <p class="callout info">El valor **first\_name** es requerido.</p>

---

#### Enlace de inicio de sesión y contraseña olvidada

Si un usuario olvida su contraseña, puede hacer clic en **Has olvidado tu contraseña y s**e enviará un correo electrónico con un enlace de inicio de sesión a la dirección de correo electrónico registrada. Al hacer clic en el enlace, el usuario iniciará sesión automáticamente. Puede personalizar el correo electrónico que se envía a los usuarios desde **Configuración &gt; Usuarios &gt; Correo electrónico del enlace de inicio de sesión.** El correo electrónico utiliza la plantilla definida en **Configuración &gt; Notificaciones &gt; Plantilla de correo electrónico.** Esta función solo está disponible si en **Requerir registro** está configurado para **Formulario de registro e inicio de sesión** o **Formulario de inicio de sesión**.

<div id="bkmrk--48">---

</div>##### **Misceláneas**

<div id="bkmrk-los-nuevos-usuarios-">- Los nuevos usuarios se muestran automáticamente en la tabla de usuarios en tiempo real.
- Para ver usuarios en línea, habilite **Configuración &gt; Usuarios &gt; Registrar a todos los visitantes**. [![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/unSEBICb8zvczprb-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/unSEBICb8zvczprb-image.png)
- Si está utilizando la [versión en la nube](https://zampibotpage.zampisoft.com/docs/#cloud-version) , esta configuración se activa automáticamente) en **Configuración &gt; Usuarios &gt; Registrar a todos los visitantes**(activada por defecto). Esta función cubre todos los tipos de usuarios, incluyendo visitantes y clientes potenciales. Las notificaciones solo se envían una vez por usuario en un periodo de 24 horas.
- Los agentes y administradores pueden configurar su estado como en línea o fuera de línea desde el panel de perfil inferior izquierdo. Si la opción...**Configuración &gt; Notificaciones &gt; Modo Ausente.** Si está activo, el estado desconectado se activa automáticamente cuando el agente o administrador ha estado inactivo en el área de administración durante al menos 10 minutos. La inactividad se define como no realizar clics, movimientos ni pulsaciones de teclas. La función de desconexión automática no está habilitada en dispositivos móviles.
- La tabla de usuarios utiliza paginación automática, que está limitada a 100 resultados por desplazamiento.

</div>---

<details id="bkmrk-%23office-hours-%C2%A0"><summary>\#office-hours</summary>

</details>## **AJUSTES**

### **Horario de oficina**

Puede configurar el horario de oficina desde**Configuración &gt; Varios &gt; Horario de oficina** El horario de oficina se utiliza para:

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/Cadd9OT2TM5wrp3Q-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/Cadd9OT2TM5wrp3Q-image.png)

- Enviando el [mensaje fuera de línea](https://zampibotpage.zampisoft.com/docs/#offline-message) .
- Deshabilitar y ocultar el chat fuera del horario de oficina.
- Deshabilitar el chatbot durante el horario habitual de oficina y habilitarlo fuera del horario de oficina.

#### Más información

- Si un día solo tiene una hora de inicio y una hora de fin, introdúzcalas en los dos primeros campos. Por ejemplo, utilice **De 10:00 a 17:00 horas y de (vacío) a (vacío)**, no **10:00 AM a (vacío) y (vacío) a 5:00 PM**.
- No deje valores vacíos. Establézcalos en **cerrado** en cambio.
- Tienes que establecer valores para **cerrado.** Si desea establecer un día entero como no horario de oficina.
- El horario de oficina está en formato UTC. Establezca su UTC desde **Configuración &gt; Varios &gt; Zona horaria**.
- El formato de fecha y hora del horario coincide automáticamente con el utilizado en el país del idioma del navegador del usuario.

---

### **Artículos**

Los artículos de la base de conocimientos ofrecen respuestas instantáneas a los clientes para ayudar a reducir el volumen de atención al cliente. Puede acceder a los artículos desde el menú izquierdo de ZampiBot.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/kRDYKqeuuCmq3Lui-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/kRDYKqeuuCmq3Lui-image.png)

#### Cómo visualizar el área de artículos

- Los artículos se pueden mostrar en el panel de chat habilitándolos desde **Configuración &gt; Artículos &gt; Mostrar en el panel**.
- Alternativamente, los artículos se pueden compartir en cualquier conversación de chat a través del código corto de mensaje enriquecido. **\[articles\]**.

Sigue estos pasos para mostrar los artículos en una página de tu dominio y sitio web. Puedes mostrarlos de tres maneras:

#### Método API REST

Inserta el código a continuación en tu página. Reemplazar **\[URL DE ZAMPIBOT\]** con la URL de la instalación de su ZampiBot y**\[TU-TOKEN\]** con cualquier token de administrador. Si usa la [versión en la nube](https://board.support/docs/#cloud-version) , la URL es **[https://chatbot.zampisoft.com/script/include/api.php](https://chatbot.zampisoft.com/script/include/api.php).** Para obtener el token, haga clic [aquí](https://board.support/docs/#cloud-info) . Además, elimine los dos primeros scripts. Incluya la etiqueta **nojquery =&gt; true.** Si ya tienes jQuery incluido en tu página, incluye el atributo****nojs =&gt; true.**** Si ya tienes el código de inserción de chat incluido en tu página.

```c#
<div id="sb-articles"> <script src="[URL ZAMPIBOT]/js/min/jquery.min.js"></script> <script id="sbinit" src="[URL ZAMPIBOT]/js/main.js"></script> <?php $ch = curl_init('[URL ZAMPIBOT]/include/api.php?articles=true&' . (empty($_GET['category']) ? (empty($_GET['article_id']) ? (empty($_GET['search']) ? '' : '&search=' . urlencode($_GET['search'])) : '&article_id=' . $_GET['article_id']) : '&category=' . $_GET['category']) . (empty($_GET['lang']) ? '' : '&lang=' . $_GET['lang'])); $parameters = [ CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_USERAGENT => 'ZampiBot', CURLOPT_POST => true, CURLOPT_CONNECTTIMEOUT => 5, CURLOPT_POSTFIELDS => http_build_query([ 'token'=> '[YOUR-TOKEN]', 'function' => 'init-articles' ]) ]; curl_setopt_array($ch, $parameters); $response = curl_exec($ch); curl_close($ch); echo $response; ?> </div>
```

#### Método JAVA SCRIPT


Inserta el código a continuación en tu página. Este método no se recomienda para SEO, ya que los artículos se cargan de forma asincrónica y es posible que los motores de búsqueda no indexen la página.  Si está utilizando la [versión en la nube](https://board.support/docs/#cloud-version) , la URL [https://chatbot.zampisoft.com/script](https://chatbot.zampisoft.com/script)

```c#
<script src="[ZAMPIBOT-URL]/js/min/jquery.min.js"></script> <script id="sbinit" src="[ZAMPIBOT-URL]/js/main.js"></script> <script>var SB_ARTICLES_PAGE = true;</script> <div id="sb-articles" class="sb-loading"></div>
```

#### Navegación de una página

La navegación de una página del artículo aparece automáticamente en todos los artículos. Se genera a partir de la página del artículo. **h2** y **h3** bloques de encabezado.

<details id="bkmrk-%23articles-url-rewrit"><summary>\#articles-url-rewrite</summary>

</details>#### Reescritura de URL

Puede habilitar la reescritura de URL desde **Configuración Artículos &gt; Reescritura de URL.** Las URL predeterminadas de ZampiBot no son intuitivas e incluyen parámetros. Puedes reescribirlas mediante un archivo de **.htaccess**. El código a continuación reescribe las URL de las categorías y las páginas de artículos. La URL de las categorías cambia de **articles.php?categories=ID** a **articles/category/ID.** La URL del artículo cambia de**articles.php?article\_id=ID** a ****articles/ID****.

```html
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^articles?$ articles.php [L] RewriteRule ^articles/category/(.*)$/?$ articles.php?category=$1 [L,QSA] RewriteRule ^articles/(.*)$/?$ articles.php?article_id=$1 [L,QSA] </IfModule>
```

Cambiar **articles** con el nombre de su página de artículos y configure la URL de la página de artículos en: **Configuración &gt; Artículos &gt; URL de la página de artículos**.

---

<details id="bkmrk-%23article-language-%C2%A0"><summary>\#article-language</summary>

</details>#### Idioma

- Puedes agregar nuevas traducciones de artículos abriendo un artículo. Haz clic en el **+** en la esquina superior derecha y seleccione el idioma al que desea traducir el artículo. Para eliminar una traducción, pase el cursor sobre el icono de la bandera del idioma y haga clic en el icono de basura.
- Puede habilitar la traducción automática de artículos y categorías activando tanto la función [multilingüe mediante traducción como](https://zampibotpage.zampisoft.com/docs/#multilingual-via-translation) **Configuración &gt; Artículos &gt; Idioma &gt; Traducción automática.** También debes configurar el idioma predeterminado de tus artículos desde **Configuración &gt; Artículos &gt; Idioma &gt; Idioma predeterminado.** El idioma utilizado para la traducción automática es el idioma del usuario detectado por ZampiBot. También puedes forzar un idioma específico añadiendo el parámetro URL **lang=LANGUAGE-CODE**
- El menú de idiomas se muestra al final del artículo. Muestra todas las traducciones disponibles.
- Si hay al menos un artículo traducido al idioma del usuario, solo se mostrarán los artículos traducidos en la página de categorías o la página principal. De lo contrario, todos los artículos se mostrarán en el idioma original.
- Fuerza que la página de artículos se muestre en un idioma específico agregando el parámetro URL **lang=LANGUAGE-CODE.** Reemplazar****LANGUAGE-CODE**** con el código de idioma de dos letras.

##### More information

- Si utiliza categorías, todos los artículos deben asignarse a una categoría.
- Puedes crear un enlace de chat interno a un artículo con el [botón de mensaje enriquecido](https://zampibotpage.zampisoft.com/docs/#rich-messages) .
- Puede crear un enlace a un artículo específico con el atributo URL****article=ID****, reemplazar **ID** con el ID del artículo. Ejemplo: [https://zampibotpage.zampisoft.com/articles-demo?article=Ucsx6](https://zampibotpage.zampisoft.com/articles-demo?article=Ucsx6) .
- Puede crear un enlace a una categoría de artículo con el atributo URL****category=ID****, reemplazar **ID** con el ID de la categoría. Ejemplo: [https://zampibotpage.zampisoft.com/articles-demo?category=LnNaZ](https://zampibotpage.zampisoft.com/articles-demo?category=LnNaZ) .
- Los artículos siempre se incluyen en el entrenamiento de tu chatbot [de OpenAI](https://zampibotpage.zampisoft.com/docs/#open-ai) . Si actualizas un artículo, tendrás que volver a entrenar el chatbot; el proceso no es automático.
- Si algún bloque no se guarda, por ejemplo un bloque de texto, desactive todas las extensiones del navegador y vuelva a intentarlo.
- Para ocultar el widget de chat, inserte el siguiente código en la página de artículos: **&lt;script&gt;var SB\_DISABLED = true;&lt;/script&gt;**.

---

### **Idioma y traducciones**

ZampiBot es totalmente multilingüe y ofrece potentes funciones para detectar el idioma del usuario sobre la marcha.

#### Idioma del chat

ZampiBot ya está traducido a más de 45 idiomas. Hay muchas opciones disponibles para configurar el idioma:

- **OPCIÓN 1:** Ir a **Configuración &gt; Chat** y verificar el **Idioma**. Configúrelo en **plurilingüe** para utilizar automáticamente el idioma de chat del navegador del usuario o el idioma guardado en el perfil del usuario.[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/lg7GiyW6RiDIiINb-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/lg7GiyW6RiDIiINb-image.png)
- **OPCIÓN 2:** Agregar el parámetro URL **lang=LANGUAGE-CODE** Al script que carga el chat, reemplaza "CÓDIGO DE IDIOMA" con el código de idioma de dos letras que deseas mostrar.

Por ejemplo: **https://chatbot.zampisoft.com/account/js/init.js?id=123456&amp;lang=es**.  
Esta función obligará al chat a usar siempre el mismo idioma y **Configuración &gt; Chat &gt; ​​Idioma** ignorará esta opción. Visite [wikipedia.org/wiki/List\_of\_ISO\_639-1\_codes](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) para ver la lista completa de códigos de idiomas (véase la columna 639-1). Para chino tradicional **zt**, para uso en chino simplificado **zh**, para uso en portugués brasileño **pt.**

- **OPCIÓN 3 - SOLO WORDPRESS:** La versión de ZampiBot para WordPress usa el idioma predeterminado de la instalación de WordPress; o el idioma de la página o entrada actual si el sitio web es multilingüe. Esta función es compatible con WPML, Polylang y otros plugins multilingües. Esta función se desactiva automáticamente si en **Configuración &gt; Chat &gt; ​​Idioma** está activa.

<details id="bkmrk-manual-de-usuario%23mu"><summary>\#multilingual-admin</summary>

</details>#### Idioma de administración

Para traducir el área de administración siga los pasos a continuación:

- Traduce los textos en tu idioma desde el **Configuración &gt; Traducciones**.

Para configurar el idioma del área de administración siga los pasos a continuación:

- Activar la opción **Configuración &gt; Administración &gt; Traducir automáticamente el área de administración.** Esta función traduce automáticamente el área de administración para que coincida con el idioma del perfil del agente o el idioma del navegador del agente. [![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/wU7hn8D9TE79jJCT-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/wU7hn8D9TE79jJCT-image.png)

#### Chatbot y traducciones de mensajes

Para traducir automáticamente los mensajes del chatbot y otros textos, utilice la aplicación de Inteligencia Artificial y siga los pasos que se describen [aquí](https://zampibotpage.zampisoft.com/docs/#google-multilingual) .

#### Editar y agregar nuevas traducciones

Puedes traducir prácticamente cualquier contenido personalizado, como [mensajes enriquecidos](https://zampibotpage.zampisoft.com/docs/#rich-messages) , [mensajes integrados](https://zampibotpage.zampisoft.com/docs/#built-in-messages) , [departamentos](https://zampibotpage.zampisoft.com/docs/#departments) , encabezados de chat y más. Para añadir una nueva traducción o editar una existente, sigue estos pasos:

- Ir a **Configuración &gt; Traducciones**, si desea agregar una nueva traducción, haga clic en **Nueva traducción**. [![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/BvOgoXWGDD4Kw6VX-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/BvOgoXWGDD4Kw6VX-image.png)
- Ingrese el contenido en inglés que desea traducir en el primer campo. El texto original debe estar en inglés. Si el texto original tiene saltos de línea, reemplácelos con el codigo .**\\no**.
- Introduzca la traducción correspondiente en el segundo campo. Para añadir saltos de línea, utilice el código **\\n**.
- Si tienes la aplicación de inteligencia artificial también puedes traducir todos los contenidos a cualquier idioma automáticamente a través de la función [de traducción multilingüe](https://zampibotpage.zampisoft.com/docs/#multilingual-via-translation) .

#### Información

- Si falta una cadena de traducción, agréguela haciendo clic en el botón **Añadir nueva traducción**.
- Si una cadena de traducción no funciona, asegúrese de eliminar todos los espacios en blanco y los saltos de línea al principio y al final de la cadena.
- Las ediciones de las traducciones no se guardan en la base de datos, sino directamente en los archivos de traducción. Cuando se edita y se guarda una traducción, se crea una copia de seguridad. La copia de seguridad se restaura automáticamente al actualizar y activar el complemento.
- Algunos personajes especiales como **&amp;** se reemplazan por el código HTML equivalente (ver [https://www.w3schools.com/html/html\_entities.asp](https://www.w3schools.com/html/html_entities.asp) ). Ej.**&amp;** se reemplaza por **&amp;amp;**.
- También puedes agregar las cadenas de traducción faltantes mediante código. Edita los archivos de idioma ubicados en **tablero de soporte\\recursos\\idiomas.** Después de editar un archivo, las nuevas cadenas serán visibles en **Configuración &gt; Traducciones.** Recuerda hacer clic **Guardar cambios** para preservar sus traducciones y evitar perderlas cuando se actualice ZampiBot.

<div id="bkmrk--55">---

</div><details id="bkmrk-%23departments-%C2%A0"><summary>\#departments</summary>

</details>### **Departamentos**

Los departamentos le permiten distribuir conversaciones y asignar agentes a departamentos específicos. Por ejemplo, puede crear un departamento llamado "Ventas" y asignarle conversaciones específicas. Para empezar a usar los departamentos, siga estos pasos:

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/w0WO6OPt6dywXvvm-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/w0WO6OPt6dywXvvm-image.png)

- Ir a **Configuración &gt; Misceláneas** y añadir, eliminar y gestionar los departamentos. Después de guardar, recarga la página.
- Ir a **Usuarios &gt; Agentes** y editar un agente, verás un nuevo campo donde podrás configurar el departamento del agente.
- ¡Recarga la página y listo! En el **Área de conversaciones**  verá una opción para configurar el departamento.

#### Ajustes

- **El tablero** muestra la lista de departamentos en el panel de chat y obliga a los usuarios a elegir un departamento antes de iniciar una conversación.
- **En la opción mostrar imágenes** muestra la imagen del departamento en lugar del color del departamento.
- **Mostrar en la lista de conversaciones** muestra el color del departamento en la lista de conversaciones del área de administración.
- **La opción conversación por departamento** restringe que los usuarios abran múltiples conversaciones dentro del mismo departamento, permitiendo que solo una conversación esté activa por departamento.
- **La opción Etiqueta** reemplazar la etiqueta **Departamentos**(plural) con otro texto. El nombre se muestra en el área de administración y tickets.
- **Etiqueta única** reemplazar la etiqueta **Departamento**(singular)con otro texto. El nombre se muestra en el área de administración y tickets.
- **Título del tablero** establezca el título de la lista del panel de chat. Predeterminado: Departamentos.

#### Cómo funciona

- Los agentes y administradores sin un departamento asignado siempre ven las conversaciones de todos los departamentos.
- Los agentes y administradores con un departamento asignado solo pueden acceder a las conversaciones, usuarios y agentes dentro de ese departamento.
- Cuando una conversación se asigna a un nuevo departamento, se envía una notificación por correo electrónico a todos los agentes asignados al nuevo departamento.
- El chatbot puede asignar un departamento a la conversación activa a través de la función [de conjunto de datos de preguntas y respuestas](https://board.support/docs/#open-ai-qea) , la función [de acciones de flujos](https://board.support/docs/#open-ai-flows) o [las acciones de Dialogflow](https://board.support/docs/#dialogflow-actions) .

#### Cómo asignar un departamento a una conversación

Puedes asignar un departamento a una conversación de varias maneras:

- A través de la función [de configuración de datos de preguntas y respuestas](https://board.support/docs/#open-ai-qea) .
- A través de la función [de acciones de flujos](https://board.support/docs/#open-ai-flows) .
- A través de **Configuración &gt; Misceláneas &gt; Configuración de departamentos &gt; Mostrar en el panel.** En este caso, el usuario deberá seleccionar un departamento antes de iniciar una nueva conversación.
- A través de **Configuración &gt; Automatizaciones &gt; Agregar nueva automatización.**
- A través de JavaScript, con la variable **var SB\_DEFAULT\_DEPARTMENT = ID;** Introduce el código en las páginas donde se muestra el chat y reemplaza el ID por el ID del departamento. Para más detalles, consulta la API [aquí](https://board.support/docs/api/use-cases#auto-departments) .
- Vía [API](https://board.support/docs/api/js) .

---

<details id="bkmrk-queue-routing-%C2%A0"><summary>queue-routing</summary>

</details>
### **Cola y Enrutamiento**

El sistema de **Cola y Enrutamiento** de Zampibot permite que el tablero de soporte asigne automáticamente las conversaciones a los agentes disponibles de forma proporcional y equitativa.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/ItUjQ7SBFBowL3UZ-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/ItUjQ7SBFBowL3UZ-image.png)

#### Configuración y Activación

Para habilitar estas funciones, acceda a:

- **Cola:**`Configuración > Misceláneas > Cola`.
- **Enrutamiento:**`Configuración > Misceláneas > Enrutamiento`.

Una vez activo, el sistema distribuirá las conversaciones de los usuarios entre todos los agentes disponibles de manera automática.

---

#### Reglas de Asignación Automática

El sistema gestiona la carga de trabajo basándose en la disponibilidad real:

- **Disponibilidad:** Solo los agentes con estado **en línea** son considerados disponibles para recibir nuevas conversaciones.
- **Reparto Proporcional:** Las charlas se asignan equitativamente entre los agentes conectados.
- **Sin Agentes Online:** Si no hay agentes en línea, la conversación permanecerá como "sin asignar" y se entregará automáticamente al **primer agente que se conecte**.
- **Administradores:** Los administradores están excluidos del ciclo de asignación automática; ellos siempre mantienen visibilidad sobre todas las conversaciones.

---

<details id="bkmrk-%23manual-routing-%C2%A0"><summary>\#manual-routing</summary>

</details>#### Guía para el Agente

**Gestión de Estado:** Los agentes pueden alternar entre **en línea** y **fuera de línea** pasando el cursor sobre su imagen de perfil y haciendo clic en la etiqueta de la ventana emergente (esquina inferior izquierda del área de administración).

**Flujo de Trabajo:**

- **Completar Tareas:** El agente debe **archivar** una conversación para marcarla como completada. Esto le dará acceso automático a la siguiente conversación en espera.
- **Privacidad:** Los agentes solo pueden buscar, filtrar y ver sus propias conversaciones. Sin embargo, pueden ver el historial completo de un usuario si están atendiendo una de sus charlas.

**Configuraciones de Visibilidad:** Para permitir que los agentes vean conversaciones no asignadas, active: `Configuración > Misceláneas > Ocultar conversaciones de otros agentes` y `Ver conversaciones no asignadas`.

---

#### Información Detallada: Solo Cola

Cuando la cola está activa, los usuarios entran en ella automáticamente al alcanzarse el límite de chats de un agente.

- **Mensaje de Espera:** El usuario verá su posición y el tiempo estimado. Puede usar las variables `{position}` y `{minutes}` en el mensaje de configuración.
- **Cálculo de Tiempo:** Se calcula como: `Posición X Tiempo de respuesta` (configurado en `Configuración > Misceláneas > Cola`).
- **Abandono:** Si un usuario cierra el navegador por más de 1 minuto, perderá su posición. La conversación quedará como "sin asignar" (visible solo para administradores).
- **Apps de Mensajería (WhatsApp):** No respetan el límite por agente; las conversaciones se asignan inmediatamente de forma proporcional a los agentes en línea.

---

#### Información Detallada: Solo Enrutamiento

- **Desactivar Verificación de Estado:** Si activa `Enrutamiento > Desactivar verificación de estado en línea`, las conversaciones se distribuirán incluso entre agentes desconectados.
- **Reasignación:** Si un usuario reabre un chat archivado y el agente asignado está offline, el sistema lo reasignará a un agente que esté en línea.
- **Enrutamiento Manual:** Los agentes pueden mover conversaciones a otros compañeros desde el panel derecho si la opción `Ver conversaciones no asignadas` está activa.

---

#### Menú de Agentes

El **Menú de Agentes** permite asignar conversaciones manualmente a personas específicas. Aparece en el lado derecho del área de conversaciones y se habilita automáticamente con la cola o el enrutamiento.

**Formas de asignar un agente:**

1. Mediante la función **Q&amp;A set data**.
2. A través de acciones en los **Flows** (flujos).
3. Mediante las funciones de **Cola o Enrutamiento**.
4. Activando `Configuración > Chat > Menú de Agentes` (el usuario elige al agente antes de empezar).
5. A través de `Configuración > Automatizaciones > Más`.
6. Vía JavaScript usando la variable `var SB_DEFAULT_AGENT = ID;`.
7. A través de la **API**.

---

#### Cómo probar la cola

1. Abra el chat en diferentes navegadores (Chrome, Firefox, etc.) o en modo incógnito para simular múltiples usuarios.
2. Para resetear una sesión y empezar como usuario nuevo, abra la consola del navegador (F12), escriba `SBF.reset()` y presione Enter.

---

<details id="bkmrk-%23email-piping-%C2%A0"><summary>\#email-piping</summary>

</details>### **Email Piping (Sincronización de Correo)**

El **Email piping** le permite sincronizar múltiples direcciones de correo electrónico para recibir mensajes directamente en Zampibot. También permite que usted, sus agentes y los usuarios respondan a los mensajes del chat a través del correo electrónico.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/mnDkbGIJsNB5fBMc-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/mnDkbGIJsNB5fBMc-image.png)

#### Activación

Para poner en marcha esta función, siga estos pasos:

1. Vaya a `Configuración > Notificaciones > Email piping` e ingrese la información de su servidor de correo **POP3/IMAP**.
2. Vaya a `Configuración > Notificaciones > SMTP` e ingrese la información de su servidor de correo **SMTP**.
3. *Importante:* La dirección de correo debe coincidir con la que se conecta el servidor de email piping. Zampibot enviará todos los correos desde esta dirección.

---

#### Información y Reglas de Funcionamiento

- **Coincidencia de Emisor:** El correo en `Configuración > Notificaciones > SMTP > Sender email` debe ser el mismo que el del servidor de piping. Si usa varias direcciones, Zampibot incluirá un campo **reply-to** para asegurar que las respuestas se vinculen correctamente a la conversación original.
- **Notificaciones:** Las opciones de `User email notifications` y `Agent email notifications` se activan automáticamente al habilitar el piping.
- **Inteligencia Artificial:** Si usa la App de IA y el **human takeover** está activo, no se enviarán correos si el chatbot puede responder por sí solo.
- **Conversión Global:** Si activa **Convert all emails**, todos los correos recibidos (incluido el spam) se convertirán en chats. Úselo con precaución.

---

#### Guía para Agentes y Administradores

- **Cuentas Diferentes:** No puede usar la misma dirección de email piping para responder manualmente desde fuera del sistema. Todos los agentes deben tener registrado un correo distinto al del piping.
- **Remitente Autorizado:** Los agentes deben responder desde el mismo email con el que están registrados en el panel de Zampibot.
- **Estado del Agente:** El sistema solo envía notificaciones por correo a los agentes si estos están **fuera de línea**.

---

#### Detalles Técnicos

- **Google / Gmail:** Es obligatorio usar una **Contraseña de aplicación** de Google. Use el host `imap.gmail.com` y el puerto `993`.
- **Módulo PHP:** Requiere que el servidor tenga instalado el módulo `php5-imap`.
- **Delimitador:** La opción **Delimitador** añade el texto: `### Please type your reply above this line ###`. Esto evita mensajes duplicados al recortar el historial previo. Si está activo, nadie debe usar la cadena `###` en sus correos.
- **Filtros:** Puede añadir palabras clave separadas por comas en la opción **Filtros** para evitar que ciertos correos se conviertan en chats.

---

<details id="bkmrk-%23email-cron-%C2%A0"><summary>\#email-cron</summary>

</details>#### Cron Job (Tareas Programadas)

El sistema procesa los correos cada 60 segundos mediante un cron job.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/VfKP3umoRpLwxPsU-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/VfKP3umoRpLwxPsU-image.png)

- **Versión Cloud:** Ya viene configurado por defecto.

---

### **Mensajes Directos**

Los **mensajes directos** le permiten enviar un único mensaje de chat, correo electrónico o mensaje de texto a un usuario individual o a varios usuarios a la vez. A continuación, se detalla cómo funciona esta característica:

#### Cómo enviar un mensaje

- **Desde el área de Usuarios:** Diríjase a `Usuarios` y haga clic en el icono de mensaje directo.
- **Desde el perfil:** Los botones de mensaje directo también están disponibles dentro del cuadro de perfil de cada usuario.
- **Enviar a todos:** Para enviar un mensaje a toda su base de usuarios, escriba `All` en el campo `IDs de usuario`.
- **Enviar a un grupo:** Ingrese los IDs específicos en el campo `IDs de usuario`. Puede seleccionar a los usuarios en la tabla y luego hacer clic en el icono de mensaje directo para que los IDs se completen automáticamente.

#### Características Generales

- **Campos de combinación:** Todos los tipos de mensajes admiten el uso de campos de combinación (`merge fields`).
- **Traducción automática:** Todos los tipos de mensajes son compatibles con la **traducción automática**.

---

#### Tipos de Mensajes

**1. Mensaje Directo de Chat**

El mensaje se envía a la conversación activa del usuario. Si no existe una, se iniciará una nueva automáticamente.

- **Notificaciones por Correo:** Si la opción `Configuración > Notificaciones > Notificaciones por correo electrónico del usuario` está activa, los usuarios con email recibirán un aviso por esa vía.
- **Notificaciones por SMS:** Si la opción `Configuración > Notificaciones > Notificaciones de mensajes de texto > Activo para usuarios` está activa, los usuarios con número de teléfono recibirán un mensaje de texto.
- **Notificaciones Push:** Si la opción `Configuración > Notificaciones > Notificaciones push` está activa, se enviará una notificación push a todos los usuarios.
- **Apps de Mensajería:** El mensaje también se enviará a aplicaciones como **WhatsApp** y **Messenger** si el usuario está vinculado a ellas.
    
    
    - **Filtrar por App:** Para enviar un mensaje solo a los usuarios de una plataforma específica, ingrese una de estas cadenas en el campo de IDs: `whatsapp`, `messenger`, `instagram`, `telegram`, `twitter`, `zalo`, `wechat`, `viber`, `line`.
    - **Tickets:** Ingrese `tickets` para contactar únicamente a los usuarios que hayan creado un ticket a través de la aplicación de `Tickets`.

**2. Correo Electrónico Directo**

- Puede configurar la apariencia desde `Configuración > Notificaciones > Plantilla de correo electrónico`.
- El sistema admite lenguaje **HTML** para el diseño del mensaje.
- El asunto del correo también es compatible con **campos de combinación** (`merge fields`).

**3. Mensajes de Texto Directos (SMS)**

- Para habilitar esta función, debe activar los SMS en `Configuración > Notificaciones > Notificaciones de mensajes de texto`.

**4. Mensajes de Plantilla de WhatsApp Directos**

- Esta función permite enviar plantillas oficiales de WhatsApp a los usuarios. Para más detalles técnicos, consulte la sección de `WhatsApp` de esta documentación.

---

### **Automatizaciones**

Las **automatizaciones** permiten ejecutar tareas automáticas multilingües cuando se cumplen las condiciones específicas que usted configure.

#### Configuración y Control

- **Gestión de condiciones:** Para eliminar una condición, simplemente déjela vacía. Para desactivar una automatización por completo, elimine todas sus condiciones.
- **Frecuencia de envío:** Las automatizaciones se envían **solo una vez** a cada usuario. Si desea que los usuarios que ya recibieron una automatización la vuelvan a ver, deberá eliminarla y crear una nueva.

---

#### Reglas de Fecha y Tiempo

- **Repetir:** La función de repetición solo es operativa cuando se utiliza en conjunto con el criterio `date time` (fecha y hora).
- **Criterio exacto:** Cuando utilice `date time` con el criterio **"es exactamente"**, el valor no debe incluir horas ni minutos (hh:mm). Por ejemplo: `25/10/2021` funcionará, pero `25/10/2021 10:30` no.

---

#### Requisitos de Ubicación e Idioma

Para que las automatizaciones basadas en geolocalización o idioma funcionen correctamente, deben cumplirse ciertos requisitos en la configuración:

- **Dependencia general:** La opción `Configuración > Usuarios > Registrar a todos los visitantes` debe estar activa para ejecutar automatizaciones al cargar la página.
- **Detalles avanzados:** Las condiciones de ciudad, país e idioma requieren que también esté habilitada la ruta: `Configuración > Usuarios > Detalles completos del visitante`.
    
    
    - **Ciudad:** Solo funciona si el detalle de usuario `location` está configurado como "ciudad, país" o si el detalle `city` está definido.
    - **País:** Requiere que `country_code`, `country` o `location` estén configurados. **Nota:** El nombre del país debe estar escrito en inglés.
    - **Idioma:** Requiere los detalles de usuario `browser_language` o `language`.

---

#### Comportamiento del Visitante

- **Visitante recurrente:** Se considera un "visitante recurrente" únicamente si vuelve a visitar el sitio web después de un periodo de **24 horas o más**.
- **Ventanas emergentes (Pop-ups):** Aparecen solo si el chat está cerrado y sobrescriben la ventana emergente predeterminada. Puede activar la opción de **mensaje de respaldo** (*message fallback*) para enviar un mensaje en lugar de mostrar el pop-up si el chat ya está abierto.

---

#### Condiciones Técnicas Especiales

- **Control de conversación:** Para evitar interrupciones durante una charla activa, los mensajes automáticos y los respaldos de pop-up se envían solo si el último mensaje del usuario o agente tiene más de **10 minutos** de antigüedad.
- **Variables personalizadas:** Esta condición verifica variables de JavaScript en su página web. Por ejemplo, la condición `example=ABC` se cumple si en el código de su página existe: `var example = "ABC";`. Puede añadir múltiples variables separadas por comas.

---

#### Restricciones de Compatibilidad

Las automatizaciones **no son compatibles** con aplicaciones de mensajería externas, tales como:

- WhatsApp, Messenger, Instagram, Telegram, Twitter, Zalo, WeChat, Viber y Line.

---

<details id="bkmrk-manual-de-usuario%23ne"><summary>\#newsletter</summary>

</details>### **Newsletter**

Siga las instrucciones a continuación para completar la sincronización con su servicio de boletines (newsletter). Los usuarios se suscriben automáticamente en los siguientes casos: a través del **formulario de registro**, mediante el **mensaje de seguimiento**, con el **mensaje de suscripción** o al utilizar el **código corto de correo electrónico**.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/3y5c9Rse6Sn8qN5q-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/3y5c9Rse6Sn8qN5q-image.png)

**Mailchimp**

- - Para obtener la **Clave (Key)**, siga las instrucciones en: `https://mailchimp.com/help/about-api-keys/`.
    - Para obtener el **ID de la lista**, siga las instrucciones en: `<a href="https://mailchimp.com/help/find-audience-id/">https://mailchimp.com/help/find-audience-id/</a>`.

**Brevo**

- - Obtenga la **Clave** en: `https://account.brevo.com/advanced/api`.
    - Obtenga el **ID de la lista** en: `<a href="https://my.brevo.com/lists">https://my.brevo.com/lists</a>`.

**SendGrid**

- - Obtenga la **Clave** en: `https://app.sendgrid.com/settings/api_keys`.
    - Para el **ID de la lista**, ingrese a SendGrid y haga clic en `Marketing > Contacts`. Seleccione una lista o cree una nueva; el ID es la última parte de la URL (ejemplo: `8558c1e7-3c99-4428-a68f-78df2e437f8e`).

**Elastic Email**

- - Para la **Clave**, vaya al menú de perfil superior derecho en `Settings > Create Additional API key`. Elija **Plugin** o **Full access** y asegúrese de que el permiso de **Contacts** esté configurado como **View &amp; Modify**.
    - El **ID de la lista** es el nombre de la lista. **Importante:** Los nombres de listas o segmentos no deben contener espacios.

**Campaign Monitor**

- - Obtenga la **Clave** en el menú de perfil superior derecho bajo `Account settings > API keys > Generate API key`.
    - Para el **ID de la lista**, vaya al menú superior en `List and subscribers`, seleccione una lista, haga clic en `Settings` en el menú izquierdo y copie el **List API ID**.

**HubSpot**

- - Para la **Clave**, vaya a `Settings > Integrations > Private apps` y cree una nueva aplicación. En la pestaña **Scope**, añada los permisos: `crm.lists.write`, `crm.lists.read`, `crm.objects.contacts.read` y `crm.objects.contacts.write`. Copie el token generado y péguelo en el campo **Key** de ZampiBot.
    - Obtenga el **ID de la lista** en `Contacts > List > List details`.

**Moosend**

- - Obtenga la **Clave** en `Settings > API key`.
    - Obtenga el **ID de la lista** en `Audience > Email lists`.

**GetResponse**

- - Para el **ID de la lista**, vaya a `Lists > Your list > Settings` y copie el valor de **List token**.
    - Obtenga la **Clave** en `https://app.getresponse.com/api`.

**ConvertKit**

- - Obtenga la **Clave** en `Settings > Advanced > API secret`.
    - Para el **ID de la lista**, vaya a `Grow > Landing Pages & Forms`. Abra su formulario y copie la parte numérica de la URL (ejemplo: si la URL es `.../designers/3003412/edit`, el ID es `3003412`).

**ActiveCampaign**

- - Obtenga la **Clave** en `Account settings > Developer`.
    - Para el **ID de la lista**, vaya a `Left menu > Lists`. Copie el ID numérico de la URL. El valor final debe tener el formato `dominio:ID-lista`. El dominio es la primera parte de la URL de su tablero (ejemplo: `schiocco:1`).

**MailerLite**

- - Obtenga la **Clave** en `Left menu > Integrations > MailerLite API`.
    - Para el **ID de la lista**, vaya a `Left menu > Subscribers > Groups`. Abra un grupo y copie el ID de la URL.

**Mailjet**

- - Obtenga la **Clave** en `https://app.mailjet.com/account/apikeys` o en `Account settings > Account settings`.
    - Para el **ID de la lista**, vaya a `Contacts > Contacts lists > Your list`. Obtenga el ID haciendo clic en el icono `?` junto al correo de la lista.

**Sendy**

- - Obtenga la **Clave** en el área de configuración de Sendy.
    - Para el **ID de la lista**, seleccione su marca, haga clic en `View all lists` y copie el ID. El ajuste debe incluir su URL completa de Sendy y el ID separados por una barra vertical (ejemplo: `https://ejemplo.com|TDf6o892Mx11VXGC51ui567u`).

**SendFox**

- - Obtenga la **Clave** en `Settings > API > Personal Access Tokens`.
    - Para el **ID de la lista**, vaya a `Audience > Lists`. Abra una lista y copie el ID de la URL.

<div id="bkmrk--82">---

</div>### **Mas ajustes**

<details id="bkmrk-%23saved-replies-%C2%A0"><summary>\#saved-replies</summary>

</details>#### Respuestas guardadas

Las **respuestas guardadas**, también conocidas como mensajes predefinidos, son una colección de mensajes escritos previamente que los agentes pueden utilizar de forma rápida en el editor del chat. Puede gestionarlas desde la siguiente ruta: `Configuración > Administración > Respuestas guardadas`.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/uOVdKwYpF4govqzC-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/uOVdKwYpF4govqzC-image.png)

- **Uso rápido:** Las respuestas se pueden insertar escribiendo `#` seguido del nombre de la respuesta guardada y un espacio.
- **Ventana emergente:** Para abrir el panel emergente con todas las respuestas disponibles, escriba `##`.
- **Formato:** Utilice el código `\n` para insertar un salto de línea en el mensaje.
- **Integración con Dialogflow:** Si utiliza el chatbot de Dialogflow, la búsqueda en el panel de respuestas guardadas incluirá resultados de las **Intents** de Dialogflow.
- **Importación de Intents:** Tiene la opción de añadir todas las Intents de Dialogflow a la lista de respuestas guardadas activando la opción en: `Configuración > Inteligencia Artificial > Google > Añadir Intents a respuestas guardadas`.

---

<details id="bkmrk-%23email-%23email"><summary>\#email</summary>

\#email

</details>## **Notificaciones por Email**

Para comprender cómo funcionan las notificaciones y cuándo se envían, lea la siguiente información. Si cree que las notificaciones no funcionan, probablemente las esté probando incorrectamente. Lea la siguiente información antes de solicitar asistencia.

### ***Notificaciones por correo electrónico***

Tanto los agentes como los usuarios pueden recibir una notificación por correo electrónico cuando se recibe un nuevo mensaje.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/pNFkouSwdi7KSYDI-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/pNFkouSwdi7KSYDI-image.png)

#### Notificaciones por correo electrónico para administradores y agentes

- Cuando un usuario envía su primer mensaje, si la conversación está asignada a un [departamento](https://zampibotpage.zampisoft.com/docs/#departments) , se envía un correo electrónico solo a los agentes y administradores que estén desconectados y asignados a ese departamento, o a aquellos que no tengan asignado ningún departamento. Si la conversación está asignada a un agente específico, se envía un correo electrónico solo a ese agente; de ​​lo contrario, se envía un correo electrónico a todos los agentes que no estén conectados en ese momento. Los correos electrónicos posteriores se envían solo al último agente de la conversación.
- Las notificaciones por correo electrónico se envían solo a agentes y administradores fuera de línea.
- Si está utilizando la aplicación de Inteligencia Artificial y la función [de toma de control humano](https://zampibotpage.zampisoft.com/docs/#human-takeover) está activada, no se envían correos electrónicos si el chatbot sabe la respuesta.
- Para evitar que los administradores reciban notificaciones por correo electrónico, marque **Configuración &gt; Notificaciones &gt; No enviar notificaciones a los administradores**.

#### Notificaciones por correo electrónico para los usuarios

- Cuando un agente envía un mensaje a un usuario, se le envía un correo electrónico solo si el usuario está desconectado.
- Solo se envía un correo electrónico. Los mensajes posteriores no activarán una nueva alerta.

#### Crear el correo electrónico

Para administrar los correos y crear los contenidos vaya a**Configuración &gt; Notificaciones**Puedes usar texto y HTML. Las nuevas líneas se convierten automáticamente a**&lt;br /&gt;**Puede usar los siguientes campos de combinación en el correo electrónico. Estos campos se reemplazan automáticamente con la información actualizada.

<div id="bkmrk-merge-field-descript">---

<table class="table table-bordered"><thead><tr><th style="width:29.1537%;">Merge field</th><th style="width:70.7379%;">Description</th></tr></thead><tbody><tr><td style="width:29.1537%;">```
{recipient_name}
```

</td><td style="width:70.7379%;">El nombre del usuario o agente que recibe el correo electrónico.</td></tr><tr><td style="width:29.1537%;">```
{sender_name}
```

</td><td style="width:70.7379%;">El nombre del usuario o agente que envió el mensaje que activó la notificación por correo electrónico.</td></tr><tr><td style="width:29.1537%;">```
{sender_profile_image}
```

</td><td style="width:70.7379%;">The profile image of the user or agent who was sending the message that triggered the email La imagen de perfil del usuario o agente que envió el mensaje que activó la notificación por correo electrónico..</td></tr><tr><td style="width:29.1537%;">```
{message}
```

</td><td style="width:70.7379%;">Los enlaces a cualquier archivo adjunto que formaba parte del mensaje que activó la notificación por correo electrónico.</td></tr><tr><td style="width:29.1537%;">```
{attachments}
```

</td><td style="width:70.7379%;">Los archivos adjuntos de los correos electrónicos.</td></tr><tr><td style="width:29.1537%;">```
{conversation_link}
```

</td><td style="width:70.7379%;">Un enlace para abrir la conversación en el área de administración. Este campo de combinación solo está disponible para los correos electrónicos de los agentes.</td></tr><tr><td style="width:29.1537%;">```
{conversation_id}
```

</td><td style="width:70.7379%;">El ID de la conversación.</td></tr></tbody></table>

</div>#### Plantilla de correo electrónico

Todos los correos electrónicos enviados por ZampiBot utilizan la plantilla definida en la siguiente ruta: `Configuración > Notificaciones > Plantilla de correo electrónico`.

Es obligatorio incluir el campo de combinación `{content}`, el cual será reemplazado automáticamente por el cuerpo real del mensaje de correo electrónico al momento del envío.

<div id="bkmrk--86">---

</div>#### Cron job (Trabajos programados)

Puede ejecutar un cron job para el envío de notificaciones por correo electrónico tanto a usuarios como a agentes. Al utilizar este método, las notificaciones mejoran significativamente: incluirán la conversación completa y se enviarán una sola vez.

**Configuración requerida:** Para utilizar esta función, debe activar la opción en: `Configuración > Notificaciones > Notificaciones por correo electrónico a través del trabajo cron`.

**Ejecución del comando:** Puede crear un cron job que ejecute la siguiente URL: `[URL-DE-INSTALACION]/include/api.php?email-notifications=true`.

- **Obtención de la URL:** Puede encontrar su URL de instalación en `Configuración > Misceláneas > Installation URL`.
- **Versión Cloud:** Si utiliza la versión en la nube, emplee esta URL: `https://chatbot.zampisoft.com/script/include/api.php?email-notifications=true&cloud=API-TOKEN` (reemplace `API-TOKEN` con su token de API personal).

*Nota: Esta es una función avanzada relacionada con la configuración de su servidor. Nuestro equipo de soporte no ofrece asistencia directa para la gestión de servidores, pero puede contratarnos para ayudarle con esta implementación.*

---

#### ¿Tiene problemas?

Si las notificaciones por correo no se entregan correctamente, puede realizar una prueba de envío desde la siguiente ruta: `Configuración > Notificaciones > Send an agent email notification`.

Existen diversos motivos por los cuales los correos podrían no entregarse:

- **Problemas de Hosting:** El servidor de su proveedor de alojamiento no puede enviar correos o estos son marcados como spam. En este caso, se recomienda activar un servidor SMTP externo en `Configuración > Notificaciones > SMTP`.
- **Errores de SMTP:** Si tras activar el SMTP no recibe los correos de prueba, es probable que los datos de conexión sean incorrectos o su servidor SMTP no esté funcionando.
- **Configuración de Gmail:** Si utiliza Gmail o Google Workspace, debe usar una "Contraseña de aplicación" y asegurarse de que el puerto sea `465` o `587`. Además, verifique que el acceso SMTP para aplicaciones de terceros no esté restringido en su consola de administración.

<div class="horizontal-scroll-wrapper" id="bkmrk-raz%C3%B3n-descripci%C3%B3n-so"><table class="table table-bordered"><thead><tr><td class="align-center" style="width:13.7089%;">**Razón**</td><td class="align-center" style="width:28.9632%;">**Descripción**</td><td class="align-center" style="width:57.3433%;">**Solución**</td></tr></thead><tbody><tr><td style="width:13.7089%;">**Problemas de alojamiento (Hosting)**</td><td style="width:28.9632%;">El servidor de su proveedor de hosting no puede enviar correos o estos son detectados automáticamente como spam y eliminados.</td><td style="width:57.3433%;">Si las opciones en `Configuración > Notificaciones > SMTP` no están configuradas, su servidor intentará enviar los correos de forma nativa. Contacte con su proveedor de hosting para obtener soporte o active un servidor SMTP externo en la ruta mencionada.</td></tr><tr><td style="width:13.7089%;">**Problemas con SMTP**</td><td style="width:28.9632%;">El correo electrónico no se envía a pesar de haber activado la opción SMTP en el área de notificaciones.</td><td style="width:57.3433%;">Asegúrese de que la conexión funcione enviando un correo de prueba desde `Configuración > Notificaciones > Enviar una notificación por correo electrónico al usuario` o `Enviar una notificación por correo electrónico al agente`. Si no recibe el mensaje, su servidor SMTP no funciona. Revise la consola del navegador para ver el error específico. Este problema es externo a ZampiBot; contacte a su proveedor de SMTP o use servicios como **SendGrid** (40,000 correos gratis el primer mes).</td></tr><tr><td style="width:13.7089%;">**Google Gmail**</td><td style="width:28.9632%;">El correo no se envía al intentar utilizar el servidor SMTP de Gmail, incluso con la opción activa.</td><td style="width:57.3433%;">Para cuentas de Gmail o Google Workspace, debe usar una **Contraseña de Aplicación** (consulte la [guía de Google](https://support.google.com/accounts/answer/185833)). Use `smtp.gmail.com` como anfitrión y el puerto `465` o `587`. En Google Workspace, verifique en `Consola de administración > Seguridad > Control de acceso y datos > Controles de API > Control de acceso a aplicaciones` que el acceso SMTP no esté restringido.</td></tr></tbody></table>

</div><div id="bkmrk--88">---

</div><details id="bkmrk-%23push-%C2%A0"><summary>\#push</summary>

</details>### **Notificaciones Push**

Las **notificaciones push** se diferencian de las notificaciones de escritorio tradicionales en que son enviadas directamente desde un servidor. Esto permite que funcionen en todo momento, incluso si su dispositivo está desconectado o si ZampiBot no está abierto en el navegador. Además, son persistentes y permanecen visibles hasta que el usuario las cierra.

ZampiBot es compatible con **Pusher** y **OneSignal**, ambos servicios gratuitos para hasta 2000 usuarios o dispositivos.

> **Nota importante:** Pusher no es compatible con dispositivos iOS; si utiliza iPhone o iPad se envia por **OneSignal**.

#### Versión Cloud

La versión en la nube de ZampiBot utiliza **OneSignal** por defecto y ya se encuentra preconfigurada. Para habilitarlas en el área de administración, solo debe seguir esta ruta: `Configuración > Notificaciones > Notificaciones push > Activo para agentes`, guarde los cambios y recargue el panel.

<div id="bkmrk--89">---

</div>#### Activación para Usuarios

Para habilitar las notificaciones push en sus clientes, siga estos pasos:

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/Gr3UQLY10LoM0Tbs-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/Gr3UQLY10LoM0Tbs-image.png)

<div id="bkmrk-descargue-el-archivo">1. Descargue el archivo del **Service Worker** desde el enlace proporcionado [here.](https://board.support/docs/files/service-worker.zip)
2. Suba dicho archivo a la raíz de su sitio web en la siguiente ubicación: `https://su-sitio.com/service-worker.js`.
3. Vaya a `Configuración > Notificaciones > Notificaciones push > URL del Service Worker` e ingrese la URL completa del archivo.

---

</div>#### Información y Requisitos

<div id="bkmrk-seguridad%3A-las-notif">- **Seguridad:** Las notificaciones push solo funcionan en sitios web con protocolo **HTTPS** completo (a excepción de *localhost* para pruebas de desarrollo).
- **Funcionamiento en Escritorio:** El navegador debe estar ejecutándose (aunque esté en segundo plano) para recibir los mensajes.
- **Sustitución:** Cuando las notificaciones push están activas, reemplazan automáticamente a las notificaciones de escritorio estándar.
- **Dispositivos iOS:** Disponibles a partir de **iOS 16.4**. Requiere que ZampiBot esté instalado y el uso obligatorio de **OneSignal**.
- **Interacción:** Al hacer clic en una notificación, se abrirá la última página visitada por el usuario y el chat se desplegará automáticamente.

---

</div>#### Reglas para Administradores y Agentes

El sistema sigue una lógica inteligente para el envío de alertas:

<div id="bkmrk-disponibilidad%3A-solo-1">- **Disponibilidad:** Solo se envían notificaciones a agentes y administradores que estén **fuera de línea**.
- **Segmentación por Departamentos:** Si un chat pertenece a un departamento, solo los agentes asignados a este recibirán la alerta.
- **Asignación Específica:** Si la conversación tiene un agente asignado, solo esa persona recibirá la notificación.
- **Control de IA:** Si la función de **human takeover** está activa y el chatbot conoce la respuesta, no se enviarán notificaciones al equipo humano.
- **Restricción de Administradores:** Puede evitar que los administradores reciban alertas activando: `Configuración > Notificaciones > No enviar notificaciones a los administradores`.

---

</div>#### Solución de Problemas

Si las notificaciones no funcionan correctamente, verifique los siguientes puntos:

<div id="bkmrk-permisos-del-navegad">- - **Permisos del Navegador:** En Chrome, revise `Privacidad y seguridad > Configuración de sitios > Notificaciones` para asegurarse de que el sitio esté permitido.
    - **Segundo Plano (Chrome):** Asegúrese de que la opción `Seguir ejecutando aplicaciones en segundo plano al cerrar Google Chrome` esté activa en la configuración del sistema de su navegador.
    - **Configuración de Windows:** Verifique que el sistema operativo no esté bloqueando las alertas en `Inicio > Configuración > Notificaciones`.
    - **Visibilidad del Panel:** Las notificaciones no se mostrarán si el área de administración de ZampiBot ya está abierta y visible; minimice la ventana o use otra pestaña para probar.
    - **Reset de Suscripción:** Si el problema persiste con OneSignal, acceda a su panel de control, elimine al usuario de la sección `Audience > Users` y suscríbase nuevamente.

---

</div>### **Notificaciones de escritorio**

Las notificaciones de escritorio (también conocidas como notificaciones web) permiten alertar a los usuarios y agentes de forma inmediata, con las siguientes condiciones:

- No se envían si el usuario está visualizando activamente una página que incluye el chat (el navegador está abierto, visible y la página activa contiene el chat).
- No son compatibles con dispositivos **iPhone o iOS**.
- Funcionan únicamente en URLs seguras que utilicen **HTTPS**. La URL de administración de ZampiBot debe usar HTTPS obligatoriamente.
- Si las **Notificaciones Push** están activas, estas reemplazarán automáticamente a las notificaciones de escritorio.
- Si experimenta problemas con estas alertas, intente aplicar las soluciones descritas en la sección de Notificaciones Push.

---

### **Notificaciones de mensajes de texto (SMS)**

Tanto los agentes como los usuarios pueden ser notificados mediante mensajes de texto cuando llega un nuevo mensaje. Este servicio es proporcionado por **Twilio**. Es un servicio de pago, pero cuenta con una versión de prueba gratuita para realizar tests. Además, los mensajes SMS enviados a su número de Twilio pueden recibirse dentro de ZampiBot, permitiendo una experiencia de mensajería bidireccional.

#### Activación

1. Regístrese en [Twilio](https://www.twilio.com) y cree una nueva cuenta.
2. Verifique su número de teléfono y elija la opción **SMS** en el formulario de configuración.
3. Desde su panel de Twilio, haga clic en `Get a Trial Number` (Obtener un número de prueba).
4. Ingrese al área de administración de ZampiBot y vaya a: `Configuración > Notificaciones > Notificaciones de mensajes de texto`. Pegue el SID de la cuenta, el token de autenticación y el número de prueba (o número comprado).
5. **Pruebas:** Si usa la versión de prueba, solo podrá enviar notificaciones a números verificados en su panel de Twilio bajo `Verified Caller IDs`.
6. **Uso en vivo:** Para recibir mensajes de texto en ZampiBot, debe comprar un número y configurar la URL en Twilio desde: `Phone numbers > Manage > Active numbers`. Obtenga el enlace necesario en ZampiBot en: `Configuración > Notificaciones > Notificaciones de mensajes de texto > URL de configuración`.

#### Información importante

- **Lógica de envío:** Cuando un usuario envía su primer mensaje, el SMS se envía únicamente a los agentes y administradores que estén **fuera de línea** y asignados al departamento correspondiente. Los mensajes subsiguientes se envían solo al último agente que participó en la conversación.
- **Restricción de administradores:** Puede evitar que los administradores reciban estos SMS activando: `Configuración > Notificaciones > No enviar notificaciones a los administradores`.
- **Números de Agentes:** Asegúrese de que sus agentes tengan un número de teléfono asignado en su perfil para recibir las alertas.
- **Formato:** Todos los números deben incluir el código de país comenzando con el símbolo **+** (ej. +15558675310).
- **Control de IA:** Si utiliza la App de Inteligencia Artificial y el relevo humano (*human takeover*) está activo, no se enviarán SMS si el chatbot conoce la respuesta.
- **Sender ID:** Puede personalizar el nombre del remitente en el campo `Sender number` si su plan de Twilio lo permite.

---

<details id="bkmrk-%23sound-%C2%A0"><summary>\#sound</summary>

</details>### **Notificaciones de sonido**

Al habilitar los sonidos en `Configuración > Notificaciones > Sonidos`, se reproducirá una alerta auditiva cada vez que se reciba un nuevo mensaje o conversación.

[![image.png](https://docs.zampisoft.com/uploads/images/gallery/2026-01/scaled-1680-/qNqxirf8ZvnL0xr4-image.png)](https://docs.zampisoft.com/uploads/images/gallery/2026-01/qNqxirf8ZvnL0xr4-image.png)

- **Interacción obligatoria:** Debido a las políticas de seguridad de los navegadores modernos, el audio solo sonará si el usuario o agente ha interactuado previamente con el documento (haciendo clic en cualquier parte del panel de administración o en la página del chat).
- **Bucle:** Si el sonido está configurado para **repetir**, se reproducirá en bucle siempre que el área de administración o la página del chat **no estén abiertas o estén minimizadas**. Si la ventana está activa y visible, el sonido no se reproducirá.

---

### **Notificaciones de Telegram**

Para conocer los detalles específicos sobre cómo vincular ZampiBot con Telegram para recibir notificaciones, consulte la sección dedicada a Telegram en esta documentación.

---

<details id="bkmrk-open-ai-%C2%A0"><summary>open-ai</summary>

</details>## **ARTIFICIAL INTELLIGENCE**

Esta sección detalla el funcionamiento y la configuración de la aplicación de **Inteligencia Artificial** para Zampibot, diseñada para automatizar respuestas y optimizar la atención al cliente.

---

#### Instalación

Para comenzar a utilizar las funciones de IA:

1. Diríjase a `Configuración > Apps`.
2. Simplemente haga clic en **Activo**.

---

<details id="bkmrk-%23human-takeover-%C2%A0"><summary>\#human-takeover</summary>

</details>### ***Toma de control humana (Human Takeover)***

El relevo de un chatbot a un agente humano ocurre en los siguientes casos:

- Cuando un agente humano responde directamente al mensaje de un usuario.
- Cuando la opción `Configuración > Inteligencia Artificial > Adquisición humana > Activo` está marcada. Esto se dispara automáticamente si el chatbot no entiende un mensaje o si el usuario solicita explícitamente hablar con un humano.

#### Información General

- **Desactivación del Bot:** Al activarse el relevo, el chatbot se deshabilita mientras el último agente humano que respondió esté en línea. Si ningún agente ha respondido aún, el bot permanecerá activo.
- **Reactivación:** El chatbot se activa de nuevo totalmente si la conversación se archiva o se elimina.
- **Mensaje de Respaldo:** La función `Configuración > Inteligencia Artificial > Human takeover > Mensaje de reserva` envía un mensaje automático avisando que un agente responderá pronto. Este se envía como máximo una vez cada 30 minutos.
- **Compatibilidad:** Funciona en todas las apps de mensajería (WhatsApp, Messenger, Telegram, etc.) sin necesidad de que el usuario haga clic en botones de confirmación.

#### Activación Manual

- **Solo Dialogflow:** Puede forzar el relevo creando una **Intent** con la respuesta de **Custom Payload**: `{ "human-takeover": true }`.
- **Solo OpenAI:** El usuario puede solicitarlo manualmente (opción activa por defecto).
- **Vía Q&amp;A:** Puede añadir la acción de **human takeover** a respuestas específicas en el entrenamiento.

---

<details id="bkmrk-%23smart-reply-%C2%A0"><summary>\#smart-reply</summary>

</details>### **Respuesta inteligente (Smart Reply)**

Esta función sugiere respuestas rápidas en tiempo real durante una conversación activa con un agente.

- **Lógica:** El sistema busca primero sugerencias en **Dialogflow** (si está activo); si no hay resultados, devuelve sugerencias de **OpenAI**.
- **Uso:** Pase el cursor sobre una sugerencia durante 3 segundos para leer el texto completo.
- **Atajo:** Presione `CTRL + Z` para restaurar el mensaje anterior en el editor.

---

### **Configuración Óptima del Chatbot**

Para obtener los mejores resultados, recomendamos seguir estos pasos:

1. **Activar Dialogflow:** Ideal para consultas generales, respuestas definitivas o uso de **mensajes enriquecidos** (botones).
2. **Entrenamiento:** Entrene su chatbot de OpenAI con su propio contenido para respuestas personalizadas.
3. **Confianza de Detección:** Establezca el valor de `Google > Dialogflow Intent detection confidence` en **0.81**.
4. **Funciones de OpenAI:** Active las opciones de Bot conversacional, corrección ortográfica y Reescritura de mensajes.
5. **Multilingüe:** Si su sitio es internacional, active `Traducción automática` y `Detección de idioma`.

---

### **Solución de Problemas (IA)**

Si las funciones de **OpenAI** o **Google** no funcionan correctamente, las razones más frecuentes se enumeran a continuación.

> \[!TIP\] Para obtener detalles técnicos sobre un error, abra las **herramientas de desarrollador** de su navegador (F12 en Windows), diríjase a la pestaña **Consola**, envíe un mensaje a través del chat de ZampiBot y observe si aparece algún mensaje de error resaltado en rojo.

---

#### OpenAI y Google (General)

- **Toma de control humana:** Verifique si existe un `human takeover` activo en la conversación, lo cual inhabilita las respuestas automáticas del bot.
- **Servicios de integración:** Si tiene dificultades con la sincronización, puede contratarnos para que nuestro equipo realice la configuración técnica por usted desde nuestra página de soporte.

---

#### OpenAI

- **Herramienta de diagnóstico:** Utilice el botón ubicado en `Configuración > Inteligencia Artificial > OpenAI > Solucionar problemas` para verificar errores específicos relacionados con su cuenta de OpenAI.
- **Verificación de estado:** Asegúrese de que la casilla `Configuración > Inteligencia Artificial > OpenAI > Chatbot` esté marcada.
- **Límites y Facturación:** Compruebe si ha alcanzado su límite de cuota o si hay problemas con el método de pago en su [panel de uso de OpenAI](https://platform.openai.com/account/usage).
- **Conflicto con Dialogflow:** Si utiliza ambos servicios, OpenAI podría no responder si su agente de Dialogflow no tiene configurada la **Fallback Intent** (Intención de respaldo). Verifique su presencia en la página de Intents de Google.
- **Limpieza de Datos:** Si las respuestas son inconsistentes, intente eliminar todos los datos de entrenamiento en `Chatbot > Training > Information > Delete all training data` y realice el proceso de entrenamiento nuevamente.
- **Sitios Multilingües:** Para el entrenamiento mediante sitios web, asegúrese de que la etiqueta `<html>` de su página web contenga el atributo de idioma correcto (ejemplo: `<html lang="es">`).
- **Versión Cloud:** Si experimenta problemas persistentes, puede cambiar el modo de sincronización a **Automático** en `Configuración > Inteligencia Artificial > OpenAI > Modo de sincronización` para utilizar nuestra clave de API (requiere la compra de créditos).

---

##### **Google (Dialogflow)**

- **Diagnóstico de Google:** Haga clic en el botón `Configuración > Inteligencia Artificial > Google > Troubleshoot problems` para identificar errores de conexión con su cuenta de Google Cloud.
- **Activación del Bot:** Confirme que la opción `Configuración > Inteligencia Artificial > Google > Dialogflow chatbot` esté habilitada.
- **Ubicación del Agente:** Verifique que ha seleccionado la ubicación o región correcta donde reside su agente en la consola de Dialogflow.
- **Mega Agentes:** Asegúrese de **no** estar utilizando un "Mega Agent", ya que esta arquitectura no es compatible con el sistema.

---

## **OpenAI**

Esta sección detalla los ajustes de sincronización y configuración inicial del chatbot de **OpenAI** para **Zampibot**, permitiendo que el sistema responda preguntas generales de manera inteligente.

<div id="bkmrk--105">---

</div>### **Sincronización**

Existen dos modalidades para vincular el servicio de Inteligencia Artificial con su cuenta:

**1. Modo de sincronización automática**

Esta característica es exclusiva de la **versión en la nube** de Zampibot.

- **Configuración:** Este modo está listo para usarse y no requiere ajustes adicionales. Puede activarlo en `Configuración > Inteligencia Artificial > OpenAI > Modo de sincronización`.
- **Activación:** Para habilitar el chatbot, marque la opción en `Configuración > Inteligencia Artificial > OpenAI > Bot conversacional`.
- **Costos:** Es necesario adquirir **créditos** para utilizar esta modalidad.

**2. Modo de sincronización manual**

La integración con OpenAI (ChatGPT) otorga al chatbot la capacidad de responder a casi cualquier consulta general. Siga estos pasos para la configuración manual:

- **Registro:** Cree una cuenta en el portal oficial: [https://platform.openai.com/](https://platform.openai.com/).
- **Clave de API:** Obtenga su clave en [https://platform.openai.com/api-keys](https://platform.openai.com/api-keys).
- **Vinculación:** Pegue la clave en la ruta `Configuración > Inteligencia Artificial > OpenAI > Clave API`.
- **Ajuste en la nube:** Si utiliza la versión en la nube, asegúrese de establecer `Configuración > Inteligencia Artificial > OpenAI > Modo de sincronización` en la opción **Manual**.
- **Activación final:** Habilite el bot en `Configuración > Inteligencia Artificial > OpenAI > Chatbot`.

---

### **Chatbot**

Para configurar su primer chatbot, siga esta secuencia de pasos:

1. Complete el **proceso de sincronización** mencionado anteriormente.
2. Habilite la opción en `Configuración > Inteligencia Artificial > OpenAI > Chatbot` y guarde los cambios.
3. **Acceso al área de pruebas:** Su chatbot estará activo de inmediato. Puede acceder al área de pruebas desde la sección **Chatbot**, identificada con el icono de la **carita sonriente**`🙂` en el menú de la izquierda.

#### Solución de problemas iniciales

Si el chatbot no responde como se espera, haga clic en el botón `Configuración > Inteligencia Artificial > OpenAI > Solucionar problemas` y siga las instrucciones en pantalla para diagnosticar el error.

Para perfeccionar el desempeño de su asistente, le recomendamos explorar las secciones de **Entrenamiento** y **Toma de control humana**.

<div id="bkmrk--107">---

</div>### **Chatbot Integrations**

Las siguientes integraciones están disponibles para potenciar las capacidades del chatbot de OpenAI en Zampibot. Estas herramientas son conversacionales, multilingües y compatibles con cualquier aplicación de mensajería como WhatsApp, Messenger y Telegram.

---

<details id="bkmrk-%23google-calendar-int"><summary>\#google-calendar-integration</summary>

\#google-calendar-integration

</details>#### Google Calendar

Habilite esta integración para permitir que el chatbot acceda a su Google Calendar, permitiendo que los usuarios reserven y gestionen citas directamente en su calendario.

**Tareas disponibles:**

- **Reservar una cita:** El chatbot puede agendar eventos en su calendario en nombre del usuario.
- **Actualizar una cita:** Permite modificar eventos existentes para un usuario específico.
- **Cancelar una cita:** El chatbot puede eliminar eventos programados previamente.
- **Listar eventos:** Muestra los eventos programados de un usuario.
- **Mostrar disponibilidad:** Informa al usuario sobre los horarios de reserva disponibles.

**Configuración:**

1. Diríjase a `Configuración > Inteligencia Artificial > Google Calendar integration` y haga clic en **Activato**.
2. Acceda a `Configuración > Inteligencia Artificial > Google > Sincronizar` y complete el proceso de sincronización.
3. Establezca los horarios de reserva disponibles en `Configuración > Misceláneas > Horas de oficina programadas`.

**Información técnica:**

- **Slot duration:** Determina la duración de cada evento reservado.
- **Buffer time:** Tiempo de espera (en minutos) entre reservas para evitar citas consecutivas sin descanso.
- **Minimum booking time:** Tiempo mínimo requerido (en minutos) para realizar una reserva desde el momento actual.

---

<details id="bkmrk-%23tidycal-integration"><summary>\#tidycal-integration</summary>

</details>#### TidyCal

Esta integración permite al chatbot de OpenAI conectarse con su cuenta de TidyCal para que los usuarios gestionen sus citas de forma automatizada.

**Tareas disponibles:**

- El chatbot puede realizar las mismas funciones que en Google Calendar: reservar, actualizar, cancelar, listar eventos y mostrar horarios disponibles en TidyCal.

**Configuración:**

1. Vaya a `Configuración > Inteligencia Artificial > TidyCal integration` y haga clic en **Activate**.
2. En su cuenta de TidyCal, acceda a `Integrations > Advanced > API Keys` para crear un **Personal Access Token**. Cópielo y péguelo en `Configuración > Inteligencia Artificial > TidyCal integration > Access token`.
3. Ingrese el título del tipo de reserva que desea utilizar en `Configuración > Inteligencia Artificial > TidyCal integration > Booking type title` y guarde los cambios.
4. Configure los horarios disponibles, tiempos de espera y duración de las citas directamente dentro de su cuenta de TidyCal.

**Información importante:**

- Solo se admiten eventos que no tengan un precio asignado.
- El tipo de reserva seleccionado se almacena en caché durante 24 horas. Si realiza cambios, pueden tardar hasta un día en verse reflejados. Para forzar la actualización inmediata, cree un nuevo tipo de reserva o cambie su título y actualícelo en los ajustes de Zampibot.

<div id="bkmrk--110">---

</div>### **Configuración**

Consulte a continuación la información detallada sobre la mayoría de los ajustes de **OpenAI** para **Zampibot**.

#### Modo de Chatbot (Chatbot mode)

Esta función está vinculada a la opción `Configuración > Inteligencia Artificial > OpenAI > Modo de sincronización`. Le permite configurar qué información utilizará OpenAI para responder a los mensajes de los usuarios:

<div id="bkmrk-solo-preguntas-gener">- **Solo preguntas generales (Only general questions):** OpenAI responderá únicamente a preguntas generales y a consultas relacionadas con mensajes anteriores del usuario en la misma conversación, sin utilizar ninguna información proporcionada por usted. Este es el ajuste por defecto.
- **Solo preguntas relacionadas con sus fuentes (Only questions related to your sources):** OpenAI solo responderá a preguntas relacionadas con la información que usted proporcione. Los mensajes generales del usuario serán ignorados. Para esto, primero debe entrenar al chatbot con sus fuentes.
- **Todas las preguntas (All questions):** OpenAI responderá tanto a preguntas relacionadas con su información como a preguntas generales y consultas sobre el historial de la conversación actual. Requiere entrenamiento previo con sus fuentes y es el **modo recomendado**.
- **Asistente (Assistant):** Utilice este modo si está empleando un asistente de OpenAI configurado externamente.

</div>#### Conversación casual (Small talk)

Esta función habilita respuestas predefinidas para que el chatbot pueda manejar interacciones sociales y corteses, como "Hola", "¿Cómo estás?" o "Cuéntame un chiste". Esto hace que los bots se sientan más humanos y atractivos en lugar de estar enfocados únicamente en tareas técnicas.

<details id="bkmrk-%23open-ai-assistant-%C2%A0"><summary>\#open-ai-assistant</summary>

</details>#### Asistente (Assistant)

Esta característica le permite utilizar sus propios asistentes creados en `https://platform.openai.com/assistants`:

<div id="bkmrk-si-utiliza-la-versi%C3%B3">- Si utiliza la versión Cloud, debe establecer `Configuración > Inteligencia Artificial > OpenAI > Modo de sincronización` en **Manual** y usar su propia clave de API.
- Puede usar **múltiples** asistentes añadiendo sus IDs en `Configuración > Inteligencia Artificial > OpenAI Assistants - Department linking` y seleccionando **Assistant** en el modo de chatbot.
- Para activar un asistente, tanto este como las conversaciones deben estar asignados a un **departamento**.
- El asistente se utiliza *únicamente* para el chatbot y las respuestas inteligentes (Smart Replies), no para la reescritura de mensajes u otras funciones.

</div>#### Chatbot

La función de chatbot de OpenAI opera de forma similar a Dialogflow, proporcionando respuestas automáticas. Seleccione el ajuste de **Modo de bot coversacional** para especificar qué preguntas podrá responder y utilice la función de **toma de control humana** (human takeover) para redirigir el chat a un agente cuando sea necesario.

#### Mensaje de respaldo (Fallback message)

Este mensaje se envía cuando OpenAI no logra entender la pregunta del usuario. Si el chatbot de Dialogflow está habilitado, este mensaje se desactivará y se utilizará en su lugar el mensaje de respaldo de Dialogflow.

#### Instrucción de comportamiento (Prompt)

El **Prompt** instruye a OpenAI sobre cómo debe responder, proporcionando información relevante para contestar a los usuarios.

<div id="bkmrk-si-activa-la-toma-de">- Si activa la toma de humano, debe indicarle a OpenAI que responda "No lo sé" si no puede contestar. Siempre debe incluir el siguiente texto en el Prompt: **Responde "No lo sé" si no estás seguro de la respuesta**.
- Las respuestas de las fuentes de entrenamiento son compatibles con esta función.

</div>#### Corrección ortográfica (Spelling correction)

Esta función corrige automáticamente cualquier error de ortografía en los mensajes enviados por el agente.

#### Idioma de los datos de entrenamiento

Si utiliza datos de entrenamiento y su chatbot es multilingüe, configure aquí el idioma predeterminado de dichos datos. Déjelo como **default** si el idioma principal de sus fuentes es el inglés.

#### Respuesta inteligente (Smart reply)

Permite habilitar sugerencias de respuesta rápida incluso si el chatbot no está activo. Si el chatbot está activo, esta función utilizará OpenAI de forma automática.

#### Corrección ortográfica de Dialogflow

Si Dialogflow no encuentra una respuesta adecuada, esta función verifica si hay errores ortográficos en el mensaje del usuario. Si existen, se vuelve a consultar a Dialogflow con el mensaje corregido. Aunque tiene mayor prioridad, puede trabajar en conjunto con la corrección ortográfica de Google Search.

#### Reconocimiento de voz (Speech recognition)

OpenAI permite convertir mensajes de voz en texto escrito.

<div id="bkmrk-no-es-necesario-acti">- No es necesario activar esta opción para que el chatbot entienda audios, ya que esa función siempre está activa.
- Funciona mejor si se conoce el idioma del usuario (puede activar la detección de idioma para esto).
- El texto generado se mostrará junto al reproductor de audio y es compatible con las funciones de traducción.

</div>#### Análisis de imágenes y archivos

Permite al chatbot interpretar imágenes y archivos enviados por los usuarios.

<div id="bkmrk-solo-es-compatible-c">- Solo es compatible con modelos **GPT-4** y versiones más recientes.
- Los archivos se almacenan temporalmente en su cuenta de OpenAI y se borran tras la respuesta.
- Requiere un servidor en línea o el uso de **AWS S3** (no funciona en localhost).

</div>#### Enlaces de fuentes (Source links)

Al estar activa, la respuesta incluirá automáticamente enlaces a las fuentes y datos de entrenamiento utilizados. Para incluir artículos, primero debe configurar la ruta en `Configuración > Artículos > URL de la página de artículos`.

#### Extracción de datos en notas (Note data scraping)

Habilita un menú en el panel de **Notas** que permite extraer automáticamente información específica de los mensajes, como datos de inicio de sesión, URLs o un resumen de la conversación.

#### Parámetros de OpenAI

Zampibot permite ajustar parámetros técnicos como la `temperature` (creatividad) y `logit_bias`. **No modifique estos valores** si no está seguro de su funcionamiento, ya que OpenAI podría dejar de responder.

<div id="bkmrk-logit-bias%3A-debe-ser">- **Logit bias:** Debe ser una cadena JSON con claves entre comillas, por ejemplo: `{"2435":-100, "640":-100}`.

</div>#### Generar preguntas de usuario

Si esta opción está activa, OpenAI generará nuevas variaciones de preguntas de usuario en tiempo real al abrir el panel de entrenamiento del chatbot.

#### Usar conversaciones para entrenamiento

Utiliza automáticamente las conversaciones reales para entrenar al bot mediante un cron job cada 24 horas. Solo se emplean mensajes de usuarios y agentes (se ignoran los del bot). Puede encontrar estos datos en `Chatbot > Entrenamiento > Conversaciones`.

#### Conocimiento del contexto (Context awareness)

Permite a OpenAI reconocer el contexto de la página web donde se encuentra el usuario (título meta y descripción meta). Esta opción solo es compatible con el widget de chat y no con canales de mensajería externos.

<details id="bkmrk-%23message-rewriting-%23"><summary>\#message-rewriting</summary>

#### \#message-rewriting


</details>#### Reescritura de mensajes (Message rewriting)

Añade un botón en el campo de texto del área de conversación para profesionalizar sus mensajes.

<div id="bkmrk-los-saludos-se-a%C3%B1ade">- Los saludos se añaden automáticamente si no hay mensajes previos del agente.
- Asegúrese de que su perfil de agente tenga el idioma correcto seleccionado.
- Puede configurar un **Prompt** para guiar el estilo de reescritura.
- El **Modo de ejecución** puede ser automático (para todos los mensajes) o por "sentimiento negativo" (solo para mensajes que OpenAI detecte como negativos).

---

</div>
### **Entrenamiento**

Con esta función, su chatbot puede someterse a un proceso de aprendizaje utilizando su sitio web, textos, documentos PDF y más. Una vez completado el entrenamiento con éxito, el chatbot será capaz de responder preguntas relacionadas con sus contenidos.

#### Entrenamiento mediante archivos

Este proceso le permite entrenar al chatbot utilizando archivos en formato **PDF** y **TXT**.

- **Acceso:** Diríjase a `Chatbot > Entrenamiento > Archivos`.
- **Proceso:** Seleccione sus archivos, haga clic en el botón **Entrenar chatbot** y espere a que el proceso finalice.
- **Nota:** Una vez completado el entrenamiento, los archivos cargados se eliminan del sistema automáticamente.

#### Entrenamiento mediante un sitio web

Permite al chatbot aprender directamente de las páginas de su sitio web.

- **Acceso:** Diríjase a `Chatbot > Entrenamiento > Sitio web`.
- **Proceso:** Ingrese las URLs de su sitio y haga clic en **Entrenar chatbot**.
- **Sitemaps XML:** Para sitios web grandes, es más eficiente y menos propenso a errores utilizar un mapa del sitio (XML sitemap) en lugar de la URL principal. Puede crear uno con herramientas externas como `https://www.xml-sitemaps.com`.
- **Límites:** Si su sitemap contiene más de 1000 URLs, se recomienda dividirlo en varios archivos y entrenar uno a la vez para evitar sobrecargas en el servidor.
- **Reentrenamiento:** Si vuelve a entrenar el mismo sitio, debe eliminar primero los datos previos; de lo contrario, solo se entrenarán las URLs nuevas.

#### Entrenamiento mediante preguntas y respuestas (P&amp;R)

Este método permite añadir preguntas y sus respectivas respuestas de forma individual.

- **Acceso:** Navegue a `Chatbot > Entrenamiento > Preguntas & Respuestas`.

#### Entrenamiento mediante artículos

El chatbot puede utilizar sus artículos de la base de conocimientos como fuente de aprendizaje.

- **Proceso:** Añada sus artículos y luego haga clic en el botón **Entrenar chatbot**; los artículos se utilizarán como fuentes automáticamente.

#### Entrenamiento mediante flujos (Flows)

Utilice los flujos conversacionales diseñados para guiar las respuestas del bot.

- **Acceso:** Navegue a `Chatbot > Flujos`.

---

#### ***Métodos de Mejora Continua***

#### Entrenamiento mediante conversaciones

Permite generar datos de entrenamiento a partir de las interacciones reales entre usuarios y agentes.

- **Activación:** Marque la opción en `Configuración > Inteligencia Artificial > OpenAI > Usar conversaciones para entrenamiento`.

<p class="callout warning">**Importante:** Revise estos datos regularmente en `Chatbot > Entrenamiento > Conversaciones`, ya que las respuestas incorrectas de los agentes pueden generar datos de baja calidad.</p>

#### Panel de entrenamiento del chatbot

Permite seleccionar mensajes específicos de una conversación para crear nuevas preguntas y respuestas.

- **Uso:** En el área de conversación, pase el cursor sobre un mensaje, abra el menú del mensaje y seleccione **Entrenar chatbot**.
- **Sincronización:** Si **OpenAI** está activo, el chatbot se entrenará automáticamente con la nueva información.

---

#### Información Técnica y Límites

- **Actualización de datos:** Para añadir información nueva, simplemente realice el entrenamiento otra vez; los datos previos no se perderán, solo se sumarán las nuevas fuentes.
- **Versión Cloud:** Existen límites de caracteres para el entrenamiento en la versión en la nube.
- **Modelo de Embeddings:** El sistema utiliza obligatoriamente el modelo `text-embedding-3-small` de OpenAI para procesar los mensajes y el entrenamiento.
- **Seguridad:** Los embeddings se almacenan como archivos JSON en la carpeta de `uploads` de ZampiBot y están protegidos mediante el enfoque de "contraseña por nombre de archivo".
- **Borrado total:** Puede eliminar todos los datos previos en `Chatbot > Entrenamiento > Información > Eliminar todos los datos de entrenamiento`.

---

#### Entrenamiento mediante Cron Job

Puede automatizar el entrenamiento periódico de su sitio web.

- **Versión Cloud:** Active `Configuración > Inteligencia Artificial > OpenAI > Entrenamiento mediante cron job`. Se puede ejecutar máximo una vez cada 7 días.
- **Ruta de URL:** Obtenga su enlace en `Configuración > Misceláneas > Installation URL`.

---

#### Entrenamiento Multilingüe

Si sus usuarios hablan varios idiomas, puede limitar al chatbot para que recupere respuestas solo de fuentes en el idioma del usuario.

- **Activación:** Marque `Configuración > Inteligencia Artificial > OpenAI > Fuentes de entrenamiento multilingües`.
- **Websites:** El idioma se detecta automáticamente mediante el atributo `lang` en la etiqueta `<html>` de sus páginas.
- **Artículos:** Todos los idiomas de los artículos se utilizan de forma automática.
- **Archivos y P&amp;R:** Actualmente solo admiten un idioma por fuente.

---

### **Q&amp;A (Preguntas y Respuestas)**

Esta sección se refiere al área de entrenamiento del chatbot mediante preguntas y respuestas directas. Añada pares de preguntas y respuestas para mejorar el rendimiento del bot y permitirle responder consultas específicas de los usuarios.

#### Configuración de una Q&amp;A

- **Pregunta (Question):** Ingrese los mensajes del usuario que activarán la respuesta. Añada tantas variaciones de la pregunta como sea necesario para cubrir diferentes formas de redacción.
    
    
    - *Ejemplo:* Para la respuesta "¡Soy un chatbot!", las preguntas podrían ser: "¿Quién eres?", "¿Qué eres?", "¿Eres un robot?".
- **Respuesta (Answer):** Ingrese el texto exacto con el que el chatbot responderá al usuario.
- **Llamada a herramientas (Tools calling):** Permite conectar esta respuesta con datos externos (detalles más abajo).
- **Establecer datos y acciones (Set data and actions):** Permite asignar valores específicos al usuario cuando se formula esta pregunta.
    
    
    - Puede utilizar **campos de combinación** para asignar valores extraídos del mensaje del usuario. Incluya estos campos en la respuesta y serán reemplazados por los valores reales (ejemplo: `{language}`).
    - También puede usar esta función para ejecutar acciones como asignar **departamentos**, **agentes** y **etiquetas** a la conversación.

---

### **Flujos (Flows)**

La siguiente información se relaciona con el área de flujos del chatbot, disponible en la ruta: `Chatbot > Flujos`

Los flujos le permiten crear secuencias de conversación automatizadas de manera sencilla. Utilícelos para guiar al usuario hacia un objetivo específico mediante una serie de mensajes predefinidos.

#### Bloques de Flujo

- **Inicio (Start):** Determina cuándo debe comenzar el flujo.
    
    
    - Puede iniciarse cada vez que el usuario abre una conversación, al enviar un mensaje específico o al cargar la página.
    - **Condiciones:** Si establece condiciones, el flujo solo iniciará cuando todas se cumplan.
    - **Departamento/Fuente:** Puede limitar el inicio a conversaciones asignadas a un departamento específico o provenientes de una fuente concreta (ej. WhatsApp o Instagram).
- **Enviar mensaje:** Envía un mensaje de texto simple al usuario.
- **Enviar opciones (Send choices):** Envía una lista de botones o permite al usuario elegir una opción.
    
    
    - **Modo conversacional:** Cuando está habilitado, los botones se ocultan y el chatbot envía solo texto; los usuarios seleccionan opciones respondiendo con texto. La IA interpreta la respuesta y selecciona la opción correspondiente, continuando el flujo como si se hubiera presionado el botón. Esto es ideal para canales como **WhatsApp** e **Instagram**.
    - **Variaciones:** Puede añadir variaciones a los textos de los botones separándolos con el carácter `|` (ej. `Sí|Claro|Por supuesto`) para ayudar a la IA a entender mejor la respuesta del usuario.
    - **Respaldo:** Si la respuesta no coincide, se enviará un mensaje de error (fallback) mostrando las opciones disponibles.
- **Enviar video:** Envía un archivo de video al usuario.
- **Obtener detalles del usuario:** Solicita y almacena información del usuario en ZampiBot.
    
    
    - *Nota:* Los detalles no se guardan si prueba el flujo en el área de pruebas (playground) ya que el usuario es temporal. Pruebe con un usuario real para verificar el guardado.
- **Establecer datos (Set data):** Asigna valores específicos al usuario cuando se ejecuta el bloque.
- **Acciones:** Ejecuta acciones internas del sistema.
- **Condiciones:** Crea ramificaciones en el flujo. Si se cumplen las condiciones, el flujo sigue la rama "Verdadero" (`true`), de lo contrario, sigue la rama "Falso" (`false`).
- **Rest API:** Envía datos a su servidor externo.
    
    
    - El cuerpo debe ser un array JSON. Detalles como el ID de usuario y de conversación se incluyen automáticamente bajo la clave `sb`.
    - Use la sección **guardar respuesta** para almacenar detalles del usuario basados en la respuesta de su servidor (usando notación de puntos JSON).
    - *Nota:* Esta es una función avanzada que requiere código personalizado en su servidor.
- **Conector de flujo:** Conecta el flujo actual con otro flujo diferente e inicia la ejecución de este último.

#### Información Adicional

- **Multilingüe:** Los flujos pueden traducirse. Añada traducciones para mensajes y botones en el área de **Traducciones**. También puede usar la función de **traducción automática**. Si el idioma por defecto no es inglés, configúrelo en `Configuración > Inteligencia Artificial > OpenAI > Training Data Language`.
- **Navegación:** Los usuarios pueden retroceder para corregir datos de manera conversacional (ej. diciendo "Perdón, me equivoqué de correo" o simplemente "atrás").

---

#### Llamada a Herramientas (Tools Calling)

Esta función permite conectar el chatbot con herramientas y sistemas externos para recuperar información necesaria para responder al usuario. El chatbot consultará a su servidor y devolverá la información al usuario.

> \[!WARNING\] Esta es una función para usuarios avanzados que requiere programación en su servidor. Nuestro soporte estándar no incluye asistencia para código personalizado, pero ofrecemos servicios de contratación para implementaciones.

#### Parámetros de Configuración

- **URL:** Ingrese la URL del punto final (endpoint) de la API que suministrará los valores.
- **Encabezados (Headers):**
    
    
    - En **Q&amp;A**: Ingrese pares clave-valor separados por comas (ej. `apikey:123345, json:true`).
    - En **Flujos**: Añada parámetros clave-valor haciendo clic en el botón "Añadir nuevo ítem".
- **Propiedades:** Defina los valores que el chatbot debe solicitar al usuario (ej. una ciudad, un número de seguimiento, etc.).
    
    
    - **Valores permitidos:** Si conoce las respuestas posibles de antemano, ingréselas en este campo.

#### Datos enviados a su servidor

ZampiBot enviará la siguiente información. Si usa el método **POST**, irá en el cuerpo JSON; si usa **GET**, irá en el encabezado.

<div class="code-block ><div class=" id="bkmrk--118">  
</div><div class="formatted-code-block-internal-container class=" id="bkmrk-%7B-%22sb%22%3A-%7B-%22user_id%22%3A">{ "sb": { "user_id": "123", "conversation_id": "123", "user_language": "es" }, "arguments": {} } <div class="code-block ><div class=">numero-de-orden).</div></div><div class="formatted-code-block-internal-container class=" id="bkmrk-sb%3A-incluye-los-ids-"><div class="code-block ><div class=">**sb:** Incluye los IDs para que pueda recuperar más información vía la API REST de ZampiBot.</div></div>#### Respuesta de su servidor

Su servidor debe devolver un array JSON con los valores requeridos. Incluya `"success": true`**solo** cuando la solicitud sea exitosa y se devuelva la información esperada. No lo incluya si hubo un error (ej. número de orden inválido).

**Ejemplo de respuesta correcta:**

<div class="formatted-code-block-internal-container class=" id="bkmrk-%7B-%22order_status%22%3A-%22e"><div class="code-block ><div class="><div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "order_status": "Entregado hace 2 horas y 25 minutos", "success": true } <div class="code-block ><div class=">**Información**- **Solución de problemas:** Si OpenAI no está funcionando, haga clic **aquí**.
- **Interacción con Dialogflow:** Si Dialogflow se encuentra activo, la consulta a OpenAI se ejecuta únicamente si el chatbot no conoce la respuesta a la pregunta del usuario y si la longitud del mensaje del usuario es superior a **4 caracteres**.
- **Compatibilidad de ajustes generales:** Los siguientes ajustes son totalmente compatibles con OpenAI:
    
    
    - **Respuesta inteligente** (Smart reply).
    - **Toma de control humana** (Human takeover).
    - **Desactivar en el área de tickets** (Disable for the tickets area).
    - **Desactivar durante horario de oficina** (Disable during office hours).
    - **Retraso en la respuesta del bot** (Bot response delay).
    - **Responder a correos de usuarios** (Reply to user emails).
    - **Responder a mensajes de texto de usuarios** (Reply to user text messages).
- **Compatibilidad de ajustes de Google:** Los siguientes ajustes de Google funcionan conjuntamente con OpenAI:
    
    
    - **Multilingüe vía traducción** (Multilingual via translation).
    - **Traducción automática** (Automatic translation).
    - **Detección de idioma** (Language detection).
- **Configuración de Idioma:** Establezca el idioma del chatbot de OpenAI desde la ruta: `Configuración > Chat > Idioma`.
    
    
    - Seleccione la opción **Multilingual** (Multilingüe) si su sitio web admite varios idiomas o si sus usuarios hablan diferentes lenguas.
    - Si utiliza canales de mensajería externos como **WhatsApp** o **Instagram**, es obligatorio detectar el idioma del usuario activando la función de **detección de idioma**. Para más detalles, haga clic **aquí**.
- **Comportamiento durante la Toma de Control:** Si un agente humano toma el control de la conversación, el chatbot de OpenAI se desactiva y **permanece desactivado** incluso si el agente se desconecta (pasa a estado offline). Por el contrario, el chatbot de Dialogflow continúa funcionando siempre que sea necesario.
- **Modelo por defecto:** El modelo de IA utilizado por defecto es **gpt-5-mini**.
- **Mensajes consecutivos:** Los mensajes enviados por el usuario de forma consecutiva (uno tras otro rápidamente) son tratados por el chatbot como un **único mensaje**, lo que resulta en una sola respuesta unificada en lugar de múltiples respuestas fragmentadas.

  
---

</div></div></div><details id="bkmrk-%23google-sync-%C2%A0"><summary>\#google-sync</summary>

</details>## **GOOGLE**

Los siguientes ajustes están relacionados con la aplicación de Inteligencia Artificial.

### **Sincronización**

Para comenzar a utilizar los servicios de IA de Google y Dialogflow, siga los pasos que se detallan a continuación.

#### Modo de sincronización automática

*Esta función está disponible solo en la **versión en la nube** de ZampiBot.*

1. Haga clic en **Sincronizar ahora** (*Synchronize now*) y complete el procedimiento.
2. Si desea activar el chatbot de Dialogflow, marque la opción en: `Configuración > Inteligencia Artificial > Google > Dialogflow chatbot`.
3. Además, deberá ingresar el **ID del Proyecto** o el **Nombre del Agente** de su chatbot. Para obtener estos datos, siga los pasos descritos más abajo en la sección de Dialogflow.
4. **Nota:** Necesita comprar **créditos** para utilizar esta opción.

#### Modo de sincronización manual

Siga estos pasos para configurar la integración manualmente en su propio servidor:

1. Habilite la opción `Configuración > Inteligencia Artificial > Google > Dialogflow Chatbot` en ZampiBot y guarde los cambios.
2. Vaya a [console.cloud.google.com](https://console.cloud.google.com) e inicie sesión.
3. Seleccione o cree un proyecto haciendo clic en el botón **Seleccionar un proyecto** en la parte superior izquierda. Nombre el proyecto como desee.
4. Active las APIs necesarias: Ingrese "Dialogflow API" en la barra de búsqueda superior, selecciónela y haga clic en **Habilitar**. Repita este paso para:
    
    
    - **Cloud Natural Language API**
    - **Cloud Translation API**
    - **Google Calendar API**
5. Seleccione el proyecto y vaya al `Menú izquierdo > API y servicios > Pantalla de consentimiento de OAuth`.
    
    
    - Seleccione **Externo** y haga clic en **Crear**.
    - En **Nombre de la aplicación**, ingrese lo que desee.
    - En **Correo electrónico de asistencia al usuario** y **Información de contacto del desarrollador**, ingrese su correo electrónico.
    - Haga clic en **Guardar y continuar**.
6. En el área de **Permisos (Data access)**:
    
    
    - Haga clic en **Agregar o quitar alcances** (*Add or remove scopes*).
    - Desplácese hasta el fondo, al área de **Agregar alcances manualmente**, e ingrese las siguientes URLs separadas por comas (copie y pegue exactamente): `https://www.googleapis.com/auth/dialogflow,https://www.googleapis.com/auth/cloud-language,https://www.googleapis.com/auth/cloud-translation,https://www.googleapis.com/auth/calendar`
    - Haga clic en **Agregar a la tabla**, luego en **Actualizar** y finalmente en **Guardar y continuar**.
7. En el área de **Usuarios de prueba (Audience)**:
    
    
    - Haga clic en **Add users** (Agregar usuarios) y añada su correo electrónico de Google (el mismo con el que ha iniciado sesión).
    - Haga clic en **Guardar y continuar**.
    - Haga clic en **PUBLICAR LA APLICACIÓN** (*PUBLISH APP*). No es necesario completar el proceso de revisión de Google; déjelo en estado de revisión pendiente.
8. Vaya a `Menú izquierdo > API y servicios > Credenciales` y haga clic en **Crear credenciales**.
    
    
    - Seleccione **ID de cliente de OAuth**.
    - En **Tipo de aplicación**, seleccione **Aplicación web**. Ingrese cualquier nombre.
    - En **Orígenes de JavaScript autorizados**, déjelo vacío.
    - En **URI de redireccionamiento autorizados**, ingrese la URL de redirección que encontrará en ZampiBot bajo: `Configuración > Inteligencia Artificial > Google > Authorised redirect URI`.
    - Haga clic en **Crear**.
9. Copie el **ID de cliente** y el **Secreto de cliente**. Péguelos en los campos correspondientes en ZampiBot en: `Configuración > Inteligencia Artificial > Dialogflow`. Guarde los ajustes.
10. Haga clic en el botón `Configuración > Inteligencia Artificial > Google > Sincronizar` en ZampiBot.
    
    
    - Inicie sesión con la misma cuenta de Google utilizada hasta ahora.
    - En la siguiente pantalla, haga clic en **Continuar** (si aparece una advertencia de seguridad, proceda indicando que confía en la aplicación ya que es suya).
    - Seleccione todos los permisos/alcances y haga clic en **Continuar**.
11. Copie el **Token de actualización** (*Refresh token*) generado y péguelo en: `Configuración > Inteligencia Artificial > Google > Refresh token`.
12. ¡Listo! Si desea activar el chatbot, marque la opción `Dialogflow chatbot`. Recuerde ingresar el ID del Proyecto o Nombre del Agente.

> \[!NOTE\] **Usuarios de Google Workspace:** Vaya a `https://admin.google.com/`, haga clic en **Control de sesiones de Google Cloud** y establezca la "Política de reautenticación" en **Nunca requerir reautenticación**.

---

### **Dialogflow**

La información a continuación es relevante para el uso de Dialogflow.

> \[!WARNING\] **¡Advertencia!** Dejaremos de dar soporte a Dialogflow a finales de 2025. Todas sus funciones estarán disponibles en ZampiBot a través de OpenAI. Por favor, utilice OpenAI en lugar de Dialogflow.

#### Obtener ID del Proyecto (Dialogflow ES)

1. Inicie sesión en la consola de Dialogflow ES en [dialogflow.cloud.google.com](https://dialogflow.cloud.google.com). Use la misma cuenta de Google de la sincronización.
2. Haga clic en el **icono de engranaje** (ajustes) en la parte superior izquierda, junto al nombre del chatbot.
3. Si no ha creado un chatbot, siga las instrucciones de "Crear un chatbot básico" más abajo.
4. Copie el valor del **Project ID**.
5. *Importante:* Asegúrese de elegir la región **US / GLOBAL** en la parte superior izquierda. Nuestro sistema no soporta "Mega Agents".

#### Obtener Nombre del Agente (Dialogflow CX)

1. Inicie sesión en la consola de Dialogflow CX en [dialogflow.cloud.google.com/cx/](https://dialogflow.cloud.google.com/cx/).
2. Seleccione el proyecto y vaya a la página de agentes (Click en `Agents > View all agents`).
3. Haga clic en el menú de opciones (tres puntos) del agente deseado y seleccione **Copy name** (Copiar nombre).

#### Ajustes Adicionales

- **Ubicación (Location):** Establezca la región de su agente de Dialogflow. Es opcional si su agente está en la región "global".
- **Intent de Bienvenida (Welcome Intent):** Activa el Intent de bienvenida de Dialogflow para nuevos visitantes. Requiere que la opción `Configuración > Mensajes y formularios > Mensaje de bienvenida` esté activa.
- **Enviar detalles del usuario:** Envía a Dialogflow los datos recopilados en el **formulario de registro** y en los mensajes enriquecidos de correo electrónico.
- **Añadir Intents a respuestas guardadas:** Incluye los Intents de Dialogflow en su lista de respuestas predefinidas. Puede verlas en `Configuración > Administración > Respuestas guardadas`.

---

### **Crear un chatbot básico**

Si aún no tiene un chatbot, siga estas instrucciones. La gestión del bot se realiza enteramente en la plataforma de Dialogflow.

1. Ingrese a la **Consola de Dialogflow** y cree un agente.
2. En **Google Project**, seleccione el mismo proyecto que creó durante la sincronización manual.
3. Añada una nueva **Intent** desde el menú izquierdo y ábrala.
4. En el área de **Frases de entrenamiento (Training phrases)**, añada las preguntas que el usuario podría hacer. Agregue tantas variaciones como sea posible.
    
    
    - *Ejemplo:* Si desea que el bot dé su dirección, añada: "¿cuál es su dirección?", "dirección", "¿dónde están ubicados?".
5. En el área de **Respuestas (Responses)**, añada la respuesta del bot como **Text response**.
6. ¡Ha creado su primera interacción! Pruébelo desde el área de chat de ZampiBot.

---

### **Comportamiento (Acciones del Chatbot)**

Las siguientes acciones permiten al chatbot interactuar con el sitio web y el sistema de forma autónoma en nombre del usuario.

#### Cómo configurar una acción

Para utilizar una acción, debe acceder a la consola de **Dialogflow** y seguir estos pasos:

1. Edite una **Intent** (Intención) existente o cree una nueva.
2. Desplácese hasta la sección de **Responses** (Respuestas).
3. Añada una respuesta de tipo **Custom Payload** (Carga útil personalizada).
4. Ingrese el código JSON utilizando la siguiente sintaxis general: `{ "NOMBRE-DE-ACCION": VALOR }`

---

**Lista de Acciones Disponibles**

Copie y pegue los siguientes códigos en su *Custom Payload* según la función que desee activar:

**Toma de control humana**

Inicia el proceso de relevo a un agente humano y desactiva el chatbot para esa conversación.

<div class="code-block ><div class=" id="bkmrk--123">  
</div><div class="formatted-code-block-internal-container class=" id="bkmrk-%7B-%22human-takeover%22%3A-">{ "human-takeover": true } <div class="code-block ><div class=">  
</div></div>**Redireccionar**

Redirige al navegador del usuario a la URL especificada.

<div class="formatted-code-block-internal-container class=" id="bkmrk-nueva-pesta%C3%B1a%3A-a%C3%B1ada"><div class="code-block ><div class=">- **Nueva pestaña:** Añada `"new-window": true` para abrir el enlace en una pestaña nueva.

<div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "redirect": "https://www.ejemplo.com", "new-window": true } <div class="code-block ><div class=">  
</div></div></div>**Abrir artículo**

Abre automáticamente un artículo de la base de conocimientos. Reemplace `ID` con el ID numérico o slug del artículo.

<div class="formatted-code-block-internal-container class=" id="bkmrk-%7B-%22open-article%22%3A-id"><div class="formatted-code-block-internal-container class="><div class="code-block ><div class="><div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "open-article": ID } <div class="code-block ><div class=">  
</div></div></div></div>**Transcripción**

Genera la transcripción de la conversación actual como un archivo de texto y la descarga.

<div class="formatted-code-block-internal-container class=" id="bkmrk-enviar-por-correo%3A-c"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">- **Enviar por correo:** Cambie el valor a `"email"` para enviarla al correo del usuario.
- **Mensaje adjunto:** Use el parámetro `message` para incluir un texto en el cuerpo del correo.

<div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "transcript": "email", "message": "Aquí tienes tu copia de la conversación." } <div class="code-block ><div class=">  
</div></div></div></div></div>**Asignar etiquetas**

Asigna una o más etiquetas a la conversación actual.

<div class="formatted-code-block-internal-container class=" id="bkmrk-%7B-%22tags%22%3A-%5B%22ventas%22%2C"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class="><div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "tags": ["Ventas", "Urgente"] } <div class="code-block ><div class=">  
</div></div></div></div></div></div>**Cambiar departamento**

Cambia o establece el departamento de la conversación y notifica a los agentes de dicho departamento. Reemplace `ID` con el ID del departamento.

<div class="formatted-code-block-internal-container class=" id="bkmrk-%7B-%22department%22%3A-1-%7D"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class="><div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "department": 1 } <div class="code-block ><div class=">  
</div></div></div></div></div></div></div>**Asignar agente**

Asigna un agente específico a la conversación y le envía una notificación. Reemplace `ID` con el ID del agente.

<div class="formatted-code-block-internal-container class=" id="bkmrk-%7B-%22agent%22%3A-1-%7D"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class="><div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "agent": 1 } <div class="code-block ><div class=">  
</div></div></div></div></div></div></div></div>**Enviar correo electrónico**

Envía un correo electrónico al usuario o al agente activo.

<div class="formatted-code-block-internal-container class=" id="bkmrk-destinatario%3A-puede-"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">- **Destinatario:** Puede ser `"active_user"` (usuario) o `"agents"` (agentes).
- **Adjuntos:** Siguen el formato `["nombre_archivo", "enlace_url"]`.

<div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "send-email": { "recipient": "active_user", "message": "Gracias por contactarnos.", "attachments": [ ["factura.pdf", "https://sitio.com/factura.pdf"] ] } } <div class="code-block ><div class=">  
</div></div></div></div></div></div></div></div></div>**Actualizar interfaz de usuario**

Fuerza al área de administración a actualizar los datos del usuario de la conversación activa. Se recomienda usar esto en combinación con otras acciones para ver los cambios en tiempo real (por ejemplo, tras actualizar un teléfono).

<div class="formatted-code-block-internal-container class=" id="bkmrk-%7B-%22update-user%22%3A-tru"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class="><div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "update-user": true } <div class="code-block ><div class=">  
</div></div></div></div></div></div></div></div></div></div>**Archivar chat**

Archiva la conversación actual y envía el mensaje de cierre (si esta función está activa en la configuración).

<div class="formatted-code-block-internal-container class=" id="bkmrk-%7B-%22archive-chat%22%3A-tr"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class="><div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "archive-chat": true } <div class="code-block ><div class=">  
</div></div></div></div></div></div></div></div></div></div></div>**Actualizar detalles del usuario**

Actualiza la información del perfil del usuario activo.

<div class="formatted-code-block-internal-container class=" id="bkmrk-campos-est%C3%A1ndar%3A-pue"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">- **Campos estándar:** Puede actualizar `first_name`, `last_name`, `email`, `user_type`, `password`.
- **Campos extra:** Para actualizar detalles personalizados (como teléfono o dirección), use el objeto `"extra"`. La sintaxis es `"slug-del-campo": ["Valor", "Nombre visible"]`.

</div></div></div></div></div></div></div></div></div></div></div>**Ejemplo completo:**

<div class="formatted-code-block-internal-container class=" id="bkmrk-%7B-%22update-user-detai"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class="><div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "update-user-details": { "email": "nuevo@email.com", "first_name": "Juan", "last_name": "Pérez", "extra": { "phone": ["+123456789", "Teléfono"], "city": ["Madrid", "Ciudad"] } } } <div class="code-block ><div class=">  
</div></div></div></div></div></div></div></div></div></div></div></div>> \[!TIP\] Para probar esto fácilmente, puede descargar un ejemplo de Intent, ir al área de **Intents** en Dialogflow, hacer clic en el menú de 3 puntos (arriba a la derecha) y seleccionar **Upload Intent**. Luego, pruebe enviando el mensaje "start" o "iniciar" al bot.

**Actualizar idioma del usuario**

Actualiza el idioma del perfil del usuario y del chatbot (si la función multilingüe está activa) para coincidir con el idioma detectado o solicitado en la frase del usuario.

<div class="formatted-code-block-internal-container class=" id="bkmrk-variable%3A-el-valor-%24"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">- **Variable:** El valor `$language` representa la entidad de idioma detectada por Dialogflow.

<div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">{ "update-user-language": "$language" } <div class="code-block ><div class=">---

</div></div></div></div></div></div></div></div></div></div></div></div></div>### **Cumplimiento de Dialogflow**

Los datos de cumplimiento enviados a la URL de su webhook son como se muestra a continuación:

```c#
{ "responseId": "4a58fc4f...", "queryResult": { "queryText": "fullfilment", "parameters": [], "allRequiredParamsPresent": true, "fulfillmentText": "Example", "fulfillmentMessages": [{ "text": { "text": ["Response"] } }], "outputContexts": [{ "name": "projects/schiocco...", "parameters": { "no-input": 0, "no-match": 0 } }], "intent": { "name": "projects/schiocco...", "displayName": "Fullfilment" }, "intentDetectionConfidence": 1, "languageCode": "en" }, "originalDetectIntentRequest": { "payload": { "support_board": { "conversation_id": "3002", "user_id": "3777" } } }, "session": "projects/example/agent/sessions/3777-3002" }
```

<p class="callout info">Los campos `payload` y `session` contienen el **ID de usuario** y el **ID de conversación** de ZampiBot.</p>

<div class="formatted-code-block-internal-container class=" id="bkmrk--124"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class="><div>---

</div></div></div></div></div></div></div></div></div></div></div></div></div></div>### **Información sobre Dialogflow**

#### Prioridad de OpenAI

Si **OpenAI** está habilitado, **Dialogflow tiene prioridad** sobre este. La API de OpenAI solo se utilizará si Dialogflow no logra encontrar una respuesta adecuada para la pregunta del usuario.

#### Entrenamiento y optimización del Chatbot

Lograr que su chatbot ofrezca respuestas correctas de manera consistente requiere tiempo. Para mejorar su rendimiento:

<div class="formatted-code-block-internal-container class=" id="bkmrk-entrenamiento-contin"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- **Entrenamiento continuo:** Usted y sus agentes deben entrenar al bot incorporando nuevas variaciones de preguntas e **Intents** (Intenciones).
- **Edición rápida:** Los agentes pueden añadir nuevos Intents o frases de entrenamiento desde el área de administración en tiempo real. Simplemente pase el cursor sobre un mensaje y haga clic en el **icono de Dialogflow Intent**.
- **Generación automática:** Habilite `Configuración > Inteligencia Artificial > OpenAI > Generar preguntas de usuario` para añadir variaciones de preguntas y reescribir respuestas automáticamente.
- **Dialogflow CX:** Las respuestas se añadirán al último flujo utilizado en la conversación; si no hay uno, se añadirán al flujo de inicio.

</div></div></div></div></div></div></div></div></div></div>**Solución de problemas de clasificación:** Si el chatbot responde con Intents incorrectos:

<div class="formatted-code-block-internal-container class=" id="bkmrk-vaya-a-consola-de-di"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Vaya a `Consola de Dialogflow > Configuración del chatbot > ML Settings`.
2. Aumente el **ML CLASSIFICATION THRESHOLD** a un número mayor (ej. `0.6`).
3. Verifique también la **Confianza de detección de Intent**.

</div></div></div></div></div></div></div></div></div></div>#### Confianza de detección de Intent (Confidence)

Dialogflow asigna una puntuación a las posibles coincidencias (de 0.0 a 1.0).

<div class="formatted-code-block-internal-container class=" id="bkmrk-especifique-un-valor"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- Especifique un valor entre **0.1** y **1.0** en la configuración de ZampiBot.
- Cualquier respuesta con una puntuación inferior al valor establecido será descartada.
- **Recomendación:** Si utiliza Dialogflow junto con un chatbot de OpenAI entrenado con sus propios recursos, configure este valor en **0.81**.

</div></div></div></div></div></div></div></div></div></div>#### Base de Conocimientos (Knowledge Base)

Esta función está habilitada automáticamente y permite al chatbot buscar respuestas dentro de documentos (como PDF) o páginas web. Para crear su primera base de conocimientos, visite la documentación de Google Cloud.

#### Respuesta de Dialogflow

La respuesta completa en formato **JSON** de Dialogflow se guarda automáticamente en la base de datos, en la tabla `sb_messages`, columna `payload`.

<div class="formatted-code-block-internal-container class=" id="bkmrk--125"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">---

</div></div></div></div></div></div></div></div></div></div>#### Lógica Avanzada

#### Ignorar un Intent si faltan palabras clave

Para evitar respuestas incorrectas ante preguntas similares con sujetos diferentes, puede instruir al sistema para que ignore un Intent si no contiene palabras clave específicas:

<div class="formatted-code-block-internal-container class=" id="bkmrk-entre-en-dialogflow-"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Entre en Dialogflow y edite el Intent.
2. En las frases de entrenamiento, seleccione las palabras clave obligatorias y vincúlelas a una **Entidad** (nueva o existente).
3. Bajo **Actions and parameters**, marque la casilla **Required** (Requerido).
4. Añada un nuevo **Prompt** con el valor exacto: `skip-intent`.
5. Guarde el Intent.

</div></div></div></div></div></div></div></div></div></div>#### Adjuntos (Attachments)

<div class="formatted-code-block-internal-container class=" id="bkmrk-del-usuario%3A-se-env%C3%AD"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- **Del usuario:** Se envían a Dialogflow añadiendo las URLs de los archivos al mensaje.
- **Del chatbot:** Para enviar adjuntos, añada una respuesta de **Custom Payload** con el siguiente JSON:
    
    <div class="code-block ><div class=">  
    </div>

</div><div class="formatted-code-block-internal-container class=">{ "attachments": [["nombre", "TU-ENLACE"], ["nombre", "TU-ENLACE"]]} <div class="code-block ><div class=">  
</div></div></div></div></div></div></div></div></div></div></div><div class="formatted-code-block-internal-container class=" id="bkmrk--126"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">---

</div></div></div></div></div></div></div></div></div></div></div>#### Mensajes Enriquecidos en Dialogflow

Para enviar mensajes enriquecidos (botones, listas, etc.):

<div class="formatted-code-block-internal-container class=" id="bkmrk-ingrese-el-shortcode"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">1. Ingrese el **shortcode** directamente en el campo **TEXT RESPONSE**.
2. O bien, use una respuesta **Custom Payload** con: `{ "rich-message": "shortcode" }`. *(Nota: Si usa JSON, debe escapar las comillas dobles `"` con `\"` dentro del shortcode).*

</div></div></div></div></div></div></div></div></div></div></div>#### Respuestas de mensajes enriquecidos

Cuando un usuario interactúa (ej. hace clic en un botón):

<div class="formatted-code-block-internal-container class=" id="bkmrk-formato-web%3A-se-env%C3%AD"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">- **Formato web:** Se envía a Dialogflow como `ID|respuesta`.
    
    
    - Si el tipo es *registro, email o seguimiento*, los valores se envían como un array en la clave `queryParams['payload']`.
    - `ID` es el identificador del mensaje (atributo `id="TU-ID"`). Si no se define, se usa uno aleatorio.
- **Apps de mensajería (WhatsApp, etc.):** La respuesta no contiene el ID del mensaje enriquecido. Debe utilizar **Contextos** en Dialogflow para saber qué Intent activar.
- **Bloquear respuesta:** Para evitar que Dialogflow responda a una interacción de mensaje enriquecido, cree un Intent cuyo única "frase de entrenamiento" sea el **ID** del mensaje y déjelo sin respuesta definida.

</div></div></div></div></div></div></div></div></div></div></div>#### Obtener datos de formularios (Registro, Email, Seguimiento)

<div class="formatted-code-block-internal-container class=" id="bkmrk-active-configuraci%C3%B3n"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">1. Active `Configuración > Inteligencia Artificial > Google > Enviar detalles del usuario`.
2. En Dialogflow (`Fulfillment`), habilite **Webhooks**. Solo necesita la URL del archivo que recibirá los datos.
3. Cree un Intent donde la frase de entrenamiento sea el ID del formulario:
    
    
    - Formulario de registro: `registration`
    - Formulario de seguimiento: `sb-follow-up-form`
    - Formularios de email: `email`
4. Habilite el **Fulfillment** para ese Intent.

</div></div></div></div></div></div></div></div></div></div></div>#### Encuesta Secuencial (Ejemplo)

Para encadenar preguntas, use el **ID del mensaje enriquecido** como la frase de entrenamiento del siguiente paso:

<div class="formatted-code-block-internal-container class=" id="bkmrk-intent-1%3A-frase%3A-eje"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">1. **Intent 1:** Frase: `ejemplo encuesta`. Respuesta: `[buttons id="test-encuesta-1" options="Software,Productos,Servicios" title="¿Tipo de negocio?"]`
2. **Intent 2:** Frase: `test-encuesta-1` (El ID del anterior). Respuesta: `[select id="sec-encuesta-2" options="Prioritario,Express" title="Método de envío"]`
3. **Intent 3:** Frase: `sec-encuesta-2`. Respuesta: `¡Gracias por completar la encuesta!`.

---

</div></div></div></div></div></div></div></div></div></div></div>#### Vinculación de Departamentos

Permite dirigir al usuario a un agente de Dialogflow específico según el departamento.

<div class="formatted-code-block-internal-container class=" id="bkmrk-obtenga-los-ids-de-d"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">- Obtenga los IDs de departamento en `Configuración > Misceláneas > Departamentos`.
- Obtenga los IDs de proyecto en la configuración de sus agentes de Dialogflow.

---

</div></div></div></div></div></div></div></div></div></div></div>#### Más Información Técnica

<div class="formatted-code-block-internal-container class=" id="bkmrk-mensajes-de-voz%3A-dia"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">- **Mensajes de voz:** Dialogflow soporta reconocimiento de voz. Para audios de **WhatsApp** y archivos `.ogg`, debe activar `Configuración > Inteligencia Artificial > OpenAI > Reconocimiento de voz`.
- **Activación vía API:** Envíe un mensaje sin texto con el payload `{ "event": "activate-bot" }`.
- **Datos enviados:** ZampiBot envía `conversation_id` y `user_id` en el parámetro `queryParams` al detectar un intent.
- **Evento de bienvenida (CX):** Cree un *Event Handler* e inserte `Welcome` como *Custom Event*.
- **Sincronización de artículos:** Los artículos de ZampiBot se sincronizan automáticamente con la Knowledge Base de Dialogflow.
- **Cambio dinámico de agente:** Use la variable JS `SB_DIALOGFLOW_AGENT = "PROJECT_ID"` para cambiar el agente predeterminado en el frontend.
- **Detección de bucle:** Si el usuario repite el mismo mensaje y activa el mismo Intent, y OpenAI está activo, ZampiBot intentará usar OpenAI e ignorará a Dialogflow.
- **Variables en CX:** Acceda al usuario y conversación en las condiciones de ruta usando `$session.params.user_id` y `$session.params.conversation_id`.

<div>---

</div></div></div></div></div></div></div></div></div></div></div></div>### **Chatbot y Traducción Multilingüe**

#### Chatbot Multilingüe

La función ubicada en `Inteligencia Artificial > Google > Multilingual` verifica si existe un agente de Dialogflow configurado en el idioma del usuario y, de ser así, lo activa.

Para que esto funcione, el sistema debe conocer el idioma del usuario. Este se determina en el siguiente orden de prioridad:

<div class="formatted-code-block-internal-container class=" id="bkmrk-el-detalle-de-idioma"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. El detalle de idioma guardado en el perfil del usuario.
2. El idioma del navegador del usuario. *Nota: El idioma también puede ser identificado automáticamente mediante la función de **Detección de idioma**.*

---

</div></div></div></div></div></div></div></div>#### Traducción Automática (Agentes)

Esta función traduce automáticamente los mensajes del usuario al idioma del agente y los mensajes del agente al idioma del usuario en tiempo real.

**Activación:** Marque la opción en `Configuración > Inteligencia Artificial > Traducción automática`.

**Requisitos:**

<div class="formatted-code-block-internal-container class=" id="bkmrk-versi%C3%B3n-cloud%3A-si-in"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- **Versión Cloud:** Si `Inteligencia Artificial > Google > Modo de sincronización` está en **Automático**, funcionará sin configuración extra.
- **Versión Manual:** Debe completar la sincronización y la configuración que se detalla a continuación.

</div></div></div></div></div></div></div></div>**Configuración Manual:**

<div class="formatted-code-block-internal-container class=" id="bkmrk-inicie-sesi%C3%B3n-en-goo"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Inicie sesión en [Google Cloud Console](https://console.cloud.google.com) y seleccione el proyecto de su agente.
2. Busque y habilite la **Cloud Translation API**. (Servicio de pago con nivel gratuito).
3. Habilite la facturación en `Menú izquierdo > Facturación` asociando un método de pago válido.

</div></div></div></div></div></div></div></div>**Información Adicional:**

<div class="formatted-code-block-internal-container class=" id="bkmrk-los-agentes-ven-el-m"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- Los agentes ven el mensaje traducido, pero pueden ver el original haciendo clic en el menú del mensaje y seleccionando **Ver mensaje original**.
- El idioma del agente se basa en su perfil o en el idioma del área de administración.
- Las notificaciones también se traducen.
- **Excluir texto:** Para evitar que una parte del texto se traduzca, enciérrela entre caracteres de acento grave (`) o triple acento grave (```).

---

</div></div></div></div></div></div></div></div>#### Multilingüe vía Traducción (Chatbot)

La función en `Configuración > Inteligencia Artificial > Multilingüe a través de la traducción` traduce el mensaje del usuario al idioma predeterminado del chatbot (Dialogflow u OpenAI) para que este lo entienda, y luego traduce la respuesta del bot al idioma del usuario.

<div class="formatted-code-block-internal-container class=" id="bkmrk-alcance%3A-traduce-men"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- **Alcance:** Traduce mensajes enriquecidos, artículos, formularios de registro y notificaciones emergentes.
- **Optimización:** Las traducciones se guardan en archivos para minimizar costos y mejorar la velocidad.
- **Importante:** Si el inglés es uno de los idiomas soportados, **el inglés debe ser el idioma predeterminado** y los textos originales deben estar en inglés.
- **OpenAI:** Si usa datos de entrenamiento, configure el idioma en `Configuración > Inteligencia Artificial > OpenAI > Training Sources Language`.

---

</div></div></div></div></div></div></div></div>#### Detección de Idioma

Detecta el idioma de los mensajes del usuario y actualiza su perfil (y el agente de Dialogflow) automáticamente. Si no se soporta el idioma, muestra un mensaje de respaldo.

<div class="formatted-code-block-internal-container class=" id="bkmrk-variable%3A-puede-usar"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- **Variable:** Puede usar `{language_name}` en el mensaje de respaldo.
- **Condiciones:** El mensaje debe tener al menos **2 palabras**. La detección solo se ejecuta en los primeros **2 mensajes** de la conversación.
- **Con OpenAI:** Si el chatbot de OpenAI está activo para preguntas generales, el mensaje de respaldo nunca se enviará, ya que OpenAI responderá en el idioma detectado.

---

</div></div></div></div></div></div></div></div><details id="bkmrk-%23google-search-%C2%A0"><summary>\#google-search</summary>

</details>### **Búsqueda en Google (Google Search)**

La función en `Configuración > Inteligencia Artificial > Busqueda Google` permite al chatbot buscar respuestas en la web en tiempo real.

#### Configuración

<div class="formatted-code-block-internal-container class=" id="bkmrk-reg%C3%ADstrese-en-progra"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Regístrese en [Programmable Search Engine](https://programmablesearchengine.google.com/).
2. Cree un motor de búsqueda.
    
    
    - *Recomendación:* Añada solo su sitio web y Wikipedia para evitar resultados irrelevantes. Deje desactivada la opción "Buscar en toda la web".
3. Vaya a `Edit search engine > Setup > Basic`, copie el **Search engine ID** y péguelo en ZampiBot.
4. Para obtener la clave API, visite [Google Custom Search API](https://developers.google.com/custom-search/v1/overview) y haga clic en **Get a key**.

</div></div></div></div></div></div></div></div>#### Corrección Ortográfica

Si Dialogflow no encuentra una respuesta, esta función verifica si hay errores ortográficos. Si los encuentra, corrige el mensaje y vuelve a consultar a Dialogflow.

<div class="formatted-code-block-internal-container class=" id="bkmrk-tiene-menor-priorida"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- Tiene menor prioridad que la corrección de OpenAI, pero pueden trabajar juntas.
- No requiere que la Búsqueda en Google esté activa para funcionar.

</div></div></div></div></div></div></div></div>#### Entidades (Entities)

Analiza el mensaje para reconocer entidades como ciudades, eventos o fechas, ayudando a filtrar resultados inválidos de Google.

**Configuración:**

<div class="formatted-code-block-internal-container class=" id="bkmrk-en-google-cloud-cons"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. En Google Cloud Console, seleccione su proyecto.
2. Busque y habilite la **Cloud Natural Language API**.
3. Asegúrese de que la facturación esté habilitada para el proyecto.

</div></div></div></div></div></div></div></div>#### Información de Funcionamiento

<div class="formatted-code-block-internal-container class=" id="bkmrk-la-b%C3%BAsqueda-se-reali"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- La búsqueda se realiza solo si el chatbot **no sabe la respuesta** y el mensaje tiene más de **4 caracteres**.
- Si hay resultados, se activa el contexto de Dialogflow `google-search`. Este contiene el atributo `link` con la URL del resultado.
- Puede crear un Intent que responda con ese enlace si el usuario dice algo como "cuéntame más" o "quiero saber más".
- Es totalmente compatible con el chatbot de OpenAI.

---

</div></div></div></div></div></div></div></div>## **TICKETS**

Los siguientes ajustes están relacionados con la aplicación de Tickets. Esta aplicación permite a los usuarios crear conversaciones y enviar mensajes a través de una interfaz de usuario diferente a la del widget de chat tradicional.

#### Instalación

<div class="formatted-code-block-internal-container class=" id="bkmrk-dir%C3%ADjase-a-configura-2"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Diríjase a `Configuración > Apps`.
2. Simplemente haga clic en **Activo**.

---

</div></div></div></div></div>#### Mostrar el área de tickets

A continuación se detalla cómo implementar la interfaz de tickets según su versión de ZampiBot.

#### Versión WordPress

Para mostrar los tickets, utilice el siguiente código corto (shortcode): `[sb-tickets]`

Puede insertar este shortcode en cualquier página, entrada (post) o tipo de publicación personalizada dentro de su sitio WordPress.

#### Versión Cloud

Para mostrar el área de tickets, incluya el código de inserción del chat habitual en su página y añada el atributo `&mode=tickets` al final de la URL del script.

**Ejemplo de código:**


<div class="formatted-code-block-internal-container class=" id="bkmrk-%3Cscript-id%3D%22chat-ini-1"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class="><div class="code-block ><div class=">  
</div></div><div class="formatted-code-block-internal-container class=">&lt;script id="chat-init" src="https://chatbot.zampisoft.com/account/js/init.js?id=65895623&amp;mode=tickets"&gt;&lt;/script&gt; <div class="code-block ><div class=">- **Método alternativo:** puede mostrar el área de tickets insertando el código `<script>SB_TICKETS = true;</script>` en cualquier página que muestre el chat.

---

</div></div></div></div></div></div># **WHATSAPP**

Los ajustes a continuación están relacionados con la integración de la aplicación de WhatsApp.

#### Instalación

<div class="formatted-code-block-internal-container class=" id="bkmrk-vaya-a-configuraci%C3%B3n-2"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Vaya a `Configuración > Apps`.
2. Simplemente haga clic en **Activo**.

---

</div></div></div>#### ***WhatsApp Cloud API (Oficial)***

#### Modo de sincronización automática

***Disponible solo en la versión Cloud de ZampiBot.***

<div class="formatted-code-block-internal-container class=" id="bkmrk-haga-clic-en-sincron-1"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Haga clic en **Sincronizar ahora** y complete el procedimiento.
2. **Gestión de números:** Para añadir nuevos números, visite el [administrador de Facebook](https://business.facebook.com/wa/manage/phone-numbers/). Si añade números después de la sincronización inicial, deberá sincronizar nuevamente. Todos los números se cargarán automáticamente.
3. **Desactivar números:** Puede eliminar números específicos desde `Configuración > WhatsApp > Cloud API numbers`.

</div></div></div>Solución de problemas (Sync Auto):

<div class="formatted-code-block-internal-container class=" id="bkmrk-si-al-resincronizar-"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- Si al resincronizar no recibe el SMS/llamada, ingrese el último PIN recibido; debería funcionar.
- Si no recibe mensajes en ZampiBot:
    
    
    - Haga clic en **Reconectar** y complete el proceso.
    - Verifique en **Meta Business Suite** que haya añadido un método de pago válido.

</div></div></div>#### Modo de sincronización manual

Siga estos pasos para configurar la API oficial en su propio servidor:

<div class="formatted-code-block-internal-container class=" id="bkmrk-cree-una-cuenta-en-d"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Cree una cuenta en [developers.facebook.com](https://developers.facebook.com) o inicie sesión.
2. Cree una nueva app. Seleccione **Conectar con clientes a través de WhatsApp** como caso de uso y elija su cuenta comercial.
3. En ZampiBot, vaya a `Configuración > WhatsApp > Cloud API > Secret key` e ingrese una cadena de texto aleatoria (ej. "miclavesecreta").
4. En Facebook Developers:
    
    
    - Vaya a `Use cases > Connect with customers through WhatsApp > Customize`.
    - Haga clic en **Configuration**.
    - En **Callback URL**, ingrese la URL que encontrará en ZampiBot bajo `Configuración > WhatsApp > Cloud API > Configuration URL`.
    - En **Verify Token**, ingrese la misma cadena aleatoria que puso en ZampiBot ("miclavesecreta").
    - Haga clic en **Verificar y guardar**.
5. En **Webhook Fields**, suscríbase al evento `messages`.
6. **Pruebas:**
    
    
    - Haga clic en **API testing**. Obtenga un número de prueba temporal.
    - Añada su número personal como destinatario para verificarlo.
    - Copie el **Phone number ID** y péguelo en ZampiBot: `Configuración > WhatsApp > Cloud API numbers > Phone number ID`.
    - Genere un **Token de acceso temporal** y péguelo en ZampiBot: `Configuración > WhatsApp > Cloud API numbers > Token`.
    - Envíe un mensaje de prueba desde Facebook y responda desde su WhatsApp personal; debería aparecer en ZampiBot.

</div></div></div>**Activación para producción (Token Permanente):** Para que la integración funcione permanentemente sin caducar:

<div class="formatted-code-block-internal-container class=" id="bkmrk-vaya-a-configuraci%C3%B3n-3"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Vaya a [Configuración del Negocio de Facebook](https://business.facebook.com/settings).
2. Navegue a `Usuarios > Usuarios del sistema`. Cree un usuario administrador.
3. Haga clic en **Añadir Activos**, seleccione su App y marque **Control total**.
4. Vaya a `Cuentas > Cuentas de WhatsApp`, seleccione su cuenta, haga clic en **Asignar personas** y asigne al Usuario del Sistema con control total.
5. Vuelva a `Usuarios del sistema`, seleccione el usuario creado y haga clic en **Generar nuevo token**.
    
    
    - Seleccione su App.
    - Establezca la caducidad en **Nunca**.
    - Marque los permisos: `whatsapp_business_management`, `whatsapp_business_messaging`, `business_management`.
6. Copie el token generado y péguelo en ZampiBot: `Configuración > WhatsApp > Cloud API numbers > Token`.

</div></div></div>> \[!WARNING\] Si usa su número actual de WhatsApp Business en ZampiBot, dejará de funcionar en la app móvil de WhatsApp Business. Deberá completar un proceso de migración.

<div class="formatted-code-block-internal-container class=" id="bkmrk--127"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">---

</div></div></div>### **Configuración de Proveedores Externos**

#### 360dialog

<div class="formatted-code-block-internal-container class=" id="bkmrk-cree-una-cuenta-en-3"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Cree una cuenta en [360dialog](https://www.360dialog.com/).
2. En su panel, vaya a `WhatsApp Accounts` y genere una **API key**.
3. Pegue la clave en `Configuración > WhatsApp > 360dialog settings`.
4. Haga clic en **Sincronizar ahora**.

</div></div></div>#### Twilio

<div class="formatted-code-block-internal-container class=" id="bkmrk-cree-una-cuenta-en-t"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Cree una cuenta en [Twilio](https://www.twilio.com).
2. Obtenga su **ACCOUNT SID** y **AUTH TOKEN** y péguelos en `Configuración > WhatsApp > Twilio settings`.
3. **Configuración Sandbox:**
    
    
    - Vaya a `Messaging > Settings > WhatsApp sandbox settings`.
    - En **WHEN A MESSAGE COMES IN**, pegue la URL de ZampiBot que encontrará en `Configuración > WhatsApp > Twilio settings > Get configuration URL`.
4. **Configuración Producción:**
    
    
    - Compre un número de Twilio.
    - Cree un **Messaging Service** en Twilio (`Messaging > Services`).
    - Añada su número como remitente (**Sender**).
    - Copie el **Service SID** y péguelo en ZampiBot en el campo **Sender**.

</div></div></div>> \[!NOTE\] ZampiBot **no soporta APIs no oficiales** de WhatsApp. Solo funciona con Cloud API, 360dialog o Twilio.

<div class="formatted-code-block-internal-container class=" id="bkmrk--128"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">---

</div></div></div><details id="bkmrk-%23whatsapp-templates-"><summary>\#whatsapp-templates</summary>

</details>### **Plantillas de Mensajes (Templates)**

Según las políticas de WhatsApp, no puede enviar mensajes a usuarios que no le hayan escrito en las últimas 24 horas. Para contactarlos, debe usar una **Plantilla de mensaje**.

#### WhatsApp Cloud API

<div class="formatted-code-block-internal-container class=" id="bkmrk-gestione-sus-plantil"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Gestione sus plantillas en el [Administrador de WhatsApp](https://business.facebook.com/wa/manage/message-templates/).
2. En ZampiBot, vaya a `Configuración > WhatsApp > Cloud API template fallback`.
3. **Configuración de variables:**
    
    
    - **Idiomas:** Ingrese los códigos de idioma soportados separados por comas (ej. `es, en_US`).
    - **Header/Body variables:** Ingrese los valores dinámicos separados por comas. Puede usar campos de combinación como `{recipient_name}`. El orden debe coincidir con los parámetros de su plantilla.
    - **Botones:** Si su plantilla tiene botones con URL dinámica, ingrese los enlaces. Si son estáticos, escriba `skip_parameter`.

</div></div></div>**Enviar plantilla a usuarios nuevos:**

<div class="formatted-code-block-internal-container class=" id="bkmrk-ingrese-su-id-de-cue"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Ingrese su **ID de Cuenta Comercial** en `Configuración > WhatsApp > Cloud API numbers > Business Account ID`.
2. Vaya a la sección **Usuarios** de ZampiBot, seleccione los destinatarios y haga clic en el icono de WhatsApp en la esquina superior derecha.

---

</div></div></div>#### Llamadas de WhatsApp

Permite iniciar llamadas de voz o video desde el panel de administración.

<div class="formatted-code-block-internal-container class=" id="bkmrk-habilite-las-llamada"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">1. Habilite las llamadas en el Administrador de WhatsApp (`Settings > WhatsApp accounts > Settings`).
2. Cree una plantilla de tipo **Calling permissions request** (Solicitud de permiso de llamada) en Facebook.
3. Ingrese el ID de la plantilla en `Configuración > WhatsApp > Calls > Call permission template ID`.
4. Para llamar, abra el perfil de un usuario en ZampiBot y haga clic en el icono de teléfono o video.

---

</div></div></div>#### Tienda en WhatsApp (WhatsApp Shop)

Muestre productos de su catálogo directamente en el chat.

<div class="formatted-code-block-internal-container class=" id="bkmrk-producto-%C3%BAnico%3A%7Bcata"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- **Producto único:**`{catalog id="CATALOG_ID" product_id="PROD_ID"}`
- **Múltiples productos:**`{catalog id="CAT_ID" product_id_1_1="P1" section_1="Titulo Sección" ...}`
- **Webhook de Pedidos:** Configure la URL para procesar pedidos en `Configuración > WhatsApp > Order webhook`.

---

</div></div></div>#### Información Adicional

<div class="formatted-code-block-internal-container class=" id="bkmrk-ventana-de-24-horas%3A"><div class="formatted-code-block-internal-container class="><div class="formatted-code-block-internal-container class=">- **Ventana de 24 horas:** Si intenta escribir a un usuario fuera de la ventana de 24 horas sin usar una plantilla, recibirá un error de "Re-engagement".
- **Mensajes Enriquecidos:** ZampiBot soporta el envío de botones y listas a WhatsApp. Si usa menús de selección con más de 3 opciones, use el atributo `whatsapp="Texto del menú"` en el shortcode.
- **Chatbot:** Totalmente compatible, incluyendo **Toma de control humana** y reconocimiento de voz (para audios de WhatsApp).
- **Limitaciones:** Twilio tiene un límite de 1600 caracteres por mensaje. Se recomienda encarecidamente usar la **API Oficial de Cloud API**.

<div>  
</div>---

</div></div></div><details id="bkmrk-%23messenger-%C2%A0"><summary>\#messenger</summary>

</details># MESSENGER


Aquí tiene la documentación completa para la integración de **Messenger (Facebook e Instagram).**

#### Instalación

<div id="bkmrk-vaya-a-configuraci%C3%B3n-4"><div class="label label-docs">1. Vaya a `Configuración > Apps.`
2. Simplemente haga clic en **Activo**.

---

</div></div>#### Modo de sincronización automática

*Recomendado para la versión Cloud.*

<div id="bkmrk-haga-clic-en-el-bot%C3%B3"><div class="label label-docs">1. Haga clic en el botón de sincronización.
2. Seleccione al menos **1 página de Facebook**.
3. Una vez completado, el sistema devolverá información que deberá verificar en `Configuración > Messenger > Facebook pages`.

</div></div><p class="callout warning">**¡Listo!** Todos los mensajes nuevos enviados a las páginas de Facebook y cuentas de Instagram seleccionadas aparecerán en el área de administración de ZampiBot. *(Nota: Solo se sincronizarán los mensajes nuevos recibidos tras la activación; los mensajes antiguos no se importarán).*</p>

<div id="bkmrk--129"><div class="label label-docs">---

</div></div>#### Modo de sincronización manual

Siga estos pasos si necesita configurar la integración manualmente en su propio servidor:

<div id="bkmrk-cree-una-cuenta-o-in"><div class="label label-docs">1. Cree una cuenta o inicie sesión en [developers.facebook.com](https://developers.facebook.com).
2. Cree una nueva App:
    
    
    - Nombre la aplicación.
    - En **Casos de uso**, seleccione:
        
        
        - **Manage messaging &amp; content on Instagram** (Gestionar mensajería y contenido en Instagram).
        - **Engage with customers on Messenger from Meta** (Interactuar con clientes en Messenger).
        - **Manage everything on your Page** (Gestionar todo en tu Página).
    - En la pestaña **Negocio**, seleccione "I don't want to connect a business portfolio yet" (No quiero conectar un portafolio de negocios todavía).
3. Configuración de Messenger:
    
    
    - Vaya a `Use cases > Engage with customers on Messenger from Meta > Customize`.
    - Haga clic en **Messenger API Setup**.
    - En ZampiBot, establezca el **Modo de sincronización** en **manual** en `Configuración > Messenger`.
    - Copie la **Callback URL** desde `Configuración > Messenger > Get configuration URL` y péguela en Facebook.
    - Cree una cadena aleatoria (token) y péguela en `Configuración > Messenger > Secret key`. Use la misma cadena en el campo **Verify Token** de Facebook.
    - **Campos del Webhook:** Seleccione `inbox_labels, message_deliveries, message_echoes, message_reactions, message_reads, messages, messaging_account_linking, messaging_handovers, messaging_optins, messaging_policy_enforcement, messaging_postbacks, messaging_referrals, feed`.
4. Generación de Tokens:
    
    
    - En la sección **Generate access tokens**, haga clic en **Connect** y seleccione las páginas a sincronizar.
    - En la columna **Webhook Subscription**, haga clic en **Add Subscriptions** y seleccione: `messages, messaging_postbacks, messaging_optins, message_reads, feed, message_echoes`.
    - En la columna **Tokens**, haga clic en **Generate**.
    - Copie el token y péguelo en ZampiBot: `Configuración > Messenger > Facebook pages` (en el campo Access Token).
    - Copie también el **Page ID** y **Page Name** de Facebook y péguelos en ZampiBot. Repita para cada página.
5. Permisos:
    
    
    - Vaya a `Use cases > Permissions and Features`.
    - Añada: `pages_manage_metadata, pages_messaging, pages_read_engagement, pages_show_list`.
6. Sincronización de Comentarios (Opcional):
    
    
    - Vaya a `Use cases > Manage everything on your Page > Customize`.
    - En Permisos, añada: `pages_read_user_content, pages_manage_engagement`.
7. Sincronización de Instagram (Opcional):
    
    
    - Vaya a `Use cases > Manage messaging & content on Instagram > Customize`.
    - Haga clic en **API setup with Instagram login**.
    - Configure el Webhook con la misma URL y Token que Messenger.
    - **Campos del Webhook:**`messages, messaging_postbacks, messaging_seen, messaging_handover, message_reactions, standby, comments`.
    - **Obtener Instagram ID:** Use la siguiente URL en su navegador (reemplazando los datos): `https://graph.facebook.com/FACEBOOK-PAGE-ID/?access_token=ACCESS-TOKEN&fields=instagram_business_account`
    - Pegue el ID obtenido en `Configuración > Messenger > Facebook pages > Instagram ID`.
    - En Permisos, añada: `instagram_basic, instagram_business_basic, instagram_manage_comments, instagram_manage_messages, instagram_business_manage_messages`.
8. **Revisión:** Haga clic en **Publish** y envíe su App a revisión para aprobar los permisos añadidos. (Nota: Nuestro soporte no cubre la asistencia para la aprobación de la App).

---

</div></div>#### Vinculación de Instagram

Para vincular Instagram a su página de Facebook y ZampiBot:

<div id="bkmrk-vaya-a-la-configurac"><div class="label label-docs">1. Vaya a la configuración de su Página de Facebook: `Configuración > Cuentas vinculadas > Instagram`.
2. Haga clic en **Conectar cuenta** y complete el proceso.
3. Vuelva a sincronizar Messenger con ZampiBot para actualizar los permisos.

---

</div></div>#### Comentarios

Los comentarios en sus publicaciones de Facebook e Instagram aparecerán en ZampiBot y podrá responderlos como un chat normal.

<div id="bkmrk-dm-for-comments%3A-per"><div class="label label-docs">- **DM for Comments:** Permite enviar un mensaje directo automático a usuarios que comentan por primera vez en sus publicaciones. Deje el campo **Post ID** vacío para aplicarlo a todos los posts.
- **Chatbot:** El chatbot funciona en comentarios, incluyendo la **toma de control humana**. Puede desactivarlo en `Configuración > Messenger > Disable chatbot for comments`.
- **Limitaciones:** Los mensajes enriquecidos (imágenes, botones) no son compatibles en las respuestas a comentarios; solo texto.

---

</div></div>#### ℹ️ Información Adicional y Solución de Problemas

<div id="bkmrk-no-recibe-mensajes-d"><div class="label label-docs">- **No recibe mensajes de Instagram:**
    
    
    - Verifique en la app móvil de Instagram: `Configuración > Privacidad > Mensajes > Herramientas conectadas - Permitir acceso`.
    - Su cuenta de Instagram debe ser **Business** (Negocios), no Creador ni Profesional estándar.
    - En **Meta Business Suite**, vaya a `Usuarios > Personas`, seleccione su cuenta de Instagram y asegúrese de tener todos los permisos activos.
- **No recibe mensajes de Facebook:** Asegúrese de no tener activas respuestas automáticas nativas de Facebook (como el mensaje de bienvenida).
- **Mensajes duplicados / Bucle infinito:** Si tiene dos instalaciones de ZampiBot conectadas a la misma cuenta, elimine el **Instagram ID** en una de ellas o use el botón **Unsubscribe** para desvincular el webhook.
- **Botón Unsubscribe:** Elimina la suscripción del webhook de todas sus páginas. Útil para detener la recepción de mensajes.
- **Usuarios:** Cada usuario de ZampiBot tiene solo 1 conversación de Facebook y 1 de Instagram.
- **Mensajes Enriquecidos:** Se convierten automáticamente cuando es posible. Botones y listas solo soportan máximo 3 opciones y funcionan principalmente en la app móvil de Instagram.
- **Privacidad:** Solo los mensajes privados llegan al inbox; las publicaciones en el muro no.
- **IA y Chatbot:** Soportan detección de idioma, corrección ortográfica, traducción y búsqueda en Google.
- **Límites:** Mensajes mayores a 1000 caracteres se truncarán. Solo se sincronizan mensajes nuevos.

</div></div>**Solicitud de eliminación de datos (Versión Cloud):** Para eliminar sus datos de ZampiBot, haga clic en `Configuración > Messenger > Unsubscribe` y luego elimine su cuenta desde el panel de perfil.

---

## TWITTER (X) 

Los siguientes ajustes están relacionados con la integración de la aplicación de Twitter.

#### Instalación

Siga estos pasos rigurosamente para conectar su cuenta de Twitter con ZampiBot:

1. **Registro:** Regístrese en [developer.twitter.com](https://developer.twitter.com).
    
    
    - *Importante:* Asegúrese de verificar su número de teléfono en [twitter.com/settings/phone](https://twitter.com/settings/phone) o el registro fallará.
2. **Crear App:** Cree su primera aplicación ingresando un nombre y haga clic en **Get keys**.
    
    
    - Copie la **API Key (Consumer key)** y la **API Key Secret (Consumer secret)**.
    - Péguelas en `Configuración > Twitter` dentro de ZampiBot.
3. **Solicitar Acceso Elevado:** Solicite el acceso "Elevated" desde [este enlace](https://developer.twitter.com/en/portal/products/elevated). Haga clic en **Apply for Elevated** y complete el formulario de la siguiente manera:
    
    
    - En el área *"In your words"* y en *"Will your app use Tweet, Retweet, Like, Follow, or Direct Message functionality?"*, ingrese el siguiente texto (en inglés): `I need access to the Account Activity API to start receiving Twitter Direct Messages to my chat software (ZampiBot) and to reply to them directly.`
    - Desactive todos los demás campos respondiendo **No** a preguntas como: "¿Planea analizar datos de Twitter?", "¿Planea mostrar Tweets fuera de Twitter?", "¿Su producto hará disponible información a una entidad gubernamental?".
    - Espere unos días a que Twitter revise y apruebe el acceso (recibirá un correo electrónico).
4. **Entorno de Desarrollo:** Una vez tenga el acceso Elevado, entre al [panel de desarrolladores](https://developer.twitter.com/en/portal/dashboard).
    
    
    - Vaya a `Menú izquierdo > Products > Premium > Dev environments`.
    - Bajo **Account Activity API / Sandbox**, haga clic en **Set up dev environment**.
    - En **Dev environment label**, ingrese `sb` (o el mismo valor que haya ingresado en ZampiBot bajo `Configuración > Twitter > Synchronization > Dev environment label`).
5. **Autenticación:** Ingrese a la configuración de su app desde `Menú izquierdo > Projects & Apps > Su Proyecto > Su App`.
    
    
    - Bajo **User authentication settings**, haga clic en **Set up** y active **OAuth 1.0a**.
    - En **App permissions**, marque la opción **Read and write and Direct message** (Lectura, escritura y Mensajes directos).
    - En **Callback URI / Redirect URL**, ingrese la URL que obtendrá en ZampiBot bajo `Configuración > Twitter > Get callback URL`.
    - En **Website URL**, ingrese la URL de su sitio web.
6. **Tokens de Acceso:** Ingrese al área de claves desde `Menú izquierdo > Projects & Apps > Su Proyecto > Su App > Keys and tokens`.
    
    
    - Bajo **Authentication Tokens**, genere el **Access Token and Secret**.
    - Copie y pegue ambos valores en `Configuración > Twitter` en ZampiBot.
7. **Nombre de Usuario:** Ingrese su nombre de usuario de Twitter en `Configuración > Twitter > Your username`.
    
    
    - Obténgalo de su perfil (el nombre que comienza con @ o la parte final de la URL, ej: `https://twitter.com/ZampiBot` -&gt; `ZampiBot`).
8. **Suscripción:** Guarde los ajustes en ZampiBot y haga clic en el botón `Configuración > Twitter > Subscribe`.

¡Listo! Todos los mensajes directos enviados a su cuenta de Twitter serán recibidos en ZampiBot.

---

#### Información Adicional

- **Mensajes duplicados:** Si recibe mensajes duplicados durante las pruebas, es posible que la cuenta de Twitter que está utilizando para enviar el mensaje sea la misma que sincronizó. Intente enviar un mensaje desde una cuenta de Twitter diferente.
- **Requisitos del servidor:** Debe usar un dominio en vivo (**HTTPS**); *localhost* no es compatible.
- **Límites de respuesta:** Cuando se recibe un mensaje de un usuario de Twitter, puede enviar hasta **5 mensajes de respuesta** dentro de una ventana de 24 horas. No se pueden enviar mensajes después de 24 horas de haber recibido el último mensaje del usuario.
- **Adjuntos:** Puede enviar un máximo de 3 o 4 archivos adjuntos dependiendo del tipo de medio.
- **Mensajes enriquecidos:** Los siguientes tipos de mensajes enriquecidos de ZampiBot **no son compatibles**: control deslizante de imágenes, control deslizante (slider) y tarjetas.
- **Inteligencia Artificial:**
    
    
    - El **chatbot** es compatible.
    - La función de **toma de control humana** (human takeover) es compatible.
    - Las funciones de IA soportadas incluyen: detección de idioma, corrección ortográfica, multilingüe vía traducción y búsqueda en Google.

<div id="bkmrk--132">  
</div>---

# **TELEGRAM**

Los siguientes ajustes están relacionados con la aplicación de Telegram.

#### Instalación

1. Desde `Configuración > Apps`, haga clic en **Telegram** e ingrese su clave de licencia para instalar y activar la aplicación. Más detalles **aquí**. Si tiene la **versión Cloud**, haga clic en **Activo**.
2. Una vez instalada la aplicación, visite [https://t.me/botfather](https://t.me/botfather).
3. Si ya ha creado un bot de Telegram en el pasado, escriba el comando `/mybots`, abra su bot y haga clic en **API token**.
4. Si nunca ha creado un bot de Telegram antes, escriba el comando `/newbot` para crear un nuevo bot. El BotFather le pedirá un nombre y un nombre de usuario; ingréselos y genere el token de autenticación. Más detalles en \[suspicious link removed\].
5. Copie el token y péguelo en `ZampiBot > Telegram > Token`, luego haga clic en **Sincronizar ahora**. Su sitio web debe usar HTTPS (certificado SSL), HTTP no es compatible.
6. Ha terminado. Todos los mensajes enviados a su bot de Telegram aparecerán en el área de administración de conversaciones de Support Board.

#### Más información

- Los **mensajes enriquecidos** de ZampiBot se convierten automáticamente a mensajes enriquecidos de Telegram cuando es posible; de lo contrario, se eliminan del mensaje.
- Las conversaciones y mensajes de Telegram son compatibles con **cola y enrutamiento**.
- El **chatbot** es compatible. La función de **toma de control humana** es compatible.
- Las funciones de IA compatibles incluyen **detección de idioma**, **corrección ortográfica**, **multilingüe vía traducción** y **búsqueda en Google**.
- La función `Configuración > OpenAI > Reconocimiento de voz` no es compatible con los mensajes de audio de Telegram.
- El **mensaje de seguimiento** es compatible, pero el mensaje se envía siempre, incluso si un agente responde.
- El **mensaje offline** (fuera de línea) es compatible, pero el horario no se envía.
- Puede verificar el estado del webhook desde `https://api.telegram.org/bot<su_token_de_bot>/getWebhookInfo`. Reemplace `<su_token_de_bot>` con su token.


<details id="bkmrk-%23telegram-notificati"><summary>\#telegram-notifications</summary>

</details>#### Notificaciones

Los agentes pueden ser notificados a través de Telegram cuando llega un nuevo mensaje.

Las notificaciones se envían solo cuando es necesario, de acuerdo con los otros ajustes de notificación. Habilite Configuración &gt; Telegram &gt; Notificaciones &gt; Todos los mensajes para recibir siempre notificaciones de todos los mensajes.

#### Activación

1. Navegue a `Configuración > Telegram > Notificaciones` y haga clic en **Activar**.
2. Ingrese el nombre del canal de Telegram en `Configuración > Telegram > Notificaciones > Nombre del canal`. El nombre debe coincidir exactamente con el nombre de su canal de Telegram. Este valor debe guardarse **antes** de crear el canal.
3. Abra Telegram en su teléfono o a través de la **aplicación web** y cree un **nuevo canal** utilizando el nombre definido anteriormente.
4. Después de crear el canal, edite su configuración y agregue el bot de Telegram sincronizado con Support Board como administrador.

---

# **VIBER**

Los siguientes ajustes están relacionados con la aplicación Viber.

#### Instalación

1. Desde `Configuración > Apps`, haga clic en **Activo**.
2. Cree el bot en [https://partners.viber.com/account/create-bot-account](https://partners.viber.com/account/create-bot-account).
3. Copie el token y péguelo en `ZampiBot > Viber > Token`, luego haga clic en **Sincronizar ahora**. Su sitio web debe usar HTTPS (certificado SSL), HTTP no es compatible.
4. Ha terminado. Todos los mensajes enviados a su bot de Viber aparecerán en el área de administración de conversaciones de ZampiBot

#### Más información

- Los **mensajes enriquecidos** de Support Board se convierten automáticamente a mensajes enriquecidos de Viber cuando es posible; de lo contrario, se eliminan del mensaje.
- Las conversaciones y mensajes de Viber son compatibles con **cola y enrutamiento**.
- El **chatbot** es compatible. La función de **toma de control humana** es compatible.
- Las funciones de IA compatibles incluyen **detección de idioma**, **corrección ortográfica**, **multilingüe vía traducción** y **búsqueda en Google**.
- El **mensaje de seguimiento** es compatible, pero el mensaje se envía siempre, incluso si un agente responde.
- El **mensaje offline** es compatible, pero el horario no se envía.

---

# **SLACK**

Los siguientes ajustes están relacionados con la aplicación Slack.

#### Instalación

1. Desde `Configuración > Apps`, haga clic en **Activo**.
2. Una vez instalada la aplicación, vaya a `Configuración > Slack`, haga clic en el botón **Sincronizar ahora** y siga las instrucciones.

#### ¿Tiene problemas?

La sincronización de Slack puede no ser exitosa por varias razones; a continuación se presentan las más comunes:

<div class="horizontal-scroll-wrapper" id="bkmrk-descripci%C3%B3n-del-prob"><table class="table table-bordered"><thead><tr><td>**Descripción del problema**</td><td>**Solución**</td></tr></thead><tbody><tr><td>**Puede recibir mensajes en Slack, pero no puede enviar mensajes desde Slack a ZampiBot**</td><td>Navegue a `/zampibot/apps/slack/post.php` desde su navegador. Además, en `Configuración del espacio de trabajo > Permisos`, debe permitir que cualquiera cree canales públicos. Si tiene más problemas, comuníquese con el equipo de soporte de Slack en [https://api.slack.com/support](https://api.slack.com/support).</td></tr><tr><td>**La sincronización de Slack no funciona**</td><td>Verifique nuevamente si eligió o no un canal público de Slack cuando intentó sincronizar Slack. Si no lo hizo, intente sincronizar Slack una vez más, esta vez eligiendo un canal público en su lugar. El canal general es una buena opción.</td></tr></tbody></table>

</div>#### Archivar canales manualmente

Para archivar un canal en Slack, siga estos pasos:

1. Abra el canal de Slack que desea archivar.
2. En la parte superior derecha, haga clic en el icono de engranaje y seleccione **Opciones adicionales**.
3. Haga clic en el icono de información en el área superior derecha de la pantalla, luego haga clic en el icono **Más**, y luego haga clic en **Opciones adicionales...**. Haga clic en **Archivar este canal**.

#### Vinculación de departamentos

Si la opción `Configuración > Slack > Department linking` está activa, cuando una conversación en ZampiBot se asigna a un **departamento**, se envía un nuevo mensaje al canal de Slack vinculado, informando a los usuarios de Slack que ha comenzado una nueva conversación e invitándolos a unirse al canal de Slack dedicado al usuario. Sin embargo, solo se puede acceder a la conversación completa en el canal de Slack dedicado del usuario específico.

- Obtenga los IDs de departamento en `Configuración > Misceláneas > Departamentos`.
- Obtenga los IDs de canal haciendo clic en el botón **Obtener IDs de canal**.

#### Campos de usuario

La opción `Configuración > Slack > User fields` le permite elegir qué detalles del usuario incluir en el mensaje enviado al canal principal cuando un nuevo usuario envía el primer mensaje. Puede incluir el slug de sus detalles de usuario personalizados o los siguientes slugs: `browser`, `browser_language`, `location`, `email`, `user_type`, `token`, `creation_time`, `country_code`, `current_url`, `os`, `city`, `address`, `postal_code`, `phone`, `birthdate`, `company`, `timezone`, `website`.

- **Predeterminado:**`email`, `browser`, `browser_language`, `location`.

#### Información

- Cuando un nuevo usuario envía el primer mensaje, se envía un mensaje de Slack con los detalles del usuario y un botón para unirse al canal del usuario al canal principal seleccionado durante la sincronización, o al canal vinculado al **departamento** de la conversación. Solo la cuenta de Slack utilizada durante la sincronización se unirá automáticamente al canal del usuario; otros miembros de Slack tendrán que unirse manualmente a través del botón.
- Cuando `Configuración > Slack > Vinculación de agentes` está configurado, si la conversación se asigna a un departamento, solo los agentes asignados a ese **departamento** recibirán el mensaje; si la conversación se asigna a un solo agente, solo ese agente recibirá el mensaje.
- Slack es de uso gratuito. Solo las grandes empresas pueden necesitar un plan de suscripción pago, más detalles **aquí**.
- Las notificaciones Push son compatibles con Slack; cuando los agentes envían mensajes a través de Slack, se envían notificaciones Push a los usuarios.
- Si está utilizando Dialogflow, no se recibirán mensajes en Slack si el chatbot conoce la respuesta. Una vez que la **toma de control humana** está activa, todos los mensajes de la conversación se envían a Slack.
- La aplicación Slack es compatible con **email piping** y las aplicaciones de mensajería.
- Eliminar o abandonar un canal no es compatible, solo se admite archivar un canal.
- Cuando una conversación se archiva en Support Board, el canal de Slack vinculado también se archiva.
- Al responder a través de Slack a un usuario, si el usuario es notificado por correo electrónico o mensaje de texto, se envía un mensaje de Slack para notificarle.
- Use el comando de Slack `/archive` para archivar una conversación desde Slack.

---

# **LINE**

Los siguientes ajustes están relacionados con la aplicación LINE.

#### Instalación

1. Desde `Configuración > Apps`, haga clic en **Activo**.
2. Inicie sesión en [https://developers.line.biz/console/](https://developers.line.biz/console/) o cree una nueva cuenta.
3. Cree un nuevo **Provider** y luego un nuevo **Messaging API channel**, seleccione **Messaging API** como tipo de canal.
4. Desde el área de **Basic settings** del canal, copie **Channel secret** y péguelo en `ZampiBoot > Configuración > Line > Synchronization > Channel secret`.
5. Desde el área de **Messaging API** del canal, genere un **Channel access token (long-lived)**, cópielo y péguelo en `Zampibot > Configuraciones > Line > Sincronización > Access token`.
6. Ingrese su URL de Webhook en **Webhook URL** y haga clic en **Verify**. Obtenga la URL de Webhook en `Zampibot > Configuaración > Line > Synchronization > Webhook URL`.
7. Habilite **Use webhook**.
8. Escanee el **código QR** con su aplicación móvil LINE para comenzar a escribir en su canal.
9. Desactive la configuración **Auto-reply messages**.
10. Ha terminado. Todos los mensajes enviados a su cuenta de bot de LINE aparecerán en el área de administración de conversaciones de Zampibot.

#### Más información

- Tiene 7 días desde que el mensaje del usuario final fue enviado desde WhatsApp para responder al mensaje (Nota: el texto original dice "WhatsApp", pero en este contexto se refiere a la ventana de respuesta de LINE).
- Los stickers no son compatibles.
- Los **mensajes enriquecidos** de ZampiBot se convierten automáticamente a mensajes enriquecidos de LINE cuando es posible; de lo contrario, se eliminan del mensaje.
- Las conversaciones y mensajes de LINE son compatibles con **cola y enrutamiento**.
- El **chatbot** es compatible. La función de **toma de control humana** es compatible.
- Las funciones de IA compatibles incluyen **detección de idioma**, **corrección ortográfica**, **multilingüe vía traducción** y **búsqueda en Google**.
- El **mensaje de seguimiento** es compatible, pero el mensaje se envía siempre, incluso si un agente responde.
- El **mensaje offline** es compatible, pero el horario no se envía.

---

# **WECHAT**

Los siguientes ajustes están relacionados con la aplicación WeChat.

#### Instalación

1. Desde `Configuración > Apps`, haga clic en **Activo**.
2. Visite [https://mp.weixin.qq.com/...](https://mp.weixin.qq.com/cgi-bin/readtemplate?t=register/step1_tmpl&lang=en_US) y registre una **Service account**.
3. Después del registro, ingrese al área de **Official accounts** y desde el menú de la izquierda haga clic en `Settings and development > WeChat verification`. Debe completar la verificación; toma algunas semanas y cuesta USD 99, o CNY 300 para entidades chinas.
4. Desde el menú de la izquierda, haga clic en `Settings and development > Basic configuration` y copie **Developer ID (App ID)** y **Developer Password (App Secret)**. Pegue la información en `Zampibot > Configuración > WeChat`.
5. Desde el menú de la izquierda, haga clic en `Settings and development > Basic configuration` y complete la configuración del servidor (服务器配置(已启用)). En **Server Address (URL)** ingrese la URL que obtiene de `Zampibot > Configuración > WeChat > Synchronization > Get configuration URL`. En **Token** inserte cualquier valor que desee; el mismo valor debe ingresarse en `Zampibot > Configuración > WeChat > Token`.
6. Ha terminado. Todos los mensajes enviados a su cuenta de WeChat aparecerán en el área de administración de conversaciones de ZampiBot.

#### Más información

- Si recibe un error como `{"errcode":41001,"errmsg":"access_token missing rid: 631111-470b3b22-48553870"}`, necesita incluir la dirección IP de su servidor en la lista blanca desde `Official Account > Settings and Development > Basic Configuration > IP whitelist`.
- Los archivos de WeChat y los adjuntos de ubicación no son compatibles y no son recibidos por ZampiBot.
- Los enlaces no son compatibles en WeChat, se convierten a texto.
- Los **mensajes enriquecidos** deZampiBot se convierten automáticamente a mensajes enriquecidos de WeChat cuando es posible; de lo contrario, se eliminan del mensaje.
- Las conversaciones y mensajes de WeChat son compatibles con **cola y enrutamiento**.
- El **chatbot** es compatible. La función de **toma de control humana** es compatible.
- Las funciones de IA compatibles incluyen **detección de idioma**, **corrección ortográfica**, **multilingüe vía traducción** y **búsqueda en Google**.
- El **mensaje de seguimiento** es compatible, pero el mensaje se envía siempre, incluso si un agente responde.
- El **mensaje offline** es compatible, pero el horario no se envía.

---

# **ZALO**

Los siguientes ajustes están relacionados con la aplicación Zalo.

#### Instalación

1. Desde `Configuración > Apps`, haga clic en **Activo**.
2. Regístrese en [https://developers.zalo.me/](https://developers.zalo.me/) y cree una nueva **App**. Ingrese la información requerida y guarde.
3. Copie el **Application ID** y la **Application secret key** de la aplicación que acaba de crear y péguelos en `Zampibot > Configuración > Synchronization > Zalo`.
4. Desde el menú de la izquierda, haga clic en **Webhooks** y configure la URL; obtenga la URL de `Zampibot > Configuración > Zalo > Synchronization > Webhook URL`.
5. Desde el menú de la izquierda, haga clic en **Webhooks**, copie la **OA Secret Key** y péguela en `Zampibot > Configuración > Zalo > Synchronization > OA secret key`.
6. Desde el menú de la izquierda, haga clic en **Webhooks** y habilite los siguientes eventos de webhook: `user_send_location`, `user_send_image`, `user_send_link`, `user_send_text`, `user_send_sticker`, `user_send_gif`, `user_received_message`, `user_seen_message`, `oa_send_text`, `oa_send_image`, `oa_send_list`, `oa_send_gif`, `user_send_audio`, `user_send_video`, `user_send_file`, `user_reacted_message`, `user_received_message`.
7. Desde el menú de la izquierda, haga clic en `Official Account > OA Management` y vincule su Cuenta Oficial.
8. Desde el menú superior, haga clic en `Tools > API Explorer` o vaya a [https://developers.zalo.me/tools/explorer/](https://developers.zalo.me/tools/explorer/). Como **Access token type** seleccione **OA Access Token**, haga clic en **Get Access Token** y seleccione su Cuenta Oficial. Copie el **Refresh token** y péguelo en `Zampibot > Configuración > Zalo > Synchronization > Refresh token`. Más detalles **aquí**.
9. Desde el menú de la izquierda, haga clic en **Role** y agregue un usuario de prueba como administrador. Usará este usuario para enviar mensajes a su Cuenta Oficial de Zalo y probar la integración.
10. Desde el menú de la izquierda, haga clic en `Sign up to use API > Official Account API`, habilite **User Management** y haga clic en **Submit for review**.
11. Ha terminado. Todos los mensajes enviados a su cuenta oficial de Zalo aparecerán en el área de administración de conversaciones de ZampiBot.

#### Más información

- Necesita una Cuenta Oficial de Zalo para usar esta integración. ZampiBot recibirá los mensajes enviados a su Cuenta Oficial de Zalo.
- El **mensaje enriquecido** de tipo control deslizante (slider) solo envía el primer elemento a Zalo.
- Los **mensajes enriquecidos** de Support Board se convierten automáticamente a mensajes enriquecidos de Zalo cuando es posible.
- Las conversaciones y mensajes de Zalo son compatibles con **cola y enrutamiento**.
- El **chatbot** es compatible. La función de **toma de control humana** es compatible.
- Las funciones de IA compatibles incluyen **detección de idioma**, **corrección ortográfica**, **multilingüe vía traducción** y **búsqueda en Google**.
- El **mensaje de seguimiento** es compatible, pero el mensaje se envía siempre, incluso si un agente responde.
- El **mensaje offline** es compatible, pero el horario no se envía.

---

<div id="bkmrk--140">  
</div># **ZENDESK**

Los siguientes ajustes están relacionados con la aplicación Zendesk.

#### Instalación

<div id="bkmrk-desde-configuraci%C3%B3n--6"><div class="label label-docs">1. Desde `Configuración > Apps`, haga clic en **Zendesk** e ingrese su clave de licencia para instalar y activar la aplicación. Más detalles **aquí**. Si tiene la **versión Cloud**, haga clic en **Activo**.
2. Obtenga el **dominio** de la URL de su área de administración de Zendesk; copie la primera parte de la URL: `https://dominio.zendesk.com/`. Por ejemplo, el dominio de `https://zampibot.zendesk.com/agent/get-started/ticketing-system/ticketing-intro` es `zampibot`.
3. Obtenga la **clave API** (API key) desde `Menú izquierdo > Admin > Canales > API > Configuración` (*Left menu &gt; Admin &gt; Channels &gt; API &gt; Settings*). Haga clic en **Agregar token de API** (*Add API token*).
4. El **correo electrónico** es el correo de su cuenta de Zendesk.

</div></div>#### Más información

<div id="bkmrk-los-tickets-converti"><div class="label label-docs">- Los tickets convertidos por ZampiBot se sincronizan automáticamente cuando se envían y reciben nuevos mensajes en ZampiBot, y se vinculan a un usuario de Zendesk existente si lo hay; de lo contrario, se crea un nuevo usuario de Zendesk.
- ZampiBot vincula a los usuarios de Zendesk con los usuarios de ZampiBot a través del correo electrónico o número de teléfono.

  
</div></div>---

# **Créditos**

Los créditos se utilizan únicamente en ZampiBot. Los créditos son utilizados por las siguientes funciones, solo en el modo de sincronización **Automático**.

El modo de sincronización **Manual** no utiliza créditos. Si no desea utilizar créditos, puede usar el modo de sincronización **Manual** y sus propias claves API.

### Funciones que consumen créditos:

- `Inteligencia Artificial > Google`: **Chatbot de Dialogflow**, **Traducciones automáticas**, **Detección de idioma** y **Multilingüe vía traducción**.
- `Inteligencia Artificial > OpenAI`: **Chatbot**, **Corrección ortográfica**, **Reescritura de mensajes** y **Reconocimiento de voz**.
- **Extracción de datos en notas** (Note data scraping).

Puede cambiar el modo de sincronización en cualquier momento desde `Configuración > Inteligencia Artificial > OpenAI > Sync mode` o `Configuración > Inteligencia Artificial > Google > Sync mode`.

---

## **Precios**

Los créditos deben adquirirse desde [https://chatbot.zampisoft.com/account/?tab=membership](https://chatbot.zampisoft.com/account/?tab=membership). A continuación se detallan los costos de las funciones que utilizan créditos:

- **Dialogflow ES:** $0.004 por solicitud.
- **Dialogflow CX:** $0.014 por solicitud.
- **Mensaje de audio Dialogflow ES:** $0.000866 por segundo de audio.
- **Mensaje de audio Dialogflow CX:** $0.002 por segundo de audio.
- **Traducciones de Google:** $0.00004 por carácter.
- **OpenAI gpt-3.5-turbo-instruct:** $0.000004 por token.
- **OpenAI gpt-3.5-turbo:** $0.000004 por token.
- **OpenAI gpt-3.5-turbo-0125:** $0.000001 por token.
- **OpenAI gpt-3.5-turbo-1106:** $0.000002 por token.
- **OpenAI gpt-5:** $0.00001 por token.
- **OpenAI gpt-5-mini:** $0.000002 por token.
- **OpenAI gpt-5-nano:** $0.0000004 por token.
- **OpenAI gpt-4:** $0.00012 por token.
- **OpenAI gpt-4-32k:** $0.00024 por token.
- **OpenAI gpt-4-turbo:** $0.00003 por token.
- **OpenAI gpt-4o:** $0.00001 por token.
- **OpenAI gpt-4o-mini:** $0.00000015 por token.
- **OpenAI gpt-4.1-nano:** $0.0000004 por token.
- **OpenAI gpt-4.1-mini:** $0.0000016 por token.
- **OpenAI gpt-4.1:** $0.000008 por token.
- **OpenAI o1:** $0.00006 por token.
- **OpenAI o1-mini:** $0.000012 por token.
- **OpenAI o3-mini:** $0.0000044 por token.
- **OpenAI o4-mini:** $0.0000044 per token.
- **OpenAI ada:** $0.0000001 por token.
- **OpenAI text-embedding-3-small:** $0.00000004 por token.
- **OpenAI audio-to-text whisper:** $0.0002 por segundo de audio.
- **OpenAI whisper:** $0.0001 por segundo de audio.

---

#### Información

- Cuando sus créditos se agoten, si la recarga automática no está habilitada, se le notificará por correo electrónico. Recibirá un máximo de dos notificaciones por correo electrónico.
- Active la **recarga automática** para evitar quedarse sin créditos.
- Cuando la recarga automática está habilitada, el crédito se recargará una vez que caiga por debajo de **1**.

Aquí tiene la documentación técnica completa para **ZampiBot**, traducida al español y adaptada con el formato y estilo solicitados.

---

<details id="bkmrk-%23pwa-%C2%A0"><summary>/manual-de-usuario#pwa</summary>

</details># **Progressive Web App (PWA)**

El área de administración de **ZampiBot** es una PWA (Aplicación Web Progresiva), lo que significa que puede instalarla en su escritorio, Mac, iPhone o dispositivos móviles y utilizarla como una aplicación totalmente funcional.

> \[!NOTE\]
> 
> Esta función está optimizada para Google Chrome y Safari. Y es compatible con todas las versiones de ZampiBot.

#### Instalación en Escritorio (Desktop)

1. Ingrese a su área de administración.
2. Haga clic en el icono + ubicado en la parte superior derecha de la barra de URL de su navegador Chrome.

#### Instalación Móvil (Android y Windows)

1. Ingrese a su área de administración utilizando **Google Chrome**.
2. Abra el menú de configuración del navegador.
3. Desplácese hacia abajo y toque **Agregar a la pantalla principal** (*Add to Home screen*).
4. Confirme tocando **Agregar**.

#### Instalación Móvil (iPhone o Mac)

1. Ingrese a su área de administración utilizando **Safari**.
2. Presione el botón **Compartir** y seleccione **Agregar a inicio** (*Add to Home Screen*) en el menú emergente.
3. Toque **Agregar** en la esquina superior derecha para finalizar la instalación.

#### Personalización: Cambiar icono y nombre de la PWA

1. Descargue el archivo `manifest.json` proporcionado.
2. Edítelo reemplazando:
    
    
    - `YOUR NAME`: Con el nombre de su marca.
    - `YOUR NAME DESCRIPTION`: Con una descripción de su elección.
    - `example.png`: Con la URL de su icono (debe ser de **512x512px**).
3. Mueva el archivo editado a la carpeta de instalación de ZampiBot donde se encuentra el archivo admin.php.
    
    (Nota: Nuestro soporte no incluye asistencia para la edición de archivos; si requiere ayuda, puede contratar nuestros servicios).

---

## **Atajos de Teclado**

Los atajos de teclado del área de administración están habilitados tanto en PC como en MAC:

<table class="table table-bordered" id="bkmrk-atajo-descripci%C3%B3n-en"><thead><tr><td>**Atajo**</td><td>**Descripción**</td></tr></thead><tbody><tr><td>**ENTER** o **ESPACIO**</td><td>Confirma o cierra una alerta de diálogo; equivale a hacer clic en OK.</td></tr><tr><td>**ESC** o **CANCEL**</td><td>Rechaza una alerta de diálogo y la cierra. Cierra un lightbox.</td></tr><tr><td>**SHIFT + ENTER** o **CTRL + ENTER**</td><td>Añade un salto de línea en un mensaje (solo editor de administración).</td></tr><tr><td>**CANCEL**</td><td>En el área de conversaciones, archiva o elimina una conversación.</td></tr><tr><td>**CTRL + FLECHA ARRIBA/ABAJO**</td><td>Navega entre las conversaciones de la lista.</td></tr><tr><td>**CTRL + FLECHA DERECHA/IZQUIERDA**</td><td>Navega entre los usuarios en el área de usuarios.</td></tr><tr><td>**CTRL + V**</td><td>Pega una imagen del portapapeles y la envía como mensaje.</td></tr><tr><td>**CTRL + Clic izquierdo**</td><td>Selecciona múltiples conversaciones para realizar acciones en masa (archivar, eliminar, marcar como leído/no leído, etc.).</td></tr></tbody></table>

---

## **Parámetros de URL**

#### Chat Front-end (Widget)

Añada estos parámetros a cualquier URL de su sitio web que muestre el chat:

- `?token=TOKEN`: Inicia sesión automáticamente con un usuario existente.
- `?conversation=ID`: Abre una conversación específica. (Requiere el atributo `token` si el usuario no ha iniciado sesión).
- `?chat=open`: Abre el widget de chat automáticamente al cargar.

#### Área de Administración

Añada estos parámetros a su URL de administración (ej. `admin.php`):

- `?conversation=ID`: Abre una conversación específica.
- `?user=ID`: Abre el perfil de un usuario.
- `?setting=ID`: Abre un ajuste específico.
- `?report=ID`: Abre un reporte.
- `?area=name`: Abre un área específica (`conversations`, `users`, `settings`, `reports`).
- `?login_email=EMAIL&login_password=CONTRASEÑA`: Inicia sesión automáticamente como agente o administrador.

---

## **Calendly**

Siga estos pasos para enviar invitaciones de reserva de Calendly a través del chat:

1. Cree un tipo de evento en [Calendly](https://calendly.com/event_types/user/me).
2. Haga clic en **Compartir** y copie la URL.
3. Utilice un **mensaje enriquecido** de tipo botón en el chat de ZampiBot.
4. Incluya el atributo `success` para personalizar el mensaje de confirmación tras la reserva.

Ejemplo de código corto:

\[button link="https://calendly.com/usuario/sb" name="Agendar reunión" success="¡Gracias! Tu reunión ha sido programada."\]

---

## **Zapier**

#### Integración Manual (Todas las versiones)

La integración se basa en los **Webhooks** de ZampiBot. Cada webhook actúa como un disparador (trigger) en Zapier.

1. **Crear App en Zapier:**
    
    
    - Vaya a [developer.zapier.com](https://developer.zapier.com/) y cree una nueva integración.
    - Llene los campos requeridos.
2. **Configurar Trigger:**
    
    
    - Vaya a `Triggers > Add Trigger`.
    - En **API Configuration**, elija **REST Hook** como tipo de disparador.
    - Guarde los cambios.
3. **Crear un Zap:**
    
    
    - Vaya a sus Zaps y cree uno nuevo. Busque la app que acaba de crear.
    - Seleccione su evento de disparo.
    - Copie la **Webhook URL** proporcionada por Zapier.
4. **Configurar en ZampiBot:**
    
    
    - Vaya a `Configuración > Misceláneas > Webhooks > URL`.
    - Pegue la URL de Zapier, active los webhooks y guarde.
5. **Probar y Filtrar:**
    
    
    - Realice una acción en ZampiBot (enviar mensaje) para probar el disparador en Zapier.
    - **Importante:** Añada un paso de **Filtro** en Zapier. Como ZampiBot envía todos los webhooks a todos los Zaps, debe filtrar para que el Zap continúe solo si existe la variable deseada (ej. variable `message` para mensajes).

<p class="callout warning">\[!TIP\] **Múltiples Zaps:** Para usar múltiples webhooks, añada los IDs de los Zaps separados por comas al final de la URL base en la configuración de ZampiBot. *Ejemplo:*`https://hooks.zapier.com/hooks/catch/10352851/bbad21f,aaaa66t/`</p>

---

## 🔒 **Seguridad**

La seguridad es crítica aquí en ZampiBot. Trabajamos con expertos en seguridad que realizan auditorías periódicas. Implementamos continuamente las últimas tecnologías de seguridad y nos mantenemos actualizados sobre las amenazas más recientes. A continuación, encontrará algunas de las medidas de seguridad que se han implementado en ZampiBot.

#### Bloqueo de IP (IP Ban)

ZampiBot permite un máximo de **10 intentos fallidos de inicio de sesión** dentro de una hora. En caso de que un usuario, administrador o agente exceda este límite, no podrá acceder a su cuenta ni al área de administración durante un período de **1 hora**. Este mecanismo de bloqueo se basa en la dirección IP del usuario y sirve para disuadir ataques de fuerza bruta destinados a descubrir credenciales de acceso.

Si encuentra el error *"Too many login attempts. Please retry again in a few hours."* (Demasiados intentos de inicio de sesión. Por favor, inténtelo de nuevo en unas horas), tiene dos opciones:

1. Esperar unas horas.
2. Contactar al equipo de soporte de ZampiSoft.

#### Protección contra inyección XSS

Para prevenir ataques de inyección XSS (Cross-Site Scripting), todas las entradas de usuario sensibles se someten a un proceso de sanitización (limpieza de código malicioso).

#### Protección contra CSRF

Para prevenir ataques de falsificación de solicitudes entre sitios (Cross-Site Request Forgery o CSRF), todas las solicitudes se validan verificando la cookie de inicio de sesión y la cadena de inicio de sesión del lado del cliente.

#### Terminación de sesiones activas al actualizar usuario

Cada vez que se cambia la contraseña o los detalles de un administrador o agente, todas las sesiones activas se cierran automáticamente cuando se ejecutan operaciones sensibles o después de 1 hora.

#### Cifrado AES de 256 bits

Utilizamos cifrado AES de 256 bits para encriptar datos sensibles, como los datos de inicio de sesión de sesiones activas.

#### Protección de contraseña por nombre de archivo

ZampiBot asegura que todos los archivos subidos sean renombrados con una cadena alfanumérica aleatoria antepuesta al nombre original del archivo. Esto evita el descubrimiento de la URL y la descarga no autorizada de los archivos subidos. *Nota:* Para que esta función funcione correctamente, su servidor debe prohibir el listado de directorios (*directory listing*).

#### Conexiones cifradas MySQL

Para configurar ZampiBot y MySQL para usar conexiones cifradas, edite el archivo `config.php` de ZampiBot y agregue las siguientes constantes: `SB_DB_CERTIFICATE_PATH`, `SB_DB_CERTIFICATE_CLIENT_KEY`, `SB_DB_CERTIFICATE_CLIENT`, `SB_DB_CERTIFICATE_CA`. Ingrese los valores apropiados para cada constante.

---

<details id="bkmrk-%23performance-%C2%A0"><summary>\#performance</summary>

</details>## 🚀 **Rendimiento**

ZampiBot es uno de los sistemas de soporte más rápidos del mercado. El tamaño de sus archivos JavaScript y CSS es significativamente menor que el de la mayoría de los competidores, lo que garantiza tiempos de carga más rápidos. El rendimiento del lado del servidor es igualmente impresionante. El sistema es extremadamente ligero, construido sin frameworks ni código innecesario. Es modular, minimalista y totalmente optimizado para el máximo rendimiento.

Sin embargo, puede mejorar aún más el rendimiento desde: `Configuración > Misceláneas > Optimización de rendimiento`.

A continuación se describe cada ajuste de optimización disponible:

- **Minificar JS (Minify JS):** Habilite la carga de archivos JavaScript y CSS minificados para el widget de chat del frontend. Esto reduce el tamaño del archivo y mejora la velocidad de carga.
- **Desactivar reportes (Disable reports):** Desactiva el área de reportes y detiene el registro de datos de informes. Esto evita que el sistema consuma recursos para recopilar y almacenar información estadística.
- **Desactivar artículos (Disable articles):** Desactiva el área de artículos y la funcionalidad de la base de conocimientos. Esto reduce el uso de recursos al evitar que el sistema cargue artículos tanto en el lado del administrador como en el del cliente.
- **Archivar mensajes antiguos (Archive old messages):** Mueve los mensajes más antiguos que el intervalo especificado a una tabla de respaldo dedicada en la base de datos. Los mensajes archivados y sus conversaciones asociadas ya no aparecerán en las áreas de conversación del administrador o del usuario. Sin embargo, si un usuario envía un nuevo mensaje en el futuro, el sistema restaurará automáticamente la conversación y su historial. También puede acceder y restaurar manualmente las conversaciones archivadas en cualquier momento abriendo el perfil del usuario y seleccionando la conversación archivada.
    
    
    - *Recomendación:* Active esta función si maneja un gran volumen de mensajes (millones). Mejorará drásticamente el rendimiento.

---

## **Personalización**

Puede personalizarla utilizando la **API de JavaScript** y la **Web API**, o mediante JavaScript y CSS personalizados. El widget de chat no utiliza un *iframe*, por lo que puede personalizarlo fácilmente con JavaScript y CSS directos.

---

## **🤝 Contrátenos**

Si desea que personalicemos ZampiBot para usted, por favor contáctenos y envíenos sus requisitos. Le proporcionaremos un presupuesto basado en la complejidad del trabajo.

- **Tarifa:** Nuestra tarifa por hora es de **50 USD.**
- **Contacto:** Puede contactarnos a través del chat en la esquina inferior derecha de la página oficial https://zampisoft.com o enviarnos un correo electrónico a servicios@zampisoft.com
- **Tiempo de respuesta:** Generalmente respondemos dentro de las 24 horas.

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

# 📅 Actualizaciones

# 📅 Acualizaciones Dic_2025

## 31/12/2025 | ZampiBot | V 3.8.8

### 🐛 Corrección de errores

- Solucionado un error relacionado con los reportes.
- Corregidos errores menores relacionados con el diseño RTL (derecha a izquierda).
- Solucionado un error que mostraba artículos en todos los idiomas cuando el idioma no estaba definido.

### ✨ Nuevas funcionalidades

- <span style="white-space: pre-wrap;">Añadido soporte </span>**OTP**<span style="white-space: pre-wrap;"> (Contraseña de un solo uso) en el mensaje de seguimiento y mensajes enriquecidos de correo electrónico.</span>
- <span style="white-space: pre-wrap;">Ahora se muestra el </span>**nombre del canal**<span style="white-space: pre-wrap;"> de la aplicación de mensajería en lugar del nombre genérico de la aplicación.</span>

### 🚀 Optimizaciones

- **Cambio importante:**<span style="white-space: pre-wrap;"> Todos los correos electrónicos ahora utilizan la plantilla definida en </span>`<span class="editor-theme-code">Configuración > Notificaciones > Plantilla de correo electrónico</span>`. Se han eliminado las configuraciones de firma y encabezado de correo electrónico individuales.
    - **Nota:**<span style="white-space: pre-wrap;"> Es posible que deba actualizar el contenido de su plantilla de correo electrónico.</span>

---

## 31/12/2025 | Aplicación de Inteligencia Artificial | V 1.5.9

### 🐛 Corrección de errores

- Solucionado error en traducciones de cadenas que incluyen mensajes enriquecidos de tipo lista.
- Corregido error relacionado con el retraso del mensaje de bienvenida.
- <span style="white-space: pre-wrap;">Solucionados varios errores relacionados con el </span>**Playground**<span style="white-space: pre-wrap;"> (Área de pruebas).</span>
- <span style="white-space: pre-wrap;">Corregido error en la detección de la </span>**toma de control humana**.
- Solucionado problema de información de entrenamiento faltante en archivos CSV.

### ✨ Nuevas funcionalidades

- <span style="white-space: pre-wrap;">Añadido </span>**modo conversacional**<span style="white-space: pre-wrap;"> para el mensaje de seguimiento.</span>
- **Análisis de archivos:**<span style="white-space: pre-wrap;"> Ahora el chatbot puede analizar archivos adjuntos del usuario en formatos PDF, TXT y otros.</span>
- <span style="white-space: pre-wrap;">Nueva opción para </span>**desactivar la toma de control humana**<span style="white-space: pre-wrap;"> fuera del horario de oficina o si todos los agentes están desconectados (offline).</span>

---

## 31/12/2025 | Actualizaciones de Apps de Mensajería

### 📱 WhatsApp App (V 1.3.3)

- **✨ Novedad:**<span style="white-space: pre-wrap;"> Añadido soporte para </span>**llamadas de voz de WhatsApp**.
- **🚀 Optimización:**<span style="white-space: pre-wrap;"> Los mensajes mostrados en el área de administración ahora coinciden exactamente con los enviados a WhatsApp.</span>

### 💬 Messenger App (V 1.2.5)

- **🐛 Bug:**<span style="white-space: pre-wrap;"> Solucionado error relacionado con el mensaje de toma de control humana.</span>
- **✨ Novedad:**<span style="white-space: pre-wrap;"> Añadido soporte para </span>**comentarios de Instagram y Facebook**.
- **🚀 Optimización:**<span style="white-space: pre-wrap;"> Visualización exacta de mensajes enviados en el panel de administración.</span>

### ✈️ Telegram App (V 1.1.2)

- **🐛 Bug:**<span style="white-space: pre-wrap;"> Solucionado error con el mensaje de inicio.</span>
- **✨ Novedades:**
    - Notificaciones para agentes.
    - Mensaje de bienvenida.
    - Opción para banear usuarios.
- **🚀 Optimización:**<span style="white-space: pre-wrap;"> Visualización exacta de mensajes enviados en el panel de administración.</span>

---

---

# 📅 Actualizaciones Nov_2025

## 13/11/2025 | ZampiBot | V 3.8.7

### 🐛 Corrección de errores

- Solucionado error en la opción "cerrar chat".
- Corregido error con horarios de oficina incorrectos y horario de verano (DST).
- <span style="white-space: pre-wrap;">Solucionado error relacionado con el </span>**email piping**.
- Corregidos errores visuales en las imágenes de categorías de artículos y mensaje de seguimiento.

### ✨ Nuevas funcionalidades

- Mensajes informativos en el admin para acciones como cambiar estado o asignar conversaciones.
- <span style="white-space: pre-wrap;">Funcionalidad de </span>**"Olvidé mi contraseña"**<span style="white-space: pre-wrap;"> en el formulario de inicio de sesión.</span>
- Añadido recordatorio de calificación por correo electrónico.
- **Autoguardado**<span style="white-space: pre-wrap;"> automático para mensajes no enviados en el área de administración.</span>

### 🚀 Optimizaciones

- Las notificaciones (email, SMS, push) de conversaciones asignadas a un departamento ahora también se envían a agentes/admins sin departamento asignado.
- Los reportes de tiempos promedios ahora tienen en cuenta la toma de control humana y conversaciones archivadas.
- Sección de reportes mejorada.
- <span style="white-space: pre-wrap;">La configuración de retraso (mensaje de bienvenida/seguimiento) ahora es en </span>**segundos**.

---

## 13/11/2025 | Aplicación de Inteligencia Artificial | V 1.5.8

### 🐛 Corrección de errores

- Restaurado el botón de eliminar faltante en el bloque conector de flujo.
- Corregido error en el mensaje de respaldo de toma de control humana.
- Solucionado error en toma de control humana con traducciones multilingües activas.

### ✨ Nuevas funcionalidades

- <span style="white-space: pre-wrap;">El chatbot ahora reconoce la </span>**fecha y hora actual**<span style="white-space: pre-wrap;"> de su zona horaria.</span>
- Soporte multilingüe para mensajes directos de chat, correos directos y SMS directos.
- Soporte multilingüe para automatizaciones.

### 🚀 Optimizaciones

- Respuestas del chatbot mejoradas.
- Mejor integración de prompts personalizados.
- <span style="white-space: pre-wrap;">El ajuste de retraso del chatbot ahora es en </span>**segundos**.

---

## 13/11/2025 | Otras Actualizaciones de Apps

### 📱 WhatsApp App (V 1.3.2)

- **✨ Novedad:**<span style="white-space: pre-wrap;"> Soporte para </span>**WhatsApp Embedded Signup**<span style="white-space: pre-wrap;"> (Registro integrado).</span>

### 🟣 Viber App (V 1.0.2)

- **🐛 Bugs:**<span style="white-space: pre-wrap;"> Solucionados errores relacionados con el perfil del remitente y mensajes enriquecidos.</span>

---

---

# 📅 Actualizaciones Oct_2025

## 31/10/2025 | ZampiBot | V 3.8.6

- **🐛 Bugs:**
    - Solucionado error que impedía crear usuarios y agentes.
    - Solucionado error de asignación de agentes a calificaciones.
    - Solucionado error en la función "responder al mensaje".
- **🚀 Optimización:**<span style="white-space: pre-wrap;"> Las respuestas de calificación desde apps de mensajería ya no desarchivan las conversaciones.</span>

## 31/10/2025 | Aplicación de Inteligencia Artificial | V 1.5.7

- **✨ Novedades:**
    - Opción dedicada para habilitar traducciones automáticas de artículos.
    - Menú de idioma para artículos.
- **🐛 Bug:**<span style="white-space: pre-wrap;"> Solucionados varios errores de traducción de artículos.</span>

---

---

## 28/10/2025 | ZampiBot | V 3.8.5

### 🐛 Corrección de errores

- Traducciones de mensajes en el panel izquierdo del admin.
- Notificaciones push no enviadas si el mensaje era muy largo.
- Contenido corrupto en notificaciones de email con listas.
- Enlaces con caracteres unicode y calificaciones de artículos.
- Mensajes automatizados en carga de página no entregados.

### ✨ Nuevas funcionalidades

- <span style="white-space: pre-wrap;">Opción para </span>**fusionar dos usuarios**<span style="white-space: pre-wrap;"> en uno.</span>
- <span style="white-space: pre-wrap;">Inicio de sesión y registro con </span>**Google**<span style="white-space: pre-wrap;"> (Versión SaaS).</span>
- Navegación de una página para artículos.
- Nuevos bloques de artículo: divisor, caja de información.
- Añadir respuestas guardadas directamente desde el panel.
- Botón para agrandar el widget de chat en escritorio.
- <span style="white-space: pre-wrap;">Mensajes no enviados en admin se guardan como </span>**borradores**.
- Botón para limpiar texto en el editor del admin.

### 🚀 Optimizaciones

- Actualización del ajuste de compensación UTC.
- Mejoras en la función de calificaciones e interfaz de usuario (admin y artículos).

---

## 28/10/2025 | Aplicación de Inteligencia Artificial | V 1.5.6

### 🐛 Corrección de errores

- Contenido faltante en datos de entrenamiento.
- Errores de cierre de sesión y bloqueos en el Playground.
- Mensajes con textos duplicados.
- Flujos y recolección de detalles de usuario.

### ✨ Nuevas funcionalidades

- **Modo de calificación conversacional:**<span style="white-space: pre-wrap;"> La IA detecta la calificación en el mensaje del usuario.</span>
- **Mensajes unificados:**<span style="white-space: pre-wrap;"> Mensajes consecutivos del usuario se tratan como uno solo para una única respuesta del bot.</span>
- <span style="white-space: pre-wrap;">Integración con </span>**Google Calendar**<span style="white-space: pre-wrap;"> y </span>**TidyCal**.
- <span style="white-space: pre-wrap;">Nuevo bloque de flujo: </span>**Conector de flujo**.
- Historial de mensajes en Playground y botón de limpieza automática.

---

## 28/10/2025 | Actualizaciones Varias de Apps

- **Messenger (V 1.2.4):**<span style="white-space: pre-wrap;"> Corrección en recepción de mensajes.</span>
- **Telegram (V 1.1.1):**<span style="white-space: pre-wrap;"> Opción para ignorar mensaje de inicio automático, corrección de mensajes largos y formato de enlaces.</span>
- **WhatsApp (V 1.3.1):**<span style="white-space: pre-wrap;"> Corrección de formato de enlaces, soporte para "responder al mensaje".</span>
- **LINE, Viber, WeChat:**<span style="white-space: pre-wrap;"> Correcciones de formato de enlaces y actualizaciones de compatibilidad.</span>