Webhooks
Configura webhooks de Salescaling para recibir eventos en tiempo real sobre reuniones, llamadas y actividad comercial.
Los webhooks te permiten recibir notificaciones en tiempo real sobre eventos que ocurren en Salescaling. Cuando se produce un evento, Salescaling enviará una solicitud HTTP POST a la URL que hayas configurado.
Configuración de Webhooks
Para configurar un webhook, necesitas proporcionar:
- Nombre del webhook
- URL de destino
- Tipo de evento a escuchar
- Headers personalizados (opcional)
- Descripción (opcional)
Tipos de Eventos
Actualmente soportamos los siguientes tipos de eventos:
1. Cambios en el Estado de Reuniones (meeting_status_changed)
Este evento se dispara cuando hay cambios en el estado de una reunión. Los posibles estados son:
meeting_created: Cuando se crea una nueva reuniónmeeting_deleted: Cuando se elimina una reuniónmeeting_transcript_done: Cuando se completa la transcripciónmeeting_summary_done: Cuando se completa el resumenmeeting_video_done: Cuando se completa el procesamiento del vídeomeeting_notes_done: Cuando se completa el procesamiento de las notas
Payload
{
"meetingId": "string",
"status": "meeting_created" | "meeting_deleted" | "meeting_transcript_done" | "meeting_summary_done" | "meeting_video_done" | "meeting_notes_done"
}
Notas
- El procesamiento del vídeo y del contenido de la reunión se realiza de forma paralela, por lo que el evento
meeting_video_donese puede recibir antes del eventomeeting_summary_done. - Si se quiere saber cuando se completa el procesamiento del contenido de la reunión, se puede utilizar el evento
meeting_summary_done. - Si se quiere saber cuando se completa el procesamiento de las notas, se puede utilizar el evento
meeting_notes_done.
2. Cambios en Notas de Reuniones (meeting_note_status_changed)
Este evento se dispara cuando hay cambios en al menos una nota de una reunión. Los posibles estados son:
meeting_note_created: Cuando se crea una nueva notameeting_note_deleted: Cuando se elimina una notameeting_note_updated: Cuando se actualiza una nota
Payload
{
"meetingNoteId": "string",
"status": "meeting_note_created" | "meeting_note_deleted" | "meeting_note_updated"
}
Notas
- Este evento se dispara una vez por cada nota que se procese.
- Al generarse notas de forma automática, se dispara este evento para cada nota generada.
3. Detección de Señales Comerciales (commercial_signal_detected)
Este evento se dispara cuando se detecta una señal comercial en una actividad. Las señales comerciales son indicadores importantes que pueden ayudar a identificar oportunidades o riesgos en las interacciones con clientes.
Payload
{
"code": "string",
"description": "string",
"contactId": "string",
"companyId": "string",
"activityType": "string",
"activityId": "string",
"evidence": ["string"],
"changeType": "string"
}
Campos
-
code: Código de la señal comercial detectada. Los tipos disponibles son:-
Engagement & Intent:
buying_intent: Intención de compra detectadainterest_in_trial: Interés en realizar una pruebaopportunity_qualified: Oportunidad calificadachampion_detected: Detección de un campeón internogatekeeper_detected: Detección de un guardiánfuture_meeting_scheduled: Reunión futura programadadecision_timeline_mentioned: Mencionada línea temporal de decisiónfollow_up_required: Se requiere seguimientofollow_up_deadline_mentioned: Mencionado plazo de seguimientomulti_department_involvement: Involucrados múltiples departamentos
-
Pricing, Budget & Negotiation:
pricing_discussed: Discusión sobre preciosbudget_blocker: Bloqueo por presupuestobudget_discussed: Discusión sobre presupuestodiscount_requested: Solicitado descuentocontractual_concerns: Preocupaciones contractualeslegal_process_discussed: Discusión sobre proceso legalrenewal_discussed: Discusión sobre renovaciónupsell_opportunity: Oportunidad de upsellpilot_success: Éxito del pilotopilot_failure: Fracaso del piloto
-
Fit & Product:
product_fit_confirmed: Confirmado ajuste del productousage_feedback_positive: Feedback positivo de usousage_feedback_negative: Feedback negativo de usotechnical_validation_passed: Pasada validación técnicatechnical_blocker: Bloqueo técnicointegration_concerns: Preocupaciones sobre integracióntraining_requested: Solicitado entrenamientofeature_request_made: Solicitada nueva funcionalidadsecurity_concerns: Preocupaciones de seguridadcompliance_concern: Preocupación sobre cumplimiento
-
Competition:
competitor_mentioned: Mencionado competidorcompetitor_comparison_favorable: Comparación favorable con competidorcompetitor_comparison_unfavorable: Comparación desfavorable con competidor
-
Risk & Churn:
churn_risk: Riesgo de abandonono_decision_maker: Sin tomador de decisionesinternal_disalignment: Desalineación internaresistance_to_change: Resistencia al cambioescalation_detected: Detectada escaladalow_engagement: Bajo compromisodeadline_blocker: Bloqueo por plazo
-
Relationship & Communication:
positive_feedback_on_demo: Feedback positivo en demonegative_feedback_on_demo: Feedback negativo en demorapport_detected: Detectado rapportmisalignment_on_goals: Desalineación en objetivosclient_asks_many_questions: Cliente hace muchas preguntasclient_confused_about_offering: Cliente confundido sobre la ofertatone_aggressive: Tono agresivotone_passive: Tono pasivospeaker_dominates_conversation: El hablante domina la conversaciónclient_drives_conversation: El cliente dirige la conversación
-
-
description: Descripción detallada de la señal -
contactId: ID del contacto relacionado -
companyId: ID de la empresa relacionada -
category: Categoría de la señal comercial. Los tipos disponibles son:positive: Señal positivarisk: Señal de riesgoneutral: Señal neutral
-
activityType: Tipo de actividad donde se detectó la señal. Los tipos disponibles son:meeting: Reunióncall: Llamadamail: Correo electrónico
-
activityId: ID de la actividad donde se detectó la señal -
evidence: Array de evidencias textuales que soportan la detección de la señal -
changeType: Tipo de cambio que representa la señal. Los tipos disponibles son:new: Nueva señal detectadaunchanged: Señal sin cambiosescalated: Señal escaladaimproved: Señal mejoradarecovered: Señal recuperada
Estructura de la Solicitud
Cada solicitud webhook incluye:
-
Headers:
Content-Type: application/json- Headers personalizados configurados
X-Webhook-Signature: Firma para verificar la autenticidad (próximamente)
-
Body:
- Definido según el tipo de evento
Mejores Prácticas
-
Verificación de Payload:
- Implementa la verificación de la firma del webhook (Próximamente)
-
Manejo de Errores:
- Responde con un código 2xx para confirmar la recepción
- Implementa reintentos en caso de fallos
- Mantén un registro de los eventos recibidos
-
Seguridad:
- Utiliza HTTPS para tu endpoint
- Implementa autenticación en tu endpoint, puedes especificar un token en las cabeceras de la solicitud
- Valida los datos recibidos antes de procesarlos
Ejemplo de Implementación
app.post("/webhook", (req, res) => {
const { type, payload } = req.body;
switch (type) {
case "meeting_status_changed":
handleMeetingStatusChange(payload);
break;
case "meeting_note_status_changed":
handleMeetingNoteStatusChange(payload);
break;
}
res.status(200).send("OK");
});
Límites y Restricciones
- Los webhooks tienen un tiempo de espera de 10 segundos
- Se realizarán hasta 3 reintentos en caso de fallo
- El tamaño máximo del payload es de 1MB
Soporte
Si necesitas ayuda con la implementación de webhooks o tienes preguntas sobre los eventos disponibles, contacta con nuestro equipo de soporte.