This trigger was previously called Call Completed (voice-only) and Conversation Completed. Existing workflows continue to work unchanged. The internal type identifier is still
conversationCompleted.When it fires
The trigger fires immediately after a conversation ends:Configuration
Filters
Use filters to only trigger the workflow for specific conversations. All filters use AND logic.Voice-only filters (direction, evaluation, duration) only apply when Agent Type includes voice. If you select only
chat or web, those filters are ignored. The Call disposition and Extracted data filters work on every channel.Call disposition
Disposition is a free-text label generated by the AI at the end of every conversation, based on the agent’s disposition prompt. Because the prompt produces arbitrary strings (Hot Lead, Spanish Speaker — Transferred, Wrong Person, etc.), the filter is a free-text input rather than a fixed dropdown.
Existing workflows configured with the legacy outcome dropdown values (
completed, positive, appointment_booked, etc.) keep working — they’re treated as exact-match is filters against the stored value.
For voice-specific routing on raw call ending reasons (voicemail, no answer, transferred, etc.), use a Condition step on {{trigger.conversation.endedReason}} — see the voice-only fields table further down.
Extracted data filters
Filter on any extraction field configured on the agent — budget, lead status, appointment date, sentiment, anything you’ve set up. The filter picker shows every extraction field defined on the agents your workflow listens to, and works across voice, chat, and web conversations.
Behavior notes:
- Filtering only fires the workflow when the field matches. Filters are AND-combined — every filter must match.
not equalsandnot containsagainst a missing value match (vacuous truth) — useful for “fire unless the AI said X”.- Extracted values are also available as variables in your actions — see
{{trigger.conversation.metadata.fieldName}}further down.
Examples
Only completed outbound voice calls:- Filter: Agent Type → voice
- Filter: Call direction → Outbound
- Filter: Call disposition →
iscompleted
- Filter: Agent Type → chat
- Filter: AI Agent → Select your support agent
- Filter: Agent Type → voice, web
- Filter: Min duration → 30
- No filters. Leave it empty.
- Filter: Extracted data →
lead_statuscontainshot
- Filter: Extracted data →
appointment_dateis not empty
- Filter: Extracted data →
budgetgreater than5000
Data available
This trigger provides the richest data of any trigger type. Some fields are only present for certain agent types — use the Agent Type filter or a Condition step to branch safely.Contact variables
Available for every conversation regardless of channel.Dot notation (
{{contact.firstName}}) is now the standard. The flat aliases on the right still work for backwards compatibility — existing workflows continue to render unchanged.Conversation variables
The canonical namespace for all channels. Use these in new workflows.
Extraction fields configured on the agent (budget, timeline, etc.) are available under
{{trigger.conversation.metadata.fieldName}}.
Voice-only fields
Present whenagentType is voice.
The legacy
outcome field has been removed from the trigger payload. Use {{trigger.conversation.disposition}} for the AI-classified outcome label, or {{trigger.conversation.endedReason}} for the raw call ending reason.Chat-only fields
Present whenagentType is chat.
Chat conversations do not include
direction or duration — use disposition and timestamps instead.
Web-only fields
Present whenagentType is web. Web sessions use the voice-style fields (callId, duration, endedReason) plus channel: "web".
Legacy trigger.call.* namespace
For backwards compatibility, existing voice workflows can still use the {{trigger.call.*}} namespace. It maps 1:1 to {{trigger.conversation.*}} for voice-only fields (callId, duration, direction, summary, transcript, agentId, agentName, agentType, evaluationScore, startedAt, endedAt, endedReason, appointmentDate, metadata). New workflows should use {{trigger.conversation.*}} since the legacy namespace only resolves for voice conversations.
Deduplication
Uses the conversation ID as the dedup key. Default window: 1 minute. Each conversation can only trigger the workflow once within the window.Use case examples
Follow-up based on voice disposition
Different AI-classified dispositions get different follow-up strategies.- Trigger: Conversation ended → Agent Type: voice
- Action: Condition — Check
{{trigger.conversation.disposition}}- Path: contains
Interested- Send email — “Hi
{{firstName}}, great chatting! Here are the details we discussed…” - Update contact — Add “interested” tag
- Send email — “Hi
- Path: contains
Voicemail- Wait — 4 hours
- Voice call — Retry
- Path: contains
No Answer- Send SMS — “Hi
{{firstName}}, I just tried to reach you. Let me know a good time.”
- Send SMS — “Hi
- Default
- Update contact — Add “needs-review” tag
- Path: contains
Post SMS summary to Slack
Every finalized SMS conversation gets a summary posted to your team channel.- Trigger: Conversation ended → Agent Type: chat
- Action: Condition —
{{trigger.conversation.channel}}equalssms - Action: Slack message — #sms-conversations
- Message: “SMS with
{{firstName}}{{lastName}}({{trigger.conversation.messageCount}}messages,{{trigger.conversation.disposition}})\n\n{{trigger.conversation.summary}}”
- Message: “SMS with
Post-call summary to Slack
Every completed voice call gets a summary posted to your team channel.- Trigger: Conversation ended → Agent Type: voice, Call disposition:
containscompleted - Action: Slack message — #call-updates
- Message: “Call with
{{firstName}}{{lastName}}({{trigger.conversation.duration}}s,{{trigger.conversation.disposition}})\n\n{{trigger.conversation.summary}}”
- Message: “Call with
Sync conversation data to CRM
Push conversation details to your CRM after every conversation, regardless of channel.- Trigger: Conversation ended (no filters)
- Action: Send webhook — POST to CRM
DNC compliance
Automatically handle “do not call” requests on voice calls.- Trigger: Conversation ended → Agent Type: voice, Call disposition:
containsdo_not_call - Action: Update contact — Add “dnc” tag
- Action: Slack message — #compliance
- Message: “
{{firstName}}{{lastName}}({{phone}}) requested Do Not Call.”
- Message: “
Tag engaged web visitors
When a web agent session finishes with a positive disposition, mark the contact as engaged.- Trigger: Conversation ended → Agent Type: web
- Action: Condition —
{{trigger.conversation.disposition}}containsInterested - Action: Update contact — Add “engaged-web” tag
