Skip to main content
If/Else conditions are decision points inside the workflow that check something about the thread and split the flow into a Yes path and a No path.

Combining conditions

You can combine multiple conditions using: All of (AND) - every condition must be true, Any of (OR) - at least one condition must be true, or Not - inverts a condition. Start small. Build a workflow with two or three steps, test it on a few threads, then add to it. To change a published workflow, unpublish it, edit, and republish.

Message contains

There are three message contains variants, each scoping which side of the conversation is checked:
  • Customer message contains: matches only messages sent by the customer. Use this when you want to react to what the customer wrote, for example detecting keywords in their request or checking for a follow-up reply.
  • User message contains: matches only messages sent by a member of your support team. Use this to detect when an agent has replied with a particular phrase or to trigger logic based on your team’s response content.
  • Any message contains: matches messages from either side of the conversation. Use this when the keyword could appear in any message regardless of who sent it.
When using any of these conditions, there are two additional things worth knowing:
  • Case-insensitive: matching is case-insensitive, so “Urgent”, “urgent”, and “URGENT” all match.
  • Multiple keywords (OR matching): comma-separated values (e.g. “urgent, asap, critical”) match if the message contains any of those words.

AI prompts

The AI prompt condition evaluates your written condition against the thread context Plain provides, then determines whether the thread should take the Yes branch or No branch in your workflow.

When to use it

When a workflow reaches an AI prompt condition, Plain assembles a context snapshot of the thread and passes it to the model alongside your prompt. The context includes:
  • The full thread message history (up to the 600 most recent messages, each up to 3,000 characters)
  • Thread metadata: title, description, status, priority, and labels
  • Customer details: name and email address
  • Channel information (e.g. email, Slack, API)
  • Assignees
  • Thread fields and their configured schemas
  • Attachment count
The model evaluates your prompt against this context and returns a boolean: match or no match. If the condition matches, the configured action fires.

How to write good conditions

Write your conditions using “Match if…” to describe what should take the Yes branch, and “Don’t match if/for…” to clarify what should take the No branch. Example: Match if the customer explicitly requests a refund. Don’t match for general billing questions or payment issues without refund mentions.

Examples

  • Match if the customer is asking to schedule a call or demo. Don’t match for async questions with no scheduling intent.
  • Match if the latest customer message is only a thank you or acknowledgment with no new question.
  • Match if the customer explicitly asks to delete their account or data under privacy/GDPR.

Common mistakes