FormFlow
WebSocket
Eventos em tempo real para captura, valores e progresso de execução do FormFlow via Socket.IO
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: trueereconnectionDelayno 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();