Workflows
A workflow watches for something happening and then does something about it, without anyone being involved. Route by channel, escalate by keyword, tag by contact attribute, chase silence — the repetitive triage work that eats a support team's morning.
How a workflow works
Every workflow has three parts:
- Name
Event- Type
- when it runs
- Description
The thing that triggers evaluation — a conversation being created, updated, opened, or a message arriving.
- Name
Conditions- Type
- whether it applies
- Description
Tests against the conversation, the contact or the message. Combine them with and / or.
- Name
Actions- Type
- what it does
- Description
One or more things to do when the conditions hold.
Build them under Workflows → Add workflow.
Events
- Name
Conversation Created- Type
- a new thread opens
- Description
The main routing hook. Use it for assignment, initial labelling and greetings.
- Name
Conversation Updated- Type
- something changes
- Description
Status, priority, assignee, team or attributes changed. Use it for escalation and follow-up.
- Name
Message Created- Type
- a message arrives
- Description
Any message, incoming or outgoing. Use it for keyword detection and for reacting to what customers actually say.
- Name
Conversation Opened- Type
- a thread reopens
- Description
A resolved conversation comes back to life. Useful for flagging repeat contacts.
Conditions
What you can test depends on the event, but the vocabulary is consistent:
About the conversation — status, priority, assignee, team, channel, labels, conversation language.
About the contact — email, phone number, company name, country code, browser language, referring URL.
About the message — message type (incoming or outgoing), whether it is a private note, and its content.
About email specifically — the mail subject.
Plus any custom attribute you have defined on contacts or conversations, which is where most of the real power is. Conditions on plan, renewal_date or order_value let you encode business rules rather than generic support rules.
Content conditions match text, not intent. A rule looking for refund will
not catch "I want my money back". For anything meaning-based, use Tola
AI rather than trying to enumerate phrasings.
Actions
- Name
Assign agent / Assign team- Type
- routing
- Description
Hand the conversation to a person or a group.
- Name
Remove assigned agent / team- Type
- routing
- Description
Put it back in the pool.
- Name
Add label / Remove label- Type
- organisation
- Description
Tag the conversation for later filtering and reporting.
- Name
Send message- Type
- reply
- Description
Send a message to the customer. Greetings, acknowledgements, out-of-hours notices.
- Name
Send attachment- Type
- reply
- Description
Send a file — a price list, a form, a getting-started PDF.
- Name
Send email to team- Type
- internal
- Description
Notify a team by email. Use for genuine escalation, not routine work.
- Name
Send email transcript- Type
- record
- Description
Email the full conversation to an address.
- Name
Snooze conversation- Type
- status
- Description
Hide it until later.
- Name
Open / Pending / Resolve conversation- Type
- status
- Description
Move it to that status directly.
- Name
Mute conversation- Type
- status
- Description
Stop notifications for it.
- Name
Notify another system- Type
- integration
- Description
Send the conversation's details to one of your own systems, so it can react — create a task, update a record, raise an alert.
Recipes worth building
These five cover most of what teams end up wanting, and are a good order to build them in.
Route by channel. On Conversation Created, if the channel is WhatsApp, assign to the Support team. The simplest possible rule and often the highest value.
Escalate your biggest customers. On Conversation Created, if the contact's plan attribute is enterprise, set priority to high and assign to the Key Accounts team. This is the rule that makes custom attributes worth maintaining.
Tag by topic. On Message Created, if content contains refund, invoice or payment, add the label billing. A month later your label report tells you what customers actually contact you about.
Handle out of hours. On Conversation Created, outside business hours, send a message setting expectations and add the label overnight. Far better than silence, and it protects your response-time numbers.
Catch reopened conversations. On Conversation Opened, add the label reopened and set priority to high. A customer coming back means the first answer did not work; those are worth watching.
Order and interaction
Multiple workflows can match the same event, and they all run. That is usually what you want, but it means two rules can fight — one assigning to Team A, another to Team B, with the last to run winning.
Keep this manageable:
- Make conditions specific enough that rules do not overlap. If two rules can both assign, one of them is probably wrong.
- Prefer more rules with narrow conditions to fewer rules with sprawling ones. They are easier to reason about and safer to delete.
- Watch for loops. A rule that sends a message on Message Created can trigger itself if its conditions do not exclude outgoing messages.
- Name rules after what they do, not what they are for.
Assign WhatsApp to SupportbeatsNew rule 3.
Testing and debugging
Test with a real conversation before trusting a rule. Send yourself a message that should match, and one that should not.
When a rule does not fire, the cause is nearly always one of three things: the event is wrong (using Conversation Updated where you needed Message Created), a condition is stricter than you think (an attribute that is empty rather than absent), or the rule is disabled.
When a rule fires when it should not, the cause is usually an or where you meant and.
Turn a rule off rather than deleting it while you are working this out — you lose the configuration otherwise, and rebuilding a rule from memory is how subtle differences creep in.