Every workflow has one trigger and one or more steps. This page lists each trigger, each step type and the variables available to steps. Call-based triggers can be limited to one or several agents; the Call ended trigger can also be filtered by call outcome.
Triggers#
| Trigger | ID | Fires when | Filters |
|---|---|---|---|
| Call ended | call.ended |
A voice call ends | Agents; call outcomes (dispositions) |
| Data extracted | data.extracted |
Post-call extraction finishes for a call | Agents |
| Manual | manual |
You run it from the dashboard | - |
| API call | api_call |
Your system calls the trigger endpoint | - |
| Scheduled | scheduled |
On a schedule (cron) | - |
| CRM webhook | crm_webhook |
Your CRM sends an event, for example a new lead | - |
A call-based trigger with no agent selected listens to every agent in the workspace.
Trigger from the API#
curl -X POST https://voice-agent.edesy.in/api/v1/workflows/WORKFLOW_ID/trigger \
-H "Authorization: Bearer $EDESY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "recipientPhone": "+91XXXXXXXXXX", "recipientName": "Asha" }'
Steps#
| Step | Type ID | What it does |
|---|---|---|
| Voice call | VOICE_CALL |
Calls a number with a chosen agent. Can wait for the call to end or for its extraction before the next step |
| WhatsApp template | WHATSAPP_TEMPLATE |
Sends an approved WhatsApp template message |
| WhatsApp bot | WHATSAPP_BOT |
Starts a WhatsApp bot conversation |
| SMS | SMS |
Sends an SMS |
EMAIL |
Sends an email | |
| Condition | CONDITION |
Branches on a variable, for example disposition == QUALIFIED |
| Delay | DELAY |
Waits before the next step. Can respect callback hours |
| Set variable | SET_VARIABLE |
Sets or computes a variable for later steps |
| CRM update | CRM_UPDATE |
Creates or updates a lead or contact via Edesy workflow integrations |
| Webhook | WEBHOOK |
Sends an HTTP request to your URL |
| Google Sheets update | GOOGLE_SHEETS_UPDATE |
Updates a row |
| Google Sheets append | GOOGLE_SHEETS_APPEND |
Adds a row |
| Google Sheets lookup | GOOGLE_SHEETS_LOOKUP |
Finds a row and makes its columns available as variables |
| Send payment link | SEND_PAYMENT_LINK |
Creates and sends a Razorpay, Stripe or PayU link |
| Calendar booking | CALENDAR_BOOK |
Books a slot on a connected calendar |
Variables#
Steps use {{variable}} placeholders. Extracted fields are flattened to the top level, so a template field budget_range is {{budget_range}}.
| Variable | Call ended | Data extracted | Meaning |
|---|---|---|---|
recipientPhone |
Yes | Yes | The caller's number |
recipientName |
Yes | Yes | The caller's name, if known |
disposition |
Yes | Yes | The call outcome, such as QUALIFIED |
callStatus |
Yes | Yes | Conversation status |
callDuration |
Yes | Yes | Duration in seconds |
conversationId |
Yes | Yes | The call ID |
endReason |
Yes | Yes | Why the call ended |
callTranscript |
Yes | Yes | The full transcript |
callRecordingUrl |
Yes | Yes | The recording link |
agentName |
Yes | Yes | The agent that handled the call |
callSource |
Yes | Yes | campaign, api, inbound or test |
campaignName, campaignId |
Yes | Yes | The campaign, if any |
_timestamp |
Yes | Yes | Call time (DD/MM/YYYY HH:mm IST) |
callSummary |
- | Yes | The AI summary |
| Your extracted fields | - | Yes | For example {{buying_intent}} |
FAQs#
How do I run a step only for qualified leads?
Filter the Call ended trigger by outcome, or add a Condition step on {{disposition}}.
What happens if a step fails? The execution is marked failed at that step. Fix the cause and retry it from the execution history.
Can a workflow call the same person again later? Yes. Add a Delay and then a Voice call step, for example for a callback.