How to create, edit, and delete Relays
Build Relays with a clear flow: Trigger → Conditions → Actions. This guide shows you how to configure, test, and troubleshoot Relays. For a full reference of every trigger, condition, and action, see the Relay building blocks page.How to create or edit a Relay
1. Visit the Relays module
When you first visit Relays, you’ll see templates you can use as a starting point. Click Add Relay to start building.

1a. Order your Relays
Within a Trigger group, Relays execute top-down in Order. Ordering matters when more than one Relay’s conditions match the same event. For example, a keyword auto-reply and a generic after-hours reply that both listen for Message Received. To change the run order, use the Order column:- Click the up or down arrow on the vertical counter to move a Relay one position, or
- Click the number and type the exact Order value you want.
2. Name and describe your Relay
Click the vertical ⋯ (three dots) next to a Relay to Rename, Edit description, or Delete.
3. Set a Trigger
Supported triggers:- Message Received: Fires when a new inbound SMS arrives.
- Message Sent: Fires when your workspace sends a message (manual or automated). Useful for tracking outbound activity, syncing sent messages to external systems, and auto-assigning conversations to the sender.
- Message Failed: Fires when an outbound message fails to deliver. Useful for catching undelivered texts, branching on the failure reason, and alerting the team.
- Conversation Opened: Fires when a conversation transitions from Closed back to Open (a reopen). Useful for re-engagement flows, re-triaging reopened threads, or notifying external systems on reopen.
- Conversation Users Assigned: Fires when a teammate assigns one or more people to a conversation. Useful for pinging the new assignee, applying handoff labels, or forwarding assignment events to external systems.
- Conversation Label Applied: Fires when a label is applied to a conversation. Turns a label into an automation trigger for downstream actions like assignment, webhook fan-out, or auto-close.
- Conversation Label Removed: Fires when a label is removed from a conversation. Mirror of Conversation Label Applied, useful for syncing a state change downstream when a label comes off.
- Comment Created: Fires when a teammate posts an internal comment on a conversation. Useful for routing internal collaboration events to webhooks or downstream automations.
- Conversation Closed: Fires when a teammate closes a conversation. Useful for pushing close events to external systems (CRM, ticketing, data warehouse) or for post-close cleanup actions like removing all teammates from the conversation.

4. Add Conditions
Conditions control where/when a Relay runs. You can combine multiple conditions with AND or OR. The available conditions depend on the selected trigger. The message triggers (Message Received and Message Sent) add Message contains text. Comment Created adds Comment contains text. Message Failed adds Message failure contains text. Every trigger includes the universal core: My phone number equals, Conversation label equals, Conversation has label, Is anonymous conversation, Is new conversation, Is unassigned conversation, Teammate Assigned, and Active hours. Available conditions:- Message contains text: match keywords like
SUPPORT,HELP(Message Received and Message Sent triggers) - Comment contains text: match keywords in the body of an internal comment (Comment Created trigger)
- Message failure contains text: match a substring in the carrier/provider error text on a failed outbound message, e.g.,
landline,unreachable,blocked(Message Failed trigger). See Delivery status and errors. - My phone number equals: run only on a specific connected phone number
- Conversation label equals: match against a conversation’s labels using an operator selector (contains, equals, notEquals, startsWith, endsWith). For example,
startsWith "Region:"matches every namespaced regional label at once. - Conversation has label: a boolean presence check for a specific label. Use this as a gate to run the Relay only when the conversation is already labeled (for example,
VIPorEscalated). Distinct from the operator-based Conversation label equals. - Is anonymous conversation: no saved contact yet
- Is new conversation: first inbound in a thread
- Is unassigned conversation: the conversation has no assigned teammates. Useful for scoping actions to threads no one has claimed yet.
- Teammate Assigned: gates on the conversation’s current assignee. Pick a specific teammate, or Any teammate to check whether anyone is assigned.
- Active hours: restrict to a daily time window

5. Add Actions
Actions run when the conditions match. You can add one or many in the order you want them to execute. The available actions can vary by trigger, so check the Add Action menu in the app for the trigger you’re using.- Reply to message: send an SMS/MMS (supports templates, tags, and media, with an optional Delay). Available on message-received-style triggers.
- Assign teammates to the conversation: pick one or more users
- Assign to sender: automatically assign the conversation to the teammate who sent the message. Only available with the Message Sent trigger. Useful for making sure whoever replies owns the follow-up.
- Add labels to the conversation: apply one or more labels
- Remove labels from the conversation: remove one or more labels
- Remove teammates from the conversation: remove one or more assigned users
- Remove all teammates from the conversation: clear every assignee from the conversation in a single step. Useful in close-out or hand-off workflows where you want to reset assignment state without listing every teammate.
- Close the conversation: close the conversation as part of the Relay run. Useful for auto-closing after an acknowledged auto-reply or webhook-driven workflow.
- Open the conversation: reopen a closed conversation. Useful when an event should re-surface a resolved thread for human review. Available on more than one trigger, including Message Sent.
- Send webhook: send event data to your webhook endpoint
- Send Comment (also called Post a Comment): posts an internal comment on the conversation. It supports static text and tags, never reaches the contact, and shows as relay-generated. Use it for handoff notes and captured context.
- Stop Processing: a terminal control action. When a Relay fires and reaches this action, no lower-priority Relays on the same trigger run. Delayed and time-based Relays are exempt. Use it for clean routing so a matched Relay stops a catch-all from also firing.
- Add a Delay to Reply to message to wait minutes/hours before sending.
- Delays help prevent duplicate auto-replies if a message was sent recently.

6. Activate your Relay
Use the toggle to turn the Relay On. You can pause anytime without losing your setup.
Managing Relays
Pause / resume
- From the list: toggle On/Off
- From details: use the status toggle at the top
Delete
Open the Relay → ⋯ → Delete.Starter Relay templates (copy and adapt)
Example 1: Delegation and team routing Relay
Use this setup when multiple teammates need to view and reply on behalf of a manager.
Triggers | Conditions | Actions x2 |
|---|---|---|
Message Received | On the Manager’s or Teammates’ phone line | Assign Manager 1, Teammate 2, and Teammate 3 |
Apply labels “Region 1” and “Region 2” |
When a message comes in on the manager’s number, MessageDesk automatically assigns the conversation to the manager and the two direct reports. The Relay also labels the message by region, keeping everything organized by team and location.
Relays and conversation status
When a Relay sends an outbound message, MessageDesk updates the conversation’s status the same way it would for a teammate’s reply. This applies to after-hours auto-replies, out-of-office replies, and any other Relay action that sends a message.Example 2: Out-of-office and weekend autoresponder
Use this when teammates want to automatically reply during vacations or after hours.
Triggers | Conditions x2 | Actions x3 |
|---|---|---|
Message Received | Active hours | Reply to message: “Thanks for reaching out! I’m currently out of the office. Please text [alternate number].” |
My phone number equals | Assign teammates to the conversation: Teammate 1, 2, and 3 | |
Add labels to the conversation: Region 1, Region 2 |
- Create a new Relay and choose Message Received as the trigger.
- Under conditions, set Active Hours for each day to “Closed” or a select time span.
- Toggle “Trigger outside of active hours” ON.
- Add an Action → Reply to message and compose your message.
- Add an Action → Assign teammates to the conversation and select teammates.
- Add an Action → Add labels to the conversation and select labels.
- Toggle the Relay ON.
Out-of-office for a specific teammate
To scope an out-of-office to one teammate, add the Teammate Assigned condition set to that teammate. This works on a shared line. The auto-reply fires only for conversations assigned to the person who’s out, and everyone else on the line keeps working. To also catch brand-new, unassigned threads, add Is unassigned conversation with OR. If the teammate has a dedicated line, scope by My phone number equals instead. See Can I set up an out-of-office reply for just one person? in the FAQ.Example 3: Identify unknown contacts/conversations
Use this Relay to automatically collect names from new, anonymous conversations.Use it when you receive texts from unsaved numbers or new contacts.

- Create a new Relay and choose Message Received as the trigger.
- Under conditions, set My phone number equals to a connected phone line.
- Set another condition for Is anonymous conversation.
- Add an Action → Reply to message and compose your message.
- Add an Action → Assign teammates to the conversation and select teammates.
- Add an Action → Add labels to the conversation and select labels.
- Toggle the Relay ON.
Example 4: Keyword-based autoresponder
Use this Relay to automatically respond when someone texts in a specific keyword, like SUPPORT, JOIN, or BOOK. When a contact sends a message containing the word “SUPPORT,” MessageDesk replies with your chosen message. Use it to auto-route messages or send fast replies without manual work.
- Create a new Relay and choose Message Received as the trigger.
- Under conditions, set My phone number equals to a connected phone line.
- Set another condition for Message contains text SUPPORT.
- Add an Action → Reply to message and compose your message.
- Add an Action → Assign teammates to the conversation and select teammates.
- Add an Action → Add labels to the conversation and select labels.
- Toggle the Relay ON.
Relays best practices
- Start simple. Test one Relay before scaling across teams.
- Name clearly. Use descriptive titles like
Teammate 1 - Delegation RelayorRegion X,Y, Z Autoresponder. - Test with your phone. Send yourself a message to confirm behavior.
- Combine with templates. Use pre-saved templates to standardize replies.
- Audit regularly. Disable or update relays as team structure changes.
Technical notes and behavior
- Relay order: Within a Trigger group, Relays run top-down in the Order you set on the Relays list. All matching Relays run. A higher-priority Relay doesn’t short-circuit later Relays. Reorder from the Order column using the up/down arrows or by typing the numeric value.
- Action order: Actions execute top-to-bottom in the order you add them.
- Delays: Units include minutes/hours. Use to prevent duplicate “fast follow” replies.
- Active hours: Configure daily windows; invert to run only outside business hours.
- Permissions aware: Assign/Label actions respect Roles & Permissions.
- Testing tip: Start with a single condition/action, confirm it fires, then layer on complexity.
Frequently asked Relay questions
Do Relays respect roles & permissions?Yes. Assign/Label actions follow your Roles & Permissions settings. Can multiple Relays run on one inbound message?
Yes. If more than one Relay’s conditions match, every eligible Relay runs. Within a Trigger group they run in the Order you set on the Relays list. Reorder them from the Order column to control sequencing. See Order your Relays. Can I include media in auto-replies?
Yes. Keep each file ≤ 10 MB (files > 500 KB are sent as links). See Media. Can I pause without losing my setup?
Yes. Toggle Off to pause. Toggle On to resume. How do I avoid duplicate automated replies?
Add a Delay to the Reply action, or narrow conditions (e.g., “Is new conversation”). Does a Relay auto-reply mark the conversation as Read?
No. When a Relay sends an auto-reply, the conversation moves to Replied status (so it leaves the Unread filter), but it isn’t marked Read. A conversation is only marked Read when a teammate opens it in the Inbox. See Relays and conversation status. What happens if I change the trigger on an existing Relay?
MessageDesk removes any conditions the new trigger can’t support. Before you save, the app shows a warning with a count (for example, “Changing the trigger will remove 1 incompatible condition from this relay”). Review the remaining conditions after switching triggers to make sure the Relay still behaves as expected. Can I set up an out-of-office reply for just one person?
Yes, including on a shared line. Build the out-of-office Relay (Message Received, plus Active hours with Trigger outside of business hours enabled). Then add the Teammate Assigned condition set to the teammate who’s out. The auto-reply fires only for that person’s conversations. The rest of the team keeps working on the same line. To also cover brand-new threads no one has picked up yet, add Is unassigned conversation with OR. If the teammate has a dedicated line, scope by My phone number equals that line instead.
Troubleshooting
A Relay didn’t fire- Confirm it’s On (not paused).
- Verify the Trigger is “Message Received”.
- Temporarily loosen Conditions (switch
ANDtoOR, remove a filter) to test.
- Add a Delay to your Reply action so back-to-back messages don’t both trigger an instant response.
- Check the target user/label permissions.
- Remove long Delays while testing to see results immediately.
- Review Active hours and the invert setting.
- Check your workspace timezone.

