Skip to main content
Every Relay combines three parts: triggers, conditions, and actions. Use this page as the reference when you build or edit one.

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)
On top of that core, three text conditions are trigger-scoped:
  • 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.
Conditions combine with AND or OR.
Conversation has label vs Conversation label equals. Both conditions check labels, but 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 VIP label).
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, then add Is unassigned conversation with OR to also cover brand-new threads no one has picked up. 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 (new in v2026.08.11) 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.
  • Assign teammates to the conversation
  • Assign to sender (Message Sent trigger only)
  • Add labels to the conversation
  • Remove labels from the conversation
  • 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 (new in v2026.08.04) 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 (new in v2026.08.04) 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.
Available actions vary by trigger, so check the Add Action menu in the app for the trigger you’re using.

Actions on the new triggers

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
Conversation Label Removed supports the same set as Message Failed with one asymmetry: Remove labels from the conversation isn’t available on this trigger. Every other action above is available. Call Received is a voice-only trigger. It fires when an MD-owned phone number receives an inbound call, so Reply to message isn’t available (no inbound SMS to reply to). Use it to label, assign, notify, and log call activity in the same conversation thread. Supported actions:
  • 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
Call Received works on MD-owned numbers only. It doesn’t fire for Twilio-connected numbers, Telegorithm numbers, or hosted (text-enabled) numbers where voice stays with the original provider. See Connect phone numbers for the difference between owned, hosted, and Twilio-connected lines.
Contact Updated is a non-conversation trigger. It fires against a contact when a contact property changes, so there’s no conversation in scope. Conversation-scoped conditions don’t apply (for example, Is unassigned conversation, Teammate Assigned, Conversation label equals). Conversation-scoped actions don’t apply either (assignment, labels, close/open, comments). Supported actions:
  • Send Message
  • Send webhook
Pick the Outbound Channel on Send Message. There’s no existing conversation to reply into, so the Send Message action asks which connected phone number to send from. MessageDesk creates or continues a conversation with the contact on that channel. Standard compliance (opt-outs, 10DLC) still applies.