Steps at a Glance
Message Bodies: Static or Prompt
The message field of the Email, SMS, Call, Slack, and Notify teammate steps has two tabs:- Static: The message is exactly what you write, with template variables filled in for each run.
- Prompt: The field becomes Message instructions. An agent writes the message from your instructions and the trigger data for each run. You can still insert variables to point it at specific fields.
- The results of earlier steps in the run, such as an AI summary or the teammate picked by Assign teammate
- The conversation the trigger came from, when there is one: its recent messages and what your agents learned about the contact
- Your business details from Settings > Business (see Business)
Steps That Need a Contact or Conversation
Some steps act on the contact or conversation behind the run, so they need a trigger that carries one:- Enrichment and Update contact attribute act on the run’s contact.
- Add label labels the conversation that started the run.
Throughput and Pacing
Outbound steps (HTTP Request, Email, SMS, Call, Slack, and Run tools) are automatically paced to respect provider limits and protect overall system stability. There is nothing to configure. During bursts of activity, a run may take longer than the sum of its step durations: the run pauses and resumes on its own until each step can go out safely. A send that still cannot go out after several hours fails instead of going out late. You’ll see the elapsed time in the Run History. When a step is retried automatically after a temporary problem, anything it already sent is not sent again. If Dimedove cannot tell whether a send went out, the step fails with an unknown outcome instead of sending twice.Logic
Filter
Continues only when the conditions match; otherwise the run ends there, with the status Completed. Use it right after the trigger to ignore events you don’t want to act on.- Conditions: One or more conditions (see Conditions). With two or more, choose All (every condition must match) or Any (one is enough). Without conditions, every run passes.
Condition
Branches into True or False based on conditions. Add the steps for each outcome under the matching branch on the canvas. A branch you leave empty simply ends the run.- Conditions: One or more conditions (see Conditions), matched with All or Any.
Conditions
Filter and Condition steps compare a field of the run’s data with a value. Click Add condition to add a row with:- Field: A path to a value, without curly braces, such as
trigger.body.stageortrigger.body.attributes.email. Use the braces button next to the field to insert a field from the trigger data. Inside a loop,loop.itemandloop.indexare available too. - Operator: equals, does not equal, contains, does not contain, greater than, at least, less than, at most, is empty, is not empty, is one of, is none of, or matches pattern.
- Value: What to compare against. It can include template variables. is empty and is not empty take no value.
Switch
Routes the run to a case based on a field value.- Field (required): The path to the value to compare, such as
trigger.body.stage. - Cases (at least one): Each case has a key and a Value to match. The key names the case’s branch on the canvas and may use lowercase letters, digits,
-, and_(up to 32 characters, unique within the step).
Loop
Repeats the steps inside for each item of a list, then continues on the Done branch.- List (required): A path to a list in the run’s data, such as
trigger.body.items. - Maximum iterations: How many items to process at most (100 by default, up to 500). Items beyond the maximum are ignored.
{{loop.item}} is the current item (use {{loop.item.email}} for a field of it), and {{loop.index}} is its position, starting at 0. Items are processed one at a time, and each pass appears in the run logs with an Iteration badge. The step fails if the path does not hold a list. Loops cannot be nested.
Wait
Delay
Pauses the run for a set duration before continuing to the next step. Use this to add timing between steps, for example waiting before sending a follow-up message or allowing time for an external process to complete. Configuration Fields:- Duration (required): A positive number
- Unit: Seconds, Minutes, Hours, Days, or Weeks. A delay can last up to 365 days.
- Business hours only: If the delay ends outside your team’s business hours, the run resumes at the next opening. Business hours are the Working hours set under Settings > Goals (see Goals settings). When working hours are turned off, Monday to Friday, 9:00 to 17:00 (America/Toronto) is used.
- The run is paused for the specified duration, then continues with the next step
- If the workflow is paused while a run is in a delay, the run is cancelled when the delay ends, unless the workflow is Live again by then
- A delay does not block other runs or workflows on your team
Wait until
Pauses the run until a specific date and time, such as an hour before an appointment.- Resume at (required): An ISO date and time, such as
2026-10-01T09:00:00-04:00, or a variable that holds one, such as{{trigger.body.appointment_at}}. A date and time without a time zone is read as Eastern Time.
Wait for event
Pauses the run until an event happens, or until a timeout expires. The run then continues on the Event branch or the Timeout branch. Configuration Fields:- Event (required):
- Reply received: The contact replies by SMS, email, or phone call, or in the Slack thread when you wait on the run’s conversation. Messages on other channels, such as your web chat, do not count, and neither do replies in a conversation a teammate has paused.
- Contact attribute changed: One of the contact’s attributes changes through Insights or Enrichment (edits in the dashboard do not count). Use Filter by Attributes to wait for particular attributes only.
- Document received: The contact sends a file in a conversation.
- Goal completed: A goal for the contact ends, whether it completed, failed, or was cancelled.
- Wait on: Which contact or conversation the event must belong to:
- The run’s contact (default): The contact behind the trigger, on any channel.
- The run’s conversation: Only the conversation the trigger came from. For example, an email reply to an SMS conversation does not count.
- Custom: A key you build from the run’s data, starting with
contact:,chat:, orobjective:, such ascontact:{{trigger.body.contact_id}}.
- Timeout: How long to wait before continuing on the Timeout branch (2 days by default, up to 365 days).
Actions
HTTP Request
Send an HTTP request to any external URL. Use this to connect your workflows to external APIs, webhook endpoints, third-party services, or custom applications. Configuration Fields:- Method: The HTTP method to use: GET, POST, PUT, PATCH, or DELETE
- URL (required): The target URL, starting with
http://orhttps://. Supports template variables. - Headers: Key-value pairs for custom request headers. Add as many as needed. Supports template variables in both keys and values.
- Query Parameters: Key-value pairs appended to the URL as query string parameters. Supports template variables.
- Body: The request body content in JSON format. Only available for POST, PUT, and PATCH methods. Supports template variables. A Format JSON button helps you validate and format the JSON.
- Default (Dimedove): Sends the email from the Dimedove platform address. No additional setup required. Suitable for simple notifications.
- One of your email channels: Sends through that email channel, using your verified domain. Replies are handled as configured on the channel: when the channel has an assigned agent, an inbox conversation is created and the agent can respond to replies.
- Custom: Sends from the Dimedove address with a display name you choose (e.g., “Your Company Name”), so you can customize the sender without setting up an email channel.
- From: The sending mode: Default (Dimedove), one of your email channels, or Custom
- Custom From Name (Custom only): The display name for the sender
- Reply To (Default and Custom only): An optional reply-to email address. Supports template variables.
- To (required): The recipient email address. Supports template variables.
- Subject (required): The email subject line. Supports template variables.
- Body (required): The email content, as Static text or Prompt instructions (see Message Bodies). Line breaks in static text are preserved in the sent email.
- Context (email channel only): Additional context provided to the agent when an inbox conversation is created. Use this to give the agent relevant background information about why this email was sent.
SMS
Send an SMS text message to a phone number. Sending Modes:- Default (Dimedove): Sends from a Dimedove-managed phone number. No setup required. Recipients cannot reply to this number.
- Team phone number: Sends from one of your configured phone numbers. Replies are handled by the agent, and an inbox conversation is created (or continued).
- From: Default (Dimedove) or one of your team phone numbers
- Assigned Agent (team phone number only): The agent that handles the conversation and any replies. It defaults to the number’s assigned agent; pick another agent to override it for this step.
- To (required): The recipient phone number, or a single variable such as
{{trigger.body.phone}}. The dashboard normalizes typed numbers to international format and adds +1 when no country code is given. - Message (required): As Static text, up to 150 characters (a character counter is displayed in the editor), or as Prompt instructions, in which case the agent keeps the text short. Supports template variables.
- Context (team phone number only): Additional context provided to the agent when an inbox conversation is created.
Call
Place an outbound voice call from one of your team phone numbers. The call is handled by a voice agent, enabling fully automated outbound conversations.Call steps require a team phone number with calls enabled and an agent with voice capabilities enabled.
- From (required): The team phone number to call from.
- Assigned Agent: The voice agent that handles the call. It defaults to the number’s assigned agent; you can pick another voice agent for this step.
- To (required): The recipient phone number, or a single variable such as
{{trigger.body.phone}}. The dashboard normalizes typed numbers to international format. - First Message: The agent’s opening line, as Static text or Prompt instructions (a Prompt-mode opener is written in the call’s language). Supports template variables.
- Language: The language the call is spoken in, chosen from the assigned agent’s languages. It defaults to the agent’s default language and resets when you change the number or the agent.
- Wait for greeting: On by default: the agent waits for the person to speak first, then says the First Message. Turn it off to have the agent speak as soon as the call connects; if the First Message is empty, the agent then uses its own greeting.
- Context: Additional context provided to the agent for the call. Use this to give the agent background information about the recipient or the purpose of the call. Supports template variables.
Slack
Send a message to a Slack channel in your connected workspace.Requires a connected Slack workspace. See Slack Configuration for setup instructions.
- Channel (required): The Slack channel to send the message to. Select from your workspace’s available channels. The Refresh channels button reloads the list if you have recently created new channels.
- Message (required): The message content, as Static text or Prompt instructions (see Message Bodies). Supports template variables.
Run tools
Runs agent tools based on context. An agent reads the context you give it and the trigger data, then decides which of the selected tools to run, for example to create a record in your CRM through one of your agent’s API tools. Configuration Fields:- Assigned Agent (required): The agent whose tools the step can run.
- Available Tools (required): Which of the agent’s active tools the step may run. All of them are selected when you pick the agent, and at least one must stay selected.
- Additional Context: Information that helps the agent decide which tools to run and with what input. Include relevant trigger data with template variables.
Start goal
Hands a goal to an agent to pursue autonomously with the contact behind the run: the agent plans each step, reaches out, waits for answers, and follows up, over days if needed. See Goals. Configuration Fields:- Agent: The agent that pursues the goal. Default agent uses the default agent set under Settings > Goals.
- Title: A short name for the goal, such as
Follow up with {{trigger.body.attributes.first_name}}. When left empty, the workflow’s name is used. - Goal (required): What the agent should accomplish.
- Done when: One sentence describing what must have happened for the goal to be reached.
- Wait for completion: When on, the run pauses until the goal ends, then continues on the Event branch, or on the Timeout branch if the Timeout passes first (30 days by default). When off, the run continues right away.
Data
Enrichment
Fills in contact attributes with external data. Dimedove looks up information about the run’s contact and writes it to the attributes you choose. Configuration Fields:- Contact: Contact from the trigger step, the contact behind the run.
- Attributes to enrich (required): Up to 20 of your contact attributes. For each one, you can add optional enrichment guidance (up to 200 characters) describing what to look for, and turn on Overwrite existing value to replace a value the contact already has. Otherwise, only empty attributes are filled.
Update contact attribute
Sets an attribute value on the run’s contact.- Attribute (required): One of your team’s contact attributes.
- Value: The value to write, as fixed text or a variable such as
{{trigger.body.stage}}(up to 2,000 characters).
Add label
Adds one of your team’s labels to the conversation that started the run.- Label (required): One of your active labels.
AI
AI summary
Summarizes the trigger data and the results of previous steps, following your instructions. When the trigger came from a conversation, the summary can draw on its recent messages and what your agents learned about the contact.- Instructions (required): What to summarize and how, such as “Summarize the conversation in 3 bullet points for the sales team.” Supports template variables.
- Maximum length (characters): 2000 by default.
AI decision
Lets an AI pick a branch from your instructions. The AI reads the run’s data (the trigger data and the results of earlier steps) and picks one of your cases.- Instructions (required): How to decide, such as “Decide whether this lead is hot, warm or cold based on the conversation.” Supports template variables.
- Cases (at least one): Each case has a key and a description of When to pick this case. Each case becomes a branch on the canvas, labeled with its description (or its key), next to a Default branch. Keys follow the same rules as for Switch.
other, picked when none of the other cases apply). If the AI cannot decide, the step fails.
Teammates
Assign teammate
Picks the next teammate from a pool, in turn, for example to share incoming leads fairly across your sales team.- Teammates (optional): The pool to rotate across. Leave it empty to rotate across everyone on your team.
Notify teammate
Sends a notification email to one or more teammates.- Channel: Emails
- Recipients (required): The teammates to notify.
- Subject: The email subject. Supports template variables. When left empty, the workflow’s name is used.
- Body (required): As Static text or Prompt instructions (see Message Bodies).
Approval request
Asks teammates to approve before continuing, and waits for their decision.- Question (required): What to decide, such as
Should we offer a 10% discount to {{trigger.body.attributes.first_name}}?. Supports template variables. - Approvers: Who is asked. The first decision wins.
- Timeout: How long to wait for a decision. When left empty, the request expires after your team’s Expires after setting under Settings > Goals (48 hours by default).
Inbox Conversations from Steps
Email, SMS, and Call steps can create conversations in your Inbox when sent through agent-assigned resources:- Email (email channel): Creates an inbox conversation when the email channel has an assigned agent
- SMS (team phone number): Creates or continues an inbox conversation for the assigned agent
- Call: Always creates an inbox conversation (a phone number with a voice agent is required)

