Triggers
Conditions
Every trigger shares a universal core of eight conditions:- My phone number equals
- Conversation label equals
- Conversation has label
- Is anonymous conversation
- Is new conversation
- Is unassigned conversation
- Teammate Assigned gates on the conversation’s current assignee. Pick a specific teammate, or Any teammate to check whether anyone is assigned.
- Active hours (with a Trigger outside of business hours invert)
- Message contains text appears on the message triggers (Message Received and Message Sent).
- Comment contains text appears only on Comment Created.
- Message failure contains text appears only on Message Failed. Matches a substring in the carrier/provider error text (for example,
unreachable,landline,blocked). See Delivery status and errors.
- Contact Property Equals checks the value of a contact property. Currently available only on the Contact Updated trigger.
- Webhook Payload Field Equals checks the value of a field in an inbound webhook payload. Available only on the Inbound Webhook Received trigger. See Webhooks for the payload schema.
- Label name equals checks whether the conversation has a label whose name matches the text you enter. It matches a name you type, not a label you pick from a list, so the condition can point at a label that doesn’t exist yet. Create the label with that exact name before you rely on it, or edit the name in the condition.
Three conditions check labels. They behave differently, so pick the one that matches your intent.
- Conversation label equals is an operator-based matcher. It exposes an operator selector with contains, equals, notEquals, startsWith, and endsWith. Use it for fuzzy or namespaced matches, for example
startsWith "Region:"to match every regional label at once. - Conversation has label is a simple presence check. It evaluates true when the conversation is currently labeled with the label you pick, and false otherwise. Use it as a gate (for example, only run when the conversation already has the
VIPlabel). - Label name equals is a name-based presence check. It evaluates true when the conversation has a label whose name matches the text you enter. Pairs with the Remove Label where name equals action for name-driven cleanup flows like the Auto Close No Reply Needed template.
Relays can scope by line, label, content, and assignee. My phone number equals targets a connected number. Teammate Assigned targets the conversation’s current assignee. Per-person workflows like out-of-office now work on a shared line. Gate the Relay on Teammate Assigned set to the teammate who’s out. Add Is unassigned conversation with OR to also cover brand-new threads. You no longer need a dedicated line per teammate.
Actions
- Reply to message (supports templates, tags, and media, with an optional Delay; available on Message Received, Message Failed, and Conversation Label Removed)
- Send Message sends an outbound SMS/MMS on non-conversation triggers. There’s no conversation to reply into, so you pick which connected phone number MessageDesk sends from (Outbound Channel). Currently available on Contact Updated.
- Update Contact Property updates a contact property you choose. Set it to a Custom Value, or pull a value from the triggering event (Event Data). A regular Text property can take either a Custom Value or an Event Data value. A non-text property, like a dropdown or number, takes either a static value matching its type or the Custom Property mapped from an Inbound Webhook payload. Mapped payload values must pass type validation.
- Assign teammates to the conversation
- Assign to sender (Message Sent trigger only)
- Add labels to the conversation
- Remove labels from the conversation
- Remove Label where name equals removes every label on the conversation whose name matches the text you enter. Remove labels from the conversation removes labels you pick from a list; this action matches on the typed name instead. The Auto Close No Reply Needed template uses it to clear the
No Reply Neededlabel after closing. - Remove teammates from the conversation
- Remove all teammates from the conversation
- Close the conversation
- Open the conversation
- Send webhook
- Send Comment (also called Post a Comment) posts an internal comment on the conversation. It supports static text and tags. The contact never sees it, and MessageDesk attributes it to the Relay. Use it for handoff notes and captured context.
- Mark Conversation Unread moves the conversation back into the Unread filter as part of the Relay run. Pair with Reply to message when an auto-reply shouldn’t count as “handled” and the thread still needs a teammate to review it.
- Mark Conversation Read marks the conversation Read as part of the Relay run. Use it in acknowledgement or auto-close flows where no human review is required after the Relay runs.
- Stop Processing is 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. The Relay list shows when a Relay stops the cascade. Use it for routing: a matched Relay can prevent a catch-all from also firing.
Event Data
Some actions can insert a value from the event that triggered the Relay instead of a fixed value.- On Send Message and Send Comment, choose an available Event Data property for the text, or choose Custom Value to type your own.
- On Update Contact Property, the same choice applies for Text properties. Non-text properties can also take Event Data on Inbound Webhook Received Relays by mapping the matching Custom Property from the payload. The payload value must pass type validation.
Missing values exit early. If the Event Data property an action uses has no value, the action exits early without running. Say the action inserts the custom property
Favorite Color and the contact has no Favorite Color value. Nothing runs, and nothing breaks.Changing the trigger clears Event Data inputs. If you switch a Relay’s trigger, MessageDesk removes any Event Data values used as inputs on existing actions. Those fields don’t exist on the new trigger’s event. Review your action inputs after switching triggers. See Changing the trigger on an existing Relay.
Actions on the new triggers
Contact Created, Contact Updated, Inbound Webhook Received, and Opt Out Created are non-conversation triggers. They fire against a contact rather than a conversation, so conversation-scoped conditions and actions don’t apply. On these triggers, Send Message asks which connected phone number to send from (Outbound Channel), because there’s no conversation to reply into. MessageDesk creates or continues a conversation with the contact on that channel, and standard compliance (opt-outs, 10DLC) still applies. Message Failed supports the following actions:- Reply to message
- Assign teammates to the conversation
- Close the conversation
- Open the conversation
- Remove all teammates from the conversation
- Remove teammates from the conversation
- Add labels to the conversation
- Remove labels from the conversation
- Send webhook
- Assign teammates to the conversation
- Add labels to the conversation
- Remove labels from the conversation
- Remove teammates from the conversation
- Remove all teammates from the conversation
- Open the conversation
- Close the conversation
- Send webhook
- Send Comment
- Mark Conversation Read
- Mark Conversation Unread
- Send Message
- Send webhook
- Send Message (pick the Outbound Channel to send from)
- Update Contact Property
- Add labels to the conversation
- Send webhook
Contact Auto-Create checkbox. Each action on an Inbound Webhook Received Relay includes an Auto-Create checkbox. Check it and MessageDesk creates the contact from the payload when the phone number doesn’t match a saved contact, then runs the action. Leave it unchecked and the action only runs against saved contacts. The checkbox is set per action and only appears on this trigger. See Auto-create contacts.
- Send Message (pick the Outbound Channel to send from)
- Update Contact Property
- Send webhook
- Channel-specific opt-outs. When a contact opts out of a specific outbound channel (for example, by texting STOP to that number), conversation actions run against the conversation on that channel.
- Global opt-outs. When the opt-out is global (mostly submitted through the support site), conversation actions don’t run, because no single channel conversation is in scope.
- Contact actions. Contact actions run only when a saved contact already exists for the opted-out phone number. If no contact matches, the Relay takes no action.
No message sending on this trigger. Message-sending actions aren’t available on Opt Out Created Relays, because the contact just opted out. MessageDesk already blocks outbound sends to opted-out numbers at the workspace level. Use this trigger to label, assign, or sync the opt-out downstream instead. See Anonymous, opted-out, and blocked contacts.

