O FormFlow emite eventos via Socket.IO no namespace /formflow. Use-os para atualizar a interface em tempo real, sem polling.

Conectar

import io from 'socket.io-client';

const socket = io('https://api.tolky.to/formflow', {
  transports: ['websocket']
});

socket.on('connect', () => {
  socket.emit('join_form_flow_host', 'host-id-123');
});

Entrar e sair de rooms

Assine apenas os rooms relevantes para limitar o volume de eventos:

socket.emit('join_form_flow_host', hostId);
socket.emit('join_form_flow_form', formId);
socket.emit('join_form_flow_conversation', conversationId);
socket.emit('join_form_flow_lead', leadId);

socket.emit('leave_form_flow_host', hostId);
socket.emit('leave_form_flow_form', formId);
socket.emit('leave_form_flow_conversation', conversationId);
socket.emit('leave_form_flow_lead', leadId);

Eventos do servidor

form_flow_capture_started

Emitido quando uma captura de conversa é iniciada.

socket.on('form_flow_capture_started', ({ hostId, formId, conversationId, leadId, timestamp }) => {
  showLoadingIndicator();
});

form_flow_capture_progress

Emitido durante o andamento da captura.

socket.on('form_flow_capture_progress', ({ progress, formId, conversationId, timestamp }) => {
  updateProgressBar(progress); // 0–100
});

form_flow_capture_completed

Emitido ao concluir (com ou sem sucesso).

socket.on('form_flow_capture_completed', ({ success, result, formId, conversationId, timestamp }) => {
  if (success) updateFormData(result);
  else showError('Falha na captura');
});

form_flow_value_updated

Emitido quando um valor capturado é inserido ou atualizado.

socket.on('form_flow_value_updated', ({ variableKey, oldValue, newValue, strategy, leadId, timestamp }) => {
  updateField(variableKey, newValue);
});

form_flow_response_updated

Emitido quando o percentual de completude de um formulário muda.

socket.on('form_flow_response_updated', ({ completionPercent, isComplete, formId, leadId, timestamp }) => {
  updateCompletionBar(completionPercent, isComplete);
});

form_flow_step_executed

Emitido quando um step do CRUD Conversacional é executado.

socket.on('form_flow_step_executed', ({ stepNumber, totalSteps, action, success, result, progress, timestamp }) => {
  renderStepFeedback(stepNumber, action, success);
});

form_flow_plan_generated

Emitido quando um plano é gerado pelo reasonFormFlowPlan.

socket.on('form_flow_plan_generated', ({ plan, totalSteps, instructions, timestamp }) => {
  renderPlanPreview(plan);
});

Boas práticas

  • Reconexão automática: configure reconnection: true e reconnectionDelay no Socket.IO
  • Cleanup: ao desmontar componentes, saia dos rooms e desconecte o socket
  • Rooms específicos: prefira rooms de formulário ou conversa ao room de host para reduzir volume
// Ao desmontar
socket.emit('leave_form_flow_host', hostId);
socket.disconnect();