Lectico

Qué es

La API pública del widget de Lectico te permite controlar el comportamiento del chat de forma programática. Puedes abrir y cerrar el chat, cambiar el contexto de la lección, escuchar eventos y más.

Esta referencia está dirigida a desarrolladores que necesitan integraciones avanzadas más allá del snippet básico de instalación.

Inicialización

Lectico.init(options)

Inicializa el widget de chat en la página. Debe llamarse una única vez, después de que el script del widget se haya cargado.

Lectico.init({
  // Obligatorios
  apiUrl: 'https://api.lectico.com',
  courseId: 'mi-curso',
  assistantId: 'mi-asistente',
  apiKey: 'widget_pk_...',

  // Opcionales
  assistantName: 'Asistente de Ventas',
  assistantSubtitle: 'Respondo tus dudas al instante',
  welcomeMessage: 'Hola, soy tu asistente. ¿En que puedo ayudarte?',
  placeholder: 'Escribe tu pregunta...',
  position: 'bottom-right',
  theme: {
    primaryColor: '#1a1a2e',
    accentColor: '#4fc3f7',
    bubbleSize: 60
  },
  lessonContext: {
    moduleNumber: 1,
    lessonNumber: 3,
    lessonTitle: 'Titulo de la leccion'
  }
});

Opciones obligatorias

OpciónTipoDescripción
apiUrlstringURL base de la API de Lectico. Siempre 'https://api.lectico.com'.
courseIdstringIdentificador del curso o asistente (asignado por Lectico).
assistantIdstringIdentificador del asistente (asignado por Lectico).
apiKeystringAPI key de tipo widget. Puedes encontrarla en API Keys en el sidebar izquierdo.

Opciones de personalización

OpciónTipoValor por defectoDescripción
assistantNamestringNombre configurado en la pestaña AparienciaNombre del asistente que se muestra en la cabecera del chat.
assistantSubtitlestringSubtítulo configurado en la pestaña AparienciaTexto debajo del nombre en la cabecera.
welcomeMessagestringMensaje configurado en la pestaña AparienciaSaludo que aparece al abrir el chat por primera vez.
placeholderstring'Escribe tu pregunta...'Texto de placeholder en el campo de entrada del chat.
positionstring'bottom-right'Posición del botón flotante. Valores: 'bottom-right' o 'bottom-left'.

Opciones de tema

El objeto theme permite personalizar el aspecto visual del widget:

PropiedadTipoValor por defectoDescripción
primaryColorstring'#1a1a2e'Color principal: cabecera, botón flotante, burbujas del usuario. Formato hexadecimal.
accentColorstring'#4fc3f7'Color de acento: enlaces, botón de enviar, avatar. Formato hexadecimal.
bubbleSizenumber60Diámetro del botón flotante en píxeles (rango: 40-100).

Opciones de contexto

El objeto lessonContext permite indicar al widget en qué lección se encuentra el usuario. Esto es útil para asistentes de tipo Formación integrados en plataformas LMS:

PropiedadTipoDescripción
moduleNumbernumberNúmero del módulo actual.
lessonNumbernumberNúmero de la lección dentro del módulo.
lessonTitlestringTítulo de la lección actual.

Métodos

Lectico.open()

Abre la ventana de chat programáticamente.

Lectico.open();

Útil para abrir el chat en respuesta a una acción del usuario, como hacer clic en un botón personalizado de tu página.

Lectico.close()

Cierra la ventana de chat.

Lectico.close();

Lectico.isOpen()

Devuelve true si la ventana de chat está abierta, false si está cerrada.

if (Lectico.isOpen()) {
  console.log('El chat esta abierto');
}

Lectico.destroy()

Elimina completamente el widget del DOM. Después de llamar a este método, el botón flotante y la ventana de chat desaparecen de la página. Para volver a mostrar el widget, debes llamar a Lectico.init() de nuevo.

Lectico.destroy();

Acción destructivadestroy() elimina el widget y toda la conversación en curso. El usuario perderá el historial de la sesión actual.

Lectico.newConversation()

Reinicia la conversación. Se borra el historial de la sesión actual y el chat vuelve a mostrar el mensaje de bienvenida.

Lectico.newConversation();

Lectico.setLessonContext(context)

Actualiza el contexto de lección sin recargar la página. El asistente usará este nuevo contexto para las siguientes respuestas.

Lectico.setLessonContext({
  moduleNumber: 2,
  lessonNumber: 1,
  lessonTitle: 'Introduccion al modulo 2'
});

Este método es especialmente útil en aplicaciones SPA donde la navegación entre lecciones no recarga la página.

ParámetroTipoDescripción
context.moduleNumbernumberNúmero del nuevo módulo.
context.lessonNumbernumberNúmero de la nueva lección.
context.lessonTitlestringTítulo de la nueva lección.

Lectico.on(event, callback)

Registra un listener para un evento del widget. Consulta la sección de eventos para ver todos los eventos disponibles.

Lectico.on('messageSent', function(data) {
  console.log('El usuario pregunto:', data.question);
});

Eventos

El widget emite eventos que puedes escuchar con Lectico.on() para integrar el chat con tu aplicación.

open

Se dispara cuando el usuario abre la ventana de chat.

Lectico.on('open', function() {
  console.log('Chat abierto');
});

close

Se dispara cuando el usuario cierra la ventana de chat.

Lectico.on('close', function() {
  console.log('Chat cerrado');
});

messageSent

Se dispara cuando el usuario envía un mensaje.

Lectico.on('messageSent', function(data) {
  console.log('Pregunta:', data.question);
});
PropiedadTipoDescripción
data.questionstringTexto de la pregunta enviada por el usuario.

responseReceived

Se dispara cuando el asistente completa una respuesta.

Lectico.on('responseReceived', function(data) {
  console.log('Respuesta:', data.answer);
  console.log('Fuentes:', data.sources);
});
PropiedadTipoDescripción
data.answerstringTexto de la respuesta del asistente.
data.sourcesarrayLista de fuentes utilizadas para generar la respuesta.

conversationStarted

Se dispara cuando se completa la primera interacción de una conversación nueva.

Lectico.on('conversationStarted', function(data) {
  console.log('Conversacion iniciada:', data.conversationId);
});
PropiedadTipoDescripción
data.conversationIdstringIdentificador único de la conversación.

error

Se dispara cuando ocurre un error en el widget.

Lectico.on('error', function(data) {
  console.error('Error del widget:', data.message, '(codigo:', data.code, ')');
});
PropiedadTipoDescripción
data.messagestringDescripción del error.
data.codestringCódigo del error.

leadCaptured

Se dispara cuando un visitante completa el formulario de captura de datos en un asistente de tipo Ventas.

Lectico.on('leadCaptured', function(data) {
  console.log('Nuevo lead:', data.visitorName, data.visitorEmail);
});
PropiedadTipoDescripción
data.visitorNamestringNombre proporcionado por el visitante.
data.visitorEmailstringEmail proporcionado por el visitante.
data.conversationIdstringIdentificador de la conversación asociada.

escalationSent

Se dispara cuando se envía una escalación a soporte humano.

Lectico.on('escalationSent', function(data) {
  console.log('Escalacion enviada por:', data.studentName, data.studentEmail);
});
PropiedadTipoDescripción
data.studentNamestringNombre del usuario que solicitó la escalación.
data.studentEmailstringEmail del usuario que solicitó la escalación.

Ejemplo completo

Este ejemplo muestra cómo inicializar el widget, abrir el chat con un botón personalizado y registrar eventos:

<button id="abrir-chat">¿Necesitas ayuda?</button>

<script>
(function() {
  var s = document.createElement('script');
  s.src = 'https://api.lectico.com/storage/v1/object/public/widget/v1/lectico-widget.js';
  s.onload = function() {
    Lectico.init({
      apiUrl: 'https://api.lectico.com',
      courseId: 'mi-curso',
      assistantId: 'mi-asistente',
      apiKey: 'widget_pk_...',
      assistantName: 'Asistente de Ventas',
      welcomeMessage: 'Hola, ¿en que puedo ayudarte hoy?',
      theme: {
        primaryColor: '#2d3748',
        accentColor: '#38b2ac',
        bubbleSize: 56
      }
    });

    // Abrir el chat con un boton personalizado
    document.getElementById('abrir-chat').addEventListener('click', function() {
      Lectico.open();
    });

    // Registrar eventos
    Lectico.on('leadCaptured', function(data) {
      // Enviar a tu sistema de analytics
      console.log('Nuevo lead:', data.visitorEmail);
    });

    Lectico.on('error', function(data) {
      console.error('Error del widget:', data.message);
    });
  };
  document.body.appendChild(s);
})();
</script>

Próximos pasos