Webhooks
Configure Salescaling webhooks to receive real-time events about meetings, calls, and commercial activity.
Webhooks
Webhooks allow you to receive real-time notifications about events occurring in Salescaling. When an event occurs, Salescaling will send an HTTP POST request to the URL you have configured.
Webhook Configuration
To configure a webhook, you need to provide:
- Webhook name
- Destination URL
- Event type to listen for
- Custom headers (optional)
- Description (optional)
Event Types
We currently support the following event types:
1. Meeting Status Changes (meeting_status_changed)
This event is triggered when there are changes in a meeting's status. Possible statuses are:
meeting_created: When a new meeting is createdmeeting_deleted: When a meeting is deletedmeeting_transcript_done: When transcription is completedmeeting_summary_done: When the summary is completedmeeting_video_done: When video processing is completedmeeting_notes_done: When notes processing is completed
Payload
{
"meetingId": "string",
"status": "meeting_created" | "meeting_deleted" | "meeting_transcript_done" | "meeting_summary_done" | "meeting_video_done" | "meeting_notes_done"
}
Notes
- Video and meeting content processing are performed in parallel, so the
meeting_video_doneevent may be received before themeeting_summary_doneevent. - If you want to know when meeting content processing is completed, you can use the
meeting_summary_doneevent. - If you want to know when notes processing is completed, you can use the
meeting_notes_doneevent.
2. Meeting Note Changes (meeting_note_status_changed)
This event is triggered when there are changes in at least one note of a meeting. Possible statuses are:
meeting_note_created: When a new note is createdmeeting_note_deleted: When a note is deletedmeeting_note_updated: When a note is updated
Payload
{
"meetingNoteId": "string",
"status": "meeting_note_created" | "meeting_note_deleted" | "meeting_note_updated"
}
Notes
- This event is triggered once for each note that is processed.
- When notes are generated automatically, this event is triggered for each generated note.
3. Commercial Signal Detection (commercial_signal_detected)
This event is triggered when a commercial signal is detected in an activity. Commercial signals are important indicators that can help identify opportunities or risks in customer interactions.
Payload
{
"code": "string",
"description": "string",
"contactId": "string",
"companyId": "string",
"activityType": "string",
"activityId": "string",
"evidence": ["string"],
"changeType": "string"
}
Fields
-
code: Code of the detected commercial signal. Available types are:-
Engagement & Intent:
buying_intent: Buying intent detectedinterest_in_trial: Interest in a trialopportunity_qualified: Opportunity qualifiedchampion_detected: Internal champion detectedgatekeeper_detected: Gatekeeper detectedfuture_meeting_scheduled: Future meeting scheduleddecision_timeline_mentioned: Decision timeline mentionedfollow_up_required: Follow-up requiredfollow_up_deadline_mentioned: Follow-up deadline mentionedmulti_department_involvement: Multiple departments involved
-
Pricing, Budget & Negotiation:
pricing_discussed: Pricing discussedbudget_blocker: Budget blockerbudget_discussed: Budget discusseddiscount_requested: Discount requestedcontractual_concerns: Contractual concernslegal_process_discussed: Legal process discussedrenewal_discussed: Renewal discussedupsell_opportunity: Upsell opportunitypilot_success: Pilot successpilot_failure: Pilot failure
-
Fit & Product:
product_fit_confirmed: Product fit confirmedusage_feedback_positive: Positive usage feedbackusage_feedback_negative: Negative usage feedbacktechnical_validation_passed: Technical validation passedtechnical_blocker: Technical blockerintegration_concerns: Integration concernstraining_requested: Training requestedfeature_request_made: New feature requestedsecurity_concerns: Security concernscompliance_concern: Compliance concern
-
Competition:
competitor_mentioned: Competitor mentionedcompetitor_comparison_favorable: Favorable competitor comparisoncompetitor_comparison_unfavorable: Unfavorable competitor comparison
-
Risk & Churn:
churn_risk: Churn riskno_decision_maker: No decision makerinternal_disalignment: Internal misalignmentresistance_to_change: Resistance to changeescalation_detected: Escalation detectedlow_engagement: Low engagementdeadline_blocker: Deadline blocker
-
Relationship & Communication:
positive_feedback_on_demo: Positive feedback on demonegative_feedback_on_demo: Negative feedback on demorapport_detected: Rapport detectedmisalignment_on_goals: Misalignment on goalsclient_asks_many_questions: Client asks many questionsclient_confused_about_offering: Client confused about offeringtone_aggressive: Aggressive tonetone_passive: Passive tonespeaker_dominates_conversation: Speaker dominates conversationclient_drives_conversation: Client drives conversation
-
-
description: Detailed description of the signal -
contactId: ID of the related contact -
companyId: ID of the related company -
category: Category of the commercial signal. Available types are:positive: Positive signalrisk: Risk signalneutral: Neutral signal
-
activityType: Type of activity where the signal was detected. Available types are:meeting: Meetingcall: Callmail: Email
-
activityId: ID of the activity where the signal was detected -
evidence: Array of textual evidence supporting the signal detection -
changeType: Type of change represented by the signal. Available types are:new: New signal detectedunchanged: Unchanged signalescalated: Escalated signalimproved: Improved signalrecovered: Recovered signal
Request Structure
Each webhook request includes:
-
Headers:
Content-Type: application/json- Configured custom headers
X-Webhook-Signature: Signature to verify authenticity (coming soon)
-
Body:
- Defined according to the event type
Best Practices
-
Payload Verification:
- Implement webhook signature verification (Coming soon)
-
Error Handling:
- Respond with a 2xx code to confirm receipt
- Implement retries in case of failures
- Maintain a log of received events
-
Security:
- Use HTTPS for your endpoint
- Implement authentication on your endpoint; you can specify a token in the request headers
- Validate received data before processing it
Implementation Example
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");
});
Limits and Restrictions
- Webhooks have a 10-second timeout
- Up to 3 retries will be performed in case of failure
- The maximum payload size is 1MB
Support
If you need help with webhook implementation or have questions about available events, please contact our support team.