Webhooks

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

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

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

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.

Última actualización