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ón
  • meeting_deleted: Cuando se elimina una reunión
  • meeting_transcript_done: Cuando se completa la transcripción
  • meeting_summary_done: Cuando se completa el resumen
  • meeting_video_done: Cuando se completa el procesamiento del vídeo
  • meeting_notes_done: Cuando se completa el procesamiento de las notas

Payload

json
{
  "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_done se puede recibir antes del evento meeting_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 nota
  • meeting_note_deleted: Cuando se elimina una nota
  • meeting_note_updated: Cuando se actualiza una nota

Payload

json
{
  "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

json
{
  "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 detectada
      • interest_in_trial: Interés en realizar una prueba
      • opportunity_qualified: Oportunidad calificada
      • champion_detected: Detección de un campeón interno
      • gatekeeper_detected: Detección de un guardián
      • future_meeting_scheduled: Reunión futura programada
      • decision_timeline_mentioned: Mencionada línea temporal de decisión
      • follow_up_required: Se requiere seguimiento
      • follow_up_deadline_mentioned: Mencionado plazo de seguimiento
      • multi_department_involvement: Involucrados múltiples departamentos
    • Pricing, Budget & Negotiation:

      • pricing_discussed: Discusión sobre precios
      • budget_blocker: Bloqueo por presupuesto
      • budget_discussed: Discusión sobre presupuesto
      • discount_requested: Solicitado descuento
      • contractual_concerns: Preocupaciones contractuales
      • legal_process_discussed: Discusión sobre proceso legal
      • renewal_discussed: Discusión sobre renovación
      • upsell_opportunity: Oportunidad de upsell
      • pilot_success: Éxito del piloto
      • pilot_failure: Fracaso del piloto
    • Fit & Product:

      • product_fit_confirmed: Confirmado ajuste del producto
      • usage_feedback_positive: Feedback positivo de uso
      • usage_feedback_negative: Feedback negativo de uso
      • technical_validation_passed: Pasada validación técnica
      • technical_blocker: Bloqueo técnico
      • integration_concerns: Preocupaciones sobre integración
      • training_requested: Solicitado entrenamiento
      • feature_request_made: Solicitada nueva funcionalidad
      • security_concerns: Preocupaciones de seguridad
      • compliance_concern: Preocupación sobre cumplimiento
    • Competition:

      • competitor_mentioned: Mencionado competidor
      • competitor_comparison_favorable: Comparación favorable con competidor
      • competitor_comparison_unfavorable: Comparación desfavorable con competidor
    • Risk & Churn:

      • churn_risk: Riesgo de abandono
      • no_decision_maker: Sin tomador de decisiones
      • internal_disalignment: Desalineación interna
      • resistance_to_change: Resistencia al cambio
      • escalation_detected: Detectada escalada
      • low_engagement: Bajo compromiso
      • deadline_blocker: Bloqueo por plazo
    • Relationship & Communication:

      • positive_feedback_on_demo: Feedback positivo en demo
      • negative_feedback_on_demo: Feedback negativo en demo
      • rapport_detected: Detectado rapport
      • misalignment_on_goals: Desalineación en objetivos
      • client_asks_many_questions: Cliente hace muchas preguntas
      • client_confused_about_offering: Cliente confundido sobre la oferta
      • tone_aggressive: Tono agresivo
      • tone_passive: Tono pasivo
      • speaker_dominates_conversation: El hablante domina la conversación
      • client_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 positiva
    • risk: Señal de riesgo
    • neutral: Señal neutral
  • activityType: Tipo de actividad donde se detectó la señal. Los tipos disponibles son:

    • meeting: Reunión
    • call: Llamada
    • mail: 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 detectada
    • unchanged: Señal sin cambios
    • escalated: Señal escalada
    • improved: Señal mejorada
    • recovered: Señal recuperada

Estructura de la Solicitud

Cada solicitud webhook incluye:

  1. Headers:

    • Content-Type: application/json
    • Headers personalizados configurados
    • X-Webhook-Signature: Firma para verificar la autenticidad (próximamente)
  2. Body:

    • Definido según el tipo de evento

Mejores Prácticas

  1. Verificación de Payload:

    • Implementa la verificación de la firma del webhook (Próximamente)
  2. 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
  3. 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

javascript
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.