Skip to content
Plain Help Center home
Plain Help Center home

Workflow Actions

Actions are the steps in your workflow that do something: assign a thread, update a property, send a message, or call an external service. Each action runs and then moves to the next step. To add one, click + on the canvas and choose an action type.

Assignment

Assign to user

Assigns the thread to a specific user or machine user. If the thread already has an assignee, the new user is added as an additional assignee rather than replacing the existing one.

This action is skipped if the selected user is on break, away, or offline.

Example: Route VIP threads to a dedicated account manager.

Assign to company account owner

Assigns the thread to the account owner of the customer's company.

This action is skipped if the customer has no company, the company has no account owner, or the owner is unavailable.

Example: Make sure enterprise customers always reach their account owner first.

Assign to team

Distributes the thread using round-robin assignment across team members identified by a label. The thread goes to the available member with the fewest open threads. You can set a max capacity per member. The team label is also applied to the thread.

Example: Spread incoming threads evenly across your support team.

Unassign thread

Removes all assignees from the thread.

Example: Clear the current assignment before re-routing based on new conditions.

Thread properties

Set priority

Sets the thread priority to one of:

  • Urgent

  • High

  • Normal

  • Low

Example: Auto-escalate threads containing "outage" to Urgent.

Set tier

Moves the thread to a specific tier. Skipped if the thread is already in that tier.

Example: Route enterprise customers to a premium support tier.

Set status

Changes the thread status to one of:

  • Created

  • New Reply

  • In Progress

  • Thread Link Updated

  • Waiting for Customer

  • Ignored

  • Done

Plain infers the parent status (Todo, Snoozed, Done) automatically based on the status you set.

Example: Mark threads as "Waiting for Customer" after sending a follow-up.

Set escalation path

Assigns the thread to an escalation path. Skipped if the specified path does not exist.

Example: Move urgent unresolved threads into a structured escalation flow.

Apply labels

Adds one or more labels to the thread. Labels already on the thread and archived labels are skipped.

Example: Auto-tag threads from specific channels or matching certain keywords.

Messages and notes

Send message

Sends a message to the customer. Supports plain text, markdown, and HTML.

To prevent duplicates, Plain checks the last 50 timeline entries within a 5-minute window. If an identical message already exists, the action is skipped.

Example: Send an auto-acknowledgment when a thread is created outside business hours.

Add note

Adds an internal note to the thread. Notes are only visible to your team, not the customer. Supports plain text, markdown, and HTML.

Plain prevents duplicate notes if the same workflow runs on the same thread.

Example: Leave context for the next agent about why the thread was routed a certain way.

Customer

Add to customer group

Adds the customer to one or more customer groups. Groups the customer already belongs to are skipped.

Example: Segment customers automatically based on thread content or channel.

Integrations

Send HTTP request

Sends an HTTPS POST request to any external endpoint. You configure the URL, headers, and a JSON body. The request runs in the background after the workflow step completes.

Use this action to connect your workflows to any service that accepts webhooks or API calls:

The request body supports variable interpolation. Available variables:

  • {{ customer.email }}, {{ customer.fullName }}, {{ customer.shortName }}

  • {{ thread.ref }}, {{ thread.id }}, {{ thread.externalId }}, {{ thread.title }}, {{ thread.description }}

  • {{ workspace.id }}

Example body:

{ "threadId": "{{ thread.id }}", "customer": "{{ customer.email }}", "title": "{{ thread.title }}" }

This action uses the same security measures and retry policy as Plain webhooks.

Actions run in sequence. If an action fails, the workflow stops and is marked as failed. Put your most important actions first.

Example: Route enterprise threads to account owners

When a thread is created, check if the customer is enterprise tier. If yes, assign it to their account owner. If no account owner is set, fall back to the enterprise support team.

03 Route enterprise threads to account owners.png

Setup

  1. Trigger: Set to Automatic, event: Thread created.

  2. Step 1 (Condition): Tier equals Enterprise.

    • No: End the workflow. Default routing handles it.

    • Yes: Continue.

  3. Step 2 (Action): Assign to company account owner.

  4. Step 3 (Condition): Assigned to checks if someone is now assigned. This confirms the account owner assignment worked.

    • Yes: End the workflow. The account owner is assigned.

    • No: Continue.

  5. Step 4 (Action): Assign to team. Select your enterprise support team label.

  6. Step 5 (Action): Apply labels. Select Enterprise.

  7. Step 6 (Action): Set priority to High.

Start simple. Build a workflow with 2-3 steps first, test it on a few threads, then add complexity. You can always edit later. Just unpublish, make changes, and republish.