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.
- 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 theYes 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
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.

