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.

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 Support beats New 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.

Was this page helpful?