System Events Reference
Complete reference for workflow trigger events
This reference documents all system events that can trigger workflows, their payloads, and use cases.
Event Types Overview
| Event Type | Description | Common Use |
|---|---|---|
MEETING_ENDED | Meeting has finished | Post-meeting automation |
MEETING_START | Meeting is starting | Join reminders |
MEETING_START_MINUS_* | Before meeting starts | Pre-meeting prep |
MEETING_ENDED_FOR_DEAL_ROOM | Deal room meeting ended | Deal automation |
MANUAL | Manually triggered | Testing, on-demand |
SCHEDULED | Cron schedule fires | Periodic tasks |
Meeting Events
MEETING_ENDED
Fires when a meeting has ended.
When it fires:
- After the meeting end time passes
- When a recorded meeting's recording is available
Payload:
{
"eventType": "MEETING_ENDED",
"meetingId": "mtg-12345",
"organizationId": 123,
"timestamp": "2024-01-15T11:00:00Z"
}
Use Cases:
- Generate meeting summaries
- Send follow-up notifications
- Create CRM tasks
- Update deal status
Available Data (after Load Meeting):
{
"meeting": {
"id": "mtg-12345",
"title": "Weekly Team Sync",
"startTime": "2024-01-15T10:00:00Z",
"endTime": "2024-01-15T10:30:00Z",
"durationMinutes": 30,
"attendees": [...],
"type": "internal",
"organizer": {...}
},
"callRecording": {
"transcriptSummary": "...",
"transcript": "...",
"duration": 1800
}
}
MEETING_START
Fires when a meeting begins.
When it fires:
- At the scheduled meeting start time
Payload:
{
"eventType": "MEETING_START",
"meetingId": "mtg-12345",
"organizationId": 123,
"timestamp": "2024-01-15T10:00:00Z"
}
Use Cases:
- Send join reminders
- Update status in other systems
- Log meeting start
MEETING_START_MINUS_24H
Fires 24 hours before a meeting starts.
When it fires:
- 24 hours prior to scheduled start time
Use Cases:
- Send preparation reminders
- Generate prep materials
- Research attendees
MEETING_START_MINUS_6H
Fires 6 hours before a meeting starts.
Use Cases:
- Final prep reminders
- Brief generation
- Team notifications
MEETING_START_MINUS_1H
Fires 1 hour before a meeting starts.
Use Cases:
- Last-minute prep
- Agenda distribution
- Join link reminders
MEETING_START_MINUS_30M
Fires 30 minutes before a meeting starts.
Use Cases:
- Final reminders
- Mobile notifications
- Quick prep review
MEETING_START_MINUS_15M
Fires 15 minutes before a meeting starts.
Use Cases:
- Immediate reminders
- Technical prep (camera, mic)
- Document pull-up
MEETING_ENDED_FOR_DEAL_ROOM
Fires when a meeting associated with a deal room ends.
When it fires:
- Meeting must be linked to a deal room
- After meeting end time
Payload:
{
"eventType": "MEETING_ENDED_FOR_DEAL_ROOM",
"meetingId": "mtg-12345",
"dealRoomId": 67890,
"organizationId": 123,
"timestamp": "2024-01-15T11:00:00Z"
}
Additional Data Available:
{
"dealRoom": {
"id": 67890,
"name": "Acme Corp Deal",
"stage": "negotiation",
"value": 50000,
"crmOpportunityId": "opp-123"
}
}
Use Cases:
- Update deal status
- Create CRM tasks
- Notify sales team
- Track deal signals
Non-Meeting Events
MANUAL
Triggered manually by user action.
When it fires:
- User clicks Trigger button in the workflow editor
- API call to trigger endpoint
Payload:
{
"eventType": "MANUAL",
"meetingId": "mtg-12345", // Optional, if meeting selected
"organizationId": 123,
"userId": 456,
"timestamp": "2024-01-15T14:30:00Z"
}
Use Cases:
- Testing workflows
- On-demand processing
- Re-running failed executions
- Ad-hoc automation
SCHEDULED
Triggered by cron schedule.
When it fires:
- At times defined by cron expression
Payload:
{
"eventType": "SCHEDULED",
"scheduleId": "sched-123",
"cronExpression": "0 0 9 * * *",
"timezone": "America/New_York",
"organizationId": 123,
"timestamp": "2024-01-15T09:00:00Z",
"fireAt": "2024-01-15T09:00:00Z"
}
Use Cases:
- Daily reports
- Weekly summaries
- Periodic cleanup
- Scheduled syncs
Event Filtering
Filter by Meeting Properties
Configure triggers to fire only for specific meetings:
External meetings only:
{
"rules": {
"meeting.type": "external"
}
}
Meetings with recordings:
{
"rules": {
"hasRecording": true
}
}
Filter by Attendees
Meetings with specific domain:
{
"rules": {
"attendeeDomains": ["important-client.com"]
}
}
Minimum attendee count:
{
"rules": {
"minAttendees": 3
}
}
Event Payload Reference
Common Fields
All events include:
| Field | Type | Description |
|---|---|---|
eventType | string | Event type identifier |
organizationId | number | Organization ID |
timestamp | string | When event was created (ISO 8601) |
Meeting Event Fields
Meeting events add:
| Field | Type | Description |
|---|---|---|
meetingId | string | Meeting identifier (UUID) |
Deal Room Event Fields
Deal room events add:
| Field | Type | Description |
|---|---|---|
dealRoomId | number | Deal room identifier |
Scheduled Event Fields
Scheduled events add:
| Field | Type | Description |
|---|---|---|
scheduleId | string | Schedule identifier |
cronExpression | string | Cron expression |
timezone | string | IANA timezone |
fireAt | string | Scheduled fire time |
Accessing Event Data
In CEL Expressions
trigger.eventType == "MEETING_ENDED"
trigger.meetingId != null
trigger.timestamp > "2024-01-01T00:00:00Z"
In Liquid Templates
Event: {{ trigger.eventType }}
Meeting: {{ trigger.meetingId }}
Time: {{ trigger.timestamp | date: "%B %d, %Y" }}
After Load Meeting
{% if trigger.eventType == "MEETING_ENDED" %}
Meeting {{ json.meeting.title }} has ended.
{% endif %}
Event Deduplication
Events are deduplicated by:
- Organization ID
- Event type
- Event ID (meeting ID, schedule occurrence)
This prevents duplicate workflow executions for the same event.
External Event Key Format:
org:{orgId}:event:{eventType}:id:{eventId}
Event Timing
Meeting End Events
Meeting end events fire when:
- Meeting end time has passed
- Recording processing is complete (if recorded)
There may be a delay of several minutes after the scheduled end time.
Pre-Meeting Events
Pre-meeting events fire at the specified offset:
MINUS_24H: 24 hours before startMINUS_6H: 6 hours beforeMINUS_1H: 1 hour beforeMINUS_30M: 30 minutes beforeMINUS_15M: 15 minutes before
Timing is approximate (±1-2 minutes).
Scheduled Events
Scheduled events fire based on the cron expression with:
- Timezone-aware calculation
- Lookahead materialization for reliability
- Approximate timing (±1 minute)
Best Practices
Choose the Right Event
| Scenario | Recommended Event |
|---|---|
| Post-meeting summary | MEETING_ENDED |
| Deal room updates | MEETING_ENDED_FOR_DEAL_ROOM |
| Pre-meeting prep | MEETING_START_MINUS_1H |
| Daily report | SCHEDULED |
| Testing | MANUAL |
Handle Missing Data
Not all meetings have all data:
{% if json.callRecording %}
{{ json.callRecording.transcriptSummary }}
{% else %}
No recording available
{% endif %}
Consider Timing
For time-sensitive actions, account for event delivery timing:
- Pre-meeting events: Build in buffer time
- Post-meeting events: Expect delays for recording processing
Troubleshooting
Event Not Firing
Check:
- Is workflow released and Active?
- Is trigger configured correctly?
- Does meeting match filter rules?
- Is event type correct?
Duplicate Executions
Check:
- Multiple workflows with same trigger?
- Event key collision?
- Retry from DLQ creating duplicate?
Wrong Meeting Data
Check:
- Event type matches use case?
- Load Meeting node included?
- Filter rules correct?