# MessageDesk API Reference Introduction
Source: https://docs.messagedesk.com/api-reference/introduction
Preview the upcoming MessageDesk API. Join the 2026 waitlist for early access to programmatic SMS messaging endpoints and integration tools.
API not currently available. Coming in 2027! Check out our [Relays](/relays/overview) and [webhooks](/relays/webhooks) in the meantime.
## Coming soon
Join our waitlist for the API by emailing [kyle@messagedesk.com](mailto:kyle@messagedesk.com)!
# Carrier Registration Errors and Fixes
Source: https://docs.messagedesk.com/carrier-registration/errors
Understand the errors, rejections, and warnings you may see during A2P 10DLC carrier registration in MessageDesk, what each one means, and how to fix it fast.
# Carrier registration errors and how to fix them
This page explains the messages you may see before, during, and after carrier registration, what each one means, and the fastest way to resolve it. Errors fall into four groups: form errors (before you submit), brand verification failures, campaign rejections, and send-time errors (after approval).
***
## 1. Form errors (before you can submit)
MessageDesk checks each field before it lets you submit. Fix these in the registration wizard, then resubmit.
| What you'll see | What it means | How to fix it |
| ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **A tax ID is required to register** | You selected a path that requires an EIN/BN but didn't provide one. | Enter your 9-digit EIN (US) or BN (Canada). Sole proprietorships can't register. See the [overview](/carrier-registration/overview). |
| **Tax ID (EIN or Business Number) must be 9 digits** | The EIN/BN you entered isn't exactly 9 digits. | Remove spaces or dashes and enter the 9 digits exactly as they appear on your IRS/CRA records. |
| **Required: enter your legal name** | Legal company name is blank. | Enter your legal entity name exactly as filed (include the LLC/Inc suffix). |
| **Please select an entity type / business vertical / country / state** | A required dropdown is empty. | Choose the value that matches your tax filings. LLCs taxed as S-Corps should still select **LLC**. |
| **Required: a valid support email / support phone** | Public support contact is missing or malformed. | Enter a working public-facing email and phone. Both appear on carrier records. |
| **Campaign description must be at least 40 characters** | Your description is too short for carriers to review. | Use **Generate with AI**, or describe who you text and what you send in a full sentence or two. |
| **Select at least one group / message type** | No recipients or message types are checked. | Check every group you'll text and every message type you'll send. |
| **Please select your estimated volume** | Monthly volume isn't set. | Pick the tier that matches your expected monthly send. |
| **At least one sample message is required** / **Required: N valid sample messages** | You have too few valid samples. | Provide **3 to 5** sample messages. Each must be 20–320 characters. |
| **Every message must include opt-out language** | A sample is missing STOP language. | Add "Reply STOP to opt out" (or equivalent) to every sample message. |
| **Your samples must match what you described in your campaign** | Samples don't align with your campaign description. | Rewrite samples so they clearly reflect the use cases you selected. Mismatches are the #1 rejection reason. |
| **At least one sample must include a URL** / **a phone number** | You declared that messages contain links/numbers, but no sample shows one. | Add a real link and/or phone number to at least one sample, or turn off that toggle if it doesn't apply. |
| **A sample link is required when messages include URLs** / **Sample link must be a valid URL** | The declared sample link is missing or invalid. | Provide a complete, working URL (including `https://`). |
| **SMS Terms & Conditions page is missing or incomplete** | Carriers couldn't find compliant SMS terms on your site. | Publish SMS terms and conditions and link them from your footer. See [privacy policy requirements](/carrier-registration/privacy-policy-terms-conditions). |
| **Privacy policy is missing the required no-sharing statement** | Your policy lacks a "we don't sell or share" clause. | Add a statement that SMS opt-in data isn't sold or shared with third parties for marketing. |
| **You must confirm this to continue / to submit** | A required acknowledgement (e.g. forbidden topics) is unchecked. | Check the confirmation box to proceed. |
Field errors appear inline in the wizard and in the **Review** step's missing-field summary. You can save progress and return; nothing submits until every required field passes.
***
## 2. Brand verification failures (after you submit)
After you submit, carriers verify your **brand** (your business identity) against IRS or CRA records. If it can't be verified, your brand shows as **Identity failed** in the Compliance Center.
**Most identity failures are a data mismatch.** Your EIN is matched byte-for-byte against IRS/CRA records. If your legal name, EIN, or address doesn't match exactly, verification fails.
**Common causes and fixes:**
* **Legal name mismatch.** Match your registered legal name exactly, including the suffix (LLC, Inc, Corp).
* **EIN mismatch.** Confirm the 9-digit EIN against your IRS Letter 147C or SS-4 confirmation.
* **Address mismatch.** Use the address on your tax filings, including suite/unit.
* **Brand-new EIN.** If your EIN is less than \~30 days old, carrier records may not have propagated. Wait about 30 days and resubmit.
When a brand fails, MessageDesk reopens it for editing so you can correct and resubmit. When carriers return specific feedback (for example, a tax-ID correction), MessageDesk surfaces it on the registration so you know exactly what to fix.
A brand in **Pending**, **Unverified**, or **Self-declared** status is still in review. It isn't yet approved and hasn't failed. You don't need to take action unless it moves to **Identity failed**.
***
## 3. Campaign rejections and suspensions
Once your brand is verified, your **campaign** (what you send) goes to the carriers. It can come back **Declined** or **Suspended**.
**Declined** means carriers rejected the campaign. Common reasons:
* **Vague or mismatched samples.** Samples don't match the campaign description. Rewrite them to line up.
* **Forbidden content.** Campaigns tied to prohibited topics are rejected immediately and may lead to permanent blacklisting. Review the [forbidden topics](/carrier-registration/submit) list.
* **Missing consent or opt-out.** Document your opt-in method and include STOP language.
* **Website issues.** Your site must be live and show the same legal name/address, with an accessible privacy policy and SMS terms.
**Suspended** means carriers paused an active campaign, usually for a compliance or content concern. Contact [support@messagedesk.com](mailto:support@messagedesk.com) to review and restore it.
Corrections and resubmissions reset the review clock and add at least another 48 hours per resubmission. Fix everything before you resubmit.
MessageDesk reopens declined and suspended campaigns so you can correct and resubmit. If your brand is denied, any pending campaigns move back to **Draft**.
***
## 4. Errors when sending after approval
Even after approval, you may see these when sending. They relate to registration status, not the message itself.
| Message | What it means | How to fix it |
| ----------------------------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| **Phone number is not registered, please register number to send messages** | The number isn't tied to an approved campaign. | Finish registration, or contact support to associate the number with your campaign. |
| **Number is pending association with campaign, this can take up to 24 hours** | Your number is approved but still linking to the campaign. | Wait up to 24 hours. No action needed. |
| **Registration has been suspended by the carrier network** | Carriers suspended your campaign. | Contact [support@messagedesk.com](mailto:support@messagedesk.com) to review and restore. |
| **Number has exceeded messaging limits** | You hit your campaign's daily or per-second send limit. | Slow your send rate, or contact support about a higher throughput tier (may require enhanced vetting). |
Sending more than **2,000 messages/day** requires enhanced carrier vetting and may incur additional fees.
***
## Registration status glossary
You'll see these statuses in **Account → Settings → Compliance Center**.
| Status | Meaning | Action |
| ----------------------- | ------------------------------------- | ----------------------------------------------------------- |
| **Draft** | Not yet submitted. | Complete and submit. |
| **Submitted / Pending** | In review by MessageDesk or carriers. | Wait. Typically resolves within 24–48 hours per stage. |
| **Identity verified** | Your brand passed identity checks. | None. Campaign review comes next. |
| **Identity failed** | Brand couldn't be verified. | Correct your business details and resubmit (see section 2). |
| **Active** | Campaign approved. You can send. | None. Stay compliant with your registered use case. |
| **Declined** | Campaign rejected by carriers. | Fix the issue and resubmit (see section 3). |
| **Suspended** | Active campaign paused by carriers. | Contact support. |
***
## Still stuck?
Our support team works with you one-on-one to bring your registration into compliance. Email [support@messagedesk.com](mailto:support@messagedesk.com) or [contact us](/contact-us).
# Carrier Registration Overview
Source: https://docs.messagedesk.com/carrier-registration/overview
Understand A2P 10DLC and toll-free carrier registration in MessageDesk. Why it's required, who must register, what it costs, and how to get approved fast.
# Carrier registration overview (A2P 10DLC) for MessageDesk
Carrier registration verifies your business with U.S. carriers so your texts reach your contacts reliably. This page covers what it is, who needs it, and how to get approved fast.
***
## Carrier registration basics
### What is carrier registration?
**A2P 10DLC** is how U.S. carriers verify businesses that text from **local 10-digit numbers**. Registration tells carriers **who you are** and **what you send**. This improves deliverability and reduces filtering. If you text from **toll-free numbers**, you'll complete **Toll-Free Verification** (a separate process).
### Who needs to register?
* Any business texting **U.S. recipients** from **local (10DLC)** numbers in MessageDesk.
* **Toll-free** numbers require **toll-free verification** per number.
**Sole proprietorships aren't supported.** MessageDesk doesn't currently register sole proprietorships for business texting. To register, your business needs to be a registered legal entity (LLC, Inc, Corp, non-profit, government, and so on) with an **EIN**. If you operate as a sole proprietor, form an LLC or other entity (LegalZoom and similar services make this fast) and re-apply once you have your EIN. Contact [support](/contact-us) with questions about your specific situation.
Businesses or organizations texting only within Canada (never sending to U.S.-based numbers) are currently **exempt** from carrier registration.
### How long does carrier registration take?
* **Businesses with an EIN:** typically **5 to 7 business days**.
* **Toll-Free Verification:** typically **2 to 3 weeks**.
Timelines vary if carriers can't verify your information on the first pass.
***
## Choose your carrier registration path
### 1. Business/Organization (I have an EIN)
* **Requirements:** legal business name, **EIN** (you can provide this via email), business address, and website or public listing.
* **Coverage:** all local 10-digit numbers in your **workspace**.
* **Fees:** none. We bundle small ongoing carrier fees into your subscription price.
### 2. Toll-free verification
* **Applies to:** each **toll-free** number you use.
* **Cost:** free.
* **Timing:** about 2 to 3 weeks.
***
## What you'll need to submit your carrier registration
* **Exact legal business details** (match tax records, include LLC/Inc suffix if applicable).
* **EIN** for your registered legal entity.
* **Business address** (include suite/apt).
* **Website or official listing** (Facebook, Yelp) that shows your business name and address.
* **Messaging use case description** (what types of messages you'll send).
* **3 to 5 sample SMS messages** (include **"Reply STOP to opt out"** at the end of all messages).
* A compliant **[SMS privacy policy and terms](/carrier-registration/privacy-policy-terms-conditions)** published on your website.
* **Consent method** (how you collect opt-in: web form, written, verbal, keyword, and so on).
***
## If you're rejected
Our support team will work with you one-on-one to bring your website and opt-in methods into compliance for carrier registration.
**Common rejection reasons and quick fixes**
* **Business info mismatch.** Match your legal name (with suffix), **EIN**, and full address to tax records.
* **Broken or mismatched website.** Use a working URL that shows your correct business name and address.
* **Vague samples or use case.** Be specific and brand-consistent. Include an opt-out line.
* **Missing consent or opt-out.** Explain your opt-in flow and include **"Reply STOP to opt out."**
* **New EIN.** If your EIN is brand-new, wait about 30 days and resubmit.
See [Carrier registration errors and how to fix them](/carrier-registration/errors) for the full list of errors, rejection reasons, and what each status means.
***
## After approval
Our support team lets you know once your carrier registration is approved. From there, we'll work with you to configure your phone lines with your MessageDesk workspace.
Keep your **privacy policy and live site** consistent with what you registered.
***
## I'm a sole proprietor. What are my options?
MessageDesk doesn't currently register sole proprietorships for business texting, with or without an EIN. To register and text from MessageDesk, you'll need to operate as a **registered legal entity**.
**Options:**
* **Form an LLC, Inc, or Corp** (services like LegalZoom can set this up in a few business days), then register under the **Business (EIN)** path above.
* **If your business is already incorporated** but you've been operating informally as a sole prop, gather your EIN and tax docs and register through the standard Business path.
Have a unique situation? Reach out to [support](/contact-us) and we'll help you figure out the next step.
***
## FAQs
### Does registration cost money?
No. MessageDesk doesn't charge extra for registration. **Carrier and campaign fees** are included in your MessageDesk subscription.
### Can I register during a free trial?
Yes. Submit and complete registration during your **trial** so you're ready to text as soon as you're approved.
### Do toll-free numbers need this, too?
Yes. **Toll-free has its own verification** per number (free). Timing is typically **2 to 3 weeks**.
### What should my sample messages look like?
Short, specific, brand-consistent, and include **opt-out** in at least one example.
**Example:**
"Hi ContactFirstName, this is BusinessName. Your appointment is set for Date at Time with WorkspaceName. Reply YES to confirm or **STOP to opt out**."
### How do I stay compliant after I'm approved?
Get consent, include opt-out language when appropriate, avoid prohibited content (SHAFT), and keep your content aligned with your registered use case.
### What if I switch from sole proprietor to a business?
Once you have an **EIN** under a registered legal entity (LLC, Inc, Corp), register under the **Business (EIN)** path so all local numbers in your workspace are covered.
# SMS Privacy Policy Requirements
Source: https://docs.messagedesk.com/carrier-registration/privacy-policy-terms-conditions
Write and publish an SMS privacy policy and terms and conditions that meet A2P 10DLC and toll-free verification requirements. Includes required sections, carrier-ready example language, and templates.
# SMS privacy policy and terms & conditions requirements
To get approved for **A2P 10DLC** (local) and to pass **toll-free verification**, carriers require a **public, compliant SMS privacy policy** and **SMS terms and conditions**. Carriers visit your website and check both before approving your registration. This page is the single source of truth for that language. Use it (plus our downloadable template) to publish yours and keep your messages deliverable.
This page is referenced from the **Website privacy policy and SMS terms** step of [how to submit your carrier registration](/carrier-registration/submit). Publish this language on your site before you submit.
## Privacy policy resources (getting started)
**Download:** [MessageDesk SMS Privacy Policy Template (PDF)](https://cdn.prod.website-files.com/6349fd438ecb3a3594605225/67afb34b6eef780d2481b82d_A2P%2010DLC%20Carrier%20Compliance%20Privacy%20Policy%20Template%20-%20MessageDesk.pdf)
**Free Tool:** [**AI-Powered Privacy Policy Checker**](https://www.messagedesk.com/free-tools/privacy-policy-generator)
***
## What your SMS privacy policy must include
* **Data collected:** What you collect (e.g., name, mobile number) and **how** (web forms, keywords, in-store signups).
* **Data usage:** Why you send texts (reminders, order updates, service notices, promotions).
* **Consent and opt-in:** The explicit opt-in method (checkbox text, keyword, form language, written/verbal consent).
* **Opt-out mechanism:** Clear instructions like **"Reply STOP to opt out."** Include this **in your policy and sample messages**.
* **Third-party sharing:** State you **don't sell or share** SMS data with third parties for marketing. If you use an SMS provider, say it's **only to deliver messages**.
* **Security:** High-level measures (encryption, access controls).
* **Retention and deletion:** How long you retain data and how users can **request deletion**.
* **Support contact:** Email and/or phone for privacy inquiries.
For promotional messaging, get **express written consent**. A **double opt-in** (user enters number → confirm SMS → user replies YES) is strongly recommended.
***
## Where to publish (and link) your privacy policy
* Add the policy to your website and link it in the **global footer**.
* Link it anywhere you collect phone numbers:
* Opt-in forms and checkouts
* Chatbot flows
* Landing pages and popups
* Paper or in-store signups (QR/link)
You can place your SMS terms and conditions in your privacy policy or on a separate URL, but this language must be **present and accessible** to carriers as part of the vetting process. As a best practice, link both from your website footer.
***
## 1. Privacy Policy
Your privacy policy must cover SMS messaging: how you use phone numbers, opt-out instructions, and a statement that opt-in data won't be shared with third parties for marketing or promotional purposes.
Add an SMS section like the one below to the privacy policy on your website if this language isn't already there.
**Example SMS privacy policy language:**
#### Privacy Policy
Last updated: \{Insert last updated date}
This Privacy Policy describes Our policies and procedures on the collection, use, and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You.
We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy.
\{\{ Organization Name }} maintains strict privacy policies, ensuring that personal information and mobile information of our users and members is not sold, shared, rented, released, or traded to third parties for marketing/promotional purposes.
SMS Opt-Out: If you are receiving text messages from us and wish to stop receiving them, simply respond with either “STOP” to the number from which you received the message. Once we receive your message, you will no longer receive further text messages from us.
Collecting and Using Your Personal Data
#### Types of Data Collected - Personal Data
While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be used to contact or identify You. Personally identifiable information may include, but is not limited to:
* Email address, First name and last name, Phone number, Address, State, Province, ZIP/Postal code, City
* Usage Data is collected automatically when using the Service.
#### Use of Your Personal Data
The Company may use Personal Data for the following purposes:
* To provide and maintain our Service, including monitoring the usage of our Service.
* To manage Your Account, including managing Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user.
#### Retention of Your Personal Data
The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.
#### Security of Your Personal Data
The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage, is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security.
#### Changes to this Privacy Policy
We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy Policy on this page.
We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and update the “Last updated” date at the top of this Privacy Policy.
You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.
#### Contact Us
If you have any questions about this Privacy Policy, You can contact us at: \{Insert how people can contact your company (phone number or email)}
***
## 2. SMS Terms and Conditions
Add a dedicated page (or a section in your privacy policy) explaining your SMS terms and conditions, including:
* Message frequency
* Opt-out instructions
* Help info
* Contact info
* Messaging and data rates
**Example SMS Terms and Conditions language:**
#### SMS Terms and Conditions
\{Organization Name} sends text messages regarding marketing and promotions and general customer service, including appointment reminders, follow-ups, account and delivery reminders, and feedback and review requests.
You can cancel the SMS service at any time. Simply text "STOP" to the number provided. Upon sending "STOP," we will confirm your unsubscribe status via SMS. Following this confirmation, you will no longer receive SMS messages from us. To rejoin, sign up as you did initially, and we will resume sending SMS messages to you.
If you experience issues with the messaging program, reply with the keyword HELP for more assistance, or reach out directly to \{Insert support email address or toll-free number}.
Carriers are not liable for delayed or undelivered messages.
As always, message and data rates may apply for messages sent to you from us and to us from you. Message frequency varies. For questions about your text plan or data plan, contact your wireless provider.
For privacy-related inquiries, please refer to our privacy policy: \{Insert link to privacy policy}.
**The above is not legal advice.** MessageDesk isn't a law firm. The template language on this page is general information to help you meet carrier (CTIA / The Campaign Registry) registration requirements. It isn't legal advice and may not fit your business. Review any changes to your privacy policy or terms with your own legal counsel before publishing, and make sure your policies accurately describe your actual data practices. You're responsible for your website's content and its compliance with applicable law.
***
## Consent and opt-in language
Your privacy policy and terms explain your program; your **opt-in point** captures consent. Carriers require documented proof of how contacts opt in. For carrier-ready example consent language for each method (web form, keyword, QR code, paper form, and verbal), see [Submit A2P Carrier Registration → Submit proof of an opt-in method](/carrier-registration/submit).
**Verbal-only opt-in isn't accepted for marketing or promotional messaging.** Any campaign with a marketing component requires a **written** opt-in method (web form, keyword, QR code, or paper form). Verbal consent is only valid for non-promotional, non-marketing campaigns. An online form with an unchecked consent checkbox is the recommended method and is **required** for marketing traffic.
***
## Carrier registration checklist (pre-submission)
* ✅ Business details **match registration** (legal name, EIN, address).
* ✅ Website is **live** and matches your brand/legal name.
* ✅ **Opt-out** ("Reply STOP…") appears in your **policy and all sample messages**.
* ✅ Message examples reflect your **real messaging use case**.
* ✅ Opt-in method is **documented and visible** where numbers are collected.
* ✅ Clear **no-sharing** clause for third-party marketing.
***
## Common causes of rejection (and fixes)
* ❌ Missing **opt-out** → Add "Reply STOP to opt out" to policy **and** samples.
* ❌ No visible policy → Publish and link from footer plus all opt-in points.
* ❌ Vague purpose → Specify use cases (reminders, order updates, etc.).
* ❌ Website mismatch → Ensure site shows the **same legal name** and address.
* ❌ Missing no-sharing clause → Add the "we don't sell or share" statement.
* ❌ New EIN (less than 30 days) → Wait until records propagate, then resubmit.
For the full list of registration errors, rejection reasons, and status meanings, see [Carrier registration errors and how to fix them](/carrier-registration/errors).
***
## Frequently asked privacy policy questions
**Do I need a separate policy just for SMS?**
Not required. You can add an **SMS section** to your existing privacy policy that covers opt-in, opt-out, usage, sharing, retention, and contact.
**Is double opt-in mandatory?**
No, but it's recommended for **promotional** messaging and improves compliance evidence.
**Does this apply to toll-free numbers?**
Yes. **Toll-free verification** is separate, but the same privacy expectations apply.
***
## Final compliance checklist (before you submit)
* ✅ Publish/update your **SMS privacy policy** (with SMS Terms and Conditions).
* ✅ Link it in your **footer** and on **all opt-in forms**.
* ✅ Include **consent flow** and **STOP keywords** in sample messages.
* ✅ Submit with **accurate business info** that matches public records.
# Submit A2P Carrier Registration
Source: https://docs.messagedesk.com/carrier-registration/submit
Submit your A2P 10DLC and toll-free carrier registration in MessageDesk. Step-by-step guide to brand info, use case selection, and approval timing.
# How to submit your carrier registration with MessageDesk
MessageDesk builds carrier registration into the phone setup flow. When you configure phone lines, you provide your business details, choose how you want to connect numbers, and submit your registration from the same place.
***
## What you'll need to complete carrier registration (quick checklist)
* **Valid payment method**
* **Legal business name** (exactly as filed, including LLC/Inc)
* **EIN** (you can send your EIN by email. MessageDesk only asks for tax documents if manual verification is needed) and **business address**
* **Website or public listing** (Facebook, Yelp, etc.)
* **Use-case description** (what you'll send)
* **Three to five sample SMS messages** (include "Reply **STOP** to opt out" in at least one)
* **Consent method** (web form checkbox, written or verbal, keyword)
**Sole proprietorships aren't supported.** MessageDesk doesn't currently register sole proprietorships for business texting. To submit a registration, your business must be a registered legal entity (LLC, Inc, Corp, non-profit, government, and so on) with an EIN. See the [Carrier Registration Overview](/carrier-registration/overview) for options.
While your registration is pending, you can't send text messages in MessageDesk.
## Carrier registration timeline
1. **(10 min.)** Submit the required carrier registration information via MessageDesk
2. **(Depends/Variable)** Make the necessary website changes for full SMS compliance.
1. Depending on your messaging and campaign needs, changes can include updating your privacy policy, SMS terms and conditions, and opt-in method (website forms, and so on).
2. Complete all changes before you submit your full, final carrier registration request to the carrier network.
3. **(24 hours)** MessageDesk reviews your submitted brand and campaign information during normal business days (excluding holidays and weekends).
1. You can view your campaign status at any time in the Compliance Center by visiting **Account → Settings → Compliance Center**.
4. **(48 hours)** Upstream carrier providers review your registration and either approve or deny it.
This timeline assumes no errors or inaccuracies in the carrier registration you submit. Campaign corrections and resubmissions reset the registration clock back to zero and add at least another 48 hours for each resubmission and review.
## How to begin carrier registration in MessageDesk
You can begin the carrier registration process several ways when logged in to MessageDesk.
### 1. Go to Account -> Settings
Go to the **Compliance Center** and click the **Registration** tab to begin.
### 2. Begin carrier registration
Click **Start registration** to begin.
Before you can send text messages, you need to register your business (brand) and campaign with the carrier network. The submission takes about 10 minutes. MessageDesk saves your progress as you go.
You'll need to start a **14-day free trial** and **enter a valid payment method** to submit a carrier registration request. MessageDesk begins billing your account at the end of your 14-day free trial.
### 3. Start
Answer a few questions about where your message recipients are, your tax status, and the types of numbers you want to use in MessageDesk.
#### Where are the people you'll be texting?
USA, Canada, or both. Your answer determines which carrier regulations apply to your messaging. All U.S. messaging requires full A2P 10DLC carrier registration. MessageDesk users who only message Canadian recipients are currently exempt from carrier registration, but additional rules may apply.
#### Do you have a tax ID (EIN or BN)?
In the U.S., the IRS issues your EIN as a nine-digit number. In Canada, the CRA issues your BN as a nine-digit number. Carriers require a tax ID to verify your identity.
#### What numbers will you use to send messages?
You can use local 10-digit (10DLC) and toll-free numbers with MessageDesk.
Toll-free numbers (800, 888, etc.) have a separate registration process. To complete a toll-free carrier registration, email [**support@messagedesk.com**](mailto:support@messagedesk.com).
### 4. Enter your business information
Tell us about the legal entity that will send messages. Carriers verify your identity against IRS or CRA records, so enter your details exactly as they appear on your tax documents.
Start by selecting the country that issued your tax ID (EIN/USA or BN/Canada).
You can speed things up with AI by uploading your W-9 or comparable tax documents. MessageDesk reads your **W-9 or EIN Letter (CP-575)** and autofills your organization's details. We process these documents securely on our servers, and we never extract SSNs.
What's a W-9? [Click to view an example.](https://www.irs.gov/pub/irs-pdf/fw9.pdf)
Where can I find my Canadian BN? [Click for info.](https://www.canada.ca/en/services/taxes/business-number.html)
#### Organization identity
Enter the following:
* **Legal company name:** Must match your IRS or CRA records. Mismatches cause registration delays.
* **DBA/display name:** Toggle this on and enter your brand name if it differs from the legal name on file with the IRS.
* **Entity type (partnership, LLC, corporation, non-profit, government)**: Must match your tax filings. LLCs taxed as S-Corps should still select LLC.
* **EIN/Tax ID**: Your nine-digit IRS Employer Identification Number. You'll find it on your IRS Letter 147C or SS-4 confirmation.
* **Industry/vertical:** Carriers use your industry vertical for risk scoring. Certain verticals like Cannabis or Gambling face extra scrutiny.
#### Mailing address
* Street address
* City
* State/province
* ZIP/postal code
#### Publicly traded company
Toggle this on if your company is publicly traded, then enter the **stock exchange** and **stock symbol** for your organization.
Publicly traded companies must complete enhanced carrier vetting through MessageDesk.
#### Online presence
Enter your business website. If you don't have one, a Facebook or Instagram business-page link also works. We use this link to scan your site for privacy policy and SMS terms and conditions language.
#### Support contact (email and phone)
Enter a public-facing email and phone number where contacts can reach your organization for support. Both appear on carrier records.
### 5. Enter your messaging campaign details
Carriers need to know who you're texting and what you're sending. They review this closely, so accuracy directly affects your approval time.
#### Who receives your messages?
Check every group of people you plan to text. This shapes the campaign description that carriers review.
* Leads and prospective customers
* Existing customers
* Staff and employees
* Followers and volunteers
* Students and faculty
* Other
#### What kinds of messages do you send?
Check all that apply. Carriers match these against your sample messages.
* Marketing and promotions
* General customer service
* Reminders and follow-ups
* Invoices and payments
* Account notifications
* Delivery and order notifications
* Collecting feedback
* Collecting reviews
* Public service announcements
* Higher education
* Two-factor (2FA) messages
* Fraud and security alerts
* Polling and voting
* Other
#### Campaign description
Click **Generate with AI** to create a carrier-compliant campaign description.
Here's an example of a fully compliant carrier registration campaign description:
*MessageDesk (Alderwood Labs Inc.) sends SMS messages to leads, prospective customers, and existing customers for marketing promotions, appointment reminders, account notifications, delivery updates, customer care support, and invoicing. Recipients opt in by submitting their phone number through web forms, checkout flows, or other digital touchpoints on [messagedesk.com](http://messagedesk.com), or by providing explicit written consent directly to a MessageDesk business customer. Message frequency varies by account and use case.*
#### Monthly message volume
Enter the total SMS/MMS messages you expect to send per month across all MessageDesk-connected phone numbers.
* Up to 100/mo.
* 100-500/mo.
* 500-1,000/mo.
* 1,000-5,000/mo.
* 5,000-10,000/mo.
* 10,000-50,000/mo.
* 50,000-100,000/mo.
* 100,000+/mo.
Sending more than **2000 messages/day** requires **enhanced carrier vetting**. MessageDesk supports these messaging rates, but carriers require you to submit additional information. Enhanced vetting may also incur additional fees.
### 6. Acknowledge forbidden messaging topics
Carriers restrict messaging in the following content categories. Carriers immediately reject campaigns tied to forbidden content. Repeat violations can lead to permanent blacklisting.
#### Cannabis / CBD / THC
Carriers block messages that promote, sell, or advertise cannabis, CBD, THC, or related products, regardless of state or local legality.
#### Firearms, weapons, and ammunition
Carriers block content that promotes the sale of firearms, ammunition, explosives, or weapons (including accessories).
#### Gambling and betting
Carriers block unsolicited messages about gambling, sports betting, casinos, lotteries, or sweepstakes.
#### Adult / sexual content
Carriers block sexually explicit material, adult entertainment services, escort services, and dating services with sexual content.
#### Hate speech and harassment
Carriers block messages that contain hate speech, threats, harassment, bullying, or content that discriminates based on protected classes.
#### Phishing, fraud, and deceptive practices
Carriers block deceptive messages that try to fraudulently obtain personal information, impersonate entities, or mislead recipients.
#### Controlled substances and prescription drugs
Carriers block promotion of illegal drugs, unauthorized pharmaceuticals, and unapproved supplements.
#### Predatory lending and debt collection abuse
Carriers block high-interest lending solicitations (payday loans), abusive debt collection tactics, and misleading financial offers.
#### Unsanctioned political / PAC messages
Carriers block political messaging that lacks proper sender identification, opt-in consent, or campaign finance disclosure.
#### Other illegal activities
Carriers block any content that promotes, facilitates, or encourages illegal activity under federal, state, or local law.
#### **Does your messaging include age-restricted content?** e.g., alcohol and tobacco
Age-restricted industries can still register. Businesses like alcohol distributors, bars, and restaurants are eligible, but you need age-gating on your website first. A rep will walk you through what's needed. Email [support@messagedesk.com](mailto:support@messagedesk.com). We'll tell you exactly what you need for your vertical.
#### **Does your business offer lending, loans, or credit products?** e.g., loans, credit, or other financial services
**Lending and credit businesses can still register.** We can support businesses that offer lending, loans, or credit products, but these carry extra carrier requirements. A rep will walk you through what you need before you register.
Email [support@messagedesk.com](mailto:support@messagedesk.com) first, and we'll tell you exactly what you need for your vertical.
#### Confirmation:
Confirm that your messaging campaigns won't include content related to any of the forbidden topics listed above.
### 7. Add sample messages
Write example text messages your contacts would actually receive. Vague or mismatched sample messages that don't line up with your campaign description are the number one reason for campaign rejections.
Provide **three to five** sample messages. Three is the minimum. Five is the maximum carriers accept. Each message must be 20–320 characters. If you declared that your messages include links or phone numbers, **at least one** sample must contain a real link, and at least one must contain a real phone number.
#### Will your messages ever contain links or phone numbers?
Toggle one or both of these on if your messages will contain links or phone numbers. Declaring these accurately matters. Carriers check your sample messages against what you declare here.
#### What carriers check in your sample messages
* Provide **at least three** samples (up to five). Each must be 20–320 characters.
* Write texts your contacts would actually receive. Not placeholders.
* Include your org name in every message.
* Every message must include opt-out language (for example, "Reply STOP to opt out").
* Your sample messages must match what you described in your campaign description. Carriers reject mismatches.
#### Click Generate with AI
Click to create carrier-compliant sample messages based on your campaign description.
### 8. Website privacy policy and SMS terms and conditions
Your website needs an SMS-compliant privacy policy and a callout for specific, carrier-required, SMS terms and conditions. Carriers visit your website and check your privacy policy and SMS terms before approving your carrier registration campaign.
What you'll need:
* Access to your website (or the name of who manages it)
* Your privacy policy and SMS terms page links
#### Website URL
Enter your website URL. We use AI to scan your site for a privacy policy and SMS terms and conditions. This helps us personalize the suggested language to add to your website.
#### Policy contact information
Enter the email and phone number for the contact info generated in the privacy policy and SMS terms text below.
#### 1. Privacy Policy and 2. SMS Terms and Conditions
Your website needs an SMS-compliant privacy policy and SMS terms and conditions. Carriers visit your site and check both before approving your campaign.
At a minimum, your privacy policy must state how you use phone numbers, give opt-out instructions (**"Reply STOP to opt out"**), and confirm that you **don't sell or share** opt-in data with third parties for marketing. Your SMS terms must cover message frequency, opt-out, HELP, contact info, and that message and data rates may apply.
As a best practice, link your privacy policy and SMS terms from your website **footer**. This language must be present and accessible to carriers as part of the vetting process.
Full, carrier-ready example privacy-policy and SMS terms language (plus a downloadable template and a free AI checker) lives on the [SMS Privacy Policy Requirements](/carrier-registration/privacy-policy-terms-conditions) page. Copy it from there so you're always using the current version.
**This isn't legal advice.** MessageDesk isn't a law firm. The template language is general information to help you meet carrier (CTIA / The Campaign Registry) registration requirements and may not fit your business. Review changes with your own legal counsel, and make sure your policies accurately describe your actual data practices. You're responsible for your website's content and its compliance with applicable law.
### 9. Submit proof of an opt-in method
Carriers require documented proof of how your contacts, customers, or subscribers opt in to receive SMS messages from your organization.
As part of your carrier registration, you'll submit evidence of your opt-in method as a screenshot or URL.
#### Online form - website form collects phone and consent
For every form on your website where you collect a phone number, include SMS opt-in verbiage and a default unchecked checkbox to collect consent.
Online forms are your best choice for collecting SMS opt-in. Carriers also **require** this method for any campaign that sends **marketing or promotional** text messages.
**Example website SMS opt-in form**
**Example SMS opt-in language:**
***By submitting this form and signing up for texts, you consent to receive text messages regarding (\{INSERT THE TYPES OF MESSAGES YOU WILL SEND}) from at the number provided. Consent is not a condition of purchase. Message & data rates may apply. Message frequency varies. Unsubscribe at any time by replying STOP or clicking the unsubscribe link (where available). Reply HELP for help. Privacy Policy (\{INCLUDE LINK TO PRIVACY POLICY}).***
#### Via text (keyword) - contacts text a keyword to opt in
You can configure your MessageDesk workspace and campaign to automatically opt in contacts who text a designated keyword to your MessageDesk-connected phone numbers.
How this works:
1. You display your opt-in keyword on your website, signage, and other channels.
2. A contact texts a keyword like SUPPORT to your MessageDesk number.
3. They automatically receive a follow-up message like this:
**Example keyword opt-in message:**
*MessageDesk: You're now subscribed to general customer service, invoices and payments, delivery and order notifications, review requests, feedback collection, account notifications, reminders and follow-ups, and marketing and promotions. Msg frequency varies. Msg & data rates may apply. Reply HELP for help, STOP to cancel. Privacy policy → [https://www.messagedesk.com/privacy](https://www.messagedesk.com/privacy)*
#### QR code - a scan leads to an opt-in landing page
You can submit a QR code as proof of SMS opt-in.
Display consent text like this close to where you advertise your QR code:
*By scanning, you consent to receive general customer service, invoices and payments, delivery and order notifications, review requests, feedback collection, account notifications, reminders and follow-ups, and marketing and promotions from MessageDesk. Msg & data rates may apply. Message frequency varies. Reply STOP to cancel. Privacy Policy: [https://www.messagedesk.com/privacy](https://www.messagedesk.com/privacy)*
#### Paper form - a physical form with consent language
Paper forms are a valid form of SMS opt-in. For this opt-in method, include the following opt-in language on your form.
Paper forms require the following disclosure elements for opt-in:
* STOP opt-out keyword
* HELP keyword
* "Message and data rates may apply"
* Message frequency language (how often contacts can expect a text)
* SMS terms and conditions reference/link
* Privacy policy reference/link
**Example paper form opt-in language:**
*I agree to receive general customer service, invoices and payments, delivery and order notifications, review requests, feedback collection, account notifications, reminders and follow-ups, and marketing and promotions from MessageDesk. Msg & data rates may apply. Message frequency varies. Reply STOP to cancel, HELP for help. Consent is not a condition of any purchase. Privacy Policy: [https://www.messagedesk.com/privacy](https://www.messagedesk.com/privacy)*
#### Verbal consent - staff reads a consent script
You can indicate verbal opt-in for non-promotional and non-marketing carrier registration campaigns.
**Verbal-only opt-in can't be used for marketing or promotional campaigns.** Any campaign with a marketing component requires a written opt-in method (web form, keyword, QR code, or paper form). The wizard blocks a verbal-only selection on a marketing campaign. Use verbal consent only for non-promotional, non-marketing messaging.
**Example verbal opt-in script:**
*"I'd like to add you to our text messaging list so MessageDesk can send you general customer service, invoices and payments, delivery and order notifications, review requests, feedback collection, account notifications, and reminders and follow-ups. Standard message and data rates may apply, and message frequency varies. You can reply STOP at any time to unsubscribe, or HELP for help. Do I have your consent?"*
\[Wait for verbal "yes"; record in CRM or call recording]
### 10. Enter additional contact information
You can add additional contacts if you aren't able to make website changes or changes to your privacy policy or terms and conditions.
Specifically, you can add contact information for the web developer, marketing agency, or legal/compliance representative that your business works with.
MessageDesk generates a document brief for each contact that explains the specific changes they need to make. You can print or save this document as a PDF to share.
### 11. Review and submit your carrier registration information
Review your required carrier registration information before you submit. You can edit each section independently and make updates.
Once you're satisfied with the information, complete the final attestation that all information you're submitting is correct and accurate, then click **Submit registration**.
## After you submit your carrier registration
* **Status updates:** Visit the Compliance Center in MessageDesk to view your carrier registration status in real time.
* **Connect with Support:** Questions? Email [**support@messagedesk.com**](mailto:support@messagedesk.com)
**Once you submit, your brand and campaign details lock while carriers review them.** You can't edit them mid-review. If your brand fails identity verification, or if carriers decline or suspend your campaign, MessageDesk automatically reopens it so you can correct the flagged details and resubmit. To fix something while a submission is still pending, contact [support@messagedesk.com](mailto:support@messagedesk.com).
For a full list of registration errors, rejection reasons, and what each status means, see [Carrier registration errors and how to fix them](/carrier-registration/errors).
***
## Tips to speed approval
* Make sure your **website shows the same legal name** and address you submit.
* Include **opt-out language** ("Reply STOP…") in at least one **sample message**.
* Describe **exactly** what you plan to send (for example, "appointment reminders and service updates").
* For toll-free, submit **one form per number** to verify each line.
***
## Frequently asked carrier registration questionnaire questions
About **seven to 10 minutes**. Have all the required documents and information ready before you start.
Yes. MessageDesk saves your progress as you go, so you can leave and pick up where you left off. Gathering your required documents before you begin still makes the process faster.
Contact our support team at [support@messagedesk.com](mailto:support@messagedesk.com) or text (775) 313-9465. We can help correct any errors before carriers process your registration.
No. Once your business is registered, you can add multiple phone numbers under the same registration. Toll-free numbers require separate verification.
***
## If you're rejected
* Our team will let you know, and we'll help resubmit on your behalf. We're here to help you fix it once and get approved.
# Contact Us
Source: https://docs.messagedesk.com/contact-us
Get in touch with MessageDesk by phone, email, or chat to report a bug, ask product questions, request a new feature, or get billing support.
Ask for something new in Inbox by MessageDesk
View our latest product updates and announcements
For questions or concerns about your account, email or text our support team.
Interested in a partnership? Drop us a line and leave your thoughts here.
Put our sales team on your calendar for a demo, pricing discussion, and answers to questions.
# Anonymous opted-out and blocked contacts
Source: https://docs.messagedesk.com/contacts/anonymous-opt-out-blocked
Manage anonymous, opted-out, and blocked contacts in MessageDesk. Learn how each list works, when contacts move between them, and how to unblock or restore.
# Understanding anonymous, opted-out, and blocked contacts
Visit the contacts module in MessageDesk, and you'll find a list of all of your contacts as well as views for **Anonymous**, **Opted-Out**, and **Blocked** in the side menu.
What does each view mean in the contacts module?
## Anonymous contacts
### What are anonymous contacts?
Anonymous contacts aren't actually contacts; they're just phone numbers that are tied to conversations somewhere in your inbox.
MessageDesk intentionally keeps contacts and conversations separate so that you can text with phone numbers that may never become contacts saved in MessageDesk.
## Opted-Out
### What are opted-out contacts?
Opted-out contacts are contacts that have chosen to stop receiving messages from any of your phone lines/numbers connected to MessageDesk.
Contacts primarily opt out of text messaging by texting the word **STOP**.
In the contacts module, MessageDesk provides you with a list of these contacts so that you may connect with them via alternate communication methods, like email, etc.
You can learn more about [SMS opt-in, privacy policies, and compliance](/settings/workspace-settings/compliance-center) here.
### Bulk import or export the opt-out list
Admins can move opt-outs in and out of MessageDesk from the [Data Center](/settings/workspace-settings/data-center).
* **Import opt-outs.** Upload a CSV of phone numbers (E.164 format) to block them from every phone line in the workspace. Useful when migrating from another platform. See [Import opt-outs](/settings/workspace-settings/data-center#import-opt-outs).
* **Export opt-outs.** Run an opt-out export from the Data Center to get a CSV of every number currently on the workspace opt-out list.
Opt-out imports are **workspace-scoped**. If your tenant has multiple workspaces, import into each workspace that needs the block.
## Blocked
### What are blocked contacts?
Blocked contacts are tied to unwanted (sometimes malicious) phone numbers that may, from time to time, send errant text messages to your MessageDesk workspace.
Once you block a contact, they will no longer be able to send text messages to your MessageDesk workspace, phone numbers, or inbox.
## How to block a contact
### 1. Go to the contacts module.
Search for or select the contact you want to block from your contact list.
### 2. Click the block icon.
You'll find the block icon in the contact detail card.
Blocking a contact method hides the conversation from your inbox and blocks any inbound messages on that channel. MessageDesk won't save messages received while the contact is blocked.
# Create, Delete, Filter & Import Contacts
Source: https://docs.messagedesk.com/contacts/create-import
Create, delete, filter, and import MessageDesk contacts one at a time or in bulk via CSV. Covers required formats, validation rules, and import limits.
# Add individual contacts one-by-one, or import many via CSV
You can create a single contact or bring in thousands at once with a CSV. Here's how, and the limits to avoid errors.
**Need to export your contacts?** Go to **Settings → Data Center → [Export](/settings/workspace-settings/data-center#export)** and click **Export Contacts** for a full CSV dump of every contact in your workspace.
***
## Add an individual contact
### 1. Go to **Contacts**
Click **+ Add Contact**. On desktop, this opens a dialog where you can create the contact without leaving the page.
On mobile, clicking **+ Add Contact** navigates to a separate page instead of opening a dialog.
### 2. Enter details
Add **First name**, **Last name**, and **Phone**, then click **+ Create Contact**.
First name, last name, and phone number are **required when creating contacts**. Phone numbers without names are treated as **anonymous contacts** until you add contact details later.
If the phone number already belongs to another contact, you'll see an error. Phone numbers are **unique identifiers** in MessageDesk (one number → one contact). A single contact can have **multiple** numbers.
### 3. View and edit the contact
From the contact panel, you can:
1. Add additional phone numbers.
2. Copy the contact's number.
3. Send a message from the Inbox.
4. Unlink ("delete") a number from the profile.
5. Block the contact from messaging your workspace.
Changing a contact's primary phone may **unlink** past conversations from the profile.
***
## Delete or edit a contact
To permanently remove a contact from your workspace:
1. Go to **Contacts**.
2. Find and select the contact(s) you want to delete.
3. Select your **items per page** (25, 50, 100, or 250)
4. Hover and click to select individual contacts or multiselect the entire page
5. Click the **vertical ellipse icon** to delete an individual contact.
6. Confirm the deletion or edit when prompted.
Deleting a contact is **permanent** and can't be undone. MessageDesk preserves the contact's conversation history, but it appears as an anonymous contact.
Bulk deletes are processed as a single batch request. Contacts are removed from the list as the deletion completes, and a confirmation shows the total number of contacts deleted.
### Sort contacts
Click the **Sort** dropdown menu above the contacts list to change the sort order. Available sort options include:
* **Alphabetical by first name (A–Z)**
* **Alphabetical by last name (A–Z)**
* **Newest:** most recently added or updated contacts at the top
* **Oldest:** oldest contacts at the top
Sort is a **dropdown menu** (not a toolbar). Open the menu, pick an option, and the contacts list re-orders immediately.
### Search contacts
The search bar appears **only on filtered Contact views** (saved filters or any applied filter). To search, first apply or open a saved filter, then use the search bar to find contacts within that view.
The search bar is **not available on All Contacts**. Use a filter or saved filter to search a specific subset of your contacts.
***
## Filter contacts
The Contacts module lets you filter contacts based on their properties saved in MessageDesk. You can use **Criteria** and **Conditions** to create various types of filters.
### Add criteria
Criteria are a set of conditions. You can add as many criteria as you like to a filter. As you add criteria, you'll see a filter preview.
Criteria work in two ways: creating AND and OR statements.
* **Selecting Match All (AND)** means all criteria must meet the filter's conditions.
* **Selecting Match ANY (OR)** means any criteria must meet the filter's conditions.
### Add conditions
Conditions are based on data fields saved and populated as part of the contact's profile in MessageDesk.
You set your filter on conditions on standard fields like:
* First Name
* Last Name
* Last Outbound Message Time
* Last Inbound Message Time
You can also set filter conditions based on [**custom fields**](/settings/workspace-settings/custom-fields) added to MessageDesk.
### Condition operators
Use condition operators to create logical expressions for your filters. The types of operators available depend on the field's data type (true/false, dropdown, date, number, phone, and text).
#### Available condition operators
* Contains
* Equals
* In
* Is Empty
* \> (greater than)
* \>= (greater than or equal to)
* \< (less than)
* \<= (less than or equal to)
* NOT Contains (does not contain)
* NOT Equals (does not equal)
**Is Empty doesn't take a value.** When you select **Is Empty**, the value selector is removed. The operator alone defines the match. Use it to find contacts missing a value in a given field (for example, contacts with no opt-in status set).
Once you're satisfied with your filter, click **Apply Filter** to view a list of contacts matching your filter conditions and criteria.
### Save and edit filters
After applying a filter, you can save it for quick access later:
1. Click **Save Filter**.
2. Give your filter a name.
3. Click **Save**.
Saved filters appear in the **side menu** of the Contacts module. Click any saved filter to instantly view the contacts that match its criteria.
### Search saved filters
Use the search widget in the Contacts side menu to quickly find a saved filter by name. Selecting a result navigates to Contacts with that filter applied.
Saved filter search is available on the **desktop web app only**. It's not available on tablet or mobile, since filters can't currently be managed in Contacts on those platforms.
* Search matches against the **filter name only** (not its criteria or conditions).
* The widget follows the same design as the global search bar and the Contacts search bar for a consistent experience across MessageDesk.
### Delete a saved filter
To remove a saved filter:
1. Open **Contacts** in the desktop web app.
2. In the Contacts side menu, find the saved filter you want to remove.
3. Click the **Delete** button on the filter.
4. Confirm the deletion.
The **Delete** button is available for both simple and **compound filters** (filters built from multiple conditions).
Deleting a saved filter is permanent. It doesn't delete any contacts, only the saved view.
***
## Import contacts in bulk via CSV
Upload contact lists in bulk when you have a large amount of contact information to bring into MessageDesk.
### CSV limits and requirements (read first)
**TL;DR**
* **Row count:** up to **5,000 rows** per CSV (hard limit)
* **File size:** up to **10 MB**
* **Platform:** **Web-only** (imports aren't supported on mobile/desktop apps)
* **Format:** must use **.csv** files **with a header row**, **UTF-8** encoding
* **Required per row:** **Email** *or* **Phone** (at least one)
**Your CSV must:**
* Include a **header row** (first line in .csv file).
* Use **consistent columns** on every row (same number of columns as the header).
* Include at least one contact method: **Email** *or* **Phone** per row.
* Preferred: Use **E.164** format for phone number formatting (e.g., `+15551234567`).
Download: [**Make a copy of our sample contact import .csv template here**](https://docs.google.com/spreadsheets/d/1P8JIfQngIJnMRo5cfCEf8gdxvIKpzmoeLEAfImYII58/copy).
### 1. Go to **Contacts** → **Import Contacts**
Click **Import Contacts**.
**Note:** You can also access the contact import feature from **Settings → Workspace Settings → [Data Center](/settings/workspace-settings/data-center)**
### 2. Select your .CSV
Select a `.csv` file from your computer or make a copy of our [**shared Google Sheet (MessageDesk Contact Import Template)**](https://docs.google.com/spreadsheets/d/1P8JIfQngIJnMRo5cfCEf8gdxvIKpzmoeLEAfImYII58/copy)
**Note:** The file picker only accepts .**CSV type files**.
### 3. Identify contacts by mapping properties in MessageDesk to columns in your file
You can adjust the field mapping manually, but in most cases, fields will auto-map when column names match properties in MessageDesk.
Click **+ Add Custom Field** to map [custom fields](/settings/workspace-settings/custom-fields) from your .csv file to custom fields in MessageDesk.
**A contact can have multiple phones, emails, and addresses.** Map each column (for example, `mobile`, `work_phone`, `email_home`, `email_work`, `address_billing`, `address_shipping`) to its own field. All values attach to the same contact record instead of creating duplicates.
**Note:** Email or Phone is a required property for every contact uploaded to MessageDesk.
### 4. Fix duplicates and errors (preview step)
Click Preview Import to confirm that your fields are properly matched. MessageDesk validates your data and flags issues **before** import. Invalid rows are **skipped**.
***
## Validation rules and what we check
* **Email**: must be a valid email address (`name@example.com`).
* **Phone**: must be in **E.164** format (e.g., `+15551234567`).
* **Custom fields**: must match defined **types** and constraints. See [custom fields](/settings/workspace-settings/custom-fields) for supported types.
* **Duplicates**: checked by **email** and **phone**. Matching contacts are **updated** rather than skipped (see [How duplicate updates work](#how-duplicate-updates-work)).
***
## How duplicate updates work
When an imported row matches an existing contact by **email** or **phone**, MessageDesk **updates** that contact instead of skipping the row:
* Updates only apply to columns you **mapped** in the import.
* A field is updated only when the mapped column has a **value** for that row. Empty values leave the existing field unchanged.
* Updates can apply to **standard fields** (first name, last name, email, phone, address, etc.) and **custom fields**.
***
## How imports run
* **Batching**: processed in batches up to **5,000** (aligned with the row limit).
* **Async processing**: large uploads are staged and processed on the server for reliability.
* **CSV only**: the importer accepts **.csv files**. Other formats aren't supported.
***
## Common errors and fixes
* **"CSV file is too large."**\
Split your file so each CSV has **≤ 5,000 rows** and **≤ 10 MB**.
* **"CSV imports are only supported on the desktop web platform. Please use the web interface for importing contacts."**\
Switch to the **web app** to run the import.
* **"Invalid phone format."**\
Convert to **E.164** (country code + number, no spaces).
* **"Invalid email address."**\
Correct typos or remove invalid emails.
* **"Row has an inconsistent number of columns."**\
Ensure every row matches the header's column count.
* **"Missing contact method."**\
Add **Email** or **Phone** for that row.
***
## Best practices
* **Normalize phones to E.164** before uploading.
* **Deduplicate** by email/phone first to avoid partial merges.
* **Test with 25 rows** to confirm mapping and validation.
* **Use [custom fields](/settings/workspace-settings/custom-fields)** intentionally. Ensure data types match your definitions.
* **Keep under limits** (≤ **5,000** rows, ≤ **10 MB**) for smooth importing.
***
## FAQ
**Can I import from my phone or desktop app?**\
No. CSV imports are **web-only**.
**Can I import other data (labels, message templates, messages, opt-outs)?**\
Yes. From the [Data Center](/settings/workspace-settings/data-center) you can import **messages**, **message templates**, **labels**, and **opt-outs** in addition to contacts. See [How to import message templates, labels, and opt-outs](/settings/workspace-settings/data-center#how-to-import-message-templates-labels-and-opt-outs). This doc covers **Contacts CSV**.
**What happens to skipped rows?**\
Invalid rows are **skipped**. Fix the CSV and re-import those rows separately.
**Can I update existing contacts?**\
Yes. CSV imports **update** existing contacts when an imported row matches an existing contact by **email** or **phone**. Only mapped columns with a value are updated. Empty cells leave existing fields unchanged. Updates apply to standard fields (name, email, phone, address, etc.) and custom fields.
# Download & Install Apps
Source: https://docs.messagedesk.com/get-started/install-apps
Download MessageDesk for iOS, Android, and as a desktop progressive web app. Step-by-step install instructions for every platform your team uses.
# Download MessageDesk on mobile and desktop
Download the MessageDesk companion on your phone or set it up as a desktop app.
## What's available on mobile vs. desktop
**Mobile app features:**
* Access your Inbox and Conversations
* Send and receive messages
* View and manage contacts
* Update your user profile
* Change Inbox appearance (color theme only)
* Auto-capitalization at the start of sentences for easier typing
**Desktop-only features:**
* Relays
* Comments and mentions (coming soon to mobile)
* Full settings access (layout, signatures, Workspace Settings)
**Does MessageDesk require WiFi?** No. The mobile app works on any internet connection, including cellular data (4G/5G). You don't need WiFi for core functionality like sending messages, managing your Inbox, or viewing contacts.
***
## Download MessageDesk for iOS
### 1. Download TestFlight app on iOS
To join our beta, [download TestFlight on your phone here.](https://apps.apple.com/us/app/testflight/id899247664)
**Watch:** [How to Install the MessageDesk Mobile App on iOS](https://www.youtube.com/shorts/z4ZuYxrPu5w).
### 2. Open a web browser on your phone
Use a web browser like Safari or Chrome to visit the URL in the next step.
### 3. Download the Inbox by MessageDesk App (Beta)
Visit this URL to download/add the iOS mobile app to your TestFlight account: [https://testflight.apple.com/join/nXZRzunZ](https://testflight.apple.com/join/nXZRzunZ)
**If TestFlight opens and asks for a redemption code, stop.** This happens when TestFlight launches directly instead of loading the invite page. Here's how to fix it:
1. Exit TestFlight and return to your browser (Safari or Chrome).
2. Navigate back to the invite link: [https://testflight.apple.com/join/nXZRzunZ](https://testflight.apple.com/join/nXZRzunZ)
3. On the invite page, scroll down and tap **"View in TestFlight"** next to *Inbox by MessageDesk Beta*.
Don't enter a redemption code. The invite link handles access automatically.
### 3b. Install from the invite page (not from inside TestFlight)
The invite page shows two items:
* **Get TestFlight**: download the TestFlight app first if you don't have it yet.
* **View Inbox by MessageDesk Beta**: tap this to install the app.
Tap **"View in TestFlight"** next to *Inbox by MessageDesk Beta*. TestFlight opens directly to the correct app. Tap **Install**.
If you open TestFlight on its own and try to find the app from inside the app, you won't see it listed yet. You must come from the invite link.
### 4. Turn automatic updates on
Open TestFlight and tap MessageDesk under apps. Scroll and toggle automatic updates on. Always make sure you have the latest app updates. If your app is out of sync with the newest version, you may encounter errors.
Automatic updates only occur when your phone is plugged in, charging, and connected to WiFi. If you primarily use cellular data, check for updates manually to avoid running an outdated version, which can cause errors.
### 5. Start texting and leave feedback
Send SMS and MMS, assign replies, and collaborate in real-time. When using the mobile app, you can take screenshots and send "Developer Feedback" to our team.
## Android: Join the Google Play beta
### 1. Visit the Google Play Android app store
[Download MessageDesk for Android](https://play.google.com/store/apps/details?id=com.messagedesk.mobile) here.
You'll find two versions of MessageDesk when searching on the Google Play Store. The first app, titled "MessageDesk," is tied to the version 1 MessageDesk product "MessageDesk Reach".
The other version, "**Inbox by MessageDesk**," is the one all version 2 Inbox by MessageDesk users should download and use.
### 2. Tap Install and log in to your existing MessageDesk account from your Android
Tap Join the beta if prompted.
You can send "Developer Feedback" from the app to our team.
## How to install MessageDesk as an app on Chrome
Use Chrome to install MessageDesk as a PWA (progressive web app) that looks and behaves like a native app.
### 1. Open **Chrome** and **log in to your MessageDesk workspace**.
* **Click More (three dots)**
* Select the option to **Cast, Save, and Share**
### 2. Select Install Page as App
You can also click the **Install icon in the address bar** (when available).
### 3. Name the app
Name it **MessageDesk**, or give it a name based on your organization name, etc.
### 4. MessageDesk appears in your OS launcher or dock
**Tips:**
* Right-click the app on your taskbar/dock for shortcuts.
* Manage app settings from the app window: More > App info > Settings.
## How to install MessageDesk as an app on Safari / macOS Sonoma+
Safari can save any site as a standalone web app with separate cookies and history.
### 1. Log in to MessageDesk using Safari
Go to **File** and select **Add to Dock** (or Share button > Add to Dock).
### 2. Name the app and click Add
macOS saves MessageDesk in your **Home > Applications** and adds it to the **Dock**.
### 3. Open from Dock/Launchpad and sign in
**Note:**
* To change the app name, URL, or icon click: **App menu > Settings**.
* **Optional:** You can show/hide navigation controls or match title bar color to site.
* **Notifications:** Allow in the web app, then manage in **System Settings > Notifications**.
## Quick troubleshooting
* Can’t find the install option in Chrome?
* Make sure you’re on the main app URL and using the latest Chrome.
* Safari “Add to Dock” missing?
* You need macOS Sonoma or later. Update macOS, then try again.
* Beta access issues on mobile?
* Reopen the TestFlight or Google Play link and ensure you’re logged into the correct Apple/Google account.
## FAQ
**Can I use MessageDesk on cellular data only (no WiFi)?**\
Yes. MessageDesk has full functionality on cellular data. The only limitation is that automatic app updates require WiFi. You may need to update the app manually. Poor cellular signal can also affect performance, the same as any internet-connected app.
# Introduction to MessageDesk
Source: https://docs.messagedesk.com/get-started/introduction
Discover what MessageDesk is, why teams choose our shared SMS inbox over email and chat tools, and how to onboard your team in minutes.
# Welcome to MessageDesk
## Why MessageDesk
Great conversations build great businesses. Most texting tools were built for blasts, not for real, back-and-forth dialogue. MessageDesk gives your whole team a **shared SMS inbox** built for two-way conversation.
* **Team visibility:** Anyone can jump in, assign, and resolve conversations without juggling personal phones.
* **One place for everything:** Route, label, and manage every message from every connected phone line.
* **Built for now:** Tools that help you meet people where they are: by text.
## How MessageDesk works
MessageDesk centralizes SMS across your business phone numbers (landline/VoIP hosting, purchased local/toll-free, or connected Twilio) into a single, collaborative inbox.
**Key features**
* **Shared Inbox:** Teammates see the same thread, assign owners, leave internal comments, and reply fast.
* **Custom roles and permissions:** Control access by **phone line**, **label**, or **teammate inbox** (roles and resource-level permissions).
* **Relays and scheduling:** Set **auto-replies** (e.g., after-hours) and **schedule** messages for later.
* **Compliance tools:** Support for **opt-in and opt-out** and **carrier registration** to improve deliverability.
## Get started
### 1. Sign up
Create your free account at **inbox.messagedesk.com**. No credit card required to start.
### 2. Add a phone number
Connect your first line:
* **Host** an existing **landline/VoIP** number
* **Purchase** a new local or **toll-free** text-enabled number
* **Connect** an existing **Twilio** number
### 3. Invite your team
Invite teammates to share phone access and collaborate.
* Assign **roles** (Admin, Manager, Operator)
* Fine-tune with **labels/lines/teammate inbox** permissions
## What you'll love on day one
* **Faster replies:** Text from a number your customers already know.
* **Cleaner hand-offs:** Assign owners and mention teammates with internal comments.
* **Less chaos:** Labels and filters keep the queue organized.
* **Set it and forget it:** Schedule reminders and auto-replies so nothing slips.
# Join an Existing MessageDesk Workspace
Source: https://docs.messagedesk.com/get-started/join-workspace
Accept your MessageDesk email invitation, create a user profile, set up your account, and start collaborating in your team's shared SMS Inbox today.
***
# Accept your MessageDesk invitation
You'll receive an email from MessageDesk with a **Join the Team** button.
Click **Join the Team** to open the sign-in page and complete your account.
Log in or create an account using the **exact same email address** that you were invited with (usually your work email). If you sign up with a different email, you'll create a **separate workspace**.
***
## Create your user account (as an invited user)
You have two ways to finish the setup:
1. **Sign in with email:** we'll send a **one-time 6-digit code** to your mobile phone and email. Enter it to continue.
2. **Sign in with Google:** no codes required. Approve with your Google account.
After you complete account creation, you'll land directly in your team's workspace.
Enter a **valid personal mobile phone number** when logging in via email. This phone number is for **authentication and login only**. It's separate from the phone numbers associated with your MessageDesk workspace.
## Log in and complete two-factor authentication
1. Confirm sign up via SMS by entering the 6-digit code sent to your personal mobile phone.
2. Confirm sign up via email by entering the 6-digit code sent to your email address.
Didn't receive an SMS? Double-check that you entered a **valid mobile phone number**. You can also click Send Code to resend the code to your number.
Didn't receive an email? Double-check your spam/junk folder and look for an email from **[noreply@messagedesk.com](mailto:noreply@messagedesk.com)**
***
## Join multiple workspaces
You can be a member of **multiple** MessageDesk workspaces. If you already have a MessageDesk account:
* Clicking a new invite opens the **workspace selection screen** with workspaces you've been invited to.
* Workspaces are **grouped by tenant** (the parent company account), so you can quickly tell which company each workspace belongs to.
* Choose the workspace you want to join.
Switching between workspaces is quick. Open the workspace switcher (top-left or profile menu, depending on app view) and select the workspace you need.
**Tenant admins** can also create new workspaces directly from the workspace selection screen. See [Tenant Management](/get-started/tenant-management) for details.
***
## What happens next
* Your admin sets your access through **roles and permissions** (Admin, Manager, Operator, or a custom role).
* You'll see the **Inbox**, can view or send messages according to your permissions, and (optionally) receive notifications once configured.
* If you don't see expected phone lines or labels, your role may limit access. Ask an admin to adjust.
***
## Troubleshooting
**Didn't receive the invite email?**
* Check **spam/junk** and any **security/quarantine** filters.
* Confirm with your admin that the **email address** is correct.
* Ask IT to allowlist `messagedesk.com`, then have the admin **resend** the invite.
**Invite link expired or not working?**
* Ask your admin to **resend the invitation** from **Settings → Team Management**.
* Try opening the link in an **incognito/private** browser window.
**Signed in with the wrong email by accident?**
* Log out, then sign in again using the **exact email you were invited to**.
* If you created a new workspace by mistake, your admin can resend the invite to the correct address.
**Getting "Invalid session for the user, session expired."?**
* The sign-in page times out after **3 minutes**. Sign out completely, then sign back in without pausing on the auth page. See [Account Security → Invalid session for the user](/settings/my-settings/security#invalid-session-for-the-user-session-expired) for details.
**I joined, but don't see Team Management or certain phone lines.**
* Your role may be **Viewer** on those features/lines. Ask an admin to review your **role** and any **resource-level** permissions.
**Can I switch between email/password and Google sign-in?**
* If you **already have an account** created with an **email/password**, you can sign in with **Google** (using the same email). MessageDesk will link your Google identity to your existing account.
* If your account was **created with Google first**, you must continue using Google to sign in. You can't add email/password login to a Google-first account.
# Connect a Landline or VoIP Number to MessageDesk
Source: https://docs.messagedesk.com/get-started/phone-numbers/landline-voip
Text-enable your existing landline or VoIP number with MessageDesk. Step-by-step setup, supported carriers, and what to expect during the porting process.
## How to connect a new landline or VoIP phone number
* Click your profile image in the top right of MessageDesk
* Click "Settings" from the dropdown menu
* From the left-hand navigation, select "Phone Management" under Workspace Settings,
If you don't see `Phone Management` you may not have access. Speak with your account administrator for more details.
* Click `Add Phone Number` button in the top right corner of the Phone Management screen
* Select **Host existing phone number**
After clicking, `Add Phone Number` you'll see the following dialog. Select **Host existing phone number**.
## If you haven't already completed carrier registration
[Carrier registration](/carrier-registration/overview) is required for texting with MessageDesk. If you haven't already completed this process, you'll be prompted to do so first.
Learn how to [submit your carrier registration submission](/carrier-registration/submit).
## Processing time
After you submit your Letter of Authorization (LOA), our team processes the hosting request on the backend. Processing time varies by provider:
* **Typical timeline:** 5 minutes to 72 hours
**Adding additional numbers later?** You'll need to complete a new LOA for each number you want to add. The same processing timeline applies.
## Supported VoIP providers
Below is a list of all supported VoIP providers. You can text-enable and transfer phone numbers from any of these providers to MessageDesk via [phone number hosting](https://docs.messagedesk.com/get-started/phone-numbers/overview#hosting-vs-porting-what%E2%80%99s-the-difference).
In this case, all of your calling, voice features, and service will remain with your VoIP provider. The text messaging associated with the number will move to MessageDesk. Many businesses and organizations configure their numbers in this way to get the best of both voice and text messaging features.
Don't see your provider? If your number is non-mobile and not tied to a mobile device, in most cases, you can still transfer it to MessageDesk and text-enable it.
* Microsoft Teams Phone
* Cisco Webex Calling
* Zoom Phone
* RingCentral
* 8x8
* Nextiva
* Dialpad
* Vonage
* GoTo Connect
* Intermedia Unite
* Ooma
* aircall
* Avaya Cloud
* Mitel
* Sangoma
* Quo (formerly OpenPhone)
* Grasshopper
* Phone.com
* net2phone
* Verizon Business
* AT\&T Business
* Comcast Business
* Spectrum Business
* Lumen Business
* Cox Business
* Frontier Business
* Rogers Business
* Bell Business
* TELUS Business
**Verizon One Talk isn't compatible with MessageDesk.** One Talk numbers are tied to Verizon's mobile network, so you can't text-enable or host them with MessageDesk. If you use One Talk today and want texting through MessageDesk, use a separate MessageDesk business number. To keep voice continuity, set up [call forwarding](/settings/workspace-settings/phone-management#call-forwarding) from that number to your One Talk line.
# Connect Phone Lines to MessageDesk
Source: https://docs.messagedesk.com/get-started/phone-numbers/overview
Compare phone number options for MessageDesk: local 10DLC, toll-free, landline, VoIP, and Twilio BYOC. Pricing, setup steps, and registration timelines.
# Learn how to connect new or existing phone numbers to MessageDesk
Setting up texting is one flow that combines [**carrier registration**](/carrier-registration/overview) with **phone configuration**. You choose the number path (purchase, host, or connect), we guide you through the right steps, and you start texting.
***
## Your onboarding journey
1. Complete the [Carrier Registration Questionnaire](/carrier-registration/submit)
**2. Provide business information (if needed)** If you haven't registered yet, you'll add basic business details so we can complete **A2P 10DLC** (for local numbers) or **Toll-Free Verification**.
**3. Choose your configuration path**
* **Purchase new**: Local **10DLC** or **toll-free** numbers
* **Connect existing**: **Landline**, **VoIP**, local 10DLC, or **toll-free** numbers
* **Connect Twilio**: Plug in your Twilio numbers (see note below)
**4. Start texting**: Once approved and connected, you're ready to message from your shared inbox.
**Twilio users:** You manage registration directly with Twilio. When you connect those numbers to MessageDesk, you generally don't need to register again. Just connect and go. MessageDesk automatically configures webhooks for your Twilio numbers so messages sync.
***
## Important to know
* **Registration is part of setup**: It's not a separate first step. Our flow handles it.
* **Smart routing in the form**: The configuration form adapts to your choices (purchase vs. connect, local vs. toll-free, etc.).
* **Different paths for different stacks**: Twilio-connected numbers keep using your Twilio registration state.
***
## Supported number types
MessageDesk can **text-enable** most business numbers in the U.S. and Canada.
1. **Landlines / local 10-digit numbers**
2. **VoIP provider numbers** (RingCentral, Dialpad, Zoom, Vonage, Nextiva, etc.)
3. **Toll-free numbers** (800, 833, 844, 855, 866, 877, 888)
4. **Twilio numbers** (connected to your Twilio account)
**Note:** MessageDesk supports numbers located in **North America (US & Canada)**.
### Landlines / local 10-digit numbers
Text-enable traditional wired/legacy lines across all U.S. states and Canadian provinces.
Learn how to connect an existing landline or VoIP number to MessageDesk for texting.
### VoIP provider numbers
Integrate numbers from common business VoIP systems (e.g., RingCentral, Dialpad, Grasshopper, Ooma, Aircall, Vonage, Nextiva, Verizon Business, AT\&T Business, Zoom).
**Verizon One Talk isn't supported.** One Talk lines are tied to Verizon's mobile network, so you can't text-enable them with MessageDesk. See [Supported VoIP providers](/get-started/phone-numbers/landline-voip#supported-voip-providers) for alternatives.
Learn how to connect an existing landline or VoIP number to MessageDesk for texting.
### Toll-free numbers
Text-enable North American toll-free numbers with prefixes **800/833/844/855/866/877/888**.
Learn how to connect an existing landline or VoIP number to MessageDesk for texting.
### Twilio numbers
Use your Twilio numbers within MessageDesk's shared team inbox.
Learn how to connect your Twilio numbers to MessageDesk.
***
## Unsupported number types
* **International numbers** outside the U.S./Canada
* **Google Voice** and **mobile carrier personal numbers** (unless fully **ported** to a VoIP provider first)
* **Virtual numbers** (non-carrier virtual SMS apps/services)
* **Short codes (outbound)** – MessageDesk doesn't send from 5–6 digit codes
* Inbound from short codes is supported (you can receive replies)
**Note:** To use a personal mobile or Google Voice number, first **port** it to a VoIP provider, then connect it for texting with MessageDesk.
***
## Hosting vs. porting (what's the difference?)
### Phone number hosting (text-enable only)
We add **SMS** to your existing number. **Voice stays with your current provider.**
* Keep your current number
* Calls continue to route exactly as they do now
* Texts flow through MessageDesk into your shared inbox
**Important:** Once we host your number for texting, any text messages currently being received in your VoIP system will no longer appear there. All text messages will only be received in MessageDesk. Voice calls remain unaffected and continue to work in your current system.
**Note:** Hosting works for traditional landlines, local 10-digit numbers, and most VoIP-connected numbers.
### Phone number porting (move everything)
We **move the entire number** (voice + text) to MessageDesk.
* Full transfer of services
* MessageDesk becomes the provider for that number
**Note:** In short: **Hosting = add texting** to your current setup. **Porting = move voice + text** to MessageDesk.
***
## Texting with multiple numbers
You can connect **up to 48 phone lines** to a single workspace and manage all conversations in one place. Filter your inbox by **phone line**, and tailor **roles & permissions** so only the right teammates see the right conversations.
***
## Registration and deliverability essentials
* **A2P 10DLC (local)**: Required for most U.S. local business texting. It improves throughput and reduces filtering.
* **Toll-Free Verification**: Recommended or required for higher volume and better deliverability on toll-free.
* **Twilio**: Registration stays in Twilio. Just connect your numbers to MessageDesk.
* **Timing**: Registration can take time to approve. Plan ahead for campaigns.
* **Content**: Avoid generic short links and spammy phrasing. Include opt-out language when appropriate.
Learn more: [**Carrier Registration Overview**](/carrier-registration/overview)
***
## Frequently asked phone number questions
### How many phone numbers can I connect?
Up to **48** phone numbers per workspace.
### How soon can I start texting?
* **Outbound**: After your number is connected **and** registration (10DLC or toll-free) is approved.
* **Inbound**: As soon as the number is connected, inbound texts will appear in your inbox.
### Does every teammate see every conversation?
No. Use **roles & permissions** to limit access by **phone line**, **label**, or **teammate inbox**.
### Can I rename lines for clarity?
Yes. Go to **Settings → Phone Management** to name a line (you can even add an emoji), which helps triage in the Inbox.
### Can international users access MessageDesk with US or Canadian numbers?
Yes. You can use MessageDesk with US or Canadian numbers from outside North America if you're tied to a North American business entity and can complete carrier registration for that entity. For example, a US-based business with support representatives in other countries can use MessageDesk.
### Can I send or receive texts internationally with a US or Canadian number?
No. MessageDesk only supports sending and receiving text messages to and from phone numbers in North America (US and Canada). Even if you have a US-registered number, you can't text phone numbers outside of North America.
### What if my provider isn't listed?
If it's a standard **landline** or **VoIP** number in the U.S./Canada, we can likely text-enable it. Use the configuration form, and we'll route you down the right path.
### Can I use phone line extension numbers with MessageDesk?
MessageDesk doesn't integrate with or support texting for phone line extension numbers. You can still configure **user Roles and Permissions** to limit access to certain phone lines. You can also use **conversation assignment** and **Relays** to automate who gets assigned to what conversation on any given phone line.
Learn more: [**Team Management**](/settings/workspace-settings/team-management) | [**Relays**](/relays/overview)
# Purchase a Text-Only Number with MessageDesk
Source: https://docs.messagedesk.com/get-started/phone-numbers/purchase-new
Buy new local 10DLC text-only phone numbers in MessageDesk by area code. Pricing, monthly fees, and step-by-step purchase instructions for your team.
## Add a New Phone Number
* Click your profile image in the top right of MessageDesk
* Click "Settings" from the dropdown menu
* From the left-hand navigation, select "Phone Management" under Workspace Settings,
* If you don't see `Phone Management` you may not have access. Speak with your account administrator for more details.
* Click `Add Phone Number` button in the top right corner of the Phone Management screen
* Select **Purchase Phone Number**
After clicking `Add Phone Number` you'll see the following dialog. You can select any option.
## If you haven't already completed carrier registration
[Carrier registration](/carrier-registration/overview) is required for texting with MessageDesk. If you haven't already completed this process, you'll be prompted to do so first.
Learn how to [submit your carrier registration submission](/carrier-registration/submit).
# Connect Toll-Free Numbers for SMS Messaging
Source: https://docs.messagedesk.com/get-started/phone-numbers/toll-free
Purchase or port toll-free phone numbers with MessageDesk for high-volume SMS. Includes verification requirements, pricing, and approval timelines.
## Add a New Phone Number
* Click your profile image in the top right of MessageDesk
* Click "Settings" from the dropdown menu
* From the left-hand navigation, select "Phone Management" under Workspace Settings,
* If you don't see `Phone Management` you may not have access. Speak with your account administrator for more details.
* Click `Add Phone Number` button in the top right corner of the Phone Management screen
* Select **Host existing phone number**
After clicking `Add Phone Number` you'll see the following dialog. You can select any option.
## If you haven't already completed carrier registration
[Carrier registration](/carrier-registration/overview) is required for texting with MessageDesk. If you haven't already completed this process, you'll be prompted to do so first.
Learn how to [submit your carrier registration submission](/carrier-registration/submit).
# Connect Twilio Phone Numbers to MessageDesk
Source: https://docs.messagedesk.com/get-started/phone-numbers/twilio
Bring your own Twilio phone numbers (BYOC) to MessageDesk. Step-by-step setup, API key configuration, and how to migrate existing Twilio messaging.
**Important for Twilio users:** You manage carrier registration through your Twilio account before connecting to MessageDesk. By the time you connect your numbers to our inbox, registration is already complete. No additional registration is required through MessageDesk.
## How to Connect Phone Numbers to MessageDesk
**What's Required:**
1. [Twilio Account SID](https://help.twilio.com/articles/14726256820123-What-is-a-Twilio-Account-SID-and-where-can-I-find-it-)
2. [Twilio Auth Token](https://help.twilio.com/articles/223136027-Auth-Tokens-and-How-to-Change-Them)
3. 10 Digit Phone Number(s) for Twilio Account
### 1. Navigate to Settings
* Click your profile image in the top right of MessageDesk
* Click "Settings" from the dropdown menu
### 2. Click Phone Management
* From the left-hand navigation, select "Phone Management" under Workspace Settings,
* If you don't see `Phone Management` you may not have access. Speak with your account administrator for more details.
### 3. Click Add Phone Number
* Click `Add Phone Number` button in the top right corner of the Phone Management screen
* Select **Connect Twilio**
### 4. Input your Twilio credentials
Add your Twilio account SID and auth token, as well as every Twilio-connected phone number you'd like to add to MessageDesk.
***
## How MessageDesk Syncs Messages with Your Twilio Numbers
When you connect Twilio numbers to MessageDesk, we use Twilio's Event Streams to sync messages without affecting your existing Twilio setup. This means you can continue using your current workflows, webhooks, and integrations exactly as before.
### Event Streams integration
MessageDesk uses Twilio's Event Streams to listen for message events. This approach:
* **Doesn't interfere with your existing setup** - Your current webhooks, integrations, and workflows remain unchanged
* **Works alongside other systems** - You can use MessageDesk while maintaining other Twilio integrations
* **Syncs all message activity** - Both inbound and outbound messages are captured natively
You don't need to configure anything manually. Add your Twilio credentials and numbers, and we handle the Event Streams setup automatically.
### Message syncing behavior
**Inbound messages:**
* All inbound SMS and MMS messages are synced to MessageDesk in real-time
* Your existing Twilio webhooks and integrations continue to receive messages as normal
**Outbound messages:**
* Messages sent from MessageDesk are synced automatically
* Messages sent through external systems (like your API or other platforms) using your Twilio number are also synced to MessageDesk
* This is especially useful for broadcast users who want to send high-volume messages via API while maintaining visibility in MessageDesk
### Delivery status tracking
**Messages sent from MessageDesk:**
* Full delivery status tracking (sent, delivered, failed, etc.)
**Messages sent from external systems:**
* Messages appear in MessageDesk with a **"Sent"** status
* Delivery status updates from external sends don't sync currently
* For complete delivery tracking, send messages directly from MessageDesk
**For existing Twilio users:** If you added your Twilio numbers to MessageDesk before this update, your numbers are still using the previous webhook pattern and will continue to work normally. If you need to migrate to the new event-based system, contact [support@messagedesk.com](mailto:support@messagedesk.com) for assistance.
***
## Troubleshooting
### Default webhook URL causing issues
When you add a new number in Twilio, it automatically configures a default webhook URL. If you're experiencing issues sending messages from MessageDesk, this default configuration may be the cause.
**To resolve this:**
1. Log in to your [Twilio Console](https://console.twilio.com/)
2. Navigate to your phone number's configuration
3. Clear the webhook URL field (leave it blank)
4. Save your changes
This is safe to do because MessageDesk uses [Event Streams](https://www.twilio.com/docs/events), not webhooks, to sync messages. Clearing the default webhook URL won't affect MessageDesk functionality.
### Using multiple services with your Twilio number
Since MessageDesk uses Event Streams, your Twilio number can work with multiple services simultaneously. If you need other applications to receive message webhooks:
* **Event Streams subscriptions** - Add multiple subscribers to receive message events. See [Twilio Event Streams documentation](https://www.twilio.com/docs/events).
* **TwiML functions** - Route webhooks to multiple endpoints. See [TwiML for Programmable Messaging](https://www.twilio.com/docs/messaging/twiml).
* **Messaging webhooks** - Configure webhooks for other services as needed. See [Twilio Messaging Webhooks](https://www.twilio.com/docs/usage/webhooks/messaging-webhooks).
MessageDesk won't interfere with any of these configurations.
***
## Disconnect or remove a Twilio number
MessageDesk connects to your Twilio numbers by listening to Twilio's Event Streams. It doesn't take over your number or its webhooks, so there's no disconnect button inside MessageDesk. What to do depends on your goal. The sections below cover each case.
Twilio offers two ways to integrate with other tools. The older method takes over a number's webhooks, which blocks other services from using that number. MessageDesk doesn't do this. Our current integration only listens to Twilio's built-in Event Streams, so your number keeps working with any other Twilio services at the same time. In most cases you don't need to disconnect anything.
### Use your number with other tools while keeping MessageDesk
You don't need to disconnect from MessageDesk to use or test your Twilio number in another application. MessageDesk only listens to the Event Stream and doesn't touch the number's webhooks. Your number can work with MessageDesk and other services at the same time. See [Using multiple services with your Twilio number](#using-multiple-services-with-your-twilio-number).
### Temporarily stop messages from reaching MessageDesk
Twilio doesn't have a simple pause switch for an Event Streams subscription. To stop messages from reaching MessageDesk while keeping your number and Conversations history, edit the MessageDesk Event Streams subscription in your Twilio account and remove the two event types it subscribes to:
| Event | Action | Schema version |
| ---------------- | -------- | -------------- |
| Inbound Message | Received | 6 |
| Outbound Message | Sent | 7 |
To resume, edit the subscription again and add those two event types back using the same schema versions shown above. The schema version matters: adding a different version means MessageDesk won't receive the events correctly. For how to edit a subscription and its event types, see [Twilio's Event Streams documentation](https://www.twilio.com/docs/events).
Any messages that arrive while these event types are removed won't appear in MessageDesk. There's no backfill for messages received during that gap.
### Stop MessageDesk from receiving your Twilio messages entirely
If you're moving off MessageDesk and want it to stop receiving your messages and events, delete the Event Streams subscription in your Twilio account rather than only removing its event types. Once it's deleted, messages and events stop flowing to MessageDesk. For the steps, see [Twilio's Event Streams documentation](https://www.twilio.com/docs/events).
After you delete the subscription, the number still appears in your MessageDesk workspace but no longer sends or receives messages there. MessageDesk has no way to know you deleted the subscription in Twilio, so the number stays visible until you ask us to remove it.
If you connected your Twilio numbers before MessageDesk moved to the Event Streams system, your connection uses the older webhook pattern rather than an Event Streams subscription. If that applies to you, or you're not sure, contact [support@messagedesk.com](mailto:support@messagedesk.com) and we'll help.
### Remove a number from MessageDesk
To take a Twilio number out of your MessageDesk workspace, contact [support@messagedesk.com](mailto:support@messagedesk.com) and we'll remove it. Removing a number is the equivalent of deleting it, and it's separate from your Twilio Event Streams subscription. Removing the number from MessageDesk doesn't delete the subscription in Twilio. If you also want to stop the flow of events, delete the subscription using the section above.
Removing a number from MessageDesk permanently deletes all messages, Conversations, comments, and history tied to that number. This can't be undone.
***
## Learn more
For advanced Twilio configuration, refer to Twilio's official documentation:
* [Event Streams](https://www.twilio.com/docs/events) - How MessageDesk syncs with your Twilio numbers
* [Messaging Webhooks](https://www.twilio.com/docs/usage/webhooks/messaging-webhooks) - Configure webhooks for other services
* [TwiML for Programmable Messaging](https://www.twilio.com/docs/messaging/twiml) - Advanced message routing and multi-subscriber setups
# Sign Up for MessageDesk
Source: https://docs.messagedesk.com/get-started/sign-up
Sign up for a free MessageDesk account, create your team workspace, and start your 14-day trial of shared SMS inbox features in minutes.
# Create your account and sign up for MessageDesk
Create your account, verify your identity, and name your workspace.
***
## Requirements
* **Valid email address**
* **Personal mobile phone number** (for verification; not used as a workspace number)
Landlines, Google Voice/Skype/virtual numbers **won't** work for verification.
International phone numbers are supported for account creation, login, and two-factor verification only.
***
## 1. Create your account
If you're new (and haven't [been invited to an existing workspace](/get-started/join-workspace)), go to the sign-up page and enter your **email** and **password**, or choose **Sign in with Google**.
**Password must include:**
* At least **1 uppercase** letter
* At least **1 number**
* At least **1 symbol**
***
## Verify via mobile (SMS code)
You'll receive a **6-digit code** by SMS to your personal mobile number. Enter the code to continue.
2FA codes send via **Twilio Verify** from a Twilio shortcode, which provides faster delivery and supports international phone numbers.
Didn't get the code? Email [support@messagedesk.com](mailto:support@messagedesk.com) or text [**(775) 313-9465**](sms:7753139465).
***
## Verify your email (email code)
Next, we'll send a **second 6-digit code** to your **email**. Enter the code to finish verification.
Didn't get the email? Check your spam/junk folders, then contact [support@messagedesk.com](mailto:support@messagedesk.com) or text [**(775) 313-9465**](sms:7753139465).
***
## Name your workspace
Give your new workspace/inbox a **name** to complete the setup. You can change this later in **Settings**.
***
## What happens next?
You'll land in your **new MessageDesk workspace** with a prompt to complete the following steps:
1. [Connect phone numbers](/get-started/phone-numbers/overview): you have several options here.
[Carrier Registration](/carrier-registration/overview) is included with your MessageDesk account and is required when connecting new phone numbers. Your carrier registration process varies depending on the types of phone numbers you connect to MessageDesk.
2. [Import or add contacts](/contacts/create-import): add contacts manually or via .csv file upload.
3. [Invite team members](/settings/workspace-settings/team-management): bring your team to MessageDesk with set roles and permissions.
4. Visit our docs for answers to questions and additional resources.
***
## Frequently asked questions
**Is my personal mobile number used for texting customers?**\
No. It's only used for **account security** and two-factor authentication (2FA). Your workspace uses **separate business numbers** you connect or purchase.
**Can I use an international phone number to create a MessageDesk account?**\
Yes. MessageDesk supports international phone numbers, but only for account creation, login, and two-factor account verification. MessageDesk doesn't support sending or receiving messages from international numbers.
**Can I change my workspace name later?**\
Yes. Update it anytime in **Settings → Workspace Profile**.
**I was invited to a workspace. Do I still use this page?**\
Follow the **invitation link** you received to join the existing workspace: see [**Join a workspace**](/get-started/join-workspace).
***
# Tenant Management
Source: https://docs.messagedesk.com/get-started/tenant-management
Manage your MessageDesk tenant company profile and create new workspaces for different teams, brands, or business units under a single account.
# Tenant management
A **tenant** is the parent company account that owns one or more MessageDesk **workspaces**. Tenant admins can update tenant-level company details and spin up new workspaces for different teams, brands, or business units, all from a single account.
**Tenant vs. Workspace:** A tenant is your company (organization-level). A workspace is an inbox under that company (per-workspace configuration lives in [Workspace Settings](/settings/workspace-settings/overview)). Most users only need one workspace, but larger organizations can run multiple workspaces under the same tenant.
**Where tenant management lives:** Tenant management is **not** inside a workspace's Settings menu. It lives on the **workspace switcher / workspace selection screen**, and the **Manage tenant** option is only visible to **tenant admins**.
***
## Do I need a separate workspace, or just user permissions?
Most teams **don't** need a second workspace. Before creating one, decide whether the goal is **separating data** (different teams and contact lists) or **separating access** (limiting which users see which lines, labels, or inboxes).
| Use a **separate workspace** when… | Use **User Access Control (UAC)** when… |
| -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| You have distinct teams or locations with **separate contact lists** that should be managed independently. | All users belong to the same team and share one contact list. |
| Each team needs its own **phone lines, labels, templates, and reporting**, but you still want centralized admin oversight. | You want certain users to only see specific **phone lines, labels, or teammate inboxes**. |
| Data, conversations, and history should **not** be visible across teams. | You want everyone in one workspace, with permissions controlling visibility. |
| You're operating multiple brands or business units under one company. | You're a single team that needs role-based access (Admin, Manager, Operator, or custom). |
Setting up access control inside your existing workspace is usually faster and cheaper than adding a workspace. See [Roles & permissions](/settings/workspace-settings/team-management#user-roles-and-permissions) for how to scope users to specific phone lines, labels, or inboxes.
**Billing scales per user, per workspace.** A user who needs access to two workspaces is billed in each one. If your goal is "User A only sees Line A and User B only sees Line B," UAC inside a single workspace is almost always the better fit.
***
## Who can manage a tenant
Only users with the **tenant admin** role see the **Manage tenant** option and the ability to create new workspaces from the workspace switcher / workspace selection screen.
Tenant admins can:
* Edit the tenant company profile.
* Create new workspaces under the tenant.
Workspace-level admins (without tenant admin) can manage their own workspace from Settings but **cannot** edit tenant details or add new workspaces from the workspace switcher.
***
## Update tenant company details
1. Click your **profile icon** (top-right) and open the **workspace switcher**.
2. Select **Manage tenant** (visible to tenant admins only).
3. Click **Edit** on the **Tenant profile**.
4. Update your **company name**, **address**, **website**, or **logo**.
5. Click **Save**.
Changes apply at the tenant level and are reflected across all workspaces under the tenant.
***
## Create a new workspace under a tenant
Tenant admins can create additional workspaces directly from the workspace selection screen. No need to sign up for a separate account.
1. From the **workspace switcher** or **workspace selection screen**, click **Create workspace**.
2. Enter a **workspace name** (e.g., "Sales", "Support", "West Coast Team").
3. Click **Create**.
When the workspace is created:
* You're automatically added as the workspace **admin**.
* A new membership is created linking your user to the workspace.
* The workspace appears under your tenant in the workspace selection screen.
After creating a workspace, follow the standard onboarding steps to [connect phone numbers](/get-started/phone-numbers/overview), [import contacts](/contacts/create-import), and [invite teammates](/settings/workspace-settings/team-management).
***
## Workspace selection screen
When you sign in, the workspace selection screen groups your memberships by **tenant**. If you belong to multiple tenants or multiple workspaces under the same tenant, you'll see them organized accordingly:
* **Tenant header:** company name and logo.
* **Workspaces list:** every workspace under that tenant where you're a member.
* **Create workspace:** visible only if you're a tenant admin for that tenant.
Click any workspace to enter it, or use the workspace switcher inside the app to move between workspaces without signing out.
***
## Frequently asked questions
**Can a single user belong to multiple tenants?**\
Yes. If you've been invited to workspaces across different companies, each tenant appears as its own group on the workspace selection screen.
**Who becomes the tenant admin?**\
The user who originally created the MessageDesk account is the default tenant admin. An existing tenant admin can assign additional tenant admins.
**Can I delete a workspace under a tenant?**\
Yes. Cancelled workspaces are **automatically deleted 90 days after cancellation**. You don't have to do anything. To delete a workspace **sooner** than that, email [support@messagedesk.com](mailto:support@messagedesk.com) from a workspace admin email and include the last 4 digits of the card on file to authorize the deletion. There is no in-app delete button, and the action is permanent. See [Delete a workspace](/settings/workspace-settings/overview#delete-a-workspace) for the full request checklist. Tenant deletion follows the same process.
**What's the difference between cancelling a subscription and deleting a workspace?**\
Subscriptions and workspaces are **separate**. Cancelling a subscription severs the subscription ↔ workspace link at the end of the billing period and puts the workspace in a **locked state**. Data is retained for **90 days**, after which the workspace is automatically deleted if you don't resubscribe. To delete a workspace **before** the 90-day window ends, contact support. See [Cancel a subscription vs. delete a workspace](/settings/workspace-settings/overview#cancel-a-subscription-vs-delete-a-workspace).
**Does creating a new workspace require a separate subscription?**\
Billing for additional workspaces under the same tenant depends on your plan. See [Billing and Subscriptions](/settings/workspace-settings/billing-subscriptions) or contact support for details.
**Does a user who's in two workspaces get billed twice?**\
Yes. Workspace seats are billed **per user, per workspace**. If the same teammate needs access to two workspaces under your tenant, they're billed in each. If your goal is just to limit what a user sees, use [User Access Control](/settings/workspace-settings/team-management#user-roles-and-permissions) inside a single workspace instead.
**Can I move a phone number from one workspace to another?**\
Yes. MessageDesk first removes the number from the source workspace, which also removes the conversation history tied to that number there. See [Move a phone number between workspaces](/settings/workspace-settings/phone-management#move-a-phone-number-between-workspaces).
# Comments, Mentions & Reactions
Source: https://docs.messagedesk.com/inbox/comments-mentions
Collaborate inside MessageDesk SMS conversations with private team comments, @mentions, and emoji reactions to keep internal context visible.
# Team collaboration: comments, mentions, and emoji reactions
Collaborate inside MessageDesk without ever sending an unintended text. Use **comments** for internal notes, **mentions** to alert teammates, and **emoji reactions** to respond quickly without typing a message.
***
## Comments
### What are comments?
Comments are **internal-only notes** that appear inside a text thread but **never go to contacts**.\
Use them for:
* Internal handoffs.
* Approvals or QA reviews.
* Context before responding.
* Reminders or documentation.
You're in **comment mode** when the compose box turns **purple** (default theme).
On **mobile**, comments, threaded replies, and mentions are currently **read-only**. Full functionality is coming soon.
***
## Mentions
### What are mentions?
Mentions let you notify teammates directly inside a conversation.
* Type **@** to mention one or more teammates (you can @yourself too).
* Mentions trigger **email** and **browser notifications** that link to the conversation.
* Great for follow-ups, approvals, or assigning the next step.
**Example:**\
"@Jordan please confirm details before closing this ticket."
***
## Emoji reactions
### What are emoji reactions?
Emoji reactions let you quickly acknowledge or respond to messages and comments without typing a full reply.
* Available on **messages** and **non-threaded comments**.
* Shown in the **top-left** corner of a message or comment.
* Show a **count of unique reactions** (hover or click to see who reacted).
**When to use reactions**
* 👍 Confirm you've seen a message.
* 🎉 Celebrate a win.
* ❤️ Show appreciation.
* 👀 Indicate "reviewing" without replying.
### Inbound reactions from iPhone customers ("Loved", "Liked", etc.)
When a customer reacts to one of your texts from an iPhone (for example, tapping **Loved** on a product photo), Apple sends that reaction over SMS as plain text. You'll see something like `Loved "test outbound"`.
**How it appears in MessageDesk:**
* The reaction lands in the conversation as a normal **inbound message** containing the reaction text and a snippet of the message they reacted to.
* You'll get an inbound message **notification** just like any other reply.
* MessageDesk doesn't render the reaction as a native iOS-style Tapback bubble or attach it visually to the original outbound message. There's no count or icon overlay on the original send.
**Why:** Carrier SMS doesn't carry a structured "reaction" payload between iPhone and non-Apple platforms (Android recipients see the same text strings). MessageDesk receives only the text Apple emits.
**Tips for iPhone-heavy audiences:**
* When sending product photos, ask customers to **reply with the product name or number** instead of (or in addition to) tapping a reaction. This keeps intent unambiguous.
* Use the inbound text itself as the signal. `Loved "Blue floral dress – $48"` clearly maps back to what the customer wants.
***
## How to use comments, mentions & reactions
### 1. Open a conversation
From your **Inbox**, open any conversation.
### 2. Switch to comment mode
Use the **Message Type dropdown** to switch from **Message** to **Comment**.\
The composer turns **purple**.
### 3. Mention teammates
Type **@** anywhere in your comment to open the inline mention menu. You can mention:
* One or multiple teammates.
* Yourself (as a personal reminder).
How the inline mention menu works:
* Type **@** to open the menu, then keep typing to filter by name.
* Use the **arrow keys** to navigate, then press **Enter** to insert the highlighted teammate, or click a name to insert it.
* Teammates appear by their **first + last name** (no spaces). If a teammate hasn't set a name, you'll see their **email** instead.
Mentioning yourself is a quick way to set reminders or flag items for follow-up.
### 4. Write and send your comment
Type your comment, then click **Send**. It appears in the thread but **doesn't** send as a text.
* Optional: click **+** to [attach media](/messaging/media) (images, files, and so on).
* Switch back to **Message** mode to send an actual SMS.
### 5. Add an emoji reaction
Hover over any message or comment, click the **emoji icon**, then choose a reaction.\
Click an existing emoji to see who reacted.
### 6. Mentions trigger notifications
Mentioned teammates get:
* An **email notification** with a direct link to the thread.
* A **browser push notification** if enabled.
***
## Find comments you're mentioned in
1. Go to your **Inbox**.
2. Open **My Inbox** (left sidebar).
3. Select the pre-saved view for **Comments you're mentioned in**.
4. Click a conversation to jump directly to your mention.
***
## Searching for comments
Comment search lives in [Advanced Search](/search/advanced-search), not Quick Search. [Quick Search](/search/quick-search) (⌘K) only returns contacts and conversations.
1. Open [Advanced Search](/search/advanced-search):
* On **desktop**, press **⌘K** / **Ctrl K** to open [Quick Search](/search/quick-search), then press **Enter** on a result or click **Open Advanced Search**.
* On **mobile or tablet**, tap the search icon near the account settings icon.
2. Type your search query and review the **Comments** results section, which has its own per-type filters and pagination.
3. Click a comment result to open the conversation and scroll directly to that comment.
Search respects your existing permissions. You'll only see comments from conversations you have access to.
***
## Comment threads
### What are comment threads?
Threads let you reply directly to a specific comment or message, keeping related discussions together.
* Organize back-and-forth discussions.
* Keep follow-ups separate from the main message feed.
* Available on desktop (hover) and mobile (force touch).
### Reply in a thread
1. Hover over a comment or message, then click **Reply**.
2. Type your reply.
3. Click **Send**.
You can reply from the **original comment** or the **last message** in a thread. Both add to the same thread.
### When to use threads
* **Follow-ups.** Ask clarifying questions without cluttering the main chat.
* **Status updates.** Keep progress notes in one place.
* **Focused discussions.** Avoid cross-talk in busy conversations.
***
## Deleting comments
Delete comments you no longer need. Comments are **soft-deleted**. They're removed from view but stay in the database for record-keeping.
### Delete a comment
1. Hover over the comment in the conversation thread.
2. Click the **trash can icon** (🗑️).
3. MessageDesk removes the comment from the thread.
### What happens when you delete a comment
* **Individual comments** (non-threaded): Disappear from the conversation pane entirely.
* **Threaded comments**: A placeholder showing "Comment was deleted" stays to preserve thread context.
Deleted comments are soft-deleted. They no longer appear in the conversation, but they stay in the database and still show up in **conversation exports**.
***
## Common team scenarios
| Scenario | Example comment |
| ----------------- | ---------------------------------------------------------- |
| **Handoff** | "@Sam customer confirmed 2pm. Please send prep checklist." |
| **Approval** | "@Alex can you approve this refund before I close?" |
| **Triage** | "@Support urgent billing issue. See last two messages." |
| **Coaching** | "@Jordan next time, use template 'Appt Reminder – 24h'." |
| **Self-reminder** | "@Me follow up Friday if no response." |
***
## Tips & best practices
* ✅ **Keep one comment = one ask.** Easier to read and act on.
* 🧭 **Add context before tagging.** Summarize the issue or goal.
* 👥 **Mention the owner.** Tag the responsible teammate so nothing slips through.
* 📎 **Attach files.** Use screenshots, PDFs, or photos for clarity.
* 🔁 **Close the loop.** Add a "Resolved, closing thread" note when finished.
* ⚡ **React instead of reply.** Use emojis for quick acknowledgments to cut noise.
***
## Privacy & visibility
* Comments are **internal only**. They're never sent to contacts.
* Mentions trigger **email/browser notifications** to the tagged teammates.
* Comments stay in the conversation for **historical context and auditing**.
***
## FAQ
**Do comments send to the customer?**\
No. They're internal-only.
**How do I know I'm commenting, not texting?**\
The composer turns **purple**, and the message type shows **Comment**.
**Can I mention multiple teammates?**\
Yes. Mention as many as needed.
**Can I attach media to a comment?**\
Yes. Use the **+** icon to upload files or images.
**Will I get notified if someone mentions me?**\
Yes. Mentions trigger **email** and **browser** notifications.
**How do I reply to a specific comment or message?**\
Hover over it, click **Reply**, and your message appears as a **threaded reply**.
**Can I see all my mentions in one place?**\
Yes. In **My Inbox**, use the **"Comments you're mentioned in"** view.
**Can I delete a comment?**\
Yes. Hover over the comment and click the **trash can icon**. Individual comments disappear entirely. Threaded comments show "Comment was deleted" as a placeholder. Deleted comments are soft-deleted and still appear in conversation exports.
***
## Troubleshooting
**I don't see the Comment option.**\
Make sure you're inside a specific conversation (not just the list). If it's still missing, check with your admin about permissions.
**Can I search for comments?**\
Yes. Comment search lives in [Advanced Search](/search/advanced-search). On desktop, open [Quick Search](/search/quick-search) with **⌘K** / **Ctrl K** and press **Enter** or click **Open Advanced Search**. On mobile or tablet, tap the search icon near account settings.
**My comment sent as a text.**\
You were probably in **Message** mode. Switch to **Comment** (purple composer) before sending.
**Mentions aren't notifying teammates.**\
Make sure you used **@** to select teammates from the inline menu (arrow keys + Enter, or click) instead of just typing their name as plain text.\
Ask teammates to check email spam/junk folders if no notification appears.
***
## Related articles
* [Inbox Overview](/inbox/overview)
* [Roles & Permissions](/settings/workspace-settings/team-management)
* [Media & Attachments](/messaging/media)
***
# Export a conversation
Source: https://docs.messagedesk.com/inbox/export-conversation
Export a single MessageDesk conversation as CSV or PDF from the conversation toolbar. Messages, comments, timestamps, and media are included.
# Export a conversation
Export any individual conversation to **CSV** or **PDF** directly from the conversation toolbar. Use exports for audits, compliance reviews, customer records, or handing context to a stakeholder outside MessageDesk.
Need to export **across many conversations** by date, contact, label, and so on? Use [Data Center → Message History](/settings/workspace-settings/data-center#message-history) instead.
***
## Start an export
1. Open the conversation you want to export from the Inbox.
2. In the conversation toolbar, click the **More Options ⋯** menu.
3. Select **Print Conversation**.
4. Choose a format:
* **CSV.** Best for data and reporting.
* **PDF.** A shareable, human-readable record of the conversation.
5. If you narrow the export by date range, MessageDesk runs a background check on your selection.
The export runs **asynchronously** in the background through MessageDesk's **universal export system** (the same system that powers [Message History](/settings/workspace-settings/data-center#message-history) and [contact exports](/settings/workspace-settings/data-center#export)). Keep working in MessageDesk while it's preparing.
**Export is disabled when there's nothing to export.** If a date range or filter you apply produces zero messages, the **Export** button is greyed out so you don't kick off an empty file. Adjust the date range or clear the filter to try again.
***
## When your export is ready
When the export finishes, you'll get it three ways:
* **Export Available** button in the top nav. Click it to download your file.
* **Export completed email** with a download link, sent to the user who triggered the export.
* **Push and browser notifications** on devices where you've enabled them (mobile app, installed desktop app, or Chrome).
Notifications only go to the **user who triggered the export**. They aren't sent to your whole team.
Manage where you get these notifications in [Notification Preferences](/settings/my-settings/notification-preferences).
***
## Export formats
### CSV
CSV exports contain **message text and metadata**, built for analysis, reporting, and bulk archiving.
Included for each row:
* Message text.
* Direction (inbound / outbound).
* Timestamp.
* Sender / recipient (participant info).
* Channel / phone line.
* Internal **comments** alongside messages.
* Delivery status.
CSV exports **don't** embed media. Use PDF if you need media in the file.
### PDF
PDF exports produce a **shareable, human-readable** record of the full conversation:
* Messages and internal comments interleaved in order.
* Timestamps and participant info on every entry.
* **Renderable media** (images) embedded **inline**.
* **Non-renderable media** (videos and other unsupported file types) appears as a direct **S3 link to the file** with the note **"Could not load preview"**, so the attachment stays accessible from the PDF.
***
## What's included
| Item | CSV | PDF |
| ---------------------------------- | ------------- | ---------------------------------- |
| Messages (text) | ✅ | ✅ |
| Internal comments | ✅ | ✅ |
| Timestamps | ✅ | ✅ |
| Participant info | ✅ | ✅ |
| Direction / channel | ✅ | ✅ |
| Renderable media (images) | ❌ (text only) | ✅ Embedded inline |
| Non-renderable media (video, etc.) | ❌ (text only) | S3 link + "Could not load preview" |
**Deleted messages are still exportable.** Deleting a message in MessageDesk **soft-deletes** it. The record stays on the backend. Exports include soft-deleted messages so the conversation record stays complete for audits and compliance.
***
## FAQ
**Who can export a conversation?**\
Anyone with access to the conversation can export it from the **⋯ More Options** menu. Permissions follow your **Inbox Access** for the phone line the conversation lives on. See [Team Management → Permissions](/settings/workspace-settings/team-management#what-each-permission-level-grants-access-to) for the full breakdown.
**How long is the export file available?**\
The **Export Available** button stays in the top nav until you download the file or sign out. If you miss it, re-run the export from the conversation's **⋯** menu.
**Are scheduled messages included?**\
No. Exports include **messages that have actually been sent or received** plus internal comments. Pending scheduled messages haven't been sent yet, so they aren't part of the conversation record. Once a scheduled message sends, it appears in future exports.
**Can I export many conversations at once?**\
Not from the per-conversation toolbar. For workspace-wide filtered exports across date ranges, labels, contacts, or channels, use [Data Center → Message History](/settings/workspace-settings/data-center#message-history).
**Is the export delivered by email?**\
Yes. You'll get an **export completed email** with a download link once the file is ready. You can also grab it in-app by clicking the **Export Available** button in the top nav. Both go only to the user who triggered the export.
***
## See also
* [Data Center → Message History](/settings/workspace-settings/data-center#message-history). Workspace-wide search, filter, and export.
* [Notification Preferences](/settings/my-settings/notification-preferences). Manage push and browser notifications for the Export Available alert.
* [Comments, mentions & reactions](/inbox/comments-mentions). What's captured alongside messages in exports.
# Filter & sort conversations
Source: https://docs.messagedesk.com/inbox/filter-search-sort
Filter your Inbox by label, assignee, or phone line, and sort with Newest, Oldest, Waiting Longest, or Unread First to find threads fast.
# Filter & Sort Conversations in Your Inbox
**Looking for search?** Global and advanced search live in the new [Search](/search/overview) section. Use [Quick Search](/search/quick-search) (⌘K) for contacts and conversations, or [Advanced Search](/search/advanced-search) for messages, comments, labels, and more.
This page covers **filtering** your Inbox by label, assignee, or workspace phone, and **sorting** the resulting list.
***
## Quick sorting
Use the **Sort** menu to change the order of your conversation list:
* **Newest.** Most recent activity at the top.
* **Oldest.** Oldest activity at the top. Great for closing out stragglers.
* **Waiting Longest.** Threads with the longest inactivity. Prevents misses.
* **Unread First.** Conversations with unread messages first.
Sorting reorders the list you're already viewing (Open, Closed, or a filtered view). Combine **Sort** with **Filters** for sharper inbox views.
***
## Quick search from the Inbox
The search bar at the top of the app opens [Quick Search](/search/quick-search), which returns **contacts** and **conversations** only.
To search **messages**, **comments**, or **labels**, open [Advanced Search](/search/advanced-search). Either escalate from Quick Search (press **Enter** on a result, click the search icon, or click **Open Advanced Search**) or tap the search icon on mobile and tablet.
***
## Sort conversations in any Inbox view
1. Click the **Sort** icon above your conversation list.
2. Choose **Newest**, **Oldest**, **Waiting Longest**, or **Unread First**.
3. Your list updates immediately.
**When to use which:**
* **Newest** for real-time triage.
* **Oldest** to finish and close out older work.
* **Waiting Longest** for follow-ups and SLAs.
* **Unread First** for "what needs doing right now."
***
## Apply a custom filter to your Inbox view
Filter by **Labels**, **Assignee**, or **Workspace phone** to build focused inbox views.
1. From any Inbox view, click the **Filter** icon.
2. Choose **Match ALL filters** or **Match ANY filters**:
* **ALL** = a conversation must meet **every** condition.
* **ANY** = a conversation can meet **any** one of the conditions.
3. Pick a **property** to filter by:
* **Labels.** Select one or more labels.
* **Assignee.** Select one or more teammates, or choose **Unassigned** to show only conversations with no assignee.
* **Workspace phone.** Select one or more numbers.
4. Click **Apply Filter** to update your list, or **Clear Filters** to reset.
Start broad with **ANY**, then tighten to **ALL** as your inbox view shrinks.
***
## Combine Sort + Filters (compound queries)
Layer **Sort** on top of an active **Filter** to build compound views.\
Examples:
* **Filter:** Labels = Support + Urgent → **Sort:** Waiting Longest
* **Filter:** Assignee = You → **Sort:** Unread First
* **Filter:** Workspace phone = (555) 555-0100 → **Sort:** Oldest
***
## Share a filtered view with teammates
1. After applying filters (and choosing a sort), click the **Share** icon.
2. The **unique URL** copies to your clipboard. Send it to any MessageDesk user in your workspace.
3. They'll land on the exact same filtered/sorted view.
Great for daily stand-ups: "Work from this filtered view today."
***
## Examples: ways to sort and filter conversations
**Close-out an old list of conversations**
* Filter: Assignee = You
* Sort: Oldest
* Goal: Close or comment on everything older than 48h.
**Catch up on urgent support requests**
* Filter: Labels = Support, Urgent (Match ANY)
* Sort: Waiting Longest
* Goal: First response within target time.
**Triage unassigned conversations**
* Filter: Assignee = Unassigned
* Sort: Waiting Longest
* Goal: Assign ownership to conversations no one's claimed yet.
**Triage new messages by phone number**
* Filter: Workspace phone = Front desk line
* Sort: Unread First
* Goal: Keep the public line clear and responsive.
***
## FAQ
**Can I save a filter permanently as a named view?**\
You can share a link to a filtered/sorted view. If you use the same filters often, bookmark those URLs.
**How do I search by contact name, message content, or comments?**\
Use the global [Search](/search/overview) section. [Quick Search](/search/quick-search) covers contacts and conversations. [Advanced Search](/search/advanced-search) covers messages, comments, and labels.
**Do filters change what my teammates see?**\
No. Filters affect **your** current view only, unless you share the link.
**Can I filter by multiple labels, assignees, etc.?**\
Yes. Select as many as you need and choose **ALL** or **ANY** to control matching.
***
## See also
The filters on this page apply to the **live Inbox**. To search, filter, and export your workspace's full message archive, see [Data Center → Message History](/settings/workspace-settings/data-center#message-history).
***
## Troubleshooting
* **My results look empty.**\
**Match ALL** may be too strict. Try **Match ANY** or clear one condition.
* **The share link sent my teammate to a different list.**\
Make sure they have access to the same workspace numbers/labels and that the link wasn't altered.
***
## Best practices
* **Use consistent labels.** Filters are only as good as your labeling habits.
* **Work oldest-first on close-out.** Then switch back to **Newest** for live triage.
* **Share your filters.** Drop a link in a [Comment](/inbox/comments-mentions) so everyone's working the same list.
# Organize Inbox Conversations with Labels
Source: https://docs.messagedesk.com/inbox/labels
Create, apply, and manage color-coded labels in MessageDesk to organize SMS conversations, build saved filters, and group threads across your team workspace.
# Organize & Group Conversations With Labels
Labels let you sort, find, and manage conversations fast without building complicated folder structures.
A label is a small badge made of **text + color + icon** that you can apply to any conversation.
***
## Why use labels
* **Stay organized.** Group related conversations across teams and topics.
* **Work faster.** Scan your inbox and spot priorities by color/icon.
* **Report & review.** Filter by label to see everything for a project, region, or status.
* **Keep it simple.** Add or remove labels anytime. No impact on message delivery.
You can apply **multiple labels** to the same conversation.
***
## Common label ideas (by team)
**Logistics / Dispatch**
* **Drivers.** Conversations with field staff.
* **Region: North** / **Region: South.** Geographic routing.
* **Urgent.** Time-sensitive jobs.
**HR**
* **Benefits.** Questions and announcements.
* **New hire.** Onboarding conversations.
**Support / Success**
* **Support.** Active cases.
* **Review-ready.** Happy customers to invite for a review.
* **Bug.** Product issues to track.
**Sales / Ops**
* **Proposal.** Outstanding quotes.
* **Order.** Order updates.
* **Won** / **Lost.** Quick stage markers.
Use a short **prefix** for clarity (`HR: New hire`, `Sales: Proposal`, `Support: Bug`).
***
## Label a conversation (from the Inbox)
1. Open a conversation.
2. Click the **Label** icon (top-right of the thread).
3. Check one or more labels to apply them.
4. Close the menu. The labels appear above the thread and in the conversation list.
**Remove a label.** Reopen the **Label** menu and uncheck it.
Labels without a custom icon show a placeholder label icon in the menu.
After you label a conversation, you'll see every label on that conversation in the Inbox list.
## Create & edit labels (quickly from the message thread)
1. Open a conversation, then click the **Label** icon.
2. Click **Create label** (or **Edit labels**).
3. Set **Name**, **Color**, and **Icon**, then click **Save**.
Keep names short and scannable. Prefer `Proposal – ACME` over `All proposals currently outstanding for ACME Corp`.
## Create & manage labels (Workspace Settings)
Admins can manage labels for everyone.
1. Go to **Account → Settings**.
2. Under **Workspace Settings**, open **Inbox Settings → Labels**.
3. **Create**, **rename**, **change color/icon**, or **remove** labels.
**Multi-select** labels and **delete them in bulk** from Label Settings. No need to remove them one at a time.
Labels sort **alphabetically (A–Z)** by name across label menus, settings, and filters. To control where a label appears, rename it (add a prefix like `HR:` or `Support:`).
Renaming a label updates it **everywhere** it's used.
## Find conversations by label
* Open your **Inbox** and use the **filter/search** to show conversations with a specific label.
* Save common filters (`Support + Urgent`) as a **view** so your team can jump in fast.
***
## Label naming & color conventions
* **Keep it short.** 1–2 words, or a word plus emoji/icon.
* **Use prefixes.** `HR:`, `Ops:`, `Sales:`, `Support:`.
* **Color with intent.**
* Green = success/ready
* Yellow = waiting/attention
* Red = urgent/blocker
* **Avoid duplicates.** One meaning per label name.
**Examples**
* `Support: Urgent`
* `Sales: Proposal`
* `Ops: Region – West`
* `HR: New hire`
* `Review-ready`
***
## FAQ
**Can I apply more than one label to a conversation?**\
Yes. Apply as many as you need.
**Do labels affect who can see a conversation or whether messages send?**\
No. Labels don't change permissions or deliverability. They're for organization and filtering only.
**Can I edit or delete a label later?**\
Yes. Edit the name/color/icon anytime from **Inbox (Label menu)** or **Workspace Settings**. Deleting a label removes it from every conversation. You can also multi-select and delete multiple labels at once from **Label Settings**.
**Can I filter by more than one label at a time?**\
Yes. Combine labels in a filter to narrow your view (`Support` + `Urgent`).
***
## Troubleshooting
* **I don't see the Label icon.**\
Make sure you're inside a conversation, not just the inbox list. If it's still missing, check your workspace permissions.
* **I created a label, but teammates can't find it.**\
Ask them to refresh the inbox. Confirm you created it in **Workspace Settings** if it should be available to everyone.
* **We have too many similar labels.**\
Standardize names with prefixes, merge duplicates (rename to the preferred label, then archive the old one), and document your naming rules in a short internal note.
# Multi-Select Quick Actions
Source: https://docs.messagedesk.com/inbox/multi-select-quick-actions
Bulk-manage SMS threads in MessageDesk. Multi-select conversations to close, assign, label, archive, or delete dozens of messages in a single click.
# Multi-Select Quick Actions from Any Inbox View
Select multiple conversations and apply bulk actions straight from the conversation list. Works in **sorted**, **filtered**, and **pre-saved** inbox views.
***
## Multi-select and apply quick actions
1. In any Inbox list, click **Select**.
2. Check up to **25 conversations** (per page).
3. Choose a **Quick Action**:
* **Close.** Close selected threads and move them to the **Closed Inbox**.
* **Start Group Message.** Create **one group thread** (max **7 contacts**).
* **Reply-All.** Send **one individual reply per conversation**. Replies stay private in each thread.
* **Apply label.** Add a label to every selected conversation.
* **Assign to teammate.** Bulk-assign every selected conversation to one teammate.
* **Clear selection.** Unselect everything.
Need to message **more than 25** people at once? Use **Contacts** → multi-select → **Compose** to send a broadcast to **up to 100** recipients (send individually).
***
## How teams use multi-select (real workflows)
**HR / Operations**
* **Benefits reminder.** **Filter** by **Label** (*HR: Benefits*), **Sort** by **Waiting Longest**, **multi-select**, **Reply-All**, apply **"Benefits reminder"** template, **Schedule**.
* **New-hire day one.** **Filter** by **Label** (*HR: New hire*), **multi-select** cohort, **Reply-All**, apply **"Welcome + paperwork link"** template, **Send**.
* **Policy acknowledgment.** **Filter** by **Label** (*HR: Policy Update*), **Sort** by **Oldest**, **multi-select** non-responders, **Reply-All**, apply **"Reply YES to confirm"** template, **Send**.
**Dispatch / Logistics**
* **Route change blast.** **Filter** by **Label** (*Region – West*), **multi-select**, **Reply-All**, apply **"Route change"** template, **Send**.
* **Late arrival follow-ups.** **Sort** by **Waiting Longest**, **Filter** by **Label** (*Delivery – Delayed*), **multi-select**, **Reply-All**, apply **"Delay + new ETA"** template, **Send** or **Schedule**.
* **Emergency coordination.** **Filter** by **Labels** (*Urgent* + *Crew #*, **Match ALL**), **multi-select** up to **7**, **Start Group Message**, paste **critical update**, **Send**.
**Law / Legal**
* **Hearing reminders.** **Filter** by **Label** (*Hearing this week*), **multi-select**, **Reply-All**, apply **"Court time + location"** template, **Schedule** for 24h prior.
* **Doc signature chase.** **Filter** by **Label** (*eSign sent*), **multi-select** non-responders, **Reply-All**, apply **"Signature reminder"** template, **Send** or **Schedule**.
* **Retainer follow-up.** **Filter** by **Label** (*Retainer pending*), **Sort** by **Waiting Longest**, **multi-select**, **Reply-All**, apply **"Retainer link + due date"** template, **Send**.
**CPAs & Bookkeepers**
* **Tax doc request.** **Filter** by **Label** (*Missing docs*), **Sort** by **Waiting Longest**, **multi-select**, **Reply-All**, apply **"Need W-2/1099 link"** template, **Send**.
* **E-file PIN reminder.** **Filter** by **Label** (*E-file pending*), **multi-select**, **Reply-All**, apply **"PIN/consent reminder"** template, **Schedule** for 10 AM.
* **Invoice follow-ups.** **Filter** by **Label** (*AR: Past due*), **Sort** by **Oldest**, **multi-select**, **Reply-All**, apply **"Payment link + terms"** template, **Send**.
**Home Services (HVAC, Plumbing, Electrical, etc.)**
* **Appointment confirmations.** **Filter** by **Label** (*Tomorrow's jobs*), **multi-select**, **Reply-All**, apply **"Confirm window + tech name"** template, **Send**.
* **Tech running late.** **Filter** by **Label** (*Delay*), **Sort** by **Newest**, **multi-select**, **Reply-All**, apply **"Running X minutes late"** template, **Send**.
* **Job-complete follow-up.** **Filter** by **Label** (*Job complete*), **multi-select**, **Reply-All**, apply **"Care instructions + review link"** template, **Send**.
***
## Multi-select best practices
* **Filter first, then select.** Narrow the list by **Label/Assignee/Phone Line** before bulk actions.
* **Use templates.** With **Reply-All**, insert a template, personalize if needed, then send.
* **Mind the limits.** Max **25** selected at once. **Group Message** limited to **7** participants.
* **Choose the right tool.** For one-to-many notices, a **broadcast** from **Contacts** is usually better than Reply-All.
***
## FAQ
**Does Reply-All create a group thread?**\
No. It sends **separate** messages. Each reply stays in its own private conversation.
**Can I apply more than one label in bulk?**\
Yes. Use **Apply label** and select every label you want to add.
**Will bulk assign overwrite current owners?**\
Yes. The selected teammate becomes the assignee on **every** selected conversation.
**Can I undo a bulk close or assign?**\
There's no one-click undo. Reopen or reassign affected threads individually, or re-run a bulk action on a filtered list.
**Can I select across multiple pages?**\
Selection applies to the **current page**. Work page by page (up to **25** per page).
***
## Troubleshooting
* **Actions are greyed out.**\
Make sure at least one conversation is selected and that you have permission to perform that action.
* **Group Message option missing/greyed out.**\
You probably selected more than **7** conversations. Deselect until you're at 7 or fewer.
* **Reply-All is greyed out.**
Make sure you don't have a group conversation selected in your list. Reply-All doesn't work on group threads.
* **Didn't reach everyone.**\
For larger sends, switch to a **broadcast** via **Contacts** (up to **100** recipients per send).
***
# Open, Close & Assign Conversations
Source: https://docs.messagedesk.com/inbox/open-close-assign
Manage MessageDesk SMS conversation states. Open, close, reopen, and assign threads to teammates so nothing slips through and every message gets answered.
# Manage Open, Closed & Assigned Conversations
## What Open and Closed mean
Mark conversations **Open** or **Closed** and assign owners to keep your inbox focused and your team aligned.
#### Open vs. Closed
* **Open.** Active and needs attention. You or a teammate is working the thread.
* **Closed.** Resolved and archived from your active view. Reopen anytime.
Closing finished threads cuts clutter and helps your team see what actually needs action.
## Why Open and Closed matter
Conversation volume grows fast. Closing a thread once it's resolved keeps your active list short and focused.
Closing a conversation doesn't just cut clutter for you. It also keeps your teammates' view honest about what still needs work.
## Inbox views (filters)
Your inbox is a set of saved filters. By default you'll see:
* **Open Inbox.** All active conversations.
* **Closed Inbox.** Conversations you've closed.
Your inbox defaults to **Open Inbox**. Look for the **Open Inbox** label/icon above the conversation list.
Use the **Assignee** filter to show only **Unassigned** conversations: threads without an owner yet. See [Filter, search & sort](/inbox/filter-search-sort) for details.
### View open conversations
1. Go to **Inbox**.
2. Confirm the **Open Inbox** filter is selected.
3. Click any conversation to work it.
New conversations start **Open** by default.
### Close a conversation
1. Open the conversation.
2. Click **Close** (above the thread).
3. The conversation disappears from your left-hand list and moves to **Closed Inbox**.
Close a thread once the request is resolved or no action is needed.
### View closed conversations
1. In **Inbox**, switch to **Closed Inbox**.
2. You'll see a list of closed threads.
3. Click any thread to review or reopen.
When you click Closed Inbox, your inbox view switches and you'll see a list of closed conversations. The **Closed Icon** tells you you're in the closed inbox.
### Reopen a closed conversation
* **Manual.** In a closed thread, click **Open** to move it back to **Open Inbox**.
* **Automatic.** Any **new message** in a closed thread (inbound or outbound) reopens it and marks it **Unread** in **Open Inbox**.
Any new message sent inside a closed conversation thread reopens that conversation in the Open Inbox and shows an unread icon next to it.
## Assign a conversation to teammates
Assign conversations to make ownership clear and avoid double work.
1. Open the conversation.
2. Click the **Assign (person)** icon (top-right).
3. Select one or multiple teammates.
4. Assigned teammates keep access to that thread.
Drop a quick internal [comment](/inbox/comments-mentions) when reassigning so the new owner has context.
## FAQ
**Do closed conversations stay closed forever?**\
No. You can reopen any time. New activity also reopens the thread automatically.
**Can multiple teammates be assigned?**\
Yes. Assign one or many.
**What happens when I close a conversation by mistake?**\
Open **Closed Inbox**, select the thread, and click **Open** to restore it.
**Will my teammate be notified when I assign a conversation?**\
If notifications are enabled for them, they'll get one (per their notification settings).
## Troubleshooting
* **I don't see the Close or Open button.**\
Confirm you're viewing a specific conversation (not just the list) and that you have permission to update its state.
* **My closed thread didn't reopen when I replied.**\
Make sure your reply was sent in that thread and not as a new message to the same contact.
***
## Best practices
* **Close fast, reopen when needed.** Keeps the team's working queue clean.
* **Assign on first touch.** Ownership prevents duplicate replies.
* **Leave a comment on handoff.** Summarize the situation and the next step.
* **Review the Closed Inbox weekly.** Spot repeat issues and training opportunities.
# Shared Team SMS Inbox Overview
Source: https://docs.messagedesk.com/inbox/overview
Tour the MessageDesk shared inbox. See how it groups SMS threads, surfaces team activity, and keeps everyone aligned with assignments, labels, and filters.
# Shared Team Inbox Overview
The **Inbox** is where you and your team send, receive, and manage SMS/MMS across every connected phone number. Everyone sees the same conversation history. You can add internal comments, assign owners, apply labels, and keep work moving without juggling personal phones.
## Why a shared team SMS inbox
* **Unified view.** Texts and internal comments live in the same thread with full history.
* **Team alignment.** Assign owners, @mention teammates, and close resolved threads.
* **Organization at scale.** Filter by phone line, labels, or assignees so nothing slips.
* **Faster resolution.** Work the right queue (Unread, Waiting Longest, and so on) and finish more conversations per day.
## How MessageDesk organizes your Inbox
### Top navigation (modules)
* **Inbox.** Shared team space for every text conversation.
* **Contacts.** Saved contact records and lists.
* **Relays.** Triggered workflows tied to your workspace.
### Inbox views (left navigation)
* **New Message.** Compose to 1–100 recipients in a few clicks.
* **My Inbox.** Your personal working views (My conversations, Sent, Anonymous, Scheduled, Mentions).
* **Phone Numbers.** All Conversations (every line) or per-line views.
* **Team.** Jump into a teammate's assigned conversations.
* **Labels.** See conversations grouped by labels (Support, Proposal, Region – West, and so on).
### Conversations list (every conversation in an inbox view)
* **Select.** Click to multi-select up to 25 conversations and take quick actions.
* **Sort.** Newest, Oldest, Waiting Longest, or Unread First.
* **Open/Closed.** Switch between your Open Inbox and Closed Inbox.
* **Filter.** Narrow by Labels, Assignee, or Workspace phone (match ALL or ANY).
* **Icons.** Dots mark unread, plus assignee avatars, label chips, line badges, and schedule/attachment icons.
### Conversation thread (every message, exchange, and action in a conversation)
* **Thread.** Texts plus internal comments (clearly styled) plus emoji reactions.
* **Header actions (top-right).** Assign, Labels, Open/Close, Create Contact.
* **More Options ⋯ menu.** Conversation-level actions including [Export](/inbox/export-conversation) to CSV or PDF.
* **Message Composer (bottom).** Message/Comment toggle, Templates (TT), Tags (#), Media (+), Emoji, Schedule, Send.
### Contact details (expandable)
* **Open.** Click **More** (or **Create Contact** for anonymous numbers).
* **View.** First/Last name, email, company, source, last contacted, last response.
* **Click.** Add [custom fields](/settings/workspace-settings/custom-fields).
* **Block.** Click the **Block** icon to stop messages from the contact's phone number.
## Add teammates to collaborate in your Inbox
MessageDesk works best with your team inside.
### Why add teammates
* **Visibility.** See who's working what, with full context.
* **Collaboration.** Assign owners, [@mention](/inbox/comments-mentions) for help, share [templates](/messaging/templates-tags) and [labels](/inbox/labels).
### Where to start
* Invite teammates and set roles/permissions to control access to phone lines, teammate inboxes, and labels.
Invite teammates and set roles and permissions for access to phone lines, teammate inboxes, labels, and more.
## New Message (composer)
Use **New Message** to send a 1-on-1, a small **broadcast** (send individually to up to 100 recipients), or start a **Group SMS**.
* Pick **Recipients** (search, paste numbers, or pick from Contacts).
* Choose **Send from** (which connected phone number).
* Compose your **Message** (use templates, add media, insert emoji).
* **Send now** or **Schedule** for later.
Compose a new text message to contacts from MessageDesk.
For best deliverability with business texting, complete [carrier registration (10DLC)](/carrier-registration/overview) for each connected phone number before sending texts.
### My Inbox (personal working views)
* **My conversations.** Assigned to you right now.
* **Sent.** Threads where you've sent a message.
* **Anonymous.** Numbers (conversations) not yet linked to a contact.
* **Scheduled.** Past and upcoming scheduled texts.
* **Mentions.** Comments where teammates @mentioned you.
Use these views to focus your day without losing sight of the bigger picture.
### Phone Numbers (all lines or per-line)
* **All Conversations.** Everything across every connected phone number.
* Click a specific **phone line** to see only the conversations on that number.
* Connect up to **48** phone lines to your workspace.
Split work by department (Front Desk, Support, Sales) while keeping a unified history.
Connect different types of phone numbers and phone lines to MessageDesk.
### Team (see a teammate's conversations)
After you invite users, each teammate appears as a view. Click a teammate to see what's **assigned** to them. Useful for coverage, support, and handoffs.
### Labels (fast organization)
Labels add color + icon + text to conversations so you can group and find related work (for example, **Support: Urgent**, **Sales: Proposal**, **Ops: Region – West**). Click a label to see every conversation tagged with it.
Create a small, shared set of labels with team-friendly names and colors. Consistency beats quantity.
Create labels, label conversations, and manage labels in your MessageDesk workspace.
## Core Inbox actions you'll use every day
* **Assign** a conversation to a teammate. Ownership prevents double replies.
* **Comment** internally (yellow composer) and **@mention** the next owner.
* **React** with emojis to quickly acknowledge messages and comments.
* **Close** resolved threads. They'll reopen automatically on new activity.
* **Label** for easy filtering and reporting.
* **Multi-select** to take quick actions on conversations in bulk.
* **[Export conversation](/inbox/export-conversation)** to CSV or PDF from the conversation toolbar's **⋯ More Options** menu.
* **Search, sort, filter** to build focused queues (Unread First, Waiting Longest, by label/assignee/line).
**Deleting messages from a thread is restricted to Owners.** Only users with **Owner** permission on a phone number's Inbox Access can delete individual messages from a conversation thread. By default, only **Admins** have Owner access to every phone line. To prevent a user from deleting messages, make sure their role doesn't have Owner permission on that phone line. See [Team Management → Permissions](/settings/workspace-settings/team-management#what-each-permission-level-grants-access-to) for details.
***
## Best Inbox practices
* **One owner per live thread.** Assign early. Reassign on handoff with a comment.
* **Close what's done.** Keeps the Open Inbox clean and accurate.
* **Use templates + tags.** Respond faster and stay on-brand.
* **Segment by line.** Give each department a dedicated number for clarity.
* **Standardize labels.** Agree on names and colors so filters stay useful.
***
## FAQ
**Does the Inbox change message deliverability?**\
No. Open/Closed/Assigned/Labels affect team workflow only, not sending.
**Can I restrict who sees which phone lines?**\
Yes. Use roles and permissions to limit access to specific lines and teammate inboxes.
**Do comments go to customers?**\
No. Comments are internal-only. You'll see a yellow composer when commenting.
**How many recipients can I message at once?**\
Up to **100** per message sent. Each reply comes back as a private 1-on-1 message.
**Can I upload and reuse files?**\
Yes. Attach media from your computer or Workspace files. Larger files send as secure links.
***
## Troubleshooting
* **I can't find a conversation.**\
Clear filters, check you're on the right **phone line** view, then use **Search** (by message content or conversation). For **contact names**, search in **Contacts**.
* **I don't see Assign/Close/Labels.**\
Open a specific thread and check your **permissions**.
* **Too many labels to manage.**\
Consolidate with prefixes (`Support:`, `Sales:`), archive duplicates, and document your naming rules.
# Grammarly Integration for SMS Composition
Source: https://docs.messagedesk.com/integrations/grammarly
Install the Grammarly browser extension to catch typos, grammar mistakes, and tone issues while composing SMS messages and templates in MessageDesk.
# Grammarly integration
Check spelling, grammar, and tone as you compose messages in MessageDesk using **Grammarly**, a free browser extension that works anywhere you type.
MessageDesk doesn't include built-in spell check. Grammarly is a third-party tool that adds this functionality to your browser.
***
## What Grammarly does
Grammarly checks your writing in real time as you type in MessageDesk:
* **Spelling:** catches typos and misspelled words.
* **Grammar:** flags grammatical errors and suggests corrections.
* **Punctuation:** identifies missing or incorrect punctuation.
* **Tone:** analyzes your message tone (friendly, formal, confident, etc.).
* **Clarity:** suggests ways to make your writing clearer and more concise.
Corrections appear as underlined suggestions directly in the compose field. Click a suggestion to accept it, or ignore it to keep your original text.
***
## Install Grammarly
Grammarly is available as a free browser extension for all major browsers.
### Google Chrome
1. Go to the [Grammarly Chrome extension](https://chrome.google.com/webstore/detail/grammarly-for-chrome/kbfnbcaeplbcioakkpcpgfkobkghlhen).
2. Click **Add to Chrome**.
3. Click **Add extension** in the popup.
### Microsoft Edge
1. Go to the [Grammarly Edge extension](https://microsoftedge.microsoft.com/addons/detail/grammarly-for-microsoft-e/cnlefmmeadmemmdciolhbnfeacpdfbkd).
2. Click **Get**.
3. Click **Add extension** in the popup.
### Firefox
1. Go to the [Grammarly Firefox extension](https://addons.mozilla.org/en-US/firefox/addon/grammarly-1/).
2. Click **Add to Firefox**.
3. Click **Add** in the popup.
### Safari
1. Go to the [Grammarly Safari extension](https://apps.apple.com/app/grammarly-for-safari/id1462114288).
2. Click **Get** to download from the App Store.
3. Open Safari and go to **Safari → Settings → Extensions**.
4. Enable the Grammarly extension.
***
## Set up Grammarly
1. Click the Grammarly icon in your browser toolbar.
2. Create a free Grammarly account or sign in to an existing account.
3. Complete the onboarding steps to set your writing preferences.
Once set up, Grammarly automatically checks text as you type in any text field, including MessageDesk message compose areas.
***
## Use Grammarly in MessageDesk
Grammarly works automatically in MessageDesk once installed:
1. Open a conversation or start a new message in MessageDesk.
2. Type your message in the compose field.
3. Grammarly underlines potential issues as you type.
4. Hover over an underline to see the suggestion.
5. Click the suggestion to apply the fix, or click **Dismiss** to ignore.
Click the Grammarly icon in the bottom-right corner of any text field to open the full Grammarly editor with detailed suggestions and tone analysis.
***
## Grammarly plans
| Plan | Price | Features |
| ------------ | ----------------- | ---------------------------------------------------------------------------------- |
| **Free** | \$0 | Spelling, grammar, and punctuation checks |
| **Premium** | \$12/month | Tone detection, clarity suggestions, vocabulary enhancements, plagiarism detection |
| **Business** | \$15/member/month | Team features, style guides, analytics, priority support |
The free plan covers essential spell check and grammar for most MessageDesk users.
***
## Troubleshooting
| Issue | Solution |
| ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| **Grammarly not checking text in MessageDesk** | Make sure the extension is enabled. Click the Grammarly icon in your toolbar and verify it's turned on for the current site. |
| **Suggestions not appearing** | Refresh the MessageDesk page. If the issue persists, try disabling and re-enabling the extension. |
| **Extension conflicts** | Other writing or accessibility extensions may conflict with Grammarly. Try disabling other extensions temporarily. |
| **Grammarly icon missing** | Pin the extension to your toolbar. In Chrome, click the puzzle icon → find Grammarly → click the pin icon. |
***
## Privacy and data
Grammarly processes text you type to provide suggestions. Review Grammarly's [privacy policy](https://www.grammarly.com/privacy-policy) to understand how your data is handled.
Grammarly isn't affiliated with MessageDesk. Features, pricing, and privacy policies are managed entirely by Grammarly. MessageDesk doesn't have access to data processed by Grammarly.
# Integrations Overview
Source: https://docs.messagedesk.com/integrations/overview
Connect MessageDesk to the tools your team already uses: Grammarly for in-app spell check, Zapier for 9,000+ app automations, and webhook integrations for custom developer workflows.
# Integrations overview
MessageDesk connects to the rest of your tech stack three ways:
* **Native extensions** that work directly inside the app.
* **Zapier** for no-code automation across thousands of apps.
* **Webhooks** for custom developer integrations.
Pick the layer that fits the job, or combine them.
***
## Native integrations
### Grammarly
The **Grammarly browser extension** runs alongside MessageDesk and checks **spelling, grammar, and tone** as you compose messages, comments, and templates. You keep customer-facing texts on-brand without leaving the Inbox. It works in any browser where Grammarly is installed. No MessageDesk-side configuration required.
→ [Grammarly](/integrations/grammarly)
***
## Automation platform
### Zapier
[**Zapier**](https://zapier.com) connects MessageDesk to **9,000+ apps** through no-code **triggers** and **actions**. Use it to:
* Push new MessageDesk messages into your CRM.
* Send appointment reminders from your calendar.
* Post notifications to Slack or Teams.
* Kick off SMS confirmations after a payment or form submission.
No code required. MessageDesk publishes triggers like **Message Received** and **Message Sent**, and actions like **Create or Update Contact**, **Send Message**, and **Create Comment**.
→ [Zapier](/integrations/zapier)
***
## Developer and webhook integrations
### Send Webhook (custom endpoint)
For developer-built integrations, or any system without a Zapier connector, use the **Send Webhook** Relay action to push MessageDesk events to **any HTTPS endpoint** you control. MessageDesk signs each event with an `X-MessageDesk-Signature` header so you can verify authenticity. Pick this tier when you're streaming events into a data warehouse, custom CRM, internal microservice, or a serverless function.
* [Send Webhook (Relay action)](/relays/webhooks): payload format, headers, signature validation, retry behavior
* [Developer Tools (Settings)](/settings/workspace-settings/developer-tools): configure your webhook endpoint URL and signing secret
Webhook delivery requires a configured endpoint and signing secret in **Settings → Developer Tools**. Set those up before turning on a `Send Webhook` Relay.
***
## Lightweight in-app lookups
The **Contact Create Form** in MessageDesk also includes **HubSpot** and **Close CRM** lookup buttons. One click pulls contact details from those CRMs into a new MessageDesk contact record. They aren't full sync integrations. For full bi-directional CRM sync, use [Zapier](/integrations/zapier) or a webhook-based pipeline.
***
## Pick the right tier
| If you want to… | Use |
| ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| Catch typos while composing | [Grammarly](/integrations/grammarly) |
| Sync contacts, messages, or events with another SaaS app, no-code | [Zapier](/integrations/zapier) |
| Pull a contact from HubSpot or Close CRM into a new MessageDesk record | The **Contact Create Form** lookup buttons (in-app) |
| Stream events to a custom endpoint, data warehouse, or microservice | [Send Webhook](/relays/webhooks) + [Developer Tools](/settings/workspace-settings/developer-tools) |
***
## See also
* [Relays overview](/relays/overview)
* [Relay templates](/relays/templates)
* [Carrier registration & compliance](/carrier-registration/overview)
# MessageDesk Zapier Integration (Beta)
Source: https://docs.messagedesk.com/integrations/zapier
Automate SMS workflows by connecting MessageDesk to 9,000+ apps with Zapier. Triggers, actions, and recipe ideas for syncing CRM, forms, and ticketing tools.
# Zapier integration (Beta)
Connect MessageDesk to thousands of other apps using **Zapier**.\
Automate workflows by triggering actions when messages are sent or received, or perform tasks like **creating contacts**, **sending messages**, and **adding comments** when events occur in other tools.
**Permissions required.** To build a Zap that authenticates with your MessageDesk account, your user role needs **Editor** or **Owner** on the **Developer** feature in [Team Management](/settings/workspace-settings/team-management). **Admins** have this by default. **Viewers** can't authenticate Zapier under their own account, so any Zap a Viewer builds or owns won't run.
Each Zap runs under the **MessageDesk account that authenticated it**. If a Zap stops working, check the authenticated user's role first.
***
## What you can automate
* **When a message is received** → Create helpdesk tickets, send Slack or Teams notifications, or log messages to Google Sheets.
* **When a message is sent** → Update CRM records, trigger a follow-up task, or post delivery updates.
* **From your CRM, forms, or scheduling tools** → Automatically create or update contacts in MessageDesk and send personalized text messages.
* **From payments or invoicing systems** → Send SMS confirmations when a customer pays or when a new invoice is issued.
**Requirements:**
* A [Zapier](https://zapier.com) account and a connected MessageDesk workspace.
* Outbound texting via Zapier follows the same [**registration**](/carrier-registration/overview), [**delivery**](/messaging/delivery-status-errors), and [**compliance**](/settings/workspace-settings/compliance-center) standards as sending directly from MessageDesk.
***
## How Zapier works
Each Zap has two main components:
| Type | Description |
| ----------- | -------------------------------------------------------------------------------------------- |
| **Trigger** | The event that starts your Zap (e.g., a message received in MessageDesk). |
| **Action** | The task Zapier performs after the trigger fires (e.g., send a message or create a contact). |
***
## Available MessageDesk triggers
| Trigger | Description |
| -------------------- | ---------------------------------------------------------------- |
| **Message Received** | Fires when your workspace receives a new inbound text message. |
| **Message Sent** | Fires when your workspace sends a message (manual or automated). |
***
## Available MessageDesk actions
| Action | Description |
| ---------------------------- | -------------------------------------------------------------------- |
| **Create or Update Contact** | Adds a new contact or updates an existing one based on phone number. |
| **Send Message** | Sends a text message through your MessageDesk workspace. |
| **Create Comment** | Posts a new comment in a MessageDesk conversation thread. |
***
## Triggers
### Message Received
Fires when your MessageDesk workspace receives an inbound message.
| Field | Required | Description |
| ------------------ | -------- | --------------------------------------- |
| **Workspace Name** | ✅ | The name of your MessageDesk workspace. |
***
### Message Sent
Fires when your MessageDesk workspace sends an outbound message.
| Field | Required | Description |
| ------------------ | -------- | --------------------------------------- |
| **Workspace Name** | ✅ | The name of your MessageDesk workspace. |
***
## Actions
### Create or Update Contact
Creates or updates a contact in your selected workspace. Perfect for syncing leads, form submissions, or new customer signups.
| Field | Required | Description |
| -------------------------- | -------- | ------------------------------------------------------------------ |
| **Workspace Name** | ✅ | The name of your MessageDesk workspace. |
| **Contact Phone Number** | ✅ | The contact's phone number in E.164 format (e.g., `+15551234567`). |
| **First Name / Last Name** | ❌ | Optional contact name fields. |
| **Email** | ❌ | Optional email address. |
***
### Send Message
Sends an outbound text message from MessageDesk. Each Zap run sends one message at a time.
| Field | Required | Description |
| --------------------------------- | -------- | ------------------------------------------------------------- |
| **Workspace Name** | ✅ | The name of your MessageDesk workspace. |
| **Workspace Number to Send From** | ✅ | The phone number you'll send the message from (E.164 format). |
| **Recipient Number** | ✅ | The phone number to send your message to (E.164 format). |
| **Message Text** | ✅ | The body of your message. |
Messages sent through Zapier count toward your MessageDesk usage and must follow the same carrier and compliance rules as messages sent from your Inbox.
**MessageDesk enforces opt-outs automatically.** If the recipient has opted out in MessageDesk, the **Send Message** action fails and no text is delivered, even if the Zap itself runs successfully on Zapier's side. You can't bypass opt-out enforcement. See the [Compliance Center](/settings/workspace-settings/compliance-center) for how MessageDesk captures and manages opt-outs.
***
### Create Comment
Posts a comment in an existing conversation thread. Use this action to add internal notes, mention teammates, or automate updates from other apps.
| Field | Required | Description |
| -------------------- | -------- | ------------------------------------------------------------------- |
| **Workspace Name** | ✅ | The name of your MessageDesk workspace. |
| **Workspace Number** | ✅ | The phone number tied to the workspace conversation (E.164 format). |
| **Contact Number** | ✅ | The contact's phone number to identify the conversation. |
| **Comment Text** | ✅ | The text body of your comment. |
***
## How to build your first MessageDesk Zap
### 1. Gain early beta access
[Request access here](https://messagedesk.typeform.com/to/C3cEgPAm) to join the Zapier beta.
### 2. Accept the invitation from Zapier in your inbox
Go to your email, find an invitation from Zapier, and click accept to gain access to the Zapier integration.
You must be an admin on your Zapier account to accept the invitation and gain access to the MessageDesk Zapier integration.
### 3. Log in to Zapier
Once you accept the invitation, visit [**zapier.com**](https://zapier.com) to log in or create a new account.
### 4. Create a new Zap
Click **Create Zap** on your dashboard.
### 5. Add MessageDesk
Search for **MessageDesk (Invite Only)** and select **version 1.2.0** from the dropdown.
You can use MessageDesk as either a **trigger** or an **action**.
### 6. Choose a trigger
Select one of the following:
* **Message Received**
* **Message Sent**
Then connect your MessageDesk account and select your workspace.
### 7. Add an action
Choose from:
* **Create or Update Contact**
* **Send Message**
* **Create Comment**
Map your fields, test your Zap, and turn it on.
***
## Popular Zapier workflows
Use these examples to get inspired and automate common MessageDesk tasks:
| Workflow | Connected Apps | Description |
| --------------------------------------------------------------- | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **New CRM Lead → Add to MessageDesk** | HubSpot, Pipedrive, Zoho CRM | When a new lead is created, automatically create or update the contact in MessageDesk and send a personalized welcome text. |
| **Job or Appointment Booked → Send Reminder Text** | Calendly, Google Calendar, Jobber | Send automated appointment reminders or confirmations directly from MessageDesk. |
| **New Message in MessageDesk → Notify Teammates** | Slack, Microsoft Teams | Post a notification with message details and contact info when a new message arrives in MessageDesk. |
| **Invoice Created or Payment Received → Send Confirmation SMS** | QuickBooks, Xero | When a new invoice is issued or a payment is logged, send a text confirmation to the customer. |
| **New Form Submission → Create Comment with Mention** | Google Forms, Typeform | Automatically post a comment when a new form or chatbot submission arrives. |
| **Email or Message → Comment in Thread** | Outlook, Gmail, Teams | Create an internal comment in MessageDesk when an external email or chat arrives, keeping your team aligned. |
| **Customer Review Received → Thank You Text** | Google Reviews, Mailchimp | Automatically send a thank-you message when a customer leaves a new review or completes feedback. |
| **New Twilio BYOC Number Added → Notify Slack Channel** | Twilio, Slack | Post a message to a Slack channel when a new Twilio BYOC number is connected to MessageDesk so admins and the support team stay in sync on phone-line changes. |
| **New Opted-Out Contact → Update CRM Record as Unsubscribed** | HubSpot, Salesforce | When a contact opts out of SMS in MessageDesk, flag the matching CRM record as unsubscribed so marketing automations and sales sequences stop messaging them. |
| **Conversation Closed → Create Follow-Up Task** | Asana, ClickUp, Monday.com | When you close a MessageDesk conversation, create a follow-up task in your project management tool so nothing slips through after you resolve the thread. |
***
## Best practices
* ✅ **Include opt-out text:** "Reply STOP to opt out" for promotional or automated messages.
* ✅ **Always use E.164 format:** `+15551234567` for all phone numbers.
* ✅ **Test with real data:** Before turning on your Zap.
* ⚠️ **Avoid bulk sends:** Each Zap run sends one message. Use MessageDesk **Broadcasts** for larger campaigns.
* 🧩 **Use filters and conditions:** Limit your Zaps to relevant events (e.g., only messages containing "Support").
***
## Troubleshooting
| Issue | Solution |
| ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authentication fails when connecting to MessageDesk** | Reconnect your account in Zapier and confirm you're using the correct workspace and **Zap version 1.2.0**. |
| **Zap fails during testing** | Make sure all phone numbers are formatted correctly in **E.164**. |
| **Message sent but not delivered** | Check [Delivery Status & Errors](/messaging/delivery-status-errors) for details. |
| **Send Message action fails for a specific contact** | Confirm the contact hasn't opted out. MessageDesk automatically blocks outbound messages to opted-out contacts, so the Zap action fails even though the Zap itself runs. See [Compliance Center](/settings/workspace-settings/compliance-center). |
| **Zap not triggering** | Verify the correct trigger and workspace setup. Send a test message to fire the event. |
| **Contact not updating correctly** | Check field mappings and confirm the contact's phone number matches existing records. |
| **My Zap built fine but isn't firing (or one Zap works and another doesn't)** | Check which **MessageDesk user authenticated** that specific Zap in Zapier. Each Zap runs under the user whose credentials connected the MessageDesk account. That user must have **Editor** or **Owner** on the **Developer** feature in [Team Management](/settings/workspace-settings/team-management). Common cause: an admin authenticated one Zap (works), and a teammate without Developer permission authenticated another (fails). Re-authenticate the failing Zap with a user who has the right permission, or have an admin grant the existing user **Developer = Editor**. |
***
# Message Delivery Errors & Troubleshooting
Source: https://docs.messagedesk.com/messaging/delivery-status-errors
Diagnose SMS delivery failures in MessageDesk. Decode every status code, find root causes for blocked or undelivered texts, and fix common carrier errors.
# Message delivery errors and troubleshooting
Get messages through, fast. This guide shows you **what each status means**, **how to fix failures**, and **what to send support** if you need help.
***
## TL;DR: your fastest path to fix messaging problems
1. **Open the status badge.** If it's **Failed**, click/tap to see the error reason.
2. **Retry smartly.** Click **Resend Message** or send a short, **plain-text** message **without links or media**.
3. **Check the basics.** Is the number **mobile** and formatted **E.164** (`+15551234567`)?
4. **Registration matters.** Make sure your line is **A2P 10DLC-registered** (local) or **verified** (toll-free).
5. **If urgent, use another channel** (call/email) while you troubleshoot.
***
## What message delivery statuses mean and what to do
| Status | What it means | What you should do |
| ------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| **Delivered** | Carrier confirmed delivery. | If your contact says "didn't get your message," resend a short message **without links or media**. |
| **Sent** | Handed to carriers; final delivery pending. | Wait for an update. Carriers don't always reply with a delivery status. If it stays "Sent," try a short follow-up. |
| **Queued** | Throttled to protect deliverability. | Leave it; the queue clears automatically. Heavy team usage on one line may extend queue time. |
| **Failed** | Carrier/network rejected delivery. | Use the **error reason** below → fix → **Resend**. |
**Inbound** messages show a **timestamp only** (no delivery status).
**Twilio BYOC numbers:** Messages sent from external systems (not MessageDesk) using your Twilio number appear in MessageDesk with a "Sent" status but don't receive delivery status updates. To track delivery status, send messages directly from MessageDesk.
***
## Top 3 reasons messages fail and fixes
1. **Landline or unreachable number**
* Signs: **Invalid Number (2)**, **Destination Unreachable (5)**
* Fix: Confirm it's a **mobile** number, correct formatting to **E.164**, and request an updated number if needed.
2. **Content filtered as spam / out of campaign scope**
* Signs: **Anti-spam (4)**, **Invalid Message (3)**, **Invalid Short Link (13)**
* Fix: Remove short links, ALL CAPS, and promo buzzwords. Add identity and **"Reply STOP to opt out."** Use full or branded URLs.
3. **Throughput or registration limits**
* Signs: **Carrier Error (7)**, **Rate Limit Exceeded (16)**, **Unregistered 10DLC (14)**, **Pending Registration (17)**, **Campaign Suspended (18)**
* Fix: Complete **10DLC** or **toll-free verification**. **Schedule** large sends in waves. Contact support if suspended.
***
## Error reasons (codes): quick fixes
Click a **Failed** badge to see a reason why your message failed to send. Use this table to resolve and resend.
| Code | UI message | What it means | What you should do |
| -----: | ----------------------- | --------------------------- | ---------------------------------------------------------------------------- |
| **1** | Unknown Error | Generic failure. | Retry once; if it persists, **contact support** with thread link/time. |
| **2** | Invalid Number | Landline/invalid/typo. | Use a **mobile** number; fix number formatting to **E.164**. |
| **3** | Invalid Message | Content blocked. | Remove blocked phrases/formatting; comply with campaign terms; resend. |
| **4** | Anti-spam | Filtered as spam. | Add opt-out, reduce links/ALL-CAPS; segment; ensure **10DLC**. |
| **5** | Destination Unreachable | Not valid on network. | Confirm with contact; update or remove. |
| **6** | Insufficient Funds | Billing/credits issue. | Update payment; retry after funds post. |
| **7** | Carrier Error | Downstream network issue. | Retry later; if recurring, contact support. |
| **8** | Media Error | Unsupported/corrupt media. | Re-attach supported types; keep **≤ 10 MB** each. |
| **10** | Opted Out | Recipient opted out. | **Don't** resend; re-opt-in via a compliant path only. |
| **11** | Blocked | Recipient/workspace block. | Unblock only if compliant and intended. |
| **12** | Unverified Toll-Free | Toll-free not verified. | Complete verification; resend. |
| **13** | Invalid Short Link | Generic shortener blocked. | Use full or branded links. |
| **14** | Unregistered 10DLC | Local number unregistered. | Register brand/campaign; resend post-approval. |
| **15** | Media Too Large | Attachment too big. | Compress; keep **≤ 10 MB** (files > **500 KB** send as links automatically). |
| **16** | Rate Limit Exceeded | Throughput/daily caps hit. | **Schedule** in waves; upgrade throughput via registration. |
| **17** | Pending Registration | Awaiting 10DLC association. | Wait (up to **24h**), then resend. |
| **18** | Campaign Suspended | Registration suspended. | **Contact support**; fix compliance; reinstate. |
***
## Deliverability checklist
* **Identify yourself:** "Hi \[Name], it's \[Business]…"
* **Consent and opt-out:** Include "Reply STOP to opt out."
* **Keep it short:** One clear purpose per message.
* **Avoid shorteners:** Use full/branded URLs.
* **Right-size media:** ≤ **10 MB** each; prefer images over video.
***
## After porting or hosting a number with MessageDesk
* **0–24 hours:** SMS/MMS may be inconsistent while routes update.
* **24–48 hours:** Most issues resolve.
* **48+ hours:** Collect examples and **contact support**.
Test with 2–3 contacts on different carriers (Verizon, AT\&T, T-Mobile) and save timestamps/screenshots.
***
## What to send MessageDesk support for help
Email [**support@messagedesk.com**](mailto:support@messagedesk.com) with:
* **3+ failed examples** (dates/times, recipient numbers)
* **Exact error details** (screenshots of status/reason)
* **Recipient carriers** (if known)
* **Your message content** (including any links)
* **Which sending number** you used
***
## Reference (additional details)
### How statuses appear in the UI
* **Outbound:** `10:42 AM | Delivered ✓` (timestamp **|** status + icon)
* **Failed:** Red/error styling; click to open details and **Resend**
* **Media:** Status shows even without text content
* **Inbound:** Timestamp only (no status)
### MMS and media tips
* **Aim for ≤ 500 KB per image** (hard max **10 MB**). Files over 500 KB are auto-compressed; .jpg compresses cleanly, while large .png files may show visible compression artifacts.
* Files that can't be reduced under the threshold send as **links** automatically.
* **Prefer .jpg over .png when texting iPhone recipients.** PNG MMS to iOS is known to fail intermittently at the carrier/device level.
* If repeated failures occur, **share a file link** instead of attaching video.
* HEIC/JPG/PNG/GIF/PDF supported; files > **500 KB** send as links automatically.
# Send and Receive MMS Media Files
Source: https://docs.messagedesk.com/messaging/media
Send and receive images, videos, PDFs, and documents through MessageDesk MMS. Supported file types, size limits, and best practices for delivery success.
# Send, receive, and share multimedia files with MessageDesk
Add pictures, PDFs, GIFs, HEIC photos, and even contact cards to any message or internal comment. You can upload new files or reuse files already saved in your workspace, without leaving the thread.
***
## Supported media file types
MessageDesk supports a wide range of file types for both **inbound** (received) and **outbound** (sent) media.
### Images
* **.jpg**
* **.png**
* **.gif**
* **.heic** (see [HEIC photo handling](#heic-photo-handling) for limitations)
* **.webp**
### Audio
* **.mp3**
* **.wav**
* **.m4a**
### Video
* **.mp4**
* **.mov**
### Documents
* **.pdf**
* **.doc**
* **.docx**
* **.vcf** (contact card) - coming soon
***
## In-app display behavior
Different file types display differently within the MessageDesk app:
| File type | In-app behavior |
| -------------------------------------------------- | ----------------------------------------------------------------------------------- |
| **Photos** (jpg, png, gif, heic, webp) | Native preview with full in-app display |
| **Audio** (mp3, wav, m4a) | Native audio player for in-app playback |
| **Video & other files** (mp4, mov, pdf, doc, etc.) | Displays as a file placeholder bubble; clicking opens the file in a new browser tab |
***
## Upload limits and delivery behavior
* **Max file size per upload:** **10 MB** (per individual file)
* **Recommended image size:** **≤ 500 KB** to skip compression and preserve sharpness
* **Max number of files:** **No explicit limit** (upload as many as you need over time)
* **Delivery behavior:** Files **over 500 KB** automatically send as **clickable links**
* **Clipboard paste:** Paste images or files right into the composer with **Cmd + V** (macOS) or **Ctrl + V** (Windows/Linux)
* **Size optimization:** Images may be **compressed** to reduce size and improve delivery
**Why links?** Sending larger files as links improves deliverability and makes downloads more reliable for recipients.
**Recommended image size: ≤ 500 KB.** MessageDesk auto-compresses .jpg, .png, .gif, and .webp images over \~500 KB so they fit within carrier MMS limits. Starting from a file already under 500 KB avoids compression and preserves the sharpest image. That matters for branded product photos. Files that can't be compressed under the threshold (or HEIC files of any size over 500 KB) send as a clickable link instead of an inline image.
***
## How to attach media to a message or a comment on desktop
Attaching media works the same way in **Messaging** mode and **Comment** mode. The button and steps are identical.
1. In the message compose box, click the **+** icon.
2. Choose one:
* **Upload from your computer** or **Insert a GIF**.
* **Drag and drop** the file into the composer, or click to browse your folders.
* **Select from existing Workspace files** (see next section).
3. Confirm the file appears above the composer.
4. (Optional) Click the **x** on a media item to remove it.
5. **Send** the message or **Save** the comment.
**Pro tip:** You can **copy/paste** images directly into the compose box with **Cmd + V** (macOS) or **Ctrl + V** (Windows/Linux).
**Heads up:** If you use a screen capture tool like CleanShot X, paste behavior may differ.
## How to attach media to a message on mobile
On mobile, you can select and attach media and files to messages in three ways.
### 1. Take a photo or video
When composing a message, **grant MessageDesk access to your camera**. You can then upload and attach your media directly to your message.
### 2. Select an image or video from your phone's camera roll
Tap **"View Library"** and select an image or media to upload and attach to your MessageDesk message.
### 3. Select a document or media from your phone's file library
Tap **"Choose from file library"** to upload images, files, docs, etc. from your device's connected file library.
**Known limitations: iOS voice messages (.amr files)** or voice messages sent from iOS devices use the `.amr` format, which isn't natively supported by most browsers. These files can't currently be played back in MessageDesk.
***
## Insert media from existing workspace files
Reusing a file you've already uploaded keeps things consistent and fast.
1. Click the **+** icon in the composer.
2. Open the **Workspace files** tab.
3. Browse or search, then **select** your media.
4. The file attaches to your draft. Send when ready.
***
## Where media works in MessageDesk
* **1-on-1 messages:** send photos, PDFs, and more to a single contact.
* **Broadcasts (send individually):** attach the same file to each recipient's message.
* **Group SMS:** share media that everyone in the group can see.
* **Internal comments (desktop only):** add files teammates can reference inside the thread.
***
## Tips for smooth sending
* Keep each file **≤ 10 MB**. Split large PDFs or compress images if needed.
* **Aim for ≤ 500 KB per image** to skip auto-compression and keep your branding sharp.
* Use **.jpg** for photos and **.pdf** for documents/forms.
* **Prefer .jpg over .png when texting iPhone recipients.** See [PNGs and iPhone delivery](#pngs-and-iphone-delivery) below.
* **HEIC** (common on iPhone) uploads work. For the most reliable MMS delivery and in-app preview, export photos as **.jpg** or **.png** before sending. See [HEIC photo handling](#heic-photo-handling) below.
* Preview before sending to confirm the right file is attached. Remove with the **x** if needed.
***
## PNGs and iPhone delivery
**PNGs to iPhone recipients can fail intermittently.** This is a known iOS-level handling issue with PNG MMS attachments. It isn't specific to MessageDesk and affects messages from any sending platform. Carriers and Apple haven't provided a fix.
**Recommendation:** When texting customers who are mostly on iPhone, send photos as **.jpg** rather than .png. JPG delivers reliably across iOS and Android and compresses more cleanly for MMS. Reserve .png for screenshots or images that require transparency, and keep them under 500 KB.
***
## HEIC photo handling
HEIC is the default photo format on newer iPhones. You can attach HEIC files in MessageDesk. Here's how they're delivered and previewed:
* **Uploads work.** You can attach `.heic` files from your computer, phone camera roll, or file picker just like any other image.
* **No auto-compression for HEIC.** Images over the \~500 KB MMS threshold are auto-compressed for delivery when they're **.jpg**, **.png**, **.gif**, or **.webp**. HEIC files are **not** auto-compressed.
* **Large HEIC files send as a link.** If a HEIC file is over \~500 KB, it sends as a clickable link in the text instead of an inline MMS image.
* **Carrier and recipient support varies.** Even for smaller HEIC files sent as MMS, not every carrier or recipient device renders HEIC inline.
* **In-app preview may fail on some platforms.** HEIC decoding isn't supported everywhere. In some browsers or desktop environments, the preview can show a broken-image placeholder even though the upload succeeded.
**Recommendation:** For the most reliable experience, especially when texting photos to customers, save or export HEIC photos as **JPEG** or **PNG** before attaching. On iPhone, you can set **Settings → Camera → Formats → Most Compatible** to capture new photos as JPEG by default.
***
***
## How to download images
**On mobile:**
* **Force-touch (long press)** an image and choose **Save Image.**
* The image downloads directly to your device.
**On desktop:**
* Click the media file in the message feed.
* **Click the download button** on any image to save it directly to your computer.
***
## Frequently asked media questions
**Can I add multiple media attachments to a message?**\
Yes. Select additional files, and they'll stack above the composer. Keep each file **≤ 10 MB**.
**Can I send multiple images in one message?**\
Yes, on desktop. You can attach multiple images to a single compose. When the message sends, **each image goes out as its own MMS** to the recipient. Fanning out one image per MMS delivers more reliably across carriers than bundling them. Multi-image attach from the mobile app is on the roadmap. For best results, keep each image **≤ 500 KB** and use **.jpg**.
**Is there a limit to how many files I can upload to MessageDesk overall?**\
No explicit limit. You can upload as many files as you like to your workspace.
**Can I attach media to internal comments?**\
Yes. Comments support the same media attachments as messages.
**Does media work with group texts?**\
Yes. You can add media to **any** message type in MessageDesk.
**What happens if a file is over 500 KB?**\
It sends as a **clickable link** so your recipient can view or download it reliably.
**Why does my image look smaller, blurry, or distorted?**\
MessageDesk compresses images over \~500 KB so they fit carrier MMS limits. Heavy compression on a very large source file (especially several MB) can introduce blur or color banding. To keep your branding sharp, **export images at ≤ 500 KB before attaching**. That skips compression entirely. Files that can't be compressed below the threshold send as a downloadable link, which preserves the original quality.
**Are HEIC photos from iPhone supported?**\
Yes. You can attach HEIC files, but HEIC isn't auto-compressed for MMS and may send as a link if it's over \~500 KB. Some devices and browsers also can't preview HEIC inline. For the most reliable delivery, export photos as JPEG or PNG before sending. See [HEIC photo handling](#heic-photo-handling).
**Do media links expire?**\
Links are designed for reliable access and don't expire. If you need time-limited links for compliance, contact support to discuss options.
***
# Compose New Messages
Source: https://docs.messagedesk.com/messaging/new-message-compose
Compose new SMS and MMS messages in MessageDesk. Send to single contacts, groups, or filtered lists with templates, attachments, and personalization tags.
# Compose and send new messages in MessageDesk
Send a quick 1-on-1, a small group text, or a one-to-many broadcast right from the **New message** composer. This guide shows you what each field does, the limits to keep in mind, and a few power tips so you can move fast.
## At a glance: what makes up a new message
* **Recipients:** who you're sending to
* **Send from:** which connected phone number you're sending from
* **Message:** your text, plus options for template, media, and emoji
* **Post-send actions:** assign labels or teammates to conversations
* **Send options:** send now or schedule for later
## How to compose and send a new message from MessageDesk
### 1. Click the **New Message** button from the Inbox
### 2. Add recipients
Search and add people by **name**, **phone number**, **label**, or **assigned teammate**. As you add them, you'll see each recipient appear as a **chip** beneath the field to confirm they're included.
#### Recipient types
You can send messages to:
* **Individual contacts:** search by name or phone number to add specific people
* **Labels:** select a label to send to all conversations with that label attached (up to 100 conversations)
* **Assigned teammates:** select a teammate to send to all conversations assigned to them (up to 100 conversations)
#### Filter your search
Use the **filter icon** to narrow your search results. You can filter by:
* Conversations (individual contacts)
* Labels
* Assigned teammates
By default, all types appear in search results. You can select any combination of filters to focus your search.
#### Recipient selection rules
* **Only one label or assigned teammate** can be selected per message.
* Once you select a label or assigned teammate, the search box is disabled.
* The message sends to the first 100 conversations with that label or assigned to that teammate.
* **Once you select an individual contact**, labels and assigned teammates no longer appear in search results.
* **Mix individual contacts freely.** Add up to 100 individual contacts by name or phone number.
**Pro tips:**
* **Copy/paste a list of numbers:** You can copy/paste a list of phone numbers directly into the Recipients field. This works great for quick broadcasts.
* **Per-send limit:** You can add **up to 100 recipients** to a single message send. When using labels or assigned teammates, only the first 100 conversations receive the message.
* **Editing:** Remove anyone by clicking the "x" on their chip before you send.
* **More:** click + more to view all recipient phone numbers.
### 3. Select the phone number you want to send from
Choose the [**connected phone number**](/get-started/phone-numbers/overview) you want to send from. You'll see a dropdown of the **active numbers** available in your workspace.
* Pick the number your contacts expect to hear from.
* If you don't see a number, confirm it's connected and active for your workspace.
### 4. Compose your message
This is where you compose and configure what you're sending.
#### Select a message type
* **Send individually**
* Sends one message to each recipient.
* Replies come back as private 1-on-1 threads.
* Best for announcements, reminders, updates at scale (up to 100 per send).
* **Group SMS**
* Creates one shared thread where everyone sees all messages.
* Best for small, collaborative conversations.
* **Note:** Group SMS only works on 10-digit numbers. Toll-free numbers don't support group texting due to carrier limitations.
Learn more about the various types of messages MessageDesk supports.
#### Write your message
* **Type your text** as usual.
* [**Apply a template**](/messaging/templates-tags) to save time and maintain consistent wording.
* [**Add media (MMS)**](/messaging/media) to include images, PDFs, or other supported files.
* **Insert emoji** for tone and clarity when it makes sense.
After you send your message, you'll see a notification: **Message sends have begun**.
MessageDesk queues your messages and sends them as fast as possible. For larger broadcast sends, you can navigate to other parts of the app while your message sends to all recipients.
***
## Preview your message before sending
MessageDesk shows a **message preview** so you can see exactly what each recipient will get before you send. The preview widget works on mobile and desktop, and it's on by default.
### Turn the preview on or off
* **From the preview widget:** After your first send, dismiss the preview from the dialog itself.
* **From Inbox Preferences:** Toggle **Message compose preview** on or off in [**Account → Settings → Inbox Preferences (My Settings)**](/settings/my-settings/inbox-preferences).
### What the preview shows
* **Resolved personalization tags.** MessageDesk fills in contact properties and [custom field](/settings/workspace-settings/custom-fields) values for the selected recipient, so you see the real message they'll receive.
* **Per-recipient iteration.** Step through your recipient list to see the values populated for each individual contact. Use this to spot-check a broadcast before it goes out.
* **Scheduled send time.** If the message is scheduled, the preview shows the **scheduled at** time so you can confirm before saving.
### Tag warnings in the preview
MessageDesk flags tags that may not resolve cleanly so you can catch problems before sending.
* **Red tag.** A tag with no fallback and no data for that recipient. The tag sends as-is unless you [set a fallback](/messaging/templates-tags#set-a-tag-fallback-important) or fix the recipient's data.
* **Info notice on unresolvable tags.** When you send to a **label**, **assigned teammate**, or **group**, MessageDesk can't fetch per-recipient values until send time. The preview shows an info notice so you know those tags will only resolve once the message sends.
* **Dynamic warnings for labels and assigned teammates.** The compose UI adapts when you pick a label or teammate as your recipient. It shows warnings about which fields can and can't be previewed.
When you send to a label, assigned teammate, or group, contact and custom field tags still resolve **per recipient at send time**. You just can't preview each one individually in the composer.
### Send a test message
Send a one-off test to any phone number before you commit to the full send.
1. Open the **preview** widget.
2. Enter the phone number for the test. The field **defaults to your own user phone number** for a quick self-test.
3. Send the test. The test uses the exact content and resolved tags from the preview.
Use a test send to verify tag resolution, media rendering, and how your message reads on a real phone. It's especially useful for broadcasts to labels or assigned teammates, where you can't preview each recipient individually.
## Post-send actions
When sending a message, you can automatically apply actions to all recipient conversations after the message sends.
### Available post-send actions
* **Assign a teammate:** automatically assign all recipient conversations to a specific teammate.
* **Apply a label:** automatically apply a label to all recipient conversations.
**Note:** Post-send actions are only available for broadcast message types. Post-send actions are disabled for Group SMS messages.
**How to use post-send actions:**
1. Compose your one-to-many broadcast message with recipients.
2. Select **Send individually** as your message type.
3. In the **Post-send actions** section, choose one or both actions:
* Select teammates to assign conversations to.
* Select labels to apply to conversations.
4. Send or schedule your message.
Post-send actions keep you organized by automatically routing and categorizing broadcast conversations without manual follow-up.
## Schedule or send now
Choose when your message goes out.
* **Send now** to send your message immediately.
* **Schedule** to send later.
* Pick from **preset send times** or select **any date/time** from the picker.
* Scheduled messages show the chosen send time so you can verify before confirming.
* **Note:** Scheduling is currently one-time only (not recurring). You can create as many scheduled messages as you like in advance and view them all in the Scheduled view in your inbox.
**Tip:** Schedule broadcasts during business hours for higher response rates and a better messaging experience.
## New message examples
**1-on-1 confirmation**
* Recipients: Add a single contact
* Send from: Your main business number
* Message: "Hi Alex, we have you for 2:00 PM today. Reply YES to confirm or 1 to reschedule."
* Send: Now
**Broadcast update (up to 100)**
* Recipients: Paste your list of today's appointments
* Send individually: On
* Message: "Heads up: Our office is closing early today at 4 PM. Text us here with any questions."
* Schedule: 9:00 AM today
**Broadcast to labeled conversations**
* Recipients: Select the "VIP Customers" label
* Send individually: On
* Message: "Exclusive offer for our VIP customers: 20% off your next service. Reply to book!"
* Send: Now
**Broadcast to assigned conversations**
* Recipients: Select teammate "Sarah"
* Send individually: On
* Message: "Quick reminder: Please follow up on your open conversations by end of day."
* Send: Now
**Group SMS (small team check-in)**
* Recipients: Add your field techs
* Send type: Group SMS
* Message: "Quick update: job 1842 running 20 min behind. Anyone nearby to swap?"
* Send: Now
## Frequently asked message compose questions
You're capped at 100 recipients per send. Create another message for the next batch.
No. Each reply creates a private 1-on-1 thread with you, not the whole list.
Use Group SMS when you want a short, collaborative thread where everyone can see replies. Use a broadcast when you want scale and private replies.
Yes. Visit the inbox and view Scheduled messages. Click to open the scheduled message to reschedule or cancel it before its send time.
Only the first 100 conversations with that label or assigned to that teammate receive the message.
No. You can only select one label or one assigned teammate per message. However, you can add multiple individual contacts (up to 100 total).
Post-send actions let you automatically assign conversations to a teammate or apply a label after sending a broadcast. They're only available when using "Send individually" mode, not for Group SMS messages.
Yes. The [message preview widget](#preview-your-message-before-sending) is on by default on mobile and desktop. It resolves personalization tags per recipient, flags tags that can't be filled until send time, and lets you send a test message to any phone number. Turn it off from the widget after your first send, or in [Inbox Preferences](/settings/my-settings/inbox-preferences).
# SMS, MMS & Group Messaging Overview
Source: https://docs.messagedesk.com/messaging/overview
Explore the messaging types MessageDesk supports: 1:1 SMS, MMS, group texts, scheduled sends, and templated broadcasts. Plus throughput and channel rules.
# Messaging with MessageDesk
MessageDesk supports the following types of messages:
* 1-on-1 individual SMS/MMS
* 1-to-many text message broadcasts
* Group SMS
* Multimedia messages (MMS) in any thread
* 2FA (two-factor) (receive-only)
* Internal comments (private, team-only)
* Emoji reactions on messages and comments
* RCS (coming soon)
* WhatsApp (coming soon)
* Email (coming soon)
**Import historical messages:** You can import past messages into MessageDesk to maintain conversation continuity. Learn more in the [Data Center](/settings/workspace-settings/data-center) documentation.
## iMessage vs. SMS/MMS
MessageDesk sends and receives over standard carrier SMS and MMS. It doesn't use Apple iMessage.
* iMessage is Apple's separate, proprietary protocol. iMessage conversations don't appear in the MessageDesk shared Inbox.
* Messages from iPhone users still reach you. When you or a contact texts a MessageDesk number, carriers deliver the message as SMS/MMS and it shows up in the Inbox normally. You just won't see blue-bubble iMessage threads.
* You can't connect an existing cellular or mobile line to MessageDesk while it stays with its wireless carrier. If your team wants to share texting on a personal cell, use a separate MessageDesk business number. Add [call forwarding](/settings/workspace-settings/phone-management#call-forwarding) to a cell if voice matters. See [Phone numbers](/get-started/phone-numbers/overview) to add or connect a line.
## SMS character limits and message segments
Standard SMS messages are limited to **160 characters per segment**. If a message exceeds this limit, carriers automatically split it into multiple segments. Most modern phones display these as a single continuous message, but in rare cases they may appear as separate texts or arrive out of order.
**Special characters reduce the limit:** Emojis and accented letters (like "á" or "ñ") use more data per character. When these are included, the effective limit per segment drops to around **70–80 characters**.
**Maximum message length depends on encoding:** The compose box character counter automatically adjusts based on the characters in your message:
* **Standard (GSM-7) messages:** Up to **1,600 characters** per send. Uses only standard ASCII characters (letters, numbers, and common punctuation).
* **Unicode (UTF-16) messages:** Up to **800 characters** per send. Triggered by any non-ASCII character. For example, an emoji, an accented letter, curly quotes, or an em dash.
The lower cap on Unicode messages prevents carrier failures from oversized payloads. If you add a single emoji to a long message, the counter will drop from 1,600 to 800. Trim the message or remove the special character to send it as one piece.
**Automatic MMS conversion:** Once a message reaches approximately three segments, MessageDesk automatically converts it to MMS. This reduces carrier costs and ensures delivery as one complete message regardless of length.
**You don't need to worry about character counts.** MessageDesk includes unlimited messaging and automatic MMS conversion, so your contacts will almost always receive your message as one clean, professional text. Even if it technically splits behind the scenes.
### 1-on-1 individual text messages
Private, one-to-one messages with a single contact. Each conversation is its own thread in your shared inbox, so your team has full context and can assign, filter, and follow up without stepping on each other.
**Best for:** Conversational, back-and-forth service and support.
**How 1-on-1 individual messages work:** You text one person. Their replies stay in the same private thread.
**Advantages:**
* Keep conversations private and easy to follow.
* Route and assign to the right teammate from the shared inbox.
* Great for personalized, contextual help.
**Limitations:**
* One conversation at a time.
* Not efficient for announcements to many people.
### 1-to-many text message broadcasts
Send one message to many contacts at once. Replies come back as **private 1-on-1** threads so you can triage and follow up quickly. (This is why broadcasts scale *and* stay personal.)
**Best for:** Announcements, reminders, alerts, promotions.
**How broadcasts work:** Create a group/list and send. Every reply opens a private thread for you.
**Advantages:**
* Reach many people with one send.
* Every reply is private. No "reply all" disasters.
* Combine with templates and scheduling for speed.
**Limitations:**
* Currently limited to **100 contacts per send**.
* Best for one-way notices; not for group collaboration.
* Be mindful of consent and opt-out language for non-conversational texts.
**Pro tip:** Segment first. Targeted broadcasts get better engagement and fewer opt-outs.
### Group SMS
Group SMS messages create a text thread where all message recipients can see and respond to all messages within the text thread.
**Best for:** Small, collaborative discussions (like a quick team check-in).
**How Group SMS works:** All replies go to everyone in the group.
**Advantages:**
* Creates a shared conversation where everyone can see, respond, and participate.
* Works well for small, collaborative discussions.
**Limitations:**
* Every reply alerts all recipients (which can quickly become noisy).
* Limited to **7 total participants - not including the sender**.
* Difficult to add or remove participants after the group is created.
### Multimedia text messages (MMS)
Multimedia text messages, or MMS for short, are available for all messaging types. You can attach media to individual, broadcast, and group text message conversations.
**Best for:** Visual messages like
**How multimedia text messaging works:** Attach your media to any text message and send.
**Advantages:**
* Faster than email for “show me” moments.
* Reduces back-and-forth and shortens resolution time.
**Limitations:**
* Carrier media file size limits apply.
* **Individual MMS messages are limited to 1,200 characters.** This is an inherent limitation of MMS as a messaging type, imposed by upstream carrier providers.
**Sending longer messages:** If you need to send content that exceeds 1,200 characters, break it into multiple messages of around 1,000 characters each. This ensures reliable delivery while keeping your messages easy to read.
Learn more about sending and receiving media files, including file size restrictions.
### 2FA (two-factor) authentication text messages
These are transactional **codes typically sent from a 5- or 6-digit short code**. MessageDesk connected numbers can **only receive** 2FA codes from shortcode phone numbers.
**Best for:** Receiving account-security codes on a shared team number.
**How 2FA messaging works:** Your connected number receives 2FA messages like any other text.
**Advantages:**
* Keep security-related messages in the same customer thread.
* Maintain a record alongside other messages in your shared inbox.
**Limitations:**
* MessageDesk connected phone numbers are only capable of receiving these types of text messages, not generating them or sending from a shortcode phone number.
* **Major carriers block 2FA codes from large organizations** (e.g., Facebook, Amazon, Google, financial institutions) when sent to VoIP numbers. This is a carrier-level restriction, not a MessageDesk limitation.
* **Test before relying on this workflow:** Send a test 2FA code to your MessageDesk number before committing to this use case. Smaller organizations and internal systems typically work fine, but codes from major platforms are often blocked.
**Security note:** Using a shared team number for 2FA codes bypasses the security model of two-factor authentication. This workflow is best suited for business scenarios like bookkeeping access, audit teams, or internal system logins. It's not for personal account security.
### Internal comments
Leave private notes right inside a text message conversation. Contacts never see these. They're team-only for handoffs and internal support.
**Best for:** Handoffs, support, approvals. Anything your contact shouldn't see.
**How internal comments work:** Add a comment to the thread. Assign or mention teammates.
**Advantages:**
* Keep the context within the conversation.
* Reduce "who said what" confusion across shifts.
**Limitations:**
* Only visible to MessageDesk users within your MessageDesk workspace.
Check out how to use comments, mentions, and emoji reactions for team collaboration.
### Emoji reactions
Add emoji reactions to messages and non-threaded comments to quickly acknowledge, respond, or express sentiment without typing a full reply. Reactions appear in the top-left of the message or comment with a count of unique reactions.
**Best for:** Quick acknowledgments, expressing sentiment, reducing message noise.
**How emoji reactions work:** Hover over a message or comment and select an emoji to react. Click the reaction icon to see all reactions and who posted them.
**Advantages:**
* Acknowledge messages without cluttering the thread with replies.
* See who reacted by clicking the reaction icon.
**Limitations:**
* Available on messages and non-threaded comments only.
### RCS, WhatsApp, Email (coming soon)
These channels will appear as additional conversation types when available. You’ll manage them from the same shared inbox alongside SMS.
# Restricted Messaging Types
Source: https://docs.messagedesk.com/messaging/restrictions
Avoid SMS rejections by understanding restricted SHAFT-C content: sex, hate, alcohol, firearms, tobacco, and cannabis. Stay compliant with carrier rules.
# Forbidden messaging types (SHAFT-C) for SMS
Carriers block certain message types by default. Use this guide to avoid rejections and stay compliant.
## What's always prohibited
Don't send these via SMS/MMS:
* High‑risk financial services (payday/short‑term/high‑interest loans, third‑party auto/mortgage/student loans, crypto). Also avoid links to donation sites.
* Third‑party lead generation (buying, selling, or sharing consumer data). No cold outreach without prior consent.
* Debt collection (by third parties), consolidation, reduction, or credit repair programs.
* "Get rich quick," risky investment pitches, multi‑level marketing (MLM).
* Illegal substances (cannabis/marijuana, prescription drugs not OTC, vaping; CBD is not permitted by US carriers).
## SHAFT‑C: content blocked or restricted
* Sexually inappropriate content (adult/explicit).
* Hate speech or profanity.
* Alcohol: allowed only with proper age‑gating; permitted on Toll‑Free, Short Code, and Long Code.
* Firearms and depictions/endorsements of violence: allowed only with age‑gating; permitted on Toll‑Free, Short Code, and Long Code.
* Tobacco: prohibited on Toll‑Free; allowed on Short Code and Long Code only with age‑gating. Vaping is prohibited everywhere.
* Cannabis: prohibited for US messaging (federally illegal; CBD not allowed by carriers).
## Special requirements for alcohol and beverage businesses
If you operate a brewery, beverage distributor, liquor store, or similar alcohol-related business, you must follow these additional requirements:
**Age-gated opt-in requirements:**
* Your website must have an age gate with manual date of birth (DOB) entry.
* All opt-in forms must include age-gated elements, such as entering DOB or proof of being 21+.
* Simple checkboxes stating "I am 21+" are not sufficient.
**Prohibited messaging content:**
Even with proper age-gating in place, carriers block messages containing promotional keywords related to alcohol purchases. Don't send messages with phrases like:
* "Buy XYZ beer"
* "Liquor sale"
* "Purchase wine"
* Similar direct purchase language for alcoholic beverages
These keywords trigger carrier-level delivery issues and result in message filtering or blocking, regardless of your registration status.
**What you can send:**
* Event notifications (e.g., "Join us for our tasting event this Saturday")
* General updates about your business
* Order status notifications (without promotional purchase language)
* Delivery and order reminders
## Gambling
* Prohibited on Toll‑Free.
* Allowed on Short Code or Long Code only with proper age‑gating.
## Quick allowance guide
| Category | SMS/MMS status | Notes |
| :--------------------------- | :----------------- | :-------------------------------------------------------------------- |
| High‑risk financial services | Not allowed | Includes crypto; avoid donation links. |
| Third‑party lead gen | Not allowed | No buying/selling/sharing consent lists; no cold outreach. |
| Debt collection/forgiveness | Mostly not allowed | First‑party account notices may be OK; third‑party collection is not. |
| Get‑rich‑quick / MLM | Not allowed | Investment "tips" and wealth promises are blocked. |
| Cannabis/CBD/vaping | Not allowed | US carriers block; vaping always prohibited. |
| Alcohol | Restricted | Age‑gating required; allowed on TF/SC/LC. |
| Firearms/violence | Restricted | Age‑gating required; allowed on TF/SC/LC. |
| Tobacco | Restricted | Age‑gating on SC/LC; not allowed on TF. |
| Gambling | Restricted | Allowed on SC/LC with age‑gating; not on TF. |
## What's typically okay
* Legitimate financial institutions sending transactional alerts (e.g., fraud alerts, appointment reminders) with proper consent.
## Examples of prohibited content
* "Apply now for a same‑day payday loan. Guaranteed approval."
* "Buy this crypto before it 10x's. Exclusive wealth alert."
* "We can erase your debt. Click to enroll."
* "Weekend vape deals. 20% off."
## Important
This is not legal advice. Carriers can block or filter messages at their discretion. Consult your legal counsel for your specific use case.
# Scheduled Text Messages
Source: https://docs.messagedesk.com/messaging/scheduled-messages
Schedule SMS messages in MessageDesk for any future date and time, then edit, cancel, or reschedule them from your inbox before they send.
# Schedule text messages in MessageDesk
Send the right message at the right time, without babysitting your inbox. MessageDesk lets you schedule any outbound text and manage all upcoming sends in one place.
***
## What is text message scheduling?
Text message scheduling is a lightweight automation that sends text messages **at a future date/time**. You can schedule from any **Message Compose** box in MessageDesk for:
* **1-on-1** conversations
* **Broadcasts (Send Individually)** to **up to 100** recipients
* **Group SMS** (small collaborative groups)
**Note:** Scheduled texts respect carrier registration/throughput limits. If compliance blocks delivery, the scheduled send will [**fail with an error**](/messaging/delivery-status-errors) you can review in the thread.
***
## How to schedule a text message
1. In any **Message Compose** box, write your message (add media/templates/tags if needed).
2. Click the **Calendar** icon.
3. Choose a **preset time** (e.g., "Later today," "Tomorrow morning") or pick a **custom date and time**.
4. Click **Schedule Message** to confirm.
**Timezone:** Scheduling uses your **device's local timezone** at the time of scheduling, not the timezone associated with your workspace. If you travel or your device's timezone changes later, the message still sends based on the originally selected time in that original timezone.
***
## View and edit scheduled messages in the conversation thread
Scheduled messages appear directly in your message thread, so you can see what's queued without leaving the conversation.
* If there are any pending scheduled messages, a **banner** appears above the Message Compose box showing how many are scheduled.
* Click the banner to **show** or **hide** scheduled messages in the thread.
* This keeps your thread clean if you don't need to see upcoming sends, while still giving you quick access when you do.
* Click Edit to edit or delete any scheduled messages directly from the message thread.
***
## How to view, edit, or cancel scheduled text messages
1. In the Inbox, open the **My Conversations drop-down**.
2. Click **Scheduled** to see all scheduled messages across your workspace.
3. Select a scheduled item to:
* **See next send date/time**
* **See who created it**
* **Preview/edit message content**
* **Reschedule** or **Send now**
* **Delete** (cancels the schedule)
**Note:** Editing a scheduled **Broadcast (Send Individually)** updates the template/content for **all recipients** in that scheduled send.
### Filtering scheduled text messages
By default, the Scheduled view shows all scheduled messages across your workspace. Use the **Schedules Filter** to narrow results by who created the schedule:
1. Click the **filter icon** in the Scheduled view.
2. Select one or more teammates to filter by.
3. The list updates to show schedules created by **any** of the selected users.
**Share your filter:** Click the **copy icon** in the top right to copy the filter URL and share it with teammates.
***
## Where text message scheduling works
* **1-on-1 messages in the Inbox:** Sends once to the single contact.
* **New Message Compose Broadcasts (Send Individually):** Sends one text per recipient (max **100** recipients per scheduled broadcast). Replies stay **private** in each thread.
* **Group SMS:** Sends to the whole group thread at the scheduled time; all recipients see follow-ups.
***
## Limits and behavior
* **Recipient cap:** Broadcasts are limited to **100** recipients per scheduled send.
* **Media:** You can schedule messages with attachments; files **> 500 KB** send as **links** automatically.
* **Throughput:** High-volume windows may queue briefly to meet carrier limits.
* **Opt-outs:** If a contact **opts out** before the scheduled time, that send will **not** deliver to that contact.
* **Closed threads:** Scheduling in a **closed** conversation will **reopen** it when the message sends.
* **Permissions:** Users need **Editor** access on the feature/line to schedule and manage future sends.
***
## Text message scheduling best practices
* **Mind compliance windows:** Avoid late-night hours where recipients might view messages as intrusive.
* **Double-check your timezone:** Confirm the scheduled time matches your messaging intent, especially around **Daylight Savings Time** changes.
***
## Frequently asked scheduled messages questions
**Can I schedule recurring messages?**\
Recurring schedules aren't supported yet. You can duplicate and schedule again.
**What happens if I change my device's timezone after scheduling?**\
The message sends according to the **original timezone** set at scheduling time.
**Can I edit a schedule after it's created?**\
Yes. Open **My Conversations → Scheduled**, select the item, then edit content, **Reschedule**, **Send now**, or **Delete**.
**How do I see only my scheduled messages?**\
The Scheduled view shows all schedules by default. Use the **Schedules Filter** to select your name and see only the schedules you created.
**Do scheduled messages include media?**\
Yes. Attachments are supported. Files **> 500 KB** will send as **clickable links**.
**What if my number isn't registered (10DLC/toll-free)?**\
Delivery may be limited or filtered. Complete **carrier registration** for best results before scheduling large sends.
**Will I be notified if a scheduled message fails?**\
Failures show in the conversation with a **Failed** status and an error reason. You can **Resend** after fixing the cause.
***
## Troubleshooting
**I don't see the Scheduled view.**\
Open **My Conversations** and look for **Scheduled**. If it's missing, refresh or check your role/permissions.
**My scheduled broadcast didn't reach everyone.**\
Review the thread statuses. Common causes: **opt-outs**, **invalid numbers**, **rate limits**, or **unregistered lines**.
**I can't schedule on this phone line.**\
You may have **Viewer** access only, or the line requires **registration**. Ask an Admin/Manager to adjust permissions or complete registration.
**A time I picked already passed.**\
If your selected time is in the past (due to timezone shift/DST), MessageDesk will prompt you to choose a future time.
# Templates and Personalization Tags
Source: https://docs.messagedesk.com/messaging/templates-tags
Build and reuse SMS templates in MessageDesk with personalization tags like first name, custom fields, and dates so every text feels written for one person.
# Save time and personalize messages with pre-saved templates and personalized tags
Templates keep your wording consistent and fast. Personalization tags pull in contact and workspace details automatically. Together, you get speed and personalized messages at scale.
## Why you should use templates and tags
* **Save time:** Stop re-typing common messages. Apply a template in one click.
* **Keep messaging consistent:** Standardize language across your entire team.
* **Personalize at scale:** Use tags to insert names, emails, phone numbers, and more.
* **Reduce errors:** Pre-approved text means fewer typos and missed details.
## What are message templates?
Templates are reusable messages you can apply anywhere you compose a text in MessageDesk.\
They can include plain text, **emoji**, [**media (MMS)**](/messaging/media), and **personalization tags**.
## What are personalization tags?
Tags are placeholders, like `{{ ContactFirstName }}`, that auto-fill with real contact info or other saved information at send time. You can use them in templates **and** one-off messages to personalize every text message.
## Apply, create, and edit message templates
You can work with templates from any message compose box.
### Apply a template
1. Click the **TT** icon.
2. Search for or select a template. The picker shows each template's **name** and **description** for quick scanning.
3. (Optional) Click the **preview** button on a template to see its full contents before applying.
4. The template fills your message field. You can still edit before sending.
Templates in the picker are sorted **alphabetically (A–Z)** by name.
### Create a new template
1. Click the **TT** icon → **+ Create Template**.
2. **Name** your template clearly (so teammates can find it later).
3. (Optional) Add a short **description**. This appears alongside the name in the template picker to help teammates pick the right one.
4. **Type your message** content.
5. Optional: **Add media**, **emoji**, and **personalization tags**.
6. Click **Save**.
### Edit an existing template
1. Click the **TT** icon.
2. Hover a template and click the **pencil (edit)** icon.
3. Update the **name**, **description**, and/or **content**.
4. Click **Save**.
**Mobile:** You can also create, edit, and delete templates from the MessageDesk mobile app.
### Delete a template
1. Click the **TT** icon.
2. Hover a template and click the **trash (delete)** icon.
3. Confirm deletion.
**Note:** Deleting a template removes it for all users in your workspace. This action can't be undone.
**Tip:** Keep template names short and specific (e.g., “Appt reminder – 24h,” “Invoice past due – 7d”). That makes searching faster and prevents accidental misuse.
***
## Organize your message templates (Workspace Settings)
Admins and managers can manage all templates from Settings.
1. Go to **Account → Settings**.
2. Under **Workspace Settings**, choose **Inbox Settings → Templates**.
3. **Search**, **create**, or **edit** templates from this tab.
> **Best practice:** Use a naming system (Prefix: Purpose – Timing). Example:
>
> * **Billing:** Invoice paid – receipt
> * **Scheduling:** Appt reminder – 24h
> * **Onboarding:** Welcome – docs request
***
## How to insert a personalization tag
You can insert tags in any message, template or one-off.
1. Click the **#** icon in the message compose box.
2. Search for or select a **Tag**.
3. (Recommended) **Set a fallback** value so your message still reads well if data is missing.
4. (Recommended) Open the [message preview](/messaging/new-message-compose#preview-your-message-before-sending) and step through recipients to confirm each tag resolves the way you expect.
5. Continue composing, then **Send** or **Schedule**.
### Available tags
**Contact**
* `{{ ContactEmail }}` – contact’s email address
* `{{ ContactFirstName }}` – contact’s first name
* `{{ ContactLastName }}` – contact’s last name
* `{{ ContactPhone }}` – contact’s phone number
**Your user profile**
* `{{ UserEmail }}` – your MessageDesk user email
* `{{ UserFirstName }}` – your first name
* `{{ UserLastName }}` – your last name
* `{{ UserPhone }}` – your personal phone number saved in your user profile
**Workspace**
* `{{ WorkspaceName }}` – your MessageDesk workspace name
* `{{ WorkspaceEmail }}` – your workspace’s primary email
* `{{ WorkspacePhone }}` – your workspace’s primary phone
**Custom fields**
Every [custom field](/settings/workspace-settings/custom-fields) on a contact is also available as a personalization tag (for example, `{{ Region }}`, `{{ AccountType }}`, `{{ RenewalMonth }}`). Custom field tags show up in the `#` menu alongside the built-in tags.
* Tags update automatically when you add, rename, or delete a custom field in **Workspace Settings → Custom Fields**.
* Set a [fallback](#set-a-tag-fallback-important) so the message still reads cleanly when a contact is missing a value.
**Note:** Tags resolve at send time. In broadcasts, each recipient gets their own personalized version.
***
## Set a tag fallback (important)
A fallback is the default text used **when a tag has no data**. For example, when you text a raw phone number that isn't saved as a contact yet, or when some contacts are missing first names.
**Why it matters:**
* Prevents awkward blanks like “Hi ,”
* Keeps broadcasts and other messages clean when data varies across recipients
**How to set a fallback**
1. Insert a tag via the **#** icon.
2. Click on the tag to add a **Fallback** value for that tag (e.g., “there” for first names).
3. Save or send.
Fallbacks work for **custom field tags** too. Set a fallback on any custom field tag so messages stay readable when a contact doesn't have that value filled in.
**Example with fallbacks**
* Message: `Hi {{ ContactFirstName }}!`
* With data: **“Hi Alex!”**
* Without data (fallback “there”): **“Hi there!”**
Note: tags without a fallback set will appear as red when inserted into a message. A tag with a fallback set will appear in light purple.
In the [message preview](/messaging/new-message-compose#preview-your-message-before-sending), a tag can also render red when the value can't be resolved for a specific recipient. This happens when you send to a **label**, **assigned teammate**, or **group**, where per-recipient values aren't fetched until send time.
## Template and tag tips and best practices
* **Use short, specific templates.** Create separate versions for common scenarios (24h reminder vs day-of).
* **Personalize the first line.** Use `{{ ContactFirstName }}` with a fallback like “there.”
* **Combine with scheduling.** Queue reminders and follow-ups during business hours.
* **Keep compliance in mind.** For non-conversational or promotional sends, include opt-out language (e.g., “Reply STOP to opt out”).
* **Review periodically.** Archive low-performers and refine wording based on replies.
***
## Frequently asked template and tag questions
You can use the **preset tags** listed above plus any **custom field** you've created on a contact.
Yes. Every custom field on a contact is available as a personalization tag in the `#` menu (for example, `{{ Region }}` or `{{ AccountType }}`). Set a **fallback** so the message still reads cleanly when a contact is missing that value. Manage your fields in [**Custom Fields settings**](/settings/workspace-settings/custom-fields).
Anywhere you compose a message: 1-on-1, broadcasts, group SMS (tags personalize per recipient), and templates.
Yes. Templates can include **media (MMS)**, **emoji**, and **tags**.
## Troubleshooting
* **My tag didn’t resolve.**\
Check that the contact has data for that field and that you set a **fallback**. Make sure the braces and tag name are correct (e.g., `{{ ContactFirstName }}`).
* **My tag looks red in the preview.**\
A red tag in the [message preview](/messaging/new-message-compose#preview-your-message-before-sending) means one of two things. Either the recipient is missing a value for that tag and you haven't set a **fallback**, or you're sending to a **label**, **assigned teammate**, or **group**. In the second case, values resolve per recipient at send time and can't be previewed individually.
* **I can’t find a template.**\
Try a simpler search or confirm the template name in **Workspace Settings → Inbox Settings → Templates**.
* **A template needs updating for everyone.**\
Edit it from the **TT** menu (pencil icon) or from **Workspace Settings** so the change applies to all users.
# From MessageDesk Reach to Inbox
Source: https://docs.messagedesk.com/migration/messagedesk-reach-to-inbox
Migrate from MessageDesk Reach to Inbox with a step-by-step plan. Move contacts, history, and templates with minimal downtime and full team confidence.
# Why migrate from MessageDesk Reach to Inbox by MessageDesk?
Inbox by MessageDesk gives your team a messaging tool built for collaboration, control, and clarity.
* **Broader media support**\
You don't have to tell users to "just email it." Inbox lets you send and receive PDFs, DOCs, JPEGs, PNGs, GIFs, WEBPs, HEICs, and more. Files larger than \~500 KB automatically convert to links, and Inbox keeps every attachment in one place.
* **Group texting and 1:1 Conversations**\
Start a 1:1 Conversation or include up to seven recipients in a group text without duplicating effort or context.
* **User access controls and customization**\
You're not locked into a one-size-fits-all Inbox. Inbox by MessageDesk lets you set up custom user roles and permissions, comment internally, @mention teammates, and tailor Inbox views. Dark mode, custom theming, and saved filters round out a workspace that adapts to how your team works.
* **Better organization and routing**\
In Inbox by MessageDesk, you can label Conversations freely and filter, route, or assign messages as a unified team.
## Migration time at a glance
* **Total time:** \~5-10 minutes.
* **Who's involved:** An account owner/admin and any teammates who will use Inbox.
* **What moves:** Your existing phone number (after you complete the setup steps).
### What you'll need to migrate your account
* The email address you want to use for your Inbox login.
* A list of teammates to invite (names and emails).
## How to migrate your MessageDesk Reach account
### 1. Log in to your MessageDesk Reach account
Visit [app.messagedesk.com](http://app.messagedesk.com) and log in to your existing account.
### 2. Visit Settings → Migrate to Inbox by MessageDesk
You may need to scroll in your settings list to view this option.
### 3. Click Connect with Inbox by MessageDesk
This begins the account linking process.
### 4. Create your Inbox account and connect it to your Reach account
Follow the link to **[https://inbox.messagedesk.com/#/create-account](https://inbox.messagedesk.com/#/create-account)**. Create your Inbox by MessageDesk account, or sign in if one already exists.
**Important:** Be sure to create your new Inbox account using the **same admin email** already associated with your MessageDesk Reach account.
### 5. Migrate your data
Click **Start Data Migration** to begin moving the following data types to your new Inbox by MessageDesk account:
* **Contacts** (including addresses and email information)
* **Messages** (including media attachments)
* **Message templates**
* **Custom fields**
* **Groups** (which become [labels](/settings/workspace-settings/labels) in Inbox by MessageDesk)
* **Opt-out lists** (contacts who have opted out of communication)
Every data type keeps its original structure and metadata.
### 6. Begin data migration
Click **Start Migration** to begin your data migration.
Data migration runs in the background and doesn't affect your current MessageDesk Reach account.
### 7. Monitor your data migration
You'll receive email notifications from [no-reply@messagedesk.com](mailto:no-reply@messagedesk.com) for each migrated data type. The emails tell you when each migration begins and finishes.
Each migration email also includes any failure notes you can pass to our dev team for investigation.
### 8. Migrate your phone number
Migrate your phone number from MessageDesk Reach to Inbox by MessageDesk to start sending and receiving messages.
#### Important information
* Phone migration is instant.
* Your MessageDesk Reach app will no longer send or receive texts.
* Every text message will start running through Inbox by MessageDesk.
* You can move your number back from Inbox by MessageDesk at any time. Email [**support@messagedesk.com**](mailto:support@messagedesk.com) to start that process.
Only account admins can migrate phone numbers from MessageDesk Reach accounts to Inbox by MessageDesk accounts.
### 9. Confirm your phone number migration is complete
Verify your phone number migration from your MessageDesk Reach account, then log in to your Inbox by MessageDesk account to confirm there too.
#### Migration complete in MessageDesk Reach
#### Migration complete in Inbox by MessageDesk
### 10. Invite your team and get familiar with your new Inbox
Download and install mobile apps and desktop extensions.
Bring teammates into your Inbox with roles and permissions.
Learn the ins and outs of sending messages in Inbox by MessageDesk.
Manage Conversations in Inbox by MessageDesk.
## Frequently asked migration questions
### How many times can I run a data migration?
Once every 24 hours.
### Do I need to be an admin to run a data migration?
No. Users with manager-level permissions can migrate data, but only admins can migrate phone numbers. Operators can't migrate data or numbers.
### Do I lose my MessageDesk Reach account?
No. Your MessageDesk Reach account isn't deleted, and you can move data to Inbox by MessageDesk multiple times. Your original account stays accessible and functional.
### Can I test Inbox by MessageDesk before moving my number over?
Yes, and we recommend it. Moving your number to Inbox by MessageDesk is instant, but moving the number back to Reach requires messaging support.
### What data is migrated during the migration process?
The migration moves your contacts (including addresses and email information), messages (including media attachments), message templates, custom fields, groups (which become labels), and opt-out lists. Every record keeps its original structure and metadata.
### How long does the migration process take?
It depends on how much data you have. Data migration runs in the background, and you'll get a notification when it's done. Phone number migration is instant once you start it.
### Can I use both my MessageDesk Reach and Inbox by MessageDesk accounts at the same time?
Yes. Use both at the same time until you migrate your phone number. After the phone number migration, every text message goes through Inbox by MessageDesk, and your Reach account stays accessible for viewing historical data.
### What happens if I need to move my phone number back to MessageDesk Reach?
You can move your phone number back from Inbox by MessageDesk at any time. Contact support to start that process.
### Will there be any downtime during migration?
No. There's no downtime during data migration. Your MessageDesk Reach account stays fully functional, and phone number migration happens instantly.
### What if something goes wrong during migration?
Contact [support@messagedesk.com](mailto:support@messagedesk.com) right away. Your data stays safe in your MessageDesk Reach account, and you can retry the migration. Data migration can run multiple times if needed.
### Do I need to do anything after the migration is complete?
Once data migration finishes, verify that your contacts, messages, and templates transferred correctly in Inbox by MessageDesk. When you're satisfied, migrate your phone number whenever you're ready.
### Will my team members and permissions be migrated?
No. You manage team members and user permissions separately in Inbox by MessageDesk. Invite your team to your new Inbox by MessageDesk workspace and configure their permissions there.
# Relay building blocks
Source: https://docs.messagedesk.com/relays/building-blocks
Reference for the triggers, conditions, and actions available when you build a MessageDesk Relay.
Every Relay combines three parts: triggers, conditions, and actions. Use this page as the reference when you build or edit one.
## Triggers
| Trigger | Fires when | Notes |
| --------------------------- | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Message Received | A new inbound SMS arrives | Default trigger on templates. Supports the Reply to message action. |
| Message Sent | Your workspace sends a message, manual or automated | Unlocks Assign to sender. |
| Message Failed | An outbound message fails to deliver | New in v2026.07.15. Pairs with the Message failure contains text condition. Unlocks delivery-failure workflows. |
| Conversation Opened | Someone reopens a closed conversation | |
| Conversation Users Assigned | A teammate assigns one or more people to a conversation | |
| Conversation Label Applied | A teammate applies a label to a conversation | Turns a label into an automation trigger. |
| Conversation Label Removed | A teammate removes a label from a conversation | New in v2026.07.15. Mirror of Conversation Label Applied. |
| Comment Created | A teammate posts an internal comment | Pairs with the Comment contains text condition. Comments posted by a Relay (via the Send Comment action) don't re-trigger this event, so Comment Created Relays can't loop into themselves. |
| Conversation Closed | A teammate closes a conversation | Good for close-out and system-sync flows. |
| Call Received | An MD-owned phone number receives an inbound call | New in v2026.08.04. Only fires on MessageDesk-owned numbers. Doesn't fire for Twilio-connected, Telegorithm, or hosted (text-enabled) numbers. |
| Contact Updated | A contact property changes on a saved contact | New in v2026.08.11. Non-conversation trigger: it fires against a contact, not a conversation, so conversation-scoped conditions and actions don't apply. Pairs with the **Send Message** action. You pick the outbound channel to send from. |
## 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](/messaging/delivery-status-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](/get-started/phone-numbers/overview) 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.
# Relays: Setup & Technical Guide
Source: https://docs.messagedesk.com/relays/create-edit
Build MessageDesk Relays step-by-step. Configure triggers, conditions, actions, delays, and active hours. Troubleshooting tips and a complete FAQ included.
# 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](/relays/building-blocks), see the Relay building blocks page.
**Permissions required:** By default, only **Admin** users can access Relays. If you don't see the Relays module, ask your workspace admin to grant you **Relay Management** permissions via **Settings → Team Management**. Learn more: [Team Management](/settings/workspace-settings/team-management).
***
## 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.
All Relays appear in the **Relays** tab. The list has five columns, left to right: **Name**, **Description**, **Trigger**, **Order**, and **Actions**. The **On/Off** toggle lives in the Actions column, along with the vertical **⋯** menu.
The list **groups Relays by Trigger** (Message Received, Message Sent, Message Failed, Conversation Opened, Conversation Users Assigned, Conversation Label Applied, Conversation Label Removed, Comment Created, Conversation Closed, Call Received, Contact Updated) and, within each group, **sorts them by Order**. You can scan every Relay on a phone line or event at a glance.
By default, new Relays are **paused**. Toggle them **On** when you're ready.
### 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.
There's no drag-and-drop. The counter is the only way to reorder.
**All matching Relays run.** If multiple Relays in a Trigger group match the same event, every one of them runs in Order. A higher-priority Relay does **not** stop later Relays from evaluating.
Put **narrow, specific** Relays (keyword matches, anonymous-contact capture) **above** broad catch-alls (after-hours auto-reply). The specific behavior runs first, and downstream actions like **Add label** or **Assign** layer on top in the order you expect.
### 2. Name and describe your Relay
Click the vertical **⋯** (three dots) next to a Relay to **Rename**, **Edit description**, or **Delete**.
Add an emoji (e.g., 💤 for after-hours) so you can scan the Relays list at a glance.
### 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](/inbox/comments-mentions) 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.
* **Contact Updated:** Fires when a contact property changes on a saved contact. New in **v2026.08.11**. This is a **non-conversation trigger**. It fires against a contact, not a conversation, so conversation-scoped conditions and actions don't apply. Pair it with the **Send Message** action to text the contact on a channel you pick. Useful for property-driven outreach (for example, texting a welcome message the moment a `lifecycle_stage` custom field flips to `Customer`).
**Note:** Templates include the **Message Received** trigger by default.
**Changing the trigger on an existing Relay.** If you switch a Relay's trigger, MessageDesk removes any conditions the new trigger can't support. The app shows a warning with a count before you save (for example, "Changing the trigger will remove 1 incompatible condition from this relay"). Review your conditions after switching triggers.
### 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](/inbox/comments-mentions) (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](/messaging/delivery-status-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, `VIP` or `Escalated`). 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
**Tip:** Turn on **"Trigger outside of business hours"** to invert the time window for after-hours replies.
### 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.
* **Send Message:** send an outbound SMS/MMS on non-conversation triggers. New in **v2026.08.11**. There's no existing conversation to reply into, so the action asks you to pick an **Outbound Channel** (which connected phone number to send from). Currently available on the **Contact Updated** trigger.
* **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.
**Tip:** You can chain multiple actions together. For example, **Reply**, **Assign**, and **Label** in a single Relay.
**Delays (optional)**
* 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
Paused Relays don't evaluate triggers or run actions.
### Delete
Open the Relay → **⋯** → **Delete**.
**Warning:** Deleting is permanent. If you might reuse the Relay, **pause** instead.
***
## 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”
|
**How it works:**
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.
**Pro Tip:** Use delegation-style relays for managers who want their teams to reply on their behalf or monitor shared inboxes.
Each teammate assigned to the conversation will [receive notifications by default](/settings/my-settings/notification-preferences).
***
### 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.
| Event | Resulting status |
| ---------------------------------------------- | ---------------- |
| Inbound message arrives | **Unread** |
| Relay sends an auto-reply | **Replied** |
| A teammate opens the conversation in the Inbox | **Read** |
| A teammate closes the conversation | **Closed** |
**Auto-replies don't mark a conversation as Read.** A Relay reply moves the conversation out of the **Unread** filter and into **Replied**. The conversation is only marked **Read** when a teammate opens it. After-hours threads still surface for human review the next morning, even though the customer already got an automated acknowledgement.
This behavior applies to every Relay action that sends a message: after-hours auto-reply, keyword auto-reply, anonymous-contact first-touch, and so on.
#### Force Read or Unread from a Relay
The default status transitions above cover most flows, but two actions let a Relay set the status explicitly (new in v2026.08.04):
* **Mark Conversation Unread** puts the conversation back into the **Unread** filter after the Relay runs. Add it to an after-hours auto-reply so the customer's message still queues for morning review instead of sitting in **Replied**. The shipped **After-Hours Auto-Reply (Keep Unread)** starter uses this action.
* **Mark Conversation Read** marks the conversation **Read** as part of the Relay run. Add it to one-shot acknowledgement or auto-close flows (appointment confirmations, delivery pings) where no human review is needed after the Relay sends its reply.
If you use neither action, the default table above still applies.
***
### 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
|
**Steps to configure:**
1. Create a new Relay and choose **Message Received** as the trigger.
2. Under conditions, set **Active Hours** for each day to “Closed” or a select time span.
3. Toggle "Trigger outside of active hours" **ON**.
4. Add an **Action → Reply to message** and compose your message.
5. Add an **Action → Assign teammates to the conversation** and select teammates.
6. Add an **Action → Add labels to the conversation** and select labels.
7. 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?](#can-i-set-up-an-out-of-office-reply-for-just-one-person) in the FAQ.
When each teammate has their own line and their own out-of-office Relay, give each Relay a clear descriptive name so you can tell them apart in the list:
1. `Teammate 1 - Out of Office Autoreply`
2. `Teammate 2 - Weekend Autoreply`
3. `Teammate 3 - Vacation Autoreply`
***
### 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.
| **Trigger** | **Condition** | **Actions** |
| ---------------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| Message Received | Conversation is anonymous (contact not in directory) | Reply to message: “Thanks for texting us! What’s your first and last name so we know who to help?” |
**Steps to configure:**
1. Create a new Relay and choose **Message Received** as the trigger.
2. Under conditions, set **My phone number equals** to a connected phone line.
3. Set another condition for **Is anonymous conversation**.
4. Add an **Action → Reply to message** and compose your message.
5. Add an **Action → Assign teammates to the conversation** and select teammates.
6. Add an **Action → Add labels to the conversation** and select labels.
7. Toggle the Relay **ON**.
**Pro Tip:** Combine this Relay with [**Contact Imports**](/contacts/create-import) or [**Labels**](/inbox/labels) (e.g., "Unverified") to track and update new numbers later.
***
### 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.
| **Trigger** | **Condition** | **Actions** |
| ---------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| Message Received | Message contains keyword “SUPPORT” | Reply to message: “Thanks for reaching out to support. Please share any extra details, and we’ll jump in.” |
**Steps to configure:**
1. Create a new Relay and choose **Message Received** as the trigger.
2. Under conditions, set **My phone number equals** to a connected phone line.
3. Set another condition for **Message contains text SUPPORT**.
4. Add an **Action → Reply to message** and compose your message.
5. Add an **Action → Assign teammates to the conversation** and select teammates.
6. Add an **Action → Add labels to the conversation** and select labels.
7. Toggle the Relay **ON**.
**Tips for Success:**
* Keep keywords **short and memorable**. For example, `JOIN`, `HELP`, `SUPPORT`.
* Use **all caps** so the keyword stands out in the message body.
* Create separate keyword relays for each department (e.g., `BOOK` → Sales, `SUPPORT` → Service).
***
## Relays best practices
* **Start simple.** Test one Relay before scaling across teams.
* **Name clearly.** Use descriptive titles like `Teammate 1 - Delegation Relay` or `Region 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](#1a-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**](/messaging/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](#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 `AND` to `OR`, remove a filter) to test.
**Auto-reply sent multiple times**
* Add a **Delay** to your **Reply** action so back-to-back messages don’t both trigger an instant response.
**Assign/Label didn’t apply**
* Check the target user/label permissions.
* Remove long **Delays** while testing to see results immediately.
**Unexpected timing**
* Review **Active hours** and the **invert** setting.
* Check your workspace **timezone**.
# MessageDesk Relays Automation Overview
Source: https://docs.messagedesk.com/relays/overview
Learn what MessageDesk Relays are, how triggers and actions work, and see common SMS automation examples like auto-replies, follow-ups, and webhook events.
# How to automate with Relays
Relays are MessageDesk's workflow engine. They listen for **events**, evaluate **conditions**, and run **actions** so the right conversation reaches the right person at the right time.
**Desktop only:** Relays are currently only available on desktop. Mobile users can't access or manage Relays at this time.
**Permissions required:** By default, only **Admin** users have access to Relays. Admins can grant **Relay Management** permissions to other user roles via **Settings → Team Management**. Learn more: [Team Management](/settings/workspace-settings/team-management).
***
## Why use Relays?
* **Scale without chaos:** Auto-assign and auto-label to keep your inbox tidy as volume grows.
* **Respond faster:** Send **after-hours** and **first-touch** replies automatically.
* **Reduce busywork:** Route by **phone line**, **label**, or **teammate** so work starts in the right place.
* **Stay consistent:** Standardize rules so there are no missed handoffs.
***
## What you can do with Relays
1. **Out-of-office auto-reply:** Send an automatic response outside your business hours.
2. **Keyword replies:** Trigger a preset message when a contact texts a specific keyword.
3. **Identify unknown contacts:** Detect anonymous conversations and request name/phone/email automatically.
4. **Auto-assign:** Assign new conversations to one or more teammates as they arrive.
5. **Auto-label:** Apply labels (e.g., *Support*, *HR: New Hire*, *Region: West*) based on line, content, or rules.
6. **Voice call automations:** React to inbound calls on MessageDesk-owned numbers with the **Call Received** trigger. Label, assign, notify, or log the call in the same conversation thread.
7. **Read/Unread control:** Force a conversation to **Unread** (keep it queued for a teammate after an auto-reply) or to **Read** (close the loop on acknowledgement flows) as part of the Relay run.
8. **Custom Relays:** Combine your own conditions and actions to match your workflow.
All Relay templates are customizable. You can adjust wording, labels, assignees, active hours, and more.
***
## How Relays work (at a glance)
**Relays = Triggers → Conditions → Actions**
* **Triggers:** When it runs.\
There are nine triggers: **Message Received**, **Message Sent**, **Message Failed**, **Conversation Opened**, **Conversation Users Assigned**, **Conversation Label Applied**, **Conversation Label Removed**, **Comment Created**, and **Conversation Closed**. See [Relay building blocks](/relays/building-blocks#triggers) for the full reference.
* **Conditions:** Where/when it applies.\
*Examples:*\
• **My phone number equals** *Support*\
• **Is anonymous conversation** is **true**\
• **Is unassigned conversation** is **true**\
• **Active hours** with **Trigger outside of business hours** enabled
* **Actions:** What happens.\
*Examples:*\
• **Assign teammates to the conversation**\
• **Add labels to the conversation**\
• **Reply to message** (with templates, tags, media, and an optional Delay)\
• **Open the conversation** or **Close the conversation**
You can **pause** and **resume** any Relay without deleting it.
**Multiple Relays on one event.** When several Relays share the same trigger, **all matching Relays run** in the **Order** you set on the Relays list, top to bottom. Reorder Relays to control sequencing when conditions overlap. For example, run a specific keyword auto-reply before a generic after-hours reply. See [Order your Relays](/relays/create-edit#1a-order-your-relays).
For the full list of triggers, conditions, and actions (with the operator selector on **Conversation label equals** and the phone-line scoping model), see [Relay building blocks](/relays/building-blocks).
***
## Starter Relay templates
A few common patterns to get you started:
* **After-hours responder**\
*Trigger:* Message Received → *Conditions:* **Active hours** with **Trigger outside of business hours** enabled →\
*Actions:* **Reply to message** with "We'll reply at 8am PT. Reply STOP to opt out."
* **New lead triage**\
*Trigger:* Message Received → *Conditions:* **Is anonymous conversation** is true →\
*Actions:* **Reply to message** with an info-capture prompt (include "Reply STOP to opt out.") → **Add labels to the conversation** (*Lead*) → **Assign teammates to the conversation** (*Sales Queue*)
* **Phone-line-based routing**\
*Trigger:* Message Received → *Conditions:* **My phone number equals** *Dispatch Line* →\
*Actions:* **Assign teammates to the conversation** (*Dispatcher*) → **Add labels to the conversation** (*Route Change*)
See the full [Relay template library](/relays/templates) for ready-to-use configurations covering customer service, operations and routing, and webhook integrations. For a reference of every trigger, condition, and action, see [Relay building blocks](/relays/building-blocks).
**Auto-replies don't mark conversations as Read.** When a Relay sends a message, the conversation moves to **Replied** status (so it leaves the Unread filter), but it stays unreviewed until a teammate opens it in the Inbox. See [Relays and conversation status](/relays/create-edit#relays-and-conversation-status).
# Relay templates
Source: https://docs.messagedesk.com/relays/templates
A library of ready-made MessageDesk Relay templates: starter templates that ship in the app, plus an outcome-first library covering customer service, operations and routing, and webhook integrations.
# Relay templates
A library of ready-made Relay templates. Start from a template that ships in the app, or build from the outcome-first library below. Each library entry lists the **trigger**, any **conditions**, the **actions**, and a brief **why this works** note.
**Every template here is a starting point.** Adjust the wording, labels, assignees, active hours, and conditions to match your team's workflow. For step-by-step instructions on building a Relay from scratch, including how to use **AND/OR** between conditions, chain actions, and add delays, see [Create and edit a Relay](/relays/create-edit). For a full reference of the available [triggers, conditions, and actions](/relays/building-blocks), see the Relay building blocks page.
**Stacking templates on the same Trigger?** You can build more than one Relay on the same trigger. For example, an after-hours reply and a keyword reply both on **Message Received**. Set the **Order** on the Relays list so the more specific Relay runs first. All matching Relays run in Order. See [Order your Relays](/relays/create-edit#1a-order-your-relays).
***
## Starter templates that ship today
These starter templates are available from the Relays module in the app, grouped by outcome to match the gallery. Pick one, name it, and adjust the fields to match your workflow.
### Assign & Route Conversations
| Template | What it does | Underlying build |
| ---------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------ |
| **Assign to Teammate** | Assigns new conversations to a teammate | Message Received + Assign teammates |
| **Auto Assign to First Responder** | Assigns a conversation to the first teammate who replies | Message Sent + Is unassigned conversation + Assign to sender |
### Organize Conversations & Update Status
| Template | What it does | Underlying build |
| ---------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------- |
| **Label Conversation** | Auto-labels new conversations | Message Received + Add labels |
| **Unassign on Close** | Removes all teammates when a conversation closes | Conversation Closed + Teammate Assigned (Any teammate) + Remove all teammates |
### Respond to Messages
| Template | What it does | Underlying build |
| ---------------------------------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| **Out-of-Office (Away) Autoresponse** | Texts an autoresponse outside operating hours | Message Received + Active hours (inverted) + Reply to message |
| **After-Hours Auto-Reply (Keep Unread)** | Texts an autoresponse outside operating hours and keeps the thread Unread for morning review | Message Received + Active hours (inverted) + Reply to message + Mark Conversation Unread |
| **Respond to a Keyword** | Auto-replies when a keyword is texted in | Message Received + Message contains text + Reply to message |
| **Identify Unknown Contacts** | Asks anonymous contacts for their info | Message Received + Is anonymous conversation + Reply to message |
The **Custom Relay** (a blank canvas) and **Send Webhook** starters are also available. Use Custom Relay to build from scratch, or Send Webhook to push events to an endpoint.
***
## Foundational templates
The outcomes below are the building blocks that most teams start from. Each entry lists the **trigger**, any **conditions**, the **actions**, and a short "Why it works." Adjust wording, labels, assignees, and scoping to fit your team.
**Confirmed vs. pending.** The Add Action menu can vary by trigger. The templates below cover only the combinations confirmed to appear in the app today. Three additional foundational templates (on **Conversation Opened**, **Comment Created**, and **Conversation Label Applied**) are staged for a follow-up once their action menus land.
### Whoever answers a lead first owns the follow-up
| Field | Value |
| -------------- | -------------------------- |
| **Trigger** | Message Sent |
| **Conditions** | Is unassigned conversation |
| **Actions** | Assign to sender |
**Why it works:** The first teammate to reply gets assigned. The conversation is no longer unassigned, so later replies from others don't steal it. Follow-up never lands in an unclaimed pile. This is the outcome behind the shipped **Auto Assign to First Responder** starter.
***
### Clean reset and system sync every time a thread closes
| Field | Value |
| -------------- | ------------------------------------------------------------------------------------------------------- |
| **Trigger** | Conversation Closed |
| **Conditions** | None (or scope to a line) |
| **Actions** | Remove all teammates from the conversation → Add labels to the conversation (`Resolved`) → Send webhook |
**Why it works:** Closing resets assignment in one step and pushes the close event to your other systems. This extends the shipped **Unassign on Close** starter with a `Resolved` label and an outbound webhook so your CRM, data warehouse, or ticketing tool stays in sync.
***
### One rule that routes an entire namespace of labels
| Field | Value |
| -------------- | ------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Conversation label equals, operator **startsWith**, value `Region:` |
| **Actions** | Send webhook → Add labels to the conversation (`Routed`) |
**Why it works:** The **Conversation label equals** condition is a matcher, not a fixed equality check. A single `startsWith "Region:"` rule catches every label in a namespace at once (`Region:North`, `Region:South`, `Region:West`, etc.), so you avoid maintaining one Relay per region. See the operator-selector Note in [Relay building blocks](/relays/building-blocks) for the full operator list.
***
### Catch every text that fails to deliver
| Field | Value |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Failed |
| **Conditions** | None (or scope to a line with **My phone number equals**) |
| **Actions** | Add labels to the conversation (`Delivery failed`) → Open the conversation → Assign teammates to the conversation (an owner) → Send webhook (alert a channel) |
**Why it works:** A failed text is invisible today because the sender assumes it went through. This surfaces every failure immediately, reopens and flags the thread, and puts it on someone to follow up. Most valuable for time-sensitive dispatch, staffing, and safety messages.
***
### Branch on the reason a message failed
| Field | Value |
| -------------- | --------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Failed |
| **Conditions** | Message failure contains text (match the carrier error text for a temporary or unreachable failure) |
| **Actions** | Add labels to the conversation (`Retry later`) → Send webhook |
**Why it works:** Not all failures are equal, so matching on the failure text lets you retry what's worth retrying and clean up what isn't. Build a second Relay on the same trigger that matches a permanent-failure reason and labels it `Bad number` instead. Use provider-agnostic error wording in your matches so the Relay keeps working if the underlying carrier or provider changes.
**Verify before enabling.** The **Message failure contains text** condition ships with the v2026.07.15 release. If your workspace doesn't see it on the Message Failed trigger yet, hold this template until it appears.
***
### Out-of-office for one teammate, even on a shared line
| Field | Value |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Active hours (with **Trigger outside of business hours** enabled), and **Teammate Assigned** set to the teammate who's out. Optionally add **Is unassigned conversation** with **OR** to cover brand-new threads. |
| **Actions** | Reply to message ("I'm out of the office and will follow up when I'm back. Reply STOP to opt out.") |
**Why it works:** The auto-reply fires only for the conversations owned by the person who's out. One teammate can be away without silencing the whole shared line.
***
### Leave an automatic handoff note for the team
| Field | Value |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Conversation Users Assigned |
| **Conditions** | None (or scope to a line) |
| **Actions** | Send Comment (an internal note with context for the new owner, for example "Assigned by Relay. Customer texted after hours, please follow up first thing.") |
**Why it works:** The new owner gets context as an internal comment the moment they're assigned, and nothing goes to the contact.
***
### When a label comes off, sync the change
| Field | Value |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Conversation Label Removed |
| **Conditions** | Conversation has label (or scope by line with **My phone number equals**) |
| **Actions** | Send webhook (update the downstream system) → Assign teammates to the conversation (as needed) → Add labels to the conversation (as needed) |
**Why it works:** A label coming off often signals a state change. Firing on removal keeps your CRM or reporting in sync automatically. **Remove labels isn't an available action on this trigger**, so this Relay reacts to a removal rather than performing one.
***
### Log and route inbound calls to the right owner
| Field | Value |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Call Received |
| **Conditions** | None (or **My phone number equals** to scope to a specific line) |
| **Actions** | Add labels to the conversation (`Inbound call`) → Assign teammates to the conversation (line owner or on-call) → Send Comment (context for the assignee) → Send webhook (notify Slack, Teams, or your CRM) |
**Why it works:** Voice activity now lives alongside SMS in the same conversation thread. Firing on the call itself gets an owner assigned, drops an internal note for context, and pings your notification tool the moment the phone rings, without waiting for a follow-up text.
**Call Received works on MD-owned numbers only.** It doesn't fire for Twilio-connected numbers, Telegorithm numbers, or hosted (text-enabled) numbers. **Reply to message** isn't available on this trigger. See [Call Received actions](/relays/building-blocks#actions-on-the-new-triggers) for the full action list.
***
## Vertical library
The templates below are grouped by industry and by common cross-industry use cases.
Every template uses the canonical trigger, condition, and action names. See [Relay building blocks](/relays/building-blocks) for the full reference.
***
### Construction and dispatch
#### No job stalls because one supervisor's phone went dark
| Field | Value |
| -------------- | ------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | My phone number equals (the shared main or dispatch line) |
| **Actions** | Assign teammates to the conversation (crew or job coordinator) → Add labels to the conversation (job or crew) |
**Why it works:** Inbound texts land in a shared Inbox with an owner and a job label. Threads stay covered when a supervisor is on a site or out.
#### Subcontractor and supplier texts never sit unclaimed
| Field | Value |
| -------------- | ------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Is unassigned conversation |
| **Actions** | Add labels to the conversation (`Needs owner`) → Send webhook |
**Why it works:** Anything that slips past routing gets flagged instead of aging in the queue.
***
### Logistics and trucking
#### Route every driver text to the right dispatcher, no shared handset required
| Field | Value |
| -------------- | ---------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | My phone number equals (dispatch line). Optionally add Conversation label equals a region. |
| **Actions** | Add labels to the conversation (region or load type) → Assign teammates to the conversation (that region's dispatcher) |
**Why it works:** Every dispatcher sees every message in one Inbox, and texts self-sort by region. That replaces the single shared phone.
#### Off-duty driver messages still get an instant acknowledgement
| Field | Value |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Active hours (with **Trigger outside of business hours** enabled) |
| **Actions** | Reply to message ("Dispatch is closed. Text URGENT for the on-call line. Reply STOP to opt out.") → Add labels to the conversation (`After-hours`) |
**Why it works:** An off-hours text gets an immediate acknowledgement and waits for dispatch in the morning.
#### Policy and route acknowledgements get tracked, not chased
| Field | Value |
| -------------- | -------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Message contains text `ACK` |
| **Actions** | Add labels to the conversation (`Acknowledged`) → Send webhook |
**Why it works:** Pair a broadcast with a keyword reply, and MessageDesk labels and logs every acknowledgement automatically.
***
### Field operations
#### Safety and incident texts escalate the second they land
| Field | Value |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Message contains text `incident` |
| **Actions** | Reply to message ("Received. A supervisor is being notified now.") → Assign teammates to the conversation (safety lead) → Add labels to the conversation (`Incident`) → Send webhook (alert the safety channel) |
**Why it works:** A field emergency routes to the safety lead and alerts the team in one step.
#### Rig recruiting stops living on personal phones
| Field | Value |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Message contains text `available` |
| **Actions** | Assign teammates to the conversation (recruiter) → Add labels to the conversation (`Available`) → Send webhook (push to your ATS) |
**Why it works:** MessageDesk captures every candidate availability reply, assigns an owner, and pushes it to your system. Nobody gets called twice.
#### Every field message is retained and auditable
| Field | Value |
| -------------- | --------------------------------------------------------- |
| **Trigger** | Message Received (build a matching Relay on Message Sent) |
| **Conditions** | None (or scope to field lines) |
| **Actions** | Send webhook (to your retention or audit store) |
**Why it works:** Inbound and outbound field messages stream to your system of record. MessageDesk facilitates 10DLC registration as your CSP and honors opt-outs at the workspace level.
***
### Staffing and recruiting
#### Every candidate reply gets claimed by a recruiter
| Field | Value |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Message contains text `yes` |
| **Actions** | Assign teammates to the conversation (staffing coordinator) → Add labels to the conversation (`Shift response`) → Send webhook (sync to your ATS or CRM) |
**Why it works:** After a shift-fill text, replies route to the coordinator. The fastest responder gets placed first, and MessageDesk logs the reply.
#### Applicant first-touch that never goes cold
| Field | Value |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Message contains text `apply` |
| **Actions** | Reply to message ("Thanks for your interest. Here is the quick application: \[link]. Reply STOP to opt out.") → Assign teammates to the conversation (recruiter) → Add labels to the conversation (`Applicant`) |
**Why it works:** An instant reply with the application link plus an assigned recruiter keeps the pipeline warm.
#### Unsaved candidate numbers get named automatically
| Field | Value |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Is anonymous conversation |
| **Actions** | Reply to message ("Thanks for reaching out. What is your first and last name?") → Add labels to the conversation (`Unverified`) |
**Why it works:** Capturing the name up front keeps the directory clean and every thread attributable.
***
### Professional services
#### Website-to-text intake lands in a shared, trackable inbox
| Field | Value |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Is new conversation |
| **Actions** | Reply to message ("Thanks for reaching out. What is your name and a short note on what you need help with?") → Assign teammates to the conversation (intake coordinator) → Add labels to the conversation (`Intake`) → Send webhook (create the record in your CRM) |
**Why it works:** The first inbound text runs intake and creates a trackable record.
#### Billing questions route straight to AR
| Field | Value |
| -------------- | ------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Message contains text `invoice` |
| **Actions** | Assign teammates to the conversation (billing) → Add labels to the conversation (`Billing`) |
**Why it works:** Money questions bypass the general queue.
***
### More industries and use cases
The patterns below cover common use cases across additional industries.
#### Automotive service: a shared department inbox
| Field | Value |
| -------------- | ------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | My phone number equals (the service department line) |
| **Actions** | Assign teammates to the conversation (advisor) → Add labels to the conversation (`Service`) |
**Why it works:** Status texts stop landing on one advisor's phone. Any advisor can pick up the thread, and replies can carry photos and invoice links.
Pair this with an inverted **Active hours** Relay on the same line that uses **Reply to message** to acknowledge after-hours questions and set expectations for the morning.
#### Financial advisors: broadcast replies come back to a tracked inbox
| Field | Value |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received (build a matching Relay on Message Sent) |
| **Conditions** | None (or scope to the advisor line) |
| **Actions** | Assign teammates to the conversation (the advisor) → Add labels to the conversation (`Client`) → Send webhook (to your recordkeeping system) |
**Why it works:** After a broadcast, replies land with an owner and both directions stream to your records.
#### Home services and emergency trades: turn an after-hours text into tomorrow's job
| Field | Value |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Trigger** | Message Received |
| **Conditions** | Active hours (with **Trigger outside of business hours** enabled), My phone number equals (jobs or emergency line) |
| **Actions** | Reply to message ("We received your message and will follow up first thing. If this is an active emergency, call \[number]. Reply STOP to opt out.") → Add labels to the conversation (`After-hours`) → Assign teammates to the conversation (on-call coordinator) |
**Why it works:** MessageDesk captures and routes the lead even when the office is dark.
***
### Support and sales
#### A texted keyword menu that routes itself
| Field | Value |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Message contains text `support` (build parallel Relays for `pricing` and `sales`) |
| **Actions** | Reply to message (matching acknowledgement) → Assign teammates to the conversation (matching team) → Add labels to the conversation (matching topic) |
**Why it works:** One number handles support, pricing, and sales, each with its own reply and owner.
Keep a keyword-free catch-all Relay ordered **last** so any message that doesn't match a keyword still gets a graceful reply and an owner. Instead of relying only on ordering, add the **Stop Processing** action to each matched Relay so a specific match stops the catch-all from also firing on the same message.
***
## Customer service
### 1. After-hours auto-reply
| Field | Value |
| ------------- | ------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Condition** | Active hours: set your business hours, then toggle **Trigger outside of business hours** to invert the window |
| **Actions** | **Reply to message:** "We'll get back to you at 8am. Reply STOP to opt out." → **Mark Conversation Unread** |
**Why this works:** Inverting the Active hours window means the Relay only fires when an inbound message lands **outside** your business hours, so customers always get an immediate acknowledgement. The STOP language keeps you compliant with carrier opt-out requirements. The **Mark Conversation Unread** action (new in v2026.08.04) forces the thread back into the **Unread** filter after the auto-reply so a teammate still picks it up in the morning.
**This build matches the shipped After-Hours Auto-Reply (Keep Unread) starter.** Without the **Mark Conversation Unread** action, a Relay reply moves the conversation to **Replied** and out of the Unread filter. Including it forces the thread back to Unread so the customer's message is still queued for human review. See [Relays and conversation status](/relays/create-edit#relays-and-conversation-status).
Add a **Delay** to the Reply action to avoid sending repeat auto-replies inside a tight back-and-forth.
***
### 2. First-touch reply for anonymous contacts
| Field | Value |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Is anonymous conversation = **true** |
| **Actions** | **Reply to message:** "Thanks for texting us! What's your first and last name so we know who to help? Reply STOP to opt out." → **Add labels to the conversation:** `Lead` |
**Why this works:** New inbound texts from unsaved numbers come in as **anonymous conversations**. A first-touch reply captures the contact's name while it's fresh, and the `Lead` label gives sales/intake a single filter to work from. See [Anonymous, opted out & blocked](/contacts/anonymous-opt-out-blocked) for how anonymous status is determined.
***
### 3. Opted-out conversation handler
| Field | Value |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | **Message contains text** = `STOP` (catches the opt-out keyword itself), or **Conversation label equals** `Opted Out` (routes on a label applied earlier in your workflow) |
| **Actions** | **Add labels to the conversation:** `Opted Out` → **Assign teammates to the conversation:** support queue |
**Why this works:** There's no built-in "contact is opted out" condition on the trigger, so build the handler from conditions that do exist. Match the STOP keyword on the inbound message itself, or route on an `Opted Out` label that a keyword Relay, a teammate, or an integration applied upstream. Labeling the thread keeps it visible to compliance and support. Routing it to your support queue ensures someone confirms you honored the customer's request. Once you apply `Opted Out`, downstream filters and Relays can avoid touching that contact.
MessageDesk automatically blocks sending to **opted-out contacts** at the workspace level. This Relay is for **internal awareness and audit**, not for blocking the outbound message itself.
***
## Operations and routing
### 4. Phone line routing
| Field | Value |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Condition** | **My phone number equals** = the specific connected phone line |
| **Actions** | **Assign teammates to the conversation:** designated teammate(s) → **Add labels to the conversation:** line-specific label (e.g., `Front Desk`, `Sales Line`) |
**Why this works:** Teams running multiple phone lines (Front Desk, Support, Sales) want every inbound message on that line to land with the right owner immediately. Adding a line-specific label also gives you ready-made filtered views in the Inbox.
***
### 5. Keyword-based routing
| Field | Value |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Condition** | **Message contains text** = `HELP` (or `SUPPORT`, `BILLING`, etc.) |
| **Actions** | **Reply to message:** "Got it. A support teammate will be with you shortly." → **Assign teammates to the conversation:** support team |
**Why this works:** Keyword routing is fast triage: the customer gets an instant acknowledgement and the right team picks up the thread without manual sorting. Combine with **My phone number equals** if you want the keyword to behave differently on different lines.
Stack multiple keyword Relays (one per keyword) and use a default Relay without a keyword condition as a catch-all. Add the **Stop Processing** action to each keyword Relay so a specific match stops the catch-all from also firing on the same message, instead of relying only on ordering.
***
### 6. Auto-assign (round-robin note)
| Field | Value |
| -------------- | --------------------------------------------------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | Optional: **My phone number equals** a specific line, or **Is unassigned conversation** |
| **Actions** | **Assign teammates to the conversation:** teammate |
**Why this works:** A single Relay assigns every inbound conversation to one teammate. **True round-robin distribution requires multiple Relays**, one per teammate, each segmented by a different **line** or **label** condition so they don't all fire on the same message. There isn't a built-in "rotate to next teammate" action today. This multi-Relay pattern is the supported workaround.
Pair this with a `Triage` label and an Inbox filter on **Assignee = Unassigned** so anything that slips through is easy to spot.
***
### 7. Assign unassigned conversations to whoever replies first
| Field | Value |
| ------------- | ----------------------------------------- |
| **Trigger** | Message Sent |
| **Condition** | **Is unassigned conversation** = **true** |
| **Actions** | **Assign to sender** |
**Why this works:** When a shared Inbox has no owner on a thread, the first teammate to reply usually should own the follow-up. This Relay watches outbound messages, checks that no one's assigned yet, and assigns the conversation to whoever hit send. New inbound messages on the same thread then route to that teammate by default.
**Ships as a template:** This template is available as the **Auto Assign to First Responder** starter from the Relays module. Install it as-is or use the fields above to build it yourself.
The **Assign to sender** action is only available with the **Message Sent** trigger.
Drop the **Is unassigned conversation** condition if you want the sender to always take ownership, even on threads someone else was already assigned to.
***
### 8. Notify the new assignee on assignment
| Field | Value |
| -------------- | --------------------------------------------------------- |
| **Trigger** | Conversation Users Assigned |
| **Conditions** | None (or scope by line/label) |
| **Actions** | **Send webhook** → your Slack/Teams/notification endpoint |
**Why this works:** MessageDesk's in-app notifications reach assignees inside the product. Teams that live in Slack or Teams want a ping in their chat tool the moment a conversation lands in their queue. Fire a webhook on **Conversation Users Assigned** and route the payload to your notifier of choice.
Pair with **Add labels to the conversation** (for example, `Handoff`) so the receiving teammate can filter their Inbox to just newly assigned threads.
***
### 9. Re-triage on reopen
| Field | Value |
| -------------- | ----------------------------------------------------------------------------------------------- |
| **Trigger** | Conversation Opened |
| **Conditions** | None (or scope by line/label) |
| **Actions** | **Remove all teammates from the conversation** → **Add labels to the conversation:** `Reopened` |
**Why this works:** When a closed conversation gets reopened (a customer replies days later, or a teammate reopens for follow-up), the original assignees may no longer be the right owners. Clearing assignees and applying a `Reopened` label sends the thread back through your normal triage so it gets picked up by the right person.
Pair this with a **Message Received** Relay that auto-assigns based on line or keyword. Reopens get reset here; the next inbound gets routed there.
***
## Webhooks and integrations
Webhook actions require a configured webhook endpoint and signing secret. Set those up in [**Settings → Developer Tools**](/settings/workspace-settings/developer-tools) before turning on the Relays below. See [Send Webhook](/relays/webhooks) for the full payload format, headers, and signature validation.
### 10. Push new inbound message to an external system
| Field | Value |
| -------------- | ------------------------------------------- |
| **Trigger** | Message Received |
| **Conditions** | None (or scope by line/keyword) |
| **Actions** | **Send webhook** → your configured endpoint |
**Why this works:** Streams every new inbound text to your CRM, data warehouse, ticketing tool, or notification service. Pair with **My phone number equals** to limit the firehose to a specific line, or add **Message contains text** to forward only certain keywords.
***
### 11. Notify an external system on conversation close
| Field | Value |
| -------------- | ----------------------------------------------------------------------------------------------- |
| **Trigger** | Conversation Closed |
| **Conditions** | None (or scope by line/label) |
| **Actions** | **Send webhook** → your configured endpoint (plus any close-out actions you want to run in-app) |
**Why this works:** Use the **Conversation Closed** trigger directly. It fires whenever a teammate closes a conversation, so you can push the close event straight into a CRM, ticketing tool, or data warehouse. Add **My phone number equals** or **Conversation label equals** if you only want to forward closes from certain lines or queues. No label workaround needed.
***
### 12. Reset assignees on close
| Field | Value |
| -------------- | ---------------------------------------------- |
| **Trigger** | Conversation Closed |
| **Conditions** | **Teammate Assigned** (Any teammate) |
| **Actions** | **Remove all teammates from the conversation** |
**Why this works:** When a conversation closes, the previous assignees usually shouldn't stay attached. Reopens or new inbound messages on the same thread often need fresh triage. The **Teammate Assigned** condition (set to Any teammate) makes sure the Relay only runs when someone's actually assigned. The **Remove all teammates from the conversation** action clears every assignee in one step. The next inbound lands unassigned, and your normal auto-assign Relays can route it.
**Ships as a template:** This template is available as the **Unassign on Close** starter from the Relays module. Install it in one click, or build it from the fields above.
Pair this with a **Message Received** Relay that auto-assigns based on line or keyword. Closed threads get reset here; the next inbound gets routed there.
***
### 13. Auto-close after acknowledgement
| Field | Value |
| -------------- | -------------------------------------------------------------------------------------------------- |
| **Trigger** | Message Sent |
| **Conditions** | Optional: **My phone number equals** a specific line, or match an acknowledgement template/keyword |
| **Actions** | **Close the conversation** |
**Why this works:** One-shot confirmation flows (appointment confirmations, delivery notifications, "on my way" pings) don't need to stay open in the Inbox after the outbound message goes out. The **Close the conversation** action closes the thread as soon as the confirmation is sent, keeping the Inbox focused on conversations that still need a human.
MessageDesk handles reopens automatically: a new inbound message on a closed conversation reopens the thread and fires any **Conversation Opened** Relays you've configured (see [Template 9](#9-re-triage-on-reopen)).
***
## See also
* [Relay building blocks](/relays/building-blocks): reference for all triggers, conditions, and actions
* [Create and edit a Relay](/relays/create-edit): step-by-step Relay building, including AND/OR conditions, delays, and active hours
* [Send Webhook](/relays/webhooks): payload structure, signature validation, and retry behavior
* [Developer Tools](/settings/workspace-settings/developer-tools): configure your webhook endpoint and signing secret
* [Relays overview](/relays/overview): concepts and examples
# Send Webhook Relay Action Setup
Source: https://docs.messagedesk.com/relays/webhooks
Configure the Send Webhook relay action to push MessageDesk SMS events to your endpoints. Setup, payload structure, headers, and retry behavior explained.
# Send Webhook Relay Action
Use the **Send Webhook** action to send MessageDesk events directly to your webhook endpoints. This lets you integrate MessageDesk with external systems, trigger custom workflows, and build custom Relays.
**Developer Tools required:** Before using webhooks, you'll need to configure your webhook endpoint and generate a signing secret in [**Settings → Developer Tools**](/settings/workspace-settings/developer-tools). The **Developer** feature permission gates this configuration. Managers and Operators need **Editor** or **Owner** on **Developer** to add an endpoint or rotate the signing secret. See [Team Management](/settings/workspace-settings/team-management).
***
## Setting up webhooks
### 1. Configure your webhook endpoint
Navigate to [**Settings → Developer Tools**](/settings/workspace-settings/developer-tools) to:
* Add your webhook endpoint URL (must be HTTPS and reachable from the public internet)
* Generate a signing secret for secure webhook validation
* Rotate the signing secret when needed
### 2. Add the Send Webhook action to a Relay
When creating or editing a Relay:
1. Choose your **Trigger** (e.g., Message Received)
2. Add any **Conditions** to control when the webhook fires
3. Add the **Send Webhook** action
4. Select your configured webhook endpoint
The webhook will fire whenever the Relay conditions are met.
**Quick start with templates:** When you visit the Relays module, you'll find pre-built **Send Webhook** templates to help you get started quickly. These templates include common webhook configurations that you can customize for your needs.
***
## Webhook payloads
All webhook payloads from MessageDesk are delivered as **Event** objects. Each Event contains the data relevant to the specific trigger.
The event name will match the trigger you configured on your relay.
### Example: MessageReceived event
When a message is received, the webhook payload includes a `Message` object:
```json theme={null}
{
"id": "01KAE88YX393N7SAE200000000",
"object": "Event",
"name": "MessageReceived",
"workspaceId": "01K6N5WEYHS5N0796000000000",
"createdAt": "2025-11-19T14:28:39.459465Z",
"dataType": "Message",
"data": {
"id": "01KAE88X48BS8D8D2D00000000",
"object": "Message",
"workspaceId": "01K6N5WEYHS5N0796000000000",
"conversationId": "01K6X3R5NNWKJCSZQY00000000",
"communicationType": "sms",
"to": [
"+17025550000"
],
"from": "+17025551111",
"text": "The quick brown fox jumps over the lazy dog.",
"media": [
"https://example.com"
],
"outbound": false,
"createdAt": "2025-11-19T14:28:39.459465Z"
}
}
```
### Example: MessageSent event
When a message is sent from your workspace, the webhook payload includes a `Message` object with `outbound: true`:
```json theme={null} theme={null}
{
"id": "01KAE88YX393N7SAE200000000",
"object": "Event",
"name": "MessageSent",
"workspaceId": "01K6N5WEYHS5N0796000000000",
"createdAt": "2026-07-09T20:14:11.459465Z",
"dataType": "Message",
"data": {
"id": "01KAE88X48BS8D8D2D00000000",
"object": "Message",
"workspaceId": "01K6N5WEYHS5N0796000000000",
"conversationId": "01K6X3R5NNWKJCSZQY00000000",
"communicationType": "sms",
"to": [
"+17025551111"
],
"from": "+17025550000",
"text": "Thanks for reaching out — a teammate will follow up shortly.",
"media": [],
"outbound": true,
"createdAt": "2026-07-09T20:14:11.459465Z"
}
}
```
### Example: CommentCreated event
When a teammate posts an internal [comment](/inbox/comments-mentions) on a conversation, the webhook payload includes a `Comment` object:
```json theme={null}
{
"id": "01KAE88YX393N7SAE200000000",
"object": "Event",
"name": "CommentCreated",
"workspaceId": "01K6N5WEYHS5N0796000000000",
"createdAt": "2026-07-07T18:15:22.459465Z",
"dataType": "Comment",
"data": {
"id": "01KAE88X48BS8D8D2D00000000",
"object": "Comment",
"workspaceId": "01K6N5WEYHS5N0796000000000",
"conversationId": "01K6X3R5NNWKJCSZQY00000000",
"authorId": "01K6N5WEYHS5N0796111111111",
"text": "Heads up — this customer needs a callback today.",
"createdAt": "2026-07-07T18:15:22.459465Z"
}
}
```
***
## Validating data integrity
Your webhook URL is publicly accessible, so you should treat all incoming requests as untrusted. Each webhook request sent by MessageDesk includes an `X-MessageDesk-Signature` header.
### How signature validation works
The signature is generated using the request body and your API secret:
1. MessageDesk computes a Base64-encoded HMAC-SHA256 hash of the raw request body using your API secret as the key
2. This hash is sent in the `X-MessageDesk-Signature` header
3. You compute the same hash on your end and compare it to verify authenticity
### Example validation code
```javascript theme={null}
const crypto = require('crypto');
const apiSecret = 'YOUR_API_SECRET';
// `rawBody` MUST be the exact request body bytes/string received on the
// request, not a parsed-and-re-serialized JSON object. Re-serializing can
// reorder keys or change whitespace, which will invalidate the signature.
// In Express, use `express.raw({ type: 'application/json' })` and read
// `req.body` as a Buffer/string. In a raw Node.js handler, concatenate
// the request stream chunks yourself.
function validateMessageDeskSignature(headers, rawBody) {
// Capture the X-MessageDesk-Signature header
const signature = headers['x-messagedesk-signature'];
// Compute HMAC SHA256 over the raw request body
const hash = crypto.createHmac('sha256', apiSecret)
.update(rawBody)
.digest('base64');
return crypto.timingSafeEqual(Buffer.from(hash), Buffer.from(signature));
}
```
**Always validate signatures:** Never trust webhook data without verifying the `X-MessageDesk-Signature` header matches your computed hash.
***
## Use cases
* **CRM integration:** Sync new messages to your CRM automatically
* **Custom notifications:** Send alerts to Slack, Discord, or other platforms
* **Data warehousing:** Stream conversation data to your analytics platform
* **Workflow automation:** Trigger custom business logic based on MessageDesk events
* **Third-party integrations:** Connect MessageDesk to tools that don't have native integrations
***
## Best practices
* **Validate all requests:** Always verify the `X-MessageDesk-Signature` header
* **Handle retries gracefully:** Implement idempotency to handle duplicate webhook deliveries
* **Respond quickly:** Return a 2xx status code within 5 seconds to acknowledge receipt
* **Use HTTPS:** Only configure webhook endpoints that use HTTPS
* **Monitor failures:** Set up alerts for webhook delivery failures
* **Test thoroughly:** Use test events to verify your webhook handler before going live
***
## Troubleshooting
**Webhook not firing**
* Verify the Relay is **On** (not paused)
* Check that your webhook endpoint is configured in [**Developer Tools**](/settings/workspace-settings/developer-tools)
* Confirm the Relay conditions are being met
**Signature validation failing**
* Ensure you're using the correct signing secret from [**Developer Tools**](/settings/workspace-settings/developer-tools)
* Verify you're hashing the raw request body (not parsed JSON)
* Check that you're comparing the signature using a timing-safe comparison
**Webhook endpoint not receiving requests**
* Confirm your endpoint is publicly accessible via HTTPS
* Check your server logs for incoming requests
* Verify your firewall allows incoming connections
***
# MessageDesk Keyboard Shortcuts Reference
Source: https://docs.messagedesk.com/resources/keyboard-shortcuts
Speed up SMS workflows with the full list of MessageDesk keyboard shortcuts: navigation, conversation actions, search, compose, and inbox view commands.
# Keyboard shortcuts in MessageDesk
Work faster with built-in shortcuts. MessageDesk detects your platform and shows the right modifier keys in tooltips (⌘ on macOS, **Ctrl** on Windows/Linux).
***
## Quick reference
| Action | macOS | Windows/Linux | Where it works |
| ------------------------- | ------------------------------- | ------------------------------- | ---------------------------------------------- |
| **Open Quick Search** | **⌘ K** | **Ctrl K** | Anywhere in the app (desktop) |
| **Send message** | **⌘ Enter** | **Ctrl Enter** | Message compose forms & message content fields |
| **Paste media/text** | **⌘ V** | **Ctrl V** | While composing a message |
| **List: next / previous** | **↓** or **J** / **↑** or **K** | **↓** or **J** / **↑** or **K** | Conversation lists and similar lists |
| **List/search: select** | **Enter** | **Enter** | Focused list item or search result |
***
## Global shortcut
* **Quick Search:** **⌘ K** (macOS) or **Ctrl K** (Windows/Linux)\
Opens [Quick Search](/search/quick-search) from anywhere on desktop. Quick Search returns **contacts and conversations**.
Press **Enter** on a result to open [Advanced Search](/search/advanced-search) at that result, where you can also search messages, comments, and labels.
***
## Message composition
* **Send message:** **⌘ Enter** / **Ctrl Enter**\
Sends the current message when your cursor is in a **message compose** field.\
You'll see a tooltip like **"Send \[⌘ Enter]"** or **"Send \[Ctrl Enter]"**.
* **Paste media or text:** **⌘ V** / **Ctrl V**\
Pastes clipboard content while composing; supports both text and media.
***
## Navigation
* **Lists (conversations, results, etc.):**
* Next item: **↓** or **J**
* Previous item: **↑** or **K**
* Select/open: **Enter**
* **Search results:**
* Move through results: **↑ / ↓**
* Open highlighted result: **Enter**
# MessageDesk Plans, Pricing & Features
Source: https://docs.messagedesk.com/resources/pricing
Compare MessageDesk plans and pricing: free tier, paid tiers, message volume limits, included features, and add-ons for shared SMS team inboxes.
# MessageDesk plans overview
MessageDesk plans scale with your business needs. Pick a plan that works for your team. No hidden fees, no hassle.
## Plan comparison
Visit our [website pricing page](https://www.messagedesk.com/pricing) for up-to-date information and additional plan details.
Learn more about managing your MessageDesk subscription and billing preferences.
### Pricing
Per-user, per-month pricing. Save when you choose yearly billing.
| Plan | Monthly billing (per user / month) | Yearly billing (per user / month) | Seat minimum | Best for |
| ---------- | ---------------------------------- | --------------------------------- | ---------------- | --------------------------------------------------------- |
| Team | \$39 | \$29 | **3 user seats** | Teams that need the power of a shared team SMS inbox |
| Pro | \$99 | \$79 | No minimum | Teams that need to automate, integrate, & scale messaging |
| Enterprise | [Let's Chat](/contact-us) | [Let's Chat](/contact-us) | Custom | Larger organizations with more advanced needs |
* **Monthly plans:** Annual contract billed monthly (Team and Pro).
* **Yearly plans:** Annual contract billed annually for extra savings (Team, Pro, and Enterprise).
* **Seat minimums:** The **Team** plan needs at least **3 user seats**. The **Pro** plan has no seat minimum.
All prices in USD. Applicable taxes are added at checkout.
#### Team plan highlights
* Per user seat pricing (**3 user seat minimum**)
* Connect up to 48 phone numbers
* Unlimited 1-on-1 SMS texting
* Carrier registration included
* Label, assign, comment & mention
#### Pro plan highlights
Everything in Team, plus:
* No user seat minimum
* Unlimited 100-person text broadcasts
* Custom roles & permissions
* Multi-line opt-out management
* Relays
* Zapier integration
#### Enterprise plan highlights
Everything in Pro, plus:
* Priority support
* Multiple inboxes & workspaces
* Custom SSO
* Custom integrations
* Data & analytics dashboards
### Features by plan
| Feature | Team | Pro | Enterprise |
| ------------------------------------ | ----------------- | ----------------- | ---------------- |
| **Core messaging** | | | |
| Unlimited 1-on-1 SMS | Yes | Yes | Yes |
| Unlimited 100-person text broadcasts | No | Yes | Yes |
| Shared team inbox | Yes | Yes | Yes |
| Group texting | Yes | Yes | Yes |
| Media & attachments | Yes | Yes | Yes |
| Schedule messages | Yes | Yes | Yes |
| **Collaboration** | | | |
| Comments & mentions | Yes | Yes | Yes |
| Assign conversations | Yes | Yes | Yes |
| Label conversations | Yes | Yes | Yes |
| **Contacts & management** | | | |
| Block contacts | Yes | Yes | Yes |
| Contact & data import | Yes | Yes | Yes |
| Opt-out management | Yes | Yes | Yes |
| Multi-line opt-out | No | Yes | Yes |
| **Phone numbers** | | | |
| Connect up to 48 phone numbers | Yes | Yes | Yes |
| Twilio integration | Yes | Yes | Yes |
| **Automation & integrations** | | | |
| Relays | No | Yes | Yes |
| Zapier integration | No | Yes | Yes |
| Webhooks (outbound) | No | Yes | Yes |
| **Permissions & security** | | | |
| Roles & permissions | Yes | Yes | Yes |
| Custom roles & permissions | No | Yes | Yes |
| Custom SSO | No | No | Yes |
| SOC 2 report | Talk to Sales | Talk to Sales | Talk to Sales |
| **Enterprise features** | | | |
| Analytics dashboards | No | No | Yes |
| Custom integrations | No | No | Yes |
| Multiple inboxes & workspaces | No | No | Yes |
| **Mobile & platform** | | | |
| Mobile apps (iOS & Android) | In Beta | In Beta | In Beta |
| **Support** | | | |
| Customer support | Docs, email & SMS | Docs, email & SMS | Enhanced support |
## Why our pricing model works
Text messaging for teams shouldn't feel like solving a math problem. Other SMS inboxes hide fees, charge per message, charge per phone line, or sell bundles of "credits" you don't need.
MessageDesk uses one flat, per-user rate.
| MessageDesk | Other SMS inboxes |
| ------------------------------------------------------ | ------------------------------------------- |
| Unlimited 1-on-1 SMS texting | "Credit-based" texting |
| No overage charges | Additional overage charges |
| No fees for added phone lines | Pricing per phone line |
| Keep your voice provider | Provider lock-in |
| No setup fees | Additional setup fees |
| No hidden charges | Hidden charges |
| Cancel anytime | Cancellation fees |
| Low or no seat minimums (3 seats on Team, none on Pro) | High minimum commitments |
| Carrier registration included | Additional charges for carrier registration |
## Additional costs
There are currently no additional costs beyond your user seat price.
Every MessageDesk subscription includes carrier registration and phone number configuration fees baked into your per-seat price.
### Tax calculations
* **Based on billing address**: Taxes calculated from payment method address.
* **Variable rates**: Different services may have different tax rates.
* **Compliance updates**: Tax policies may change to meet legal requirements.
# Data Security, Compliance & HIPAA
Source: https://docs.messagedesk.com/resources/security-compliance-hipaa
What you can safely send by SMS, HIPAA do's and don'ts, and how MessageDesk secures your data, including our SOC 2 roadmap and Trust Center.
# Data Security, Compliance & HIPAA
We protect your data and help you use SMS responsibly. This page explains **what you can send**, **what to avoid**, and how to access our **security documentation**.
***
## TL;DR
* **SMS isn't end-to-end encrypted.** Use it for **non-PHI** communications only.
* **HIPAA:** You **may not** send PHI by text via MessageDesk. MessageDesk **cannot sign BAAs** at this time.
* **SOC 2 Type II:** Certified.
* **Trust Center:** Get policies, control mappings, and audit materials: [**security.messagedesk.com**](https://security.messagedesk.com/).
* **Legal:** See our [**Privacy Policy**](https://www.messagedesk.com/privacy-policy), [**Terms of Service**](https://www.messagedesk.com/terms), and [**Use Agreement**](https://www.messagedesk.com/use-agreement).
***
## HIPAA and texting: what's allowed (and what isn't)
SMS is a carrier-routed channel and cannot be made fully end-to-end encrypted. That means **don't send PHI** (Protected Health Information) over SMS.
### What you **can** send (non-PHI)
* Appointment reminders **without** health details
* General practice information (address, parking, directions)
* Office hours and contact information
* Non-specific follow-ups ("Thanks for visiting, complete your post-visit survey")
### What you **should not** send (PHI)
* Diagnoses or symptoms
* Treatment or care plan details
* Prescriptions or medication names/dosages
* Lab or test results
* Any other **patient-identifying health information**
**No BAA:** MessageDesk is **not currently in a legal position to sign BAAs**. If your organization requires a BAA, MessageDesk may not be the right fit for PHI-related workflows today.
### Best practices for healthcare teams
1. **Train your staff** on PHI restrictions and when to switch channels.
2. [**Use templates**](/messaging/templates-tags) that exclude PHI and include clear, neutral language.
3. **Keep reminders generic** (date/time/location only).
4. **Redirect PHI** to secure portals, phone calls, or in-network tools.
5. **Document your policy** for when SMS is appropriate vs. not.
6. Reference our [**Privacy Policy**](https://www.messagedesk.com/privacy-policy) for how we handle personal information.
***
## Our security posture (at a glance)
* **Hosting:** AWS (US).
* **Encryption:** **AES-256 at rest**, **TLS in transit**.
* **Access controls:** MFA support; **RBAC** with granular permissions (Admin, Manager, Operator + resource-level controls).
* **Vulnerability management:** SLAs to remediate Critical/High/Medium findings within defined windows.
* **Segregation:** Separate staging/production; change management and rollback procedures.
* **Monitoring & logs:** Auth and configuration events logged and retained.
* **Pen test:** Most recent third-party test reported **no critical/high** findings.
For full details (policies, controls, audit artifacts), request access to our [**Trust Center**](https://security.messagedesk.com/).
***
## SOC 2, compliance, and Trust Center
MessageDesk has achieved **SOC 2 Type II** certification.
Legal references: [**Terms of Service**](https://www.messagedesk.com/terms) and [**Use Agreement**](https://www.messagedesk.com/use-agreement).
### Request access to our Trust Center
1. Visit [**security.messagedesk.com**](https://security.messagedesk.com/)
2. Click **Request Access**
3. Complete the form and submit
4. We'll email you once access is approved
Get policies, control mappings, and audit materials in the MessageDesk Trust Center.
***
## Frequently asked data and compliance questions
**Is MessageDesk HIPAA compliant?**\
We **do not** transmit PHI by SMS and **do not** sign BAAs currently. You can use MessageDesk for **non-PHI** communications (e.g., generic reminders).
**Can I include links in reminders?**\
Yes. Use links to your **secure patient portal** for PHI. Keep the SMS itself generic.
**Are you SOC 2 certified?**\
Yes. MessageDesk has achieved **SOC 2 Type II** certification. You can request access to our audit report via the **Trust Center**.
**Where is our data stored?**\
In the **United States** on AWS. Data is encrypted **at rest** and **in transit**. See our [**Privacy Policy**](https://www.messagedesk.com/privacy-policy) for more on data handling.
**Can we enable SSO and MFA?**\
Yes. We support SSO (SAML/OIDC) and MFA. See our **Trust Center** and [**Use Agreement**](https://www.messagedesk.com/use-agreement) for additional terms.
**How do Terms apply to my workspace?**\
Your use of MessageDesk is governed by our [**Terms of Service**](https://www.messagedesk.com/terms) and [**Use Agreement**](https://www.messagedesk.com/use-agreement).
# Get Help from the MessageDesk Support Team
Source: https://docs.messagedesk.com/resources/support
Reach the MessageDesk support team by email, live chat, or phone. Get fast answers about setup, billing, carrier registration, and SMS troubleshooting.
Email us directly at [support@messagedesk.com](mailto:support@messagedesk.com).
Text **SUPPORT** to **(775) 313-9465.**
# 14-Day Free Trial Overview
Source: https://docs.messagedesk.com/resources/trial-terms
Understand the MessageDesk free forever plan and 14-day full-feature trial. What's included, message limits, billing terms, and what happens after expiration.
# 14-day free trial overview
You can explore MessageDesk in two ways:
* **Individual (Free Forever)** – no credit card required.
* **14-Day Free Trial** – unlocks team features and more after you add a payment method and select a plan.
***
## TL;DR
* **Create an account:** You start on the **Individual (Free Forever)** plan. **No credit card** needed.
* **Start a trial:** Your **14-day trial** begins **only after** you **enter a credit card and select a plan** (usually when **adding teammates** or **connecting phone lines**).
* **Messaging during trial:** Works after **carrier registration** is complete.
* **At day 14:** Billing **begins on the plan you selected** unless you **cancel** before the trial ends.
**Twilio BYOC users:** If you connect existing **Twilio** numbers, you're still exempt from carrier registration inside MessageDesk because Twilio handles it on their side. Twilio BYOC no longer includes a free-seat exemption. You'll need a **paid subscription with at least one user seat** to connect Twilio numbers.
***
## Individual plan: free forever
* **Duration:** Forever
* **Starts:** As soon as you create your MessageDesk account
* **Best for:** Viewing MessageDesk solo before inviting a team or connecting lines
***
## 14-day free trial: when it starts and what it includes
### How your trial starts
Your 14-day trial begins when you **enter a credit card** and **select a plan** in either of these flows:
* **Adding teammates**
* **Connecting new or existing phone lines**
### Trial feature access
| Feature / Area | Trial access |
| ---------------------------------------------- | ------------------------------------------------------- |
| **Messaging** | **Limited** until **carrier registration** is completed |
| **Relays (automations)** | Yes |
| **Phone line management** | Yes |
| **Teammate management** | Yes |
| **Media & attachments** | Yes |
| **Templates & tags** | Yes |
| **Labels** | Yes |
| **Comments & mentions** | Yes |
| **Contacts** | Yes |
| **Twilio integration** | Yes |
| **Roles & permissions (user access controls)** | Yes |
**Messaging & compliance:** If you're using a local (10DLC) or toll-free number, you'll need to [complete the carrier registration process](/carrier-registration/overview) before sending messages.
***
## How to get help during your trial
Our team is here to help you get set up fast.
* **Text:** Send **SUPPORT** to **(775) 313-9465**
* **Email:** [**support@messagedesk.com**](mailto:support@messagedesk.com)
* **Docs:** You're here ✅
***
## What happens when your trial ends
### Choose a plan (recommended before day 14)
Go to your **Account** (user icon) → **Billing**.
Click **Choose a plan**, compare options, and select the one that fits.
Enter or confirm your payment method and **confirm subscription**.
### If you do nothing
* If you started a trial by selecting a plan and adding a card, **billing will begin automatically** for that plan at the end of your 14 days.
* You can **cancel anytime during the trial** to avoid charges.
**To avoid charges:** Cancel before your 14-day period ends.
### Need more time?
[**Contact sales**](/contact-us) to discuss **trial extension** options.
***
## FAQs
**Do I need a credit card to create a MessageDesk account?**\
No. You start on the **Individual (Free Forever)** plan without a card.
**Do I need a credit card to start my 14-day free trial?**\
Yes. You'll **enter a card** and **select a plan** to begin the trial.
**Can I cancel during the trial?**\
Yes. **Cancel anytime** during your 14 days with **no charges**.
**What happens to my data if I don't upgrade?**\
We **preserve your data** indefinitely. You can return and upgrade later.
**Can I switch plans after my trial?**\
Yes. You can **change plans anytime** after upgrading.
# Advanced Search
Source: https://docs.messagedesk.com/search/advanced-search
Search contacts, conversations, messages, comments, and labels across MessageDesk with per-type filters, pagination, and scroll-to-message routing.
# Advanced Search
Advanced Search is MessageDesk's full **cross-module** search. It covers every searchable item type (contacts, conversations, messages, comments, and labels) with per-type filters, pagination, and smart routing that takes you exactly where each result lives.
On desktop, **⌘K** opens [Quick Search](/search/quick-search). Press **Enter** on a Quick Search result to escalate to Advanced Search at that result.
***
## Open Advanced Search
You can launch Advanced Search several ways:
* **From Quick Search (desktop):**
* Click the **search icon** next to a Quick Search result.
* Press **Enter** on a highlighted Quick Search result.
* Click **Open Advanced Search** at the bottom of the Quick Search dropdown.
* **From mobile or tablet:** Tap the **search icon** near the account settings icon. Advanced Search has its own embedded search box on mobile and tablet since Quick Search isn't available there.
***
## Side nav context is preserved
Advanced Search keeps you anchored in the module you launched it from:
* If you're in the **Inbox**, the inbox side nav stays visible.
* If you're in **Contacts**, the contacts side nav stays visible.
* If you're in **Settings**, the settings side nav stays visible.
This way, you can run a search without losing your place in the app.
***
## Searchable item types
Advanced Search indexes five item types, each with its own filters and results section:
| Type | What it searches | Per-type filters |
| ----------------- | ------------------------------------------- | ---------------- |
| **Contacts** | Saved contact records (name, phone, fields) | ✅ |
| **Conversations** | Threads in your inbox | ✅ |
| **Messages** | SMS message content | ✅ |
| **Comments** | Internal team comments and threaded replies | ✅ |
| **Labels** | Label names applied to conversations | ✅ |
Each result type has its own pagination so you can drill into one type without losing the others.
***
## Routing: where each result takes you
Clicking a result takes you to the right place automatically:
* **Contact** → opens the **contact profile**.
* **Conversation** → opens the conversation in the inbox.
* **Message** → opens the conversation **and scrolls to that message**.
* **Comment** → opens the conversation **and scrolls to that comment**.
* **Label** → opens the **labeled inbox view** for that label.
***
## 30-day index window
Advanced Search keeps a fast, indexed window of the most recent **30 days** of messages and comments. This is what powers near-instant results for live workflows.
Older results are **backfilled from the database**. They may take a moment longer to appear, but you can still search the full archive. Older matches are merged into the same results list.
For broader archive export and reporting, see [Data Center → Message History](/settings/data-center#message-history).
***
## Mobile and tablet
On mobile and tablet, Advanced Search is the **only** search experience. Quick Search isn't available on those form factors. Tap the **search icon** near the account settings icon to open Advanced Search, type into its embedded search box, and tap any result to navigate.
***
## See also
* [Search overview](/search/overview)
* [Quick Search](/search/quick-search)
* [Filter, search & sort (Inbox)](/inbox/filter-search-sort)
* [Keyboard shortcuts](/resources/keyboard-shortcuts)
# Search in MessageDesk
Source: https://docs.messagedesk.com/search/overview
Find contacts, conversations, messages, comments, and labels across MessageDesk using Quick Search (⌘K) and Advanced Search.
# Search in MessageDesk
Search in MessageDesk is **global**. It spans every module (Inbox, Contacts, and Settings), so you can find what you need without switching context.
You have two search modes:
* **Quick Search:** a fast, keyboard-driven lookup for contacts and conversations.
* **Advanced Search:** a full cross-module search for contacts, conversations, messages, comments, and labels with per-type filters.
***
## Quick Search vs. Advanced Search
| Capability | Quick Search (⌘K) | Advanced Search |
| -------------------------- | -------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| **How to open** | **⌘K** / **Ctrl K**, or click the search bar | Search icon in Quick Search, **Enter** on a Quick Search result, or the search icon on mobile/tablet |
| **Where it's available** | Desktop only | Desktop, mobile, and tablet |
| **Searches contacts** | ✅ | ✅ (with filters) |
| **Searches conversations** | ✅ | ✅ (with filters) |
| **Searches messages** | ❌ | ✅ (with filters, scroll-to-message) |
| **Searches comments** | ❌ | ✅ (with filters, scroll-to-comment) |
| **Searches labels** | ❌ | ✅ |
| **Recent results** | Recent conversations before you type | N/A |
| **Pagination** | N/A | ✅ Per result type |
| **Best for** | Jumping to a known contact or thread | Finding a specific message, comment, label, or running a broad lookup |
Press **⌘K** to start a fast lookup, then press **Enter** on any result to escalate into Advanced Search at that result.
***
## When to use each
* **Use Quick Search** when you know roughly who or what you're looking for and want to jump straight to it (contact profile or conversation).
* **Use Advanced Search** when you need to find a specific **message**, **comment**, or **label**, or when you want to filter across multiple item types at once.
***
## Mobile and tablet
Quick Search is **desktop-only**. On mobile and tablet, tap the search icon near the account settings icon to open **Advanced Search** directly. It has its own embedded search box.
***
## Learn more
* [Quick Search](/search/quick-search): open with ⌘K, browse contacts and conversations
* [Advanced Search](/search/advanced-search): full cross-module search with filters
# Quick Search (⌘K)
Source: https://docs.messagedesk.com/search/quick-search
Use Quick Search to find contacts and conversations from anywhere in MessageDesk on desktop. Open with ⌘K, navigate results with the keyboard, and press Enter to escalate to Advanced Search.
# Quick Search
Quick Search is the fastest way to find a **contact** or **conversation** in MessageDesk. It lives in the top nav bar on desktop and is built for keyboard-first navigation.
Quick Search is **desktop-only**. On mobile and tablet, tap the search icon near the account settings icon to open [Advanced Search](/search/advanced-search) directly.
***
## Open Quick Search
You have two ways to open Quick Search on desktop:
* Press **⌘K** (macOS) or **Ctrl K** (Windows/Linux) from anywhere in the app.
* Click the **search bar** in the top nav.
***
## What Quick Search covers
Quick Search returns results for two item types:
* **Contacts:** saved contact records in your workspace
* **Conversations:** text threads in your inbox
**Messages** and **comments** are **not** in Quick Search results. To search by message content, comment content, or labels, use [Advanced Search](/search/advanced-search).
***
## Recent conversations
Before you type anything, Quick Search shows your **recent conversations** so you can jump back to a thread you were just in. No query required.
***
## Navigate results with the keyboard
* **↑ / ↓:** move between results
* **Enter:** select the highlighted result
Selecting a result with **Enter** opens [Advanced Search](/search/advanced-search) **at that result**, giving you the full filtered experience as a next step.
***
## Open Advanced Search from Quick Search
At the bottom of the Quick Search results dropdown, click **Open Advanced Search** to escalate your current query into the full Advanced Search experience. Use it when you want to search messages, comments, or labels, or apply per-type filters.
You can also click the **search icon** next to any Quick Search result to jump straight into Advanced Search at that result.
***
## See also
* [Search overview](/search/overview)
* [Advanced Search](/search/advanced-search)
* [Keyboard shortcuts](/resources/keyboard-shortcuts)
# Personal Inbox Appearance, Layout & Signature
Source: https://docs.messagedesk.com/settings/my-settings/inbox-preferences
Personalize your MessageDesk inbox view. Pick a light or dark theme, choose navigation layout, set conversation density, and add a personal SMS signature.
# Customize your Inbox: theme, layout, and personal signature
Make your Inbox easier to read, faster to navigate, and on-brand without affecting anyone else on your team.
**Mobile users.** On mobile, you can only change the color theme. Layout and signature settings are desktop-only.
***
## Change your Inbox appearance (theme and color)
### 1) Go to **Account → Settings → Inbox Preferences (My Settings)**
Open the **Appearance** tab.
### 2) Pick a **Color Theme**
Choose a preset palette or use the color picker for a custom accent.
### 3) Choose a **mode**
* **Light mode:** light UI using your selected color palette
* **Dark mode:** dark UI using your selected color palette
* **System mode:** follows your device's appearance. If your device switches by time of day, MessageDesk follows
***
## Organize your Inbox layout (what you see in the left nav)
You control which **phone lines**, **teammate inboxes**, and **labels** appear, and in what order.
### 1) Go to **Account → Settings → Inbox Preferences (My Settings)**
Open the **Layout** tab to view your current configuration.
### 2) Pin, unpin, and reorder
* **Pin / Unpin** items to show or hide them
* **Drag and drop** to reorder sections and items
* Click **Save changes** when you're done
Your layout changes are **personal**. Pinning, unpinning, and reordering only affect your view, not your teammates'.
***
## Create and edit your personal text message signature
Add a short sign-off that auto-appends to your outbound texts from your user profile.
### 1. Go to **Account → Settings → Inbox Preferences (My Settings)**
Open the **Personal Signature** tab.
### 2. Toggle **Apply personal signature** ON
This turns your signature on.
### 3. Click the **pencil** icon to edit your signature
By default, MessageDesk uses **tags** like:
* `{{ UserFirstName }}`: your user first name
* `{{ WorkspaceName }}`: your workspace name
Edit the text and mix in other [tags](/messaging/templates-tags) as needed.
Set your **User First Name** and **Workspace Name** in MessageDesk before enabling signatures. Missing values can produce unexpected signature text.
### 4. Choose when the signature applies
* **Apply signature to all sent messages:** appends to every message you send
* **Only apply to first ever sent message in conversation:** appends only to your first outbound in a thread
***
## Message compose preview
Turn the **message compose preview widget** on or off for your account. When it's on, MessageDesk shows a preview of your outbound message before you send. The preview resolves personalization tags per recipient, warns you about tags that can't be filled until send time, and lets you send a test message to any number.
* **Default:** On for every user.
* **Where to toggle it:** **Account → Settings → Inbox Preferences (My Settings) → Message compose preview**.
* **Turning it off:** The composer sends without the intermediate preview step. You can also dismiss the preview from the widget itself after your first send.
See [Preview your message before sending](/messaging/new-message-compose#preview-your-message-before-sending) for what the preview shows, per-recipient iteration, and how to send test messages.
***
## Language localization
MessageDesk doesn't currently support native language localization or translation features. You can use third-party browser extensions to translate the interface and messages into your preferred language.
### Browser translation tools
Most modern browsers offer built-in or extension-based translation:
* **Google Chrome:** Use the built-in Google Translate feature or install the [Google Translate extension](https://chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb)
* **Microsoft Edge:** Built-in Microsoft Translator
* **Firefox:** Install translation extensions like [To Google Translate](https://addons.mozilla.org/en-US/firefox/addon/to-google-translate/)
* **Safari:** Use the built-in translation feature (macOS Monterey and later)
These tools translate both the MessageDesk interface and message content in real-time.
Third-party translation tools aren't affiliated with MessageDesk. The extension provider manages translation accuracy and privacy policies.
# Personal Notification Preferences
Source: https://docs.messagedesk.com/settings/my-settings/notification-preferences
Customize MessageDesk notification preferences for email, mobile push, and browser. Set quiet hours, mute conversations, and tune alerts for new messages.
# Manage Personal Notification Preferences
Choose when MessageDesk notifies you and on which devices. Set up email, mobile push, and browser notifications so you don't miss messages.
***
## TL;DR
* Open **Account → Settings → Notification Preferences (My Settings)** to pick your **email** notification rule.
* Install the **mobile app** for **push** alerts.
* Turn on **browser** notifications in **Chrome** or the **installed app** (Chrome App or Safari App).
***
## What MessageDesk can notify you about
* **Email**
* **Mobile push** (iOS & Android)
* **Browser notifications**
* **Chrome (browser tab)**
* **Chrome App** (installed PWA)
* **Safari App** on macOS Sonoma+
You control each channel independently. For example, you can keep **email** off and **mobile push** on.
### Notification events
MessageDesk sends notifications for events including:
* **New message.** Inbound activity according to your email rule and push/browser settings.
* **@Mention in a comment.** When a teammate mentions you in an internal comment.
* **Export Available.** Push and browser notification to the user who triggered any [conversation export](/inbox/export-conversation), [Message History export, or contact, message template, label, or opt-out export](/settings/workspace-settings/data-center). The file is ready to download from the **Export Available** button in the top nav. MessageDesk also sends an **export completed email** with a download link to the same user for every export type.
* **Import completed email.** When a [Data Center import](/settings/workspace-settings/data-center) (contacts, messages, message templates, labels, or opt-outs) finishes, MessageDesk emails the user who started it a summary of the run. Import notifications only go by email; there's no push or browser toggle for this event.
***
## Configure email notifications
1. In MessageDesk, go to **Account → Settings → Notification Preferences (My Settings)**.
2. Choose one:
* **Notify me about every new message.** Emails for all inbound conversations in your workspace.
* **Only notify me about conversations assigned to me.** Emails only when there's activity in threads you're assigned to.
* **Don't send me notifications.** Turns off email notifications.
3. Click **Save Changes**.
***
## Configure mobile push (iOS & Android)
1. [Download the MessageDesk app](/get-started/install-apps) on your device(s).
2. Open the app and **Allow** notifications (alerts, sounds, badges) when prompted.
3. Stay signed in to receive pushes.
On iOS, fine-tune MessageDesk alerts in **Settings → Notifications → MessageDesk** (banner style, sounds, badges, lock screen, and so on).
Mobile push notifications include **sound and vibration** when a new message arrives. Your device's notification settings control these, not MessageDesk. Manage them in:
* **iOS:** Settings → Notifications → MessageDesk
* **Android:** Settings → Apps → MessageDesk → Notifications
### App icon badge count
The number on the MessageDesk app icon on your home screen reflects your **total unread conversations** in the workspace.
* The badge matches the unread count shown next to **All Conversations** in the side nav and on the **Inbox** icon in the bottom nav.
* The badge only appears if notifications are enabled for the MessageDesk app at the device level.
* The badge shows the **total** unread conversations you have access to in the workspace. It is **not** filtered by your Notification Preference setting. For example, if you're set to "Only notify me about conversations assigned to me," the badge still shows the full unread conversation count.
* The badge counts **unread conversations**, not unread messages. Receiving multiple messages from the same contact in an already-unread conversation does not increase the badge.
***
## Configure browser notifications: Chrome (browser tab)
1. Log in to MessageDesk in **Chrome**.
2. Click the **site settings** icon next to the URL.
3. Toggle **Notifications → On/Allow**.
***
## Configure browser notifications: Chrome App (installed PWA)
1. [Install MessageDesk](/get-started/install-apps) as a Chrome App (PWA).
2. Open your device's **Settings → Apps → MessageDesk**.
3. Open **Notifications** and toggle **On**.
***
## Configure notifications: Safari App (macOS Sonoma+)
1. [Install MessageDesk](/get-started/install-apps) as a Safari App.
2. On your Mac, open **System Settings → Notifications**.
3. Select **MessageDesk** and choose **None / Banners / Alerts**, plus sounds and badge options.
***
## Notification tips & best practices
* **Pick one or two primary channels.** To cut noise, keep either **mobile push** or **browser** as your main real-time channel and rely on **email** as a backup.
* **Use "Assigned to me"** if you only want alerts for threads you own.
* **Respect Focus / DND.** iOS/Android Focus modes and macOS/Windows **Do Not Disturb** can silence MessageDesk. Check these if alerts seem quiet.
* **Stay signed in.** Push and browser notifications need an active login on that device.
* **Test quickly.** Assign a conversation to yourself and send a message to confirm that the device gets alerts.
***
## Troubleshooting
**I'm not getting any notifications.**
* Confirm the setting in **Account → Settings → Notification Preferences**.
* Make sure you're **signed in** on the device.
* Check OS settings (iOS/Android/macOS/Windows) to verify that **Notifications are allowed** for MessageDesk.
* Turn off **Do Not Disturb / Focus** or add MessageDesk as an allowed app.
**Email notifications aren't arriving.**
* Check spam/junk and allowlist `messagedesk.com`.
* Verify your **email address** in **Account → Settings → Profile**.
* If using "Assigned to me," make sure the conversation is **assigned to you**.
**Chrome isn't showing notifications.**
* In the address bar, click the **site settings** icon and set **Notifications: Allow**.
* Make sure **System → Notifications** (Windows/macOS) allows Chrome notifications.
* Keep at least one **MessageDesk tab** open or use the **installed app**.
**Mobile push is inconsistent.**
* Android push notifications are now sent at **high priority** for faster, more reliable delivery. If you're still seeing delays, the steps below still apply.
* Make sure Background App Refresh (iOS) or unrestricted battery (Android) is on for MessageDesk.
* Log out and back in to refresh the device token.
* On cellular networks, push notifications may be delayed when signal strength is poor. That's a device/carrier limitation, not a MessageDesk issue.
***
## FAQ
**If I set "Don't send me notifications," does that affect other users?**\
No. Notification preferences are **per user**.
**Do I need both browser and mobile push?**\
No. Choose the channel that fits your workflow. Many users keep **mobile push on** and **email off**.
**Will I get duplicate notifications?**\
If you turn on multiple channels, you may get duplicates (email + mobile). Fine-tune by turning one off.
**Do closed conversations notify me?**\
Notifications follow your personal rule ("Assigned to me," for instance). If a closed thread reopens and you're assigned, you may get alerts again.
**What does the number on the app icon mean?**\
It's your total **unread conversations** across the workspace, the same count shown next to **All Conversations** in the side nav and on the **Inbox** icon in the bottom nav. It only appears if notifications are enabled for the MessageDesk app at the device level, and it's not filtered by your Notification Preference setting.
***
# Profile
Source: https://docs.messagedesk.com/settings/my-settings/profile
Update your MessageDesk profile. User Name, First Name, Last Name, Cell Phone, Country, and profile photo. Reset your password from the same page.
# Profile
The **Profile** page in **My Settings** is where you manage how teammates see you in MessageDesk and how the app reaches you. It's the first page under **My Settings** and holds everything tied to your individual user account.
**Mobile users.** You can update your Profile from mobile. Other settings features are desktop-only.
***
## Open the Profile page
Go to **Account → Settings → My Settings → Profile**.
***
## Editable fields
You can edit these fields directly on the Profile page:
* **User Name.** How teammates see you in the app.
* **First Name.** Used in templates and tags (`{{ UserFirstName }}`).
* **Last Name.** Used in templates and tags (`{{ UserLastName }}`).
* **Cell Phone.** Recommended for **two-factor authentication (2FA)**.
* **Country.** Improves locale defaults.
After making changes, click **Save changes**.
Keep **First Name** and **Last Name** up to date so your **personal signature** and **message templates** render correctly.
***
## Email is locked
The **Email** field is **locked**. You can't edit it directly from the Profile page. Your email ties to authentication and account notifications.
To change your email address, contact your workspace administrator or [MessageDesk support](/contact-us).
***
## Upload a profile photo
Your profile photo appears next to your messages and comments throughout MessageDesk.
1. On the **Profile** page, click **Edit Image** above your current photo.
2. Choose an image from your computer.
3. Crop or adjust as needed.
4. Save your changes.
***
## Reset password
Click the **Reset Password** button on the Profile page to start a password reset.
For requirements, troubleshooting, and security best practices, see [Account Security](/settings/my-settings/security).
Once you add your **Cell Phone**, MessageDesk uses it for **two-factor authentication (2FA)** to help keep your account secure.
***
## See also
* [Account Security](/settings/my-settings/security)
* [Inbox Preferences](/settings/my-settings/inbox-preferences)
* [Notification Preferences](/settings/my-settings/notification-preferences)
# Account Security
Source: https://docs.messagedesk.com/settings/my-settings/security
Reset your MessageDesk password, enable two-factor authentication, manage active sessions, and follow security best practices to keep your account safe.
# Account Security
Keep your MessageDesk account secure by managing your password and following security best practices.
***
## Reset your user password
### Step-by-step instructions
1. Go to the login page ([inbox.messagedesk.com](https://inbox.messagedesk.com)).
2. Click **Forgot your password?**
3. Enter your email address (the one tied to your account).
4. Click **Submit**.
5. Check your email for a verification code:
* **Sender:** [no-reply@messagedesk.com](mailto:no-reply@messagedesk.com)
* **Subject:** "Reset your MessageDesk Password"
* **Contains:** a 6-digit verification code.
* **Delivery:** usually within a few minutes.
* **Where to check:** inbox (and spam/junk if not received).
The verification code is valid for a limited time (typically 15-60 minutes). If it expires, request a new one.
6. Return to the app and enter:
* The verification code from your email.
* Your new password.
* Confirm your new password.
7. Click **Submit**.
You'll be signed in automatically with your new password.
***
## User password requirements
Your new password must meet these requirements:
* At least 8 characters long (maximum 99 characters).
* Contains at least one lowercase letter (a-z).
* Contains at least one uppercase letter (A-Z).
* Contains at least one number (0-9).
* Contains at least one special character (!@#\$&\_\~).
* No spaces allowed.
* Can't match any of your last 8 passwords.
To meet SOC2 Access Management Policy requirements, MessageDesk blocks reuse of your last 8 passwords on reset.
**Example of a valid password:** `MyP@ssw0rd123`
***
## Troubleshooting
### "I didn't receive the email"
* Check your spam/junk folder.
* Verify you're using the correct email address.
* Wait a few minutes (delivery can take up to 5 minutes).
* Request a new code.
* Contact support if the issue persists.
### "The verification code doesn't work"
* Make sure you're entering the code exactly as shown.
* Check whether the code has expired (request a new one).
* Make sure you're using the most recent code sent.
* Verify you're on the correct confirmation page.
### "I'm getting an error message"
* Check that your new password meets every requirement.
* Make sure both password fields match exactly.
* Refresh the page and start over.
* Contact support with the specific error message.
### "Invalid session for the user, session expired."
You'll see this error if you sit on the **sign-in / authentication page for more than 3 minutes** before completing sign-in. The sign-in session times out for security.
To fix it:
1. **Sign out completely** (close the sign-in page or click **Sign out** if you're partially authenticated).
2. Open the sign-in page fresh and **sign in without pausing**. Enter your credentials and complete two-factor authentication within 3 minutes.
If you're waiting for a **verification code** to arrive by email or SMS, request it, watch for it, and enter it right away. If the code takes more than a couple of minutes to arrive, sign out and start again rather than waiting on the auth page.
### "I don't remember which email I used"
Contact your workspace administrator or support for help.
***
## Admin-initiated reset
If you can't reset your password:
1. Contact your workspace administrator or owner.
2. They can start a password reset for you.
3. You'll get the same verification code email.
4. Follow the same steps to complete the reset.
***
## Security best practices
* **Use a unique password.** Don't reuse passwords from other accounts. MessageDesk enforces this by blocking reuse of your last 8 passwords.
* **Keep codes private.** Never share your verification code with anyone.
* **Act promptly.** Finish the reset soon after getting the code.
* **Report suspicious activity.** If you didn't request a reset, contact support immediately.
* **Use a password manager.** It generates and stores strong passwords for you.
* **Turn on two-factor authentication.** Add your cell phone in your profile settings for extra security.
Resetting your password signs you out everywhere. You'll need to sign in again on every other device with your new password.
***
## FAQ
The code expires after a set time (typically 15-60 minutes). If it expires, request a new one.
No. To comply with SOC2 Access Management Policy, you can't reuse any of your last 8 passwords.
Yes. There's no limit on how many times you can reset.
Yes. You'll need to sign in again on other devices with your new password.
# Team Workspace Messaging Analytics
Source: https://docs.messagedesk.com/settings/workspace-settings/analytics
Track SMS performance metrics in MessageDesk. Message volume, response times, channel-level stats, and per-user activity reports for your team workspace.
# Workspace Analytics
The **Analytics** dashboard gives you a snapshot of messaging activity across your workspace: messages sent, delivery rates, inbound volume, and breakdowns by channel and user.
***
## Open the analytics dashboard
1. Click your **profile icon** (top-right).
2. Select **Settings**.
3. In the left nav, open **Workspace Settings → Analytics**.
You can also navigate directly to `/settings/workspace-settings/analytics`.
**Permissions.** Your role controls access to the analytics dashboard. See [Roles & Permissions](/settings/workspace-settings/team-management) for details.
***
## Top-level metrics
The dashboard shows three primary metrics at the top:
* **Messages sent.** Total outbound messages from your workspace.
* **Delivery rate.** Percentage of sent messages successfully delivered.
* **Inbound messages.** Total messages received across every channel.
***
## Channel-level analytics
Below the top-level metrics, you'll see activity **by channel** (phone line). Use this to compare volume and performance across lines in your workspace.
***
## User-level analytics
The dashboard also shows activity **by user**, so you can see how messaging volume splits across your team.
***
## Time windows
Use the time-window selector to filter every metric by a specific date range:
* **30 days**
* **60 days**
* **90 days**
* **180 days**
* **365 days**
Changing the time window updates every metric on the page.
**Data refresh.** Analytics data doesn't update in real time. The dashboard loads a snapshot when you open it. Refresh the page to see the latest data.
***
## FAQ
**Who can access the analytics dashboard?**\
Access depends on your role and the **Analytics** permission assigned to it. Admins have full access by default. See [Roles & Permissions](/settings/workspace-settings/team-management).
**Why doesn't the data update automatically?**\
Analytics queries aggregate large volumes of messaging data. To keep performance fast, the dashboard loads data on page load rather than streaming live updates.
**Can I export analytics data?**\
Export isn't currently available from the analytics dashboard. Contact support if you need a data export.
# Billing & Subscription Management
Source: https://docs.messagedesk.com/settings/workspace-settings/billing-subscriptions
Update payment methods, change plans, view invoices, and manage MessageDesk billing and subscription settings for your team workspace and add-on services.
# Billing & Subscription Management
View your plan, update payment methods, download invoices, and change your MessageDesk subscription, all from **Account → Billing**.
***
## TL;DR
* Go to **Account → Billing** to see **plan**, **next charge**, **seats**, **billing cycle**, and **invoice history**.
* You can **add/update a payment method**, **download invoices**, and **cancel** from the same page.
* To **change plans** (upgrade/downgrade), [contact support](/resources/support). Upgrades prorate immediately. Downgrades apply on your next billing cycle.
***
## Open your billing settings
1. Click your **profile icon** (top-right).
2. Choose **Account → Billing**.
***
## Manage your subscription
### View current plan & billing details
The Billing page shows:
* **Plan name** and **price**.
* **User seats (quantity)**.
* **Billing cycle** (monthly or annual).
* **Next billing date**.
* **Billing contact:** name, email, address, phone.
* **Invoice history**.
**Seat minimums.** The **Team** plan needs at least **3 user seats**. The **Pro** plan has no seat minimum. See [Pricing](/resources/pricing) for plan details.
### Change plans (upgrade or downgrade)
To change plans, [contact support](/resources/support).
* **Upgrades.** Take effect immediately and **prorate**.
* **Downgrades.** Take effect on your **next billing date**.
***
## Payment methods
### Supported options
* **Card** (Visa, Mastercard, Amex, Discover).
* **Bank (ACH)**.
### Add or update a payment method
1. Go to **Account → Billing**.
2. Click **+ Add payment method**.
3. Enter your details.
4. Click **Add**.
Set a new method as **default** during or after adding it.
### Remove a payment method
You must have **at least one** active payment method on file.
* Add a new method first, then remove the old one.
***
## Billing information & history
### Update billing contact info
On **Account → Billing**, edit **name**, **email**, **address**, or **phone** in the **Billing information** section, then **Save**.
### View & download invoices
1. Go to **Account → Billing**.
2. Scroll to **Invoice history**.
3. Click any invoice to **view** or **download** (PDF).
***
## Tax-exempt status
If your organization is exempt from sales tax (nonprofits, government agencies, educational institutions, tribal entities, First Nations, foreign diplomats, and similar), MessageDesk can apply your exemption to future invoices.
### How to submit your exemption
1. Email a signed copy of your exemption document to [support@messagedesk.com](mailto:support@messagedesk.com).
2. Send from an email tied to a **workspace admin** so we can match the request to your account.
3. We'll apply the exemption on our end. **Future invoices** will render without sales tax.
We don't automatically refund sales tax already charged on **prior invoices**. If you need a retroactive adjustment, mention it in your email and we'll review it case by case.
### What document to send
A **W-9 is not a sales-tax exemption certificate.** Send the state- or country-specific document below.
**United States**
| Situation | Document to send |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 501(c)(3) nonprofit | Signed state **Sales Tax Certificate of Exemption** (or **Blanket Exemption Certificate**), or your **IRS 501(c)(3) determination letter** if your state accepts it |
| Reseller | State-issued **resale certificate** |
| Government / educational / tribal | State-issued exemption certificate for your entity type |
Most US states publish an exemption certificate form. For example, Ohio's **STEC B, Sales and Use Tax Blanket Exemption Certificate**. Use the certificate issued by the state where your organization is registered.
**Canada**
| Situation | Document to send |
| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| Indigenous / First Nations exemption (GST/HST/PST) | Valid **Certificate of Indian Status** card |
| Non-resident claiming exemption under a tax treaty (e.g. US–Canada) | **Certificate of Residency** (US residents: **IRS Form 6166**), articles of incorporation, and IRS determination letter |
| Foreign diplomat | **Exemption / Identity Card** issued by Global Affairs Canada |
***
## Cancel subscription
Cancelling a subscription **stops billing**. It doesn't delete your workspace or your data.
1. Go to **Account → Billing**.
2. Click **Cancel subscription**.
3. Confirm **Cancel subscription**.
Your workspace stays active until the **end of the current billing period**. After that, MessageDesk severs the subscription ↔ workspace link and the workspace enters a **locked state**. Your data is retained for **90 days**. If you resubscribe within that window, the workspace unlocks with everything intact.
**Cancelled workspaces are automatically deleted after 90 days.** If you don't resubscribe within 90 days of cancellation, the workspace and its data are permanently deleted. If you want to delete the workspace **sooner** than 90 days, see [Delete a workspace](/settings/workspace-settings/overview#delete-a-workspace).
**Subscriptions and workspaces are separate entities.** Cancelling a subscription doesn't immediately delete the workspace. It enters a locked state and is deleted 90 days later if you don't resubscribe.
***
## FAQ
**When will I be charged?**\
On the **same day each month** (monthly plans) or **once per year** (annual plans). Your **next billing date** shows in Billing.
**What happens if my payment fails?**\
We'll **retry** the charge and send an **email**. Update your **payment method** to avoid service interruption.
**Can I get a refund?**\
Refunds are handled **case-by-case**. Contact support to review your situation.
**Can I switch plans later?**\
Yes. [Contact support](/resources/support) to upgrade or downgrade. Upgrades **prorate immediately**. Downgrades apply on your **next cycle**.
**Do you support sales tax exemption? Can I submit a W-9?**\
Yes, we support sales tax exemption. Email a signed **state- or country-specific exemption certificate** to [support@messagedesk.com](mailto:support@messagedesk.com) from a workspace-admin email, and we'll apply it to future invoices. For US 501(c)(3) nonprofits, that's a Sales Tax Certificate of Exemption or your IRS determination letter. For Canadian First Nations exemptions, it's a Certificate of Indian Status. A **W-9 alone isn't a sales-tax exemption**. We need the state- or country-issued exemption document. See [Tax-exempt status](#tax-exempt-status) for the full list.
***
# MessageDesk Compliance Center
Source: https://docs.messagedesk.com/settings/workspace-settings/compliance-center
Manage SMS compliance in MessageDesk. Configure opt-in confirmations, STOP and HELP keywords, signatures, and double opt-in flows for TCPA-safe messaging.
# MessageDesk Compliance Center
Set how your workspace handles SMS opt-outs, opt-out confirmations, signatures, and STOP keywords. Clearly and carrier-friendly.
***
## Access the Compliance Center
Go to **Account → Settings → Compliance Center** (under **Workspace Settings**).
If you don't see Compliance Center, your role may not include access. Ask an Admin or Manager.
***
## SMS compliance overview
The **Overview** tab covers U.S. SMS compliance basics and recommended practices.
By law, when sending business text messages in the United States, you must follow these guidelines:
1. Don't send any SHAFT-C-related content.
2. Only message contacts who've opted in to receive messaging from you.
3. Respect opt-out. When contacts reply "STOP," don't send any additional messages.
4. Don't send messages outside of normal business hours.
## How MessageDesk helps keep you compliant
MessageDesk automatically enforces:
1. "Reply STOP to opt-out" for every contact who replies STOP at any time.
2. Opt-out tracking for each number across your entire workspace.
3. When contacts opt out of messaging, MessageDesk tracks this for you.
***
## Opt-out configuration
MessageDesk gives you two ways to configure opt-out.
### 1. Inbox Opt-Out (carrier-preferred)
If a contact opts out on **one** phone number, they're blocked from **every** number in your workspace.
**When to use.** Works best for most teams: single standard, fewer compliance mistakes, can produce better deliverability.
### 2. Phone Number Opt-Out
If a contact opts out of messaging from **one** number, they can still receive texts from **other** numbers in your workspace.
**When to use.** Each number serves a distinct audience or purpose (with separate consent).
***
## Opt-out confirmation
Opt-out confirmation sends a message confirming the contact has opted out. Fine-tune what the contact sees immediately after they unsubscribe.
**What happens by default**
* MessageDesk sends an **automatic confirmation** acknowledging the opt-out.
* The conversation shows an **opt-out banner**, and future sends are blocked.
**Edit the opt-out confirmation:**
1. Click **Edit**.
* Edit the message to include a confirmation that the contact has opted out, plus a brief note about how to **opt back in** (see "Re-opt in" below).
***
## Opt-out signature
Add a standard opt-out line ("Reply STOP to opt out.") to every sent message. Improves clarity and helps you meet carrier expectations.
**Options:**
* **Apply to all sent messages (carrier-preferred).** Most compliant. Least confusing for recipients.
* **Include once per conversation.** Adds the signature only to the first outbound message in a thread.
**How to set.** **Settings → Compliance Center → Opt-Out → Signature**.
**Tips:**
* Keep it short and standard: "Reply STOP to opt out."
* Pair with your business/organization name when appropriate for context.
***
## STOP keywords
MessageDesk manages opt-outs automatically when a contact replies with a supported keyword:
* `stop`
* `unsubscribe`
Variations (case/spacing) are supported.
**What you'll see**
* The contact gets an **automatic confirmation**.
* An **opt-out notice** appears in the thread.
* Future sends are **blocked** based on your configured scope.
***
## Opt-out best practices
* **Message only opted-in contacts.**
* **Respect opt-outs immediately.** Don't follow with a "last message."
* **Include opt-out language** (signature) on non-conversational sends.
* **Avoid spam triggers.** Generic short links, all caps, excessive punctuation.
* **Send during business hours** when possible.
***
## Troubleshooting
**I can't text a contact anymore.**\
They may be opted out. Check the **opt-out banner** in the thread and review **scope** in Compliance Center.
**Switching numbers didn't bypass an opt-out.**\
You probably have **Inbox Opt-Out** enabled. Switch to **Phone Number Opt-Out** only if your compliance policy allows distinct consent per line.
**A contact wants to opt back in.**\
Ask them to send **START** (or another explicit consent message) from the same number. Confirm opt-in and resume messaging per your policy.
**Our messages are being filtered.**\
Turn on the **opt-out signature** for clarity, review content for potential spam triggers, and confirm your **carrier registration** status for each line.
# Custom Fields for Contact Data
Source: https://docs.messagedesk.com/settings/workspace-settings/custom-fields
Create custom contact fields in MessageDesk to store data like account ID, renewal date, or product interest, then merge values into SMS templates.
# Custom Fields: Organize Contacts and Send Smarter Messages
Custom fields let you save the contact details that matter.
Think region, location, membership type, assigned rep, renewal month, program, or any other contact detail you need to track.
That matters because once the data is on the contact, you can use it. You can [filter contacts](/contacts/create-import) by a custom field, save that filter as a reusable list, and come back to it anytime. Then you can select that group and send the right message to the right people.
Custom fields turn contact data into action.
***
## What are custom fields?
A custom field is a contact field you create yourself.
Use custom fields when the default contact fields aren't enough for how your team works. They help you track the details you care about, keep contacts organized, and build reusable groups for outreach.
For example, you might create custom fields for:
* Region
* Store location
* Customer type
* Assigned rep
* Renewal month
* Membership status
* Campus
* Lead source
***
## Why custom fields matter
Custom fields help you do more than store data.
They help you group contacts in a way that matches your business. Once that data is saved, you can:
* filter contacts by a specific field value
* save that filter as a reusable list
* return to that list anytime
* select contacts in that list
* send a message to that group fast
That means less manual sorting, fewer mistakes, and faster outreach.
***
## Access custom fields
1. Click your **profile icon** (top-right).
2. Select **Settings**.
3. Under **Workspace Settings**, click **Custom Fields**.
**Don't see Custom Fields?** Your role may not include access. Ask an Admin or Manager to adjust your [permissions](/settings/workspace-settings/team-management).
***
## Create a custom field
1. Go to **Settings → Workspace Settings → Custom Fields**.
2. Click **Create Custom Field**.
3. Enter a **name** for the field (e.g., "Customer ID", "Account Type").
4. Select a **field type** (see supported types below).
5. Click **Save**.
Choose your field type carefully. The type determines what data can be stored and how it's validated during import and entry.
***
## Supported field types
| Type | Description | Example value |
| -------------- | ------------------------------ | -------------------------------- |
| **Text** | Free-form text input | `"Enterprise"` |
| **Number** | Numeric values only | `12345` |
| **Date** | Date values | `2026-04-13` |
| **True/false** | Boolean toggle | `true` / `false` |
| **Dropdown** | Select from predefined options | `"Gold"`, `"Silver"`, `"Bronze"` |
***
## Edit a custom field
1. Go to **Settings → Workspace Settings → Custom Fields**.
2. Find the field you want to update.
3. Click to **edit** the field name or configuration.
4. Click **Save**.
***
## Delete a custom field
1. Go to **Settings → Workspace Settings → Custom Fields**.
2. Find the field you want to remove.
3. Click **Delete**.
4. Confirm the deletion.
Deleting a custom field **permanently removes** the field and its data from every contact. This can't be undone.
***
## Where custom fields appear
* **Contact details.** View and edit custom field values on any contact record from the [Inbox](/inbox/overview) or Contacts module.
* **Contact filters.** Use custom fields as filter conditions when [filtering contacts](/contacts/create-import#filter-contacts).
* **CSV import.** Map CSV columns to custom fields during [contact import](/contacts/create-import#import-contacts-in-bulk-via-csv). Values must match the field's defined type.
* **Message compose and templates.** Insert any custom field as a personalization tag from the `#` menu in the message composer. See [Templates and personalization tags](/messaging/templates-tags#available-tags).
Adding, renaming, or deleting a custom field immediately updates the matching tag everywhere it's used, including in saved message templates.
***
## Permissions
Custom fields access is controlled through [roles and permissions](/settings/workspace-settings/team-management):
| Role | Default access |
| ---------------- | ------------------------------------------------- |
| **Admin** | Owner (full access) |
| **Manager** | Editor (create, edit, view) |
| **Operator** | Viewer (view only) |
| **Custom roles** | No access by default. Must be granted explicitly. |
Users without custom fields access will see a **Blocked Resource** placeholder.
***
## Example: send a message to one region
Say you want to message everyone in the West region.
First, create a custom field called **Region**.
Then add a region value to each contact, like:
* West
* Midwest
* South
* Northeast
Once your contacts have a region value, go to **Contacts** and filter for:
`Region = West`
Save that filter as **West Region**.
Now you have a reusable contact list. Anytime you need to send a regional update, open the **West Region** filter, select the contacts in that view, and send your message.
That's where custom fields pay off. Set them up once, and your team uses them again and again.
***
## Ways to use custom fields
The best custom fields help you answer one question:
**Who do I need to message together later?**
Here are a few common ways teams use them.
### Regional outreach
Create a custom field like **Region** or **Territory**.
Use it to build saved filters for each region so you can send location-based updates, alerts, promotions, or reminders.
**Example.**\
Filter contacts where `Region = West`, save the filter, then use it whenever you need to send a message to that region.
***
### Multi-location businesses
Create a custom field like **Store Location**, **Office**, or **Branch**.
This makes it easy to group contacts by location and send updates that only matter to that site.
**Example.**\
Filter contacts where `Store Location = Mesa`, then send a message about that location's hours, staffing, or appointments.
***
### Staffing and recruiting
Create fields like **Job Site**, **Candidate Stage**, or **Recruiter**.
This helps you organize contacts by hiring workflow and send messages to the right group at the right time.
**Examples.**
* Filter `Candidate Stage = Interview Scheduled` to send reminders.
* Filter `Job Site = Reno` to send a site-specific update.
* Filter `Recruiter = Alex` to see and message one rep's contacts.
***
### Membership and community groups
Create fields like **Membership Type**, **Campus**, **Chapter**, or **Program**.
This helps you send targeted reminders and announcements without rebuilding lists every time.
**Example.**\
Filter `Membership Type = Premium` to send updates only to that group.
***
### Sales and account management
Create fields like **Assigned Rep**, **Renewal Month**, or **Customer Segment**.
These fields help your team stay organized and follow up faster.
**Examples.**
* Filter `Assigned Rep = Jamie` so one rep can work their own book of business.
* Filter `Renewal Month = June` to send proactive renewal reminders.
* Filter `Customer Segment = Enterprise` to send messages to a specific account tier.
***
## Best custom fields to create first
If you're not sure where to start, begin with fields that help you segment contacts and act on that segment later.
Good first custom fields include:
* Region
* Location
* Customer type
* Status
* Assigned rep
* Renewal month
* Membership type
* Lead source
A good rule: create fields that help you group contacts for future messaging.
***
## What makes a good custom field?
A good custom field is easy to understand, easy to keep updated, and useful for filtering.
### Good custom field
**Region**
Why it works:
* Clear values.
* Easy to assign.
* Easy to filter.
* Useful for saved lists and messaging.
### Less useful custom field
**Notes from trade show conversation**
Why it's less useful:
* Too inconsistent.
* Hard to filter cleanly.
* Not ideal for building reusable contact groups.
Use custom fields for structured information you want to organize and act on. Use notes for context.
***
## Tips for setting up custom fields
Keep your custom fields simple.
### Use consistent values
If one contact says `West` and another says `Western Region`, your filters won't be as useful.
Pick one format and stick with it.
### Create fields your team will actually use
Don't create fields just because you can. Create fields that support a real workflow.
### Think ahead to filtering
Before you create a field, ask:
**Will I want to group contacts by this later?**
If the answer is yes, it's probably a good custom field.
### Start small
You don't need to create everything at once. Start with one or two fields that support your most common messaging workflows.
***
## Common workflow: from custom field to message
A simple way to think about it:
**Custom field** → **Filter** → **Saved list** → **Message**
For example:
**Region** → **West** → **West Region** → **Send update to West contacts**
Your team doesn't have to rebuild the audience every time. That saves time.
***
## When to use custom fields vs. labels
Use **custom fields** when you want structured contact data that you can filter by later.
Use **labels** when you want a more flexible way to tag or organize conversations.
### Use a custom field when:
* The value should live on the contact record.
* The field should stay consistent.
* You want to filter and build reusable lists from it.
### Use a label when:
* You need something lightweight and flexible.
* The grouping is temporary or less structured.
* You don't need a formal field on the contact.
If you're deciding between the two, ask whether this is a structured property of the contact. If it is, use a custom field.
***
## FAQs
### Can I use custom fields to build reusable contact lists?
Yes. Once contacts have values in a custom field, you can filter by that field and save the filter for quick access later.
***
### Can I message contacts from a saved filter?
Yes. After opening a saved filter in Contacts, you can select the contacts in that filtered view and send a message to that group.
***
### What kinds of custom fields should I create?
Create fields that help you organize contacts in a way your team can use later.
Good examples include region, location, assigned rep, status, membership type, and renewal month.
***
### Should I create a custom field for everything?
No. Start with the fields that support a real workflow. Too many fields can make your contact data harder to manage.
***
### Do custom fields help with segmentation?
Yes. That's one of their biggest benefits. Custom fields make it easier to group contacts, save those groups, and send more relevant messages.
***
## Next step
Start with one simple field that supports a real messaging workflow.
For most teams, **Region**, **Location**, or **Assigned Rep** is a good place to begin.
Once that field is added to your contacts, build a saved filter from it. Then use that filter the next time you need to send a targeted message.
That's where custom fields earn their keep.
# Import, export, and search message history
Source: https://docs.messagedesk.com/settings/workspace-settings/data-center
Import contacts and historical SMS messages, then search, filter, and export your full MessageDesk message history from the Data Center.
# Data Center
The **Data Center** is your hub for managing workspace data in MessageDesk. It has three tabs:
* **Import:** upload CSVs of contacts and historical messages, map fields, resolve duplicates, and monitor progress.
* **Message History:** search, filter, and export every message sent or received in your workspace.
* **Export:** run a full CSV export of your workspace's contacts.
Looking to **view or export existing messages**? Jump to [Message History](#message-history). To **export contacts**, jump to [Export](#export). To export a **single conversation** directly from the Inbox toolbar, see [Export a conversation](/inbox/export-conversation).
Message History exports, contact exports, and per-conversation exports all run through the same **universal export system**. Each one processes asynchronously in the background and delivers the file through the **Export Available** button in the top nav plus an **export completed email** to the user who triggered it.
Imports work the same way. When a contact, message, message template, label, or opt-out import finishes, MessageDesk sends an **import completed email** to the user who started it with a summary of the run.
***
## Access the Data Center
Go to **Account → Settings → Data Center** (under **Workspace Settings**), then choose the **Import**, **Message History**, or **Export** tab.
**Don't see Data Center?** Your role may not include access. Ask an Admin or Manager to adjust your permissions.
***
## How to import contacts
Build your contact list quickly by uploading a **CSV** and mapping it to MessageDesk fields.
### Start an import
1. Open **Settings → Data Center**.
2. Click **Start Import**.
3. Choose your **.csv** file and upload.
### Map your columns
* Columns that match MessageDesk field names **auto-map**.
* Adjust mapping manually as needed.
* You can map [custom fields](/settings/workspace-settings/custom-fields). Make sure the CSV data type matches the field type.
* A single contact can carry **multiple phones, emails, and addresses**. Map each column (for example, `mobile`, `work_phone`, `email_home`, `email_work`, `address_billing`, `address_shipping`) to its own field. They all attach to the same contact record.
### Review duplicates and errors
* MessageDesk **updates duplicates** (matched by **email** or **phone**) with the values in your import. Only mapped columns with a value get updated. Empty cells leave existing fields unchanged.
* The importer flags **invalid data** (for example, bad phone or email format) so you can fix it and re-upload.
* Processing **skips** problem rows.
### Monitor progress
After you start the import, you'll see the real-time status. When complete, a summary shows total **processed**, **imported**, **skipped**, and any **error reasons**.
See [**Create and Import Contacts**](/contacts/create-import) for a step-by-step walkthrough.
***
## How to import messages
Import **past SMS** from any platform or service into MessageDesk so you keep the full conversation context.
### Start a message import
1. Open **Settings → Data Center**.
2. Click **Start Import**.
3. Upload your **.csv** file.
### Map your data
* Map CSV columns to MessageDesk **message fields** (timestamp, direction, phone number, text, channel/line).
* Review and confirm the mapping for accuracy.
### Validate, review, and import
* Preview parsed messages and fix any errors the validator surfaces.
* Click **Import** to start processing. A bottom banner flags pre-import issues (if any).
### Supported message types
* **Outbound (sent)** messages.
* **Inbound (received)** messages.
* **1-on-1** conversations.
* **Group** conversations.
**Not supported for message import.** Media attachments (images, videos, files) and internal comments.
### How message import works
* **Automatic conversation creation:** If a conversation doesn't exist for a row, MessageDesk creates it.
* **Existing conversations:** Rows match into existing threads when possible.
* **Channel requirement:** You can only import messages into **outbound channels that already exist** in your workspace.
***
## How to import message templates, labels, and opt-outs
Bulk-load your workspace's shared **message templates**, **labels**, or **opt-out list** from CSV. Each importer runs from the same **Import** tab as contacts and messages, and delivers an **import completed email** when it finishes.
### Import message templates
Migrate a template library from another platform or seed a new workspace.
1. Open **Settings → Data Center → Import**.
2. Click **Start Import** and upload your **.csv** of templates.
3. Map columns to template fields (name, body, tags, and any media URL).
4. Review the preview, then click **Import**.
The importer updates templates that match an existing template by **name** in place. New names create new templates. See [Message Templates](/settings/workspace-settings/message-templates) for how the library is managed after import.
### Import labels
Recreate a label library in bulk instead of adding labels one at a time.
1. Open **Settings → Data Center → Import**.
2. Click **Start Import** and upload your **.csv** of labels.
3. Map columns for **name**, **color**, and **icon**.
4. Click **Import**.
The importer updates any label that matches an existing label by **name** with the imported color and icon. See [Labels](/settings/workspace-settings/labels) for how the shared label library works.
### Import opt-outs
Move an existing opt-out list into MessageDesk so MessageDesk blocks those numbers from all outbound sends in the workspace.
1. Open **Settings → Data Center → Import**.
2. Click **Start Import** and upload your **.csv** of opt-outs.
3. Map the **phone** column (E.164 format).
4. Click **Import**.
Opt-out imports are **workspace-scoped**. MessageDesk blocks each imported number from every phone line in this workspace. If your tenant has multiple workspaces, run the import in each one that needs the block.
MessageDesk skips phone numbers already on the workspace opt-out list as duplicates. See [Anonymous, opted-out, and blocked contacts](/contacts/anonymous-opt-out-blocked) for what opting out means for a contact.
***
## File requirements and limits
**Format**
* **CSV only** (`.csv`).
* **UTF-8** encoding.
* Include a **header row**.
* Each row must have the **same number of columns** as the header.
**Required data**
* For **contacts**: At least one method: **email** *or* **phone**
* For **messages**: Required fields typically include **timestamp**, **direction** (inbound/outbound), **phone number(s)**, **message text**, and **channel/line identifier**
**Validation**
* Emails must be a valid email format.
* Phone numbers must be valid **E.164** (`+15551234567`).
* [Custom fields](/settings/workspace-settings/custom-fields) must match their **defined type**.
* Duplicate detection runs on **email** and **phone** (contact imports).
**Limits**
* **Max rows per file:** **5,000**
* **Max file size:** **10 MB**
* **Platform:** **Web only** (imports aren't supported on mobile or desktop apps)
If a limit is exceeded, you'll see errors like **"CSV file is too large"** or **"Imports are only supported on web."**
***
## What gets imported
* **Contacts**
* [**Custom fields**](/settings/workspace-settings/custom-fields) (when mapped)
* **Messages** (text content only. No media or internal comments.)
* **Message templates** (name, body, tags, and any media references from the source template)
* **Labels** (name, color, icon)
* **Opt-outs** (phone numbers that should be blocked from receiving messages in this workspace)
***
## Message History
The **Message History** tab is a searchable, filterable archive of every message in your workspace. Use it to audit conversations, build reports, or export filtered slices to **CSV** or **PDF**.
### Access message history
Go to **Settings → Data Center → Message History**.
### Filter your messages
Narrow the list using the filter controls at the top of the tab. Available filters:
* **Phone Numbers:** scope results to one, several, or **all** phone lines in the workspace (see [Scope by phone number](#scope-by-phone-number))
* **Date range:** limit results to a specific window. Setting the same date for start and end returns the full day's messages (00:00 – 23:59 in your workspace time zone).
* **Direction:** inbound or outbound
* **Message Type:** filter by message type
* **Contact:** messages tied to a specific contact
* **Label:** conversations carrying a given [label](/inbox/labels)
* **User/agent:** messages sent by a specific teammate
* **Status:** delivery state (e.g., delivered, failed)
### Scope by phone number
Use the **Phone Numbers** filter to control which phone lines are included in the view and any export.
* **All Phone Numbers.** Leave every line checked to include the **entire workspace's Message History across all phone lines** in a single export.
* **A single phone number.** Uncheck the others to scope Message History (and the resulting export) to **just that line**. For example, only your Front Desk or only your Sales Line.
* **A subset of lines.** Check any combination of lines to export just those.
**Tenant-level exports aren't supported.** Message History exports are scoped to a **single workspace**. If your tenant has multiple workspaces, run the export in each workspace separately. There's no concurrent export across all workspaces on a tenant.
### Search within results
Use the **search bar** to run a free-text search across the messages currently shown. Search runs **on top of your active filters**, so you can drill into a filtered slice rather than the entire archive.
### Export your text message history to CSV or PDF
Click **Export** to download a CSV of the current view. Use CSV exports for **data analysis, reporting, and bulk archiving**. For a shareable, human-readable record, use **PDF** instead.
You can export at two levels of scope:
* **All phone lines in a workspace.** Leave every line checked in the **Phone Numbers** filter to export the workspace's full Message History in one file.
* **A single phone number.** Uncheck the other lines in the **Phone Numbers** filter to export Message History for just that line.
Exports include **only the messages that match your active filters and search**. Adjust filters before exporting if you need a broader set.
**Export is disabled when the current view has zero results.** If your filters, date range, or search return no messages, the **Export** button is greyed out. Adjust filters to widen the result set before exporting.
**Tenant-level exports aren't supported.** If your tenant has more than one workspace, Message History exports run **per workspace**. There's no way to export across all workspaces on a tenant in a single file.
When your export finishes processing, you'll get it two ways:
* An in-app **"Export Available"** button in the top nav. Click it to download your `.csv` or `.pdf` file.
* An **export completed email** with a download link, sent to the user who triggered the export.
See [Notification Preferences](/settings/my-settings/notification-preferences) to manage push and browser notifications for the same event.
Use PDF exports to create **shareable, human-readable records** of a conversation or a filtered slice of message history. Useful for audits, compliance reviews, or sharing context with stakeholders.
* **From a conversation.** Open the conversation in the Inbox, click the **⋯ More Options** menu in the conversation toolbar, and choose **Export → PDF**. See [Export a conversation](/inbox/export-conversation) for the full per-conversation flow.
* **From Message History.** Apply your filters in **Settings → Data Center → Message History**, then choose **Export to PDF**.
PDF exports include the full message thread with timestamps, participants, direction, and inline previews of supported media.
**Media handling**
* The PDF embeds **renderable media** (images and other formats supported in PDF) inline.
* For **non-renderable media** (videos and other unsupported file types), the PDF shows a direct **S3 link to the file** and the note **"Could not load preview"** so the attachment stays accessible.
### Permissions
Roles with Data Center access (typically **Admin** and **Manager**) can use Message History. Ask an Admin to adjust your role if you don't see the tab.
***
## Export
The **Export** tab runs full CSV exports of your workspace's **contacts**, **message templates**, **labels**, and **opt-out list**. Use it when you need a complete backup of a list for archiving, reporting, or moving data to another system.
### Access the Export tab
Go to **Settings → Data Center → Export**.
### Export your contacts to CSV
1. Open the **Export** tab.
2. Click **Export Contacts**.
3. The export runs asynchronously in the background. Keep working in MessageDesk while it's preparing.
**Contact exports are a full workspace dump.** The CSV includes every contact in the workspace. Filtered contact exports (by label, custom field, saved filter, and so on) aren't supported in this version.
**Tenant-level exports aren't supported.** Contact exports are scoped to a **single workspace**. If your tenant has multiple workspaces, run the export in each one separately.
### What's included in a contact export
Each row in the CSV contains a contact's standard fields (name, phone numbers, email, address, and so on) plus **every custom property** defined in your workspace.
* **Standard fields.** First and last name, all phone numbers, all emails, all addresses, and other built-in contact properties.
* **Custom properties.** Each [custom field](/settings/workspace-settings/custom-fields) on the workspace becomes its own column. Contacts without a value for a given custom property leave that cell blank.
### When your export is ready
Contact exports run through the same **universal export system** as Message History and per-conversation exports. When the file is ready, you'll get it two ways:
* The **Export Available** button appears in the top nav. Click it to download the CSV.
* An **export completed email** with a download link, sent to the user who triggered the export.
Notifications only go to the **user who triggered the export**, not to your whole team. See [Notification Preferences](/settings/my-settings/notification-preferences) to manage push and browser notifications for the same event.
### Export message templates, labels, and opt-outs
The Export tab also runs full workspace exports of your shared **message templates**, **labels**, and **opt-out list**.
1. Open the **Export** tab.
2. Click **Export Message Templates**, **Export Labels**, or **Export Opt-outs**.
3. Each export runs asynchronously and delivers through the same **Export Available** button and **export completed email** as contact exports.
Each export is a full workspace dump. Filtered exports aren't supported.
### Permissions
Roles with Data Center access (typically **Admin** and **Manager**) can use the Export tab. Ask an Admin to adjust your role if you don't see it.
## Frequently asked data import and export questions
### What file types can I upload?
**CSV only.** Export Excel files (`.xlsx`) to CSV first.
### Do contacts need both email and phone?
No. Each row must include **at least one**: **email** or **phone** (you can include both).
### How are duplicates handled on contact import?
MessageDesk checks **email** and **phone**. When a row matches an existing contact, MessageDesk **updates** that contact with the values from the import. Updates only apply to columns you mapped, and only when the mapped column has a value. Empty cells leave existing fields unchanged. Updates apply to standard fields (name, email, phone, address, and so on) and custom fields.
### Why did some rows fail?
Common reasons: invalid email/phone format, missing required fields, custom field type mismatch, or a channel that doesn't exist (for message imports). Fix and re-upload.
### Can I import more than 5,000 rows?
Split your data into multiple CSV files. Each file can hold **up to 5,000 rows** and **≤ 10 MB**.
### Can I import from mobile?
No. Imports are **web-only**. Use a desktop browser.
**What's the difference between Inbox search and Message History?**
The [Inbox](/inbox/filter-search-sort) is for working live conversations. **Message History** is the workspace-wide archive built for audit, reporting, and bulk export.
**What format are exports in?**
**CSV** for data and reporting, or **PDF** for shareable conversation records.
**Can I export Message History across every phone line at once?**
Yes. In **Settings → Data Center → Message History**, leave every line checked in the **Phone Numbers** filter and click **Export**. That produces a single file covering the entire workspace. To export just one line, uncheck the others before exporting.
**Can I export Message History across all workspaces on my tenant?**
No. Message History exports are scoped to a **single workspace**. If your tenant has multiple workspaces, run the export in each workspace separately.
**Can I export my contacts?**
Yes. Open **Settings → Data Center → [Export](#export)** and click **Export Contacts** to run a full CSV dump of every contact in the workspace. Filtered contact exports (by label, custom field, saved filter, and so on) aren't supported yet.
**How do I know when an export is ready?**
Every export delivers two ways: an **Export Available** button in the top nav, and an **export completed email** with a download link to the user who triggered it. Contact, Message History, and per-conversation exports all share the same in-app notification because they all run through the universal export system.
**Are media attachments included in exports?**\\
* **CSV exports.** No. CSV files contain message text and metadata only.
* **PDF exports.** The PDF embeds renderable media (images) inline. For non-renderable media (videos and other unsupported types), the PDF shows a direct S3 link and a **"Could not load preview"** note.
***
## Best practices
* **Normalize phone numbers** to **E.164** before upload.
* **Clean your data.** Dedupe and validate emails to cut skips.
* **Test with a small CSV** (10–20 rows) to confirm mapping and validation.
* **Keep a backup** of your source CSV and **import results** for audit.
# Developer Tools
Source: https://docs.messagedesk.com/settings/workspace-settings/developer-tools
Configure your MessageDesk webhook endpoint and signing secret in Developer Tools. Required before using the Send Webhook relay action.
# Developer Tools
The **Developer Tools** page is where you configure the workspace-level webhook endpoint and signing secret MessageDesk uses to push events to your systems.
**Required for the Send Webhook relay action.** This configuration must exist before the [Send Webhook](/relays/webhooks) action will deliver events from your Relays.
***
## Open Developer Tools
Go to **Account → Settings → Workspace Settings → Developer Tools**.
***
## Add a webhook endpoint URL
1. Click **Add endpoint** (or edit your existing endpoint).
2. Enter the **URL** that MessageDesk should POST events to. It must:
* Use **HTTPS**.
* Be reachable from the public internet.
* Respond with a **2xx** status code on success.
3. Click **Save**.
Configure your endpoint here once and reference it from any number of Relays that use the **Send Webhook** action.
***
## Generate and rotate your signing secret
MessageDesk signs every outbound webhook with a **signing secret** so your receiver can verify the request really came from MessageDesk.
* **Generate.** Click **Generate signing secret** the first time you set up Developer Tools.
* **View / copy.** Copy the secret into your receiver's configuration. Store it somewhere safe.
* **Rotate.** Click **Rotate signing secret** to generate a new value. Update your receiver immediately. Webhooks signed with the previous secret will fail validation after rotation.
Treat the signing secret like a password. Anyone with it can forge webhook requests that look like they came from MessageDesk.
For the full webhook payload format, headers, signature validation algorithm, and retry behavior, see [Relays → Send Webhook](/relays/webhooks).
***
## Who can use Developer Tools
The **Developer** feature permission gates Developer Tools, API key management, and [Zapier](/integrations/zapier) authentication.
| Role | Developer access |
| ------------ | -------------------- |
| **Admin** | Owner (full) |
| **Manager** | No Access by default |
| **Operator** | No Access by default |
To let Managers, Operators, or custom roles manage webhooks, API keys, or build Zapier workflows under their own account, an admin must grant **Editor** or **Owner** on the **Developer** feature via a custom role. **Viewers** can read Developer Tools but can't create Zapier workflows under their own auth.
See [Team Management → Roles & Permissions](/settings/workspace-settings/team-management) to customize roles.
***
## See also
* [Relays → Send Webhook](/relays/webhooks). Payload, signature validation, and retry behavior.
* [Relays overview](/relays/overview).
# Inbox Settings
Source: https://docs.messagedesk.com/settings/workspace-settings/inbox-settings
Inbox-related workspace settings in MessageDesk: Labels, Message Templates, and Relays. Each now lives in its own dedicated settings page.
# Inbox Settings
The Inbox-related workspace settings (**Labels**, **Message Templates**, and **Relays**) each now have their own dedicated settings page. Use the links below to jump to the one you want.
Workspace settings act as **defaults**. **User preferences always override** workspace defaults and **aren't** overwritten by later workspace changes.
***
## Labels
Manage your workspace's shared **label library**. Create, edit, and delete labels (name, color, icon) that the whole team can apply to conversations.
→ [Labels](/settings/workspace-settings/labels)
For how labels get **applied** inside conversations and used in filters, see [Inbox → Labels](/inbox/labels).
***
## Message Templates
Manage your workspace's shared **message templates**: pre-approved, reusable messages with optional descriptions, tags, and media that any teammate can pull into a conversation.
→ [Message Templates](/settings/workspace-settings/message-templates)
For how templates and **personalization tags** work when composing a message, see [Messaging → Templates & personalization tags](/messaging/templates-tags).
***
## Relays
Manage workspace **Relays** from the Relays module or from Workspace Settings. Update status, edit triggers/conditions/actions, or delete a Relay.
→ [Relays overview](/relays/overview)
To configure the webhook endpoint and signing secret used by the **Send Webhook** relay action, see [Developer Tools](/settings/workspace-settings/developer-tools).
***
## Permissions
Admins (and Managers, if allowed by your [**Roles and Permissions**](/settings/workspace-settings/team-management)) can update these workspace settings. Each linked page lists the specific access required for that resource.
# Labels
Source: https://docs.messagedesk.com/settings/workspace-settings/labels
Manage your workspace's label library in MessageDesk. Create, edit, and delete shared labels (name, color, icon) that everyone on your team can apply to conversations.
# Labels
The **Labels** settings page is where you manage the **shared label library** for your workspace. It's the catalog of labels that everyone on your team can apply to conversations.
Looking for how to **apply** labels inside a conversation, build label-based filters, or rename labels from the inbox? See [Inbox → Labels](/inbox/labels). This page covers **managing the label library** from Settings.
***
## Open the Labels page
Go to **Account → Settings → Workspace Settings → Labels**.
***
## Create a new label
1. Click **Create label**.
2. Set the label's properties:
* **Name:** short and scannable (e.g., `Support: Urgent`, `Region: West`).
* **Color:** pick a color to help teammates spot it at a glance.
* **Icon:** choose an icon that fits the label's purpose.
3. Click **Save**.
The label becomes available everywhere labels are used: conversation label menus, filters, and views.
Use short prefixes like `HR:`, `Sales:`, or `Support:` to group related labels. Labels sort alphabetically, so prefixes are an easy way to control where they appear in lists.
***
## Edit a label
1. Find the label in the list (or search by name).
2. Click the label to open its editor.
3. Update the **name**, **color**, or **icon**.
4. Click **Save**.
Renaming a label updates it **everywhere** it's already applied. Existing conversations keep the relationship to the label. Only the displayed name, color, or icon changes.
***
## Delete labels
You can delete a single label or multi-select to delete several at once.
**Single label:**
1. Find the label in the list.
2. Click the **delete** icon.
3. Confirm.
**Bulk delete:**
1. Multi-select the labels you want to remove.
2. Click **Delete selected**.
3. Confirm.
Deleting a label removes it from every conversation it was applied to.
***
## Label sort order
Labels sort **alphabetically (A–Z)** by name across label menus, settings, and filters. To control where a label appears, rename it with a prefix (`HR:`, `Support:`).
***
## Who can manage labels
Your role controls access to label management:
| Role | Labels access |
| ------------ | ----------------------------- |
| **Admin** | Owner (create, edit, delete) |
| **Manager** | Editor (create, edit, delete) |
| **Operator** | Editor (create, edit, delete) |
See [Roles and Permissions](/settings/workspace-settings/team-management) for the full default permissions table and how to customize roles.
***
## Import and export labels
You can move labels in and out of MessageDesk in bulk from the [Data Center](/settings/workspace-settings/data-center).
* **Import labels.** Upload a CSV of labels and map columns for name, color, and icon. The importer updates any label that matches an existing label by **name** with the imported color and icon. See [Import labels](/settings/workspace-settings/data-center#import-labels).
* **Export labels.** Run a label export from the Data Center to get a CSV of every label in the workspace.
When an import or export finishes, MessageDesk sends a **completed email** to the user who started it.
***
## See also
* [Inbox → Labels](/inbox/labels): apply labels to conversations and filter by label
* [Team Management and Permissions](/settings/workspace-settings/team-management)
# Message Templates
Source: https://docs.messagedesk.com/settings/workspace-settings/message-templates
Manage your workspace's shared message template library in MessageDesk. Create, edit, delete, and bulk-manage templates that every teammate can use when composing.
# Message Templates
The **Message Templates** page is where you manage your workspace's shared template library. It's the set of pre-approved, reusable messages your whole team can pull into a conversation.
Looking for how to **use** templates when composing a message, or how to insert personalization tags like `{{ ContactFirstName }}`? See [Messaging → Templates and personalization tags](/messaging/templates-tags). This page focuses on **managing the template library** from Settings.
***
## Open Message Templates
Go to **Account → Settings → Workspace Settings → Message Templates**.
***
## Create a new template
1. Click **Create template**.
2. Fill in the template fields:
* **Name:** descriptive and short (e.g., `Appt Reminder – 24h`). The name is what teammates see in the picker.
* **Description:** a one-line summary. Shown alongside the name in the template picker so teammates can pick the right one fast.
* **Body:** the message content. Supports **personalization tags** (e.g., `{{ ContactFirstName }}`, `{{ WorkspaceName }}`) and emoji.
* **Tags:** optional tags for organization.
* **Media:** optionally attach images, PDFs, or other media that send with the template.
3. Click **Save**.
The template's available to your team immediately.
***
## Edit a template
1. Find the template in the list (or search by name).
2. Click the template to open its editor.
3. Update the **name**, **description**, **body**, **tags**, or **media**.
4. Click **Save**.
***
## Delete templates
You can delete a single template or multiple templates at once.
**Single template:**
1. Find the template in the list.
2. Click the **delete** icon.
3. Confirm.
**Multi-select delete:**
1. Select the templates you want to remove.
2. Click **Delete selected**.
3. Confirm.
***
## Template picker UI
The template picker that teammates use when composing shows each template's **name**, **description**, and a **Preview** button to view the full message body before applying it. Easier to pick the right template at a glance.
Templates sort **alphabetically (A–Z)** by name in the picker and in settings. To control ordering, prefix the name (`Sales:`, `Support:`).
***
## Who can manage Message Templates
Your role controls access to template management:
| Role | Message Templates access |
| ------------ | ----------------------------- |
| **Admin** | Owner (create, edit, delete) |
| **Manager** | Editor (create, edit, delete) |
| **Operator** | Editor (create, edit, delete) |
See [Roles and Permissions](/settings/workspace-settings/team-management) for the full default permissions table and how to customize roles.
***
## Import and export templates
You can move templates in and out of MessageDesk in bulk from the [Data Center](/settings/workspace-settings/data-center).
* **Import templates.** Upload a CSV of templates and map columns to name, body, tags, and media. The importer updates any template that matches an existing template by **name** in place. See [Import message templates](/settings/workspace-settings/data-center#import-message-templates).
* **Export templates.** Run a template export from the Data Center to get a CSV of every template in the workspace for backup or migration.
When an import or export finishes, MessageDesk sends a **completed email** to the user who started it.
***
## See also
* [Messaging → Templates and personalization tags](/messaging/templates-tags): use templates and tags when composing
* [Team Management and Permissions](/settings/workspace-settings/team-management)
# Workspace Settings Overview
Source: https://docs.messagedesk.com/settings/workspace-settings/overview
Tour MessageDesk workspace settings. Manage organization details, branding, time zone, default behaviors, and admin controls for your team account.
# Workspace Settings Overview
Workspace Settings store **organization-level** info that applies to every user in your MessageDesk inbox: name, branding, address, website, and analytics.
**Workspace Settings vs. Tenant Management.** Workspace Settings (this section) configure a **single workspace**: labels, templates, team, billing, and other per-workspace details. **Tenant Management** is an **organization-level** concept that lives **outside** Settings, accessed from the **workspace switcher / workspace selection screen**, and is only available to tenant admins. Use it to update tenant company details or create additional workspaces under your company. See [Tenant Management](/get-started/tenant-management).
***
## Open Workspace Settings
1. Click your **profile icon** (top-right).
2. Select **Settings**.
3. In the left nav, open **Workspace Settings**.
**Desktop recommended.** Most Workspace Settings are available on desktop. Some (like Analytics) are also available on mobile.
***
## What you can view & edit
**General**
* **Workspace image/icon** (used across the app).
* **Workspace name** (shown to teammates and used in tags like `{{ WorkspaceName }}`).
* **Mailing address**.
* **Website URL**.
**Custom Fields**
* **[Custom Fields](/settings/workspace-settings/custom-fields).** Create and manage custom fields to store extra data on contacts (customer IDs, account types, appointment dates).
**Analytics**
* **[Workspace Analytics](/settings/workspace-settings/analytics).** View messaging metrics, delivery rates, and activity breakdowns by channel and user.
**Identifiers (read-only)**
* **Created date** (shown for reference).
**Who can edit?** Admins, and Managers (if permitted by your [Roles & Permissions](/settings/workspace-settings/team-management)), can update Workspace Settings.
***
## Update general workspace information
1. Go to **Account → Settings → Workspace Settings → Workspace Profile**.
2. Click **Edit**.
3. Update your **image/icon**, **name**, **address**, or **website**.
4. Click **Save**.
Changes to name/branding take effect immediately for every user.
***
## Cancel a subscription vs. delete a workspace
**Subscriptions and workspaces are separate.** Cancelling a subscription doesn't delete a workspace, and deleting a workspace isn't tied to your billing cycle.
| Action | Where | What happens |
| ------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Cancel subscription** | In-app | Severs the subscription ↔ workspace link at the end of the billing period. The workspace enters a **locked state**. Data is retained for **90 days**, after which the workspace is **automatically deleted**. |
| **Delete workspace data** | Support only | Permanently removes workspace data on request. Used to delete a workspace **before** the 90-day window ends. You email a request from a workspace admin address and verify the card on file. Not reversible. |
| **Remove a teammate** | In-app | Revokes a single user's access. The workspace, its data, and its subscription stay intact. See [Team Management](/settings/workspace-settings/team-management). |
**Cancelled workspaces are automatically deleted after 90 days.** Once your subscription is cancelled and the billing period ends, the workspace enters a locked state and its data is retained for 90 days. If you don't resubscribe within that window, the workspace and its data are permanently deleted. Resubscribing before the 90th day unlocks the workspace with everything intact.
To cancel a subscription, see [Cancel subscription](/settings/workspace-settings/billing-subscriptions#cancel-subscription).
***
## Delete a workspace
Workspace deletion is a **support-only, permanent** action. There is no in-app button to delete a workspace.
### When to request deletion
* You want workspace data **permanently removed before** the automatic 90-day deletion window ends.
* You only want to stop paying: [cancel the subscription](/settings/workspace-settings/billing-subscriptions#cancel-subscription) instead. Your data stays intact for 90 days after the billing period ends, and you can reactivate the workspace by resubscribing within that window.
You don't have to contact support just to have a cancelled workspace deleted. **All cancelled workspaces are automatically deleted 90 days after cancellation.** Contact support only if you want the workspace deleted **sooner** than that.
### How to request deletion
To authorize a workspace deletion, email [support@messagedesk.com](mailto:support@messagedesk.com) with the following:
1. **Send from an email tied to an admin user** on the workspace.
2. **Workspace name** and **tenant** (if you have more than one).
3. **Last 4 digits of the card on file** for verification.
4. (Optional) Request a **final data export** before deletion. See [Data Center](/settings/workspace-settings/data-center#message-history) for what can be exported.
Workspace deletion is **permanent and can't be undone**. MessageDesk removes conversations, contacts, phone-line configuration, and settings. If you want to keep numbers you host or purchased through MessageDesk, [port them away](/settings/workspace-settings/phone-management#port-your-number-away-from-messagedesk) first.
If your tenant has multiple workspaces and you only want to remove one, tell support which workspace to delete. Other workspaces under the same tenant aren't affected. See [Tenant management](/get-started/tenant-management).
# Manage Phone Numbers & Lines
Source: https://docs.messagedesk.com/settings/workspace-settings/phone-management
Add, rename, organize, assign, and remove connected phone numbers and lines in your MessageDesk workspace. Best practices for naming and team routing.
# Manage connected phone lines, naming, and call forwarding
Connect new phone lines, rename existing ones (with emojis for easy ID), set up call forwarding, and keep everything organized for your team.
***
## Navigate to Phone Management
1. Go to **Account → Settings → Workspace Settings → Phone Management**.
2. You'll see every connected phone line with options to **Add** and **Edit**.
> **Permissions.** You'll need the right role to manage numbers (**Manager = Editor**, **Operator = Viewer** by default). See [**Roles & permissions**](/settings/workspace-settings/team-management) if you don't see controls.
***
## Add a new phone line / number to MessageDesk
1. In **Phone Management** under **Workspace Settings,** click **+ Add phone number**.
2. Choose the type you want to connect or purchase:
* [Overview (connecting phone lines)](/get-started/phone-numbers/overview).
* [Purchase a new text-only local number](/get-started/phone-numbers/purchase-new).
* [Host your existing Landline/VoIP](/get-started/phone-numbers/landline-voip).
* [Toll-Free (text-enabled)](/get-started/phone-numbers/toll-free).
* [Connect Twilio phone numbers](/get-started/phone-numbers/twilio).
To add additional non-Twilio phone lines, complete [Carrier Registration](/a2p-registration/a2p-overview) first (10DLC for local, verification for toll-free).
***
## Name/label phone lines (and add emojis)
Clear names make routing and triage faster, especially with multiple lines.
1. Go to **Settings → Phone Management**.
2. Click **Edit** next to a phone line.
3. Enter a **Line name** ("Support – West" or "Dispatch 🚚").
4. (Optional) Add an **emoji** for quick visual scanning in the Inbox.
5. Click **Update**.
You can also edit the name of a phone line from your **inbox**. Hover over a phone line, click the **three dots (more) icon,** and then click **Rename**.
***
## Move a phone number between workspaces
If your tenant has multiple workspaces, you can move a connected phone number from one workspace to another. [Contact support](/contact-us) to initiate the move.
**You'll lose the conversation history on that number.** To move a number, MessageDesk first removes it from the source workspace. This also removes every **conversation tied to that number** from that workspace. After the move, the destination workspace starts fresh, and **neither workspace can view** the previous conversation history.
**No fee to move the number itself**, but workspace seats are billed **per user, per workspace**. If a teammate needs access to both workspaces after the move, they're billed in each. Confirm seat impact before requesting the move.
If your only goal is to limit which users see a specific phone line, you usually **don't** need to move the number to a separate workspace. Use [Roles & permissions](/settings/workspace-settings/team-management#user-roles-and-permissions) to grant per-line access inside your existing workspace. See [Tenant management](/get-started/tenant-management#do-i-need-a-separate-workspace-or-just-user-permissions) for the full decision guide.
***
## Port your number away from MessageDesk
To move your phone number to a different provider:
1. **Submit a Letter of Authorization (LOA) to your new provider.**\
Your new provider needs an LOA to start the hosting or porting process.
2. **New provider starts the port/host request.**\
Once they have your LOA, your new provider begins managing your number configuration. The process typically takes up to 48 hours.
3. **Wait for the transfer to finish.**\
During the transfer period, MessageDesk can't take any action. The new provider handles the entire process.
**Carrier registration campaigns aren't transferable.** You can't move a carrier registration campaign completed with MessageDesk to your new provider. You'll need to complete a new carrier registration with your new provider before you can text.
**No porting PINs or account numbers required.** Moving your texting services out of MessageDesk doesn't require any porting PINs or account numbers. MessageDesk doesn't need to take any action to release your number.
Contact your new provider before starting the porting process to understand their specific porting and hosting requirements.
***
## Remove a phone number from MessageDesk
Removing a number is a **support-only** action. There's no in-app button to remove a phone line. Our dev team processes the request manually and cleans up the associated data.
**Removing a number permanently deletes every conversation tied to it.** All message history associated with the number is deleted from the workspace and can't be recovered. If you want to keep a record, [export the message history](/settings/workspace-settings/data-center#export-your-text-message-history-to-csv-or-pdf) for that phone line **before** you submit the request.
### Before you request removal
1. **Export the message history** for the phone line you're removing. See [Data Center → Export your text message history to CSV or PDF](/settings/workspace-settings/data-center#export-your-text-message-history-to-csv-or-pdf).
2. Decide whether you actually want to **remove** the number or [**port it away**](#port-your-number-away-from-messagedesk) to a different provider. Porting preserves the number itself; removal releases it.
3. If you want to keep the number but reassign it to a different workspace under the same tenant, see [Move a phone number between workspaces](#move-a-phone-number-between-workspaces) instead.
### How to request removal
Email [support@messagedesk.com](mailto:support@messagedesk.com) with the following:
1. **Send from an admin email** associated with your workspace.
2. **Workspace name** and **tenant** (if you have more than one).
3. The **phone number(s)** you want removed, in E.164 format (for example, `+13802101240`).
4. Confirmation that you've **exported any message history** you need to keep.
Our dev team will process the request and confirm once the number has been removed.
***
## Call forwarding
Route inbound calls to any phone number you choose. Voice calls to your MessageDesk lines reach the right person, while texts stay in the Inbox.
1. Go to **Settings → Workspace Settings → Phone Management**.
2. Click the phone number you want to configure to open its **Phone Profile** page.
3. Enter a **Call Forwarding number** and save.
Inbound calls to that line now forward to the destination number you set.
Call forwarding works on most MessageDesk-connected phone lines. You can't configure call forwarding in-app for **Twilio-connected** numbers today. The setup process is different for Twilio numbers. If you need forwarding, contact [support@messagedesk.com](mailto:support@messagedesk.com) and we'll configure it manually on a per-number basis.
### Call logs
Each phone number's **Phone Profile** page includes a **Call Logs** table. It lists every inbound call MessageDesk forwarded, along with the forwarding details for that call.
### Call forwarding events in message threads
When MessageDesk forwards an inbound call, it adds a **Call Forwarded** event to the matching conversation thread in the Inbox. Your team gets full context on voice activity alongside the SMS history.
## Best practices
* **Use a naming pattern.** `Team – Region` ("Sales – East"), or `Use-case` ("Reminders 📅").
* **One line per purpose.** Keep support, sales, and dispatch on their own lines for cleaner reporting and routing.
* **Complete carrier registration.** Finish **10DLC** (local) or **toll-free verification** before sending messages or connecting phone lines.
***
## FAQ
**How many phone lines can I connect?**\
Most workspaces can connect up to 48 phone lines to MessageDesk. Many teams run with several. If you plan to scale, contact support for guidance.
**Can I move a conversation to a different phone line?**\
Conversations live on the line where they started. For new outreach, compose from the line you want.
**Do I need carrier registration for each line?**\
No. You can apply one carrier registration to **every connected phone line**. Toll-free and Twilio-connected phone lines need separate **carrier registration and verification**.
**Who can add or edit lines?**\
Users with **Phone Numbers = Editor** permission (typically **Managers** or **Admins**).
**How do I remove a phone number from MessageDesk?**\
Removal is support-only. Email [support@messagedesk.com](mailto:support@messagedesk.com) from an admin address with the workspace name and the number(s) you want removed. **Removing a number permanently deletes all message history tied to it.** Export the history first if you need to keep it. See [Remove a phone number from MessageDesk](#remove-a-phone-number-from-messagedesk) for the full checklist.
# Team Roles, Permissions and Invites
Source: https://docs.messagedesk.com/settings/workspace-settings/team-management
Invite users to your MessageDesk workspace, accept invitations, and manage team access with admin, manager, and agent roles plus granular permissions.
# Team management: invite teammates and set roles with permissions
Get your team on board fast, then control who can see, edit, and delete what without slowing anyone down.
***
## TL;DR
* **Invite teammates.** **Settings → Team Management → Invite Teammate**.
* **Accept invite.** Teammate creates an account with the **same email** from the invite.
* **Access.** Use **Roles** (Admin/Manager/Operator/Custom) + **feature permissions**.
* **Permission levels.** **Owner** (view/edit/delete), **Editor** (view/edit), **Viewer** (view), **No Access** (blocked).
* **Deleting messages from a thread.** Only users with **Owner** permission on a phone number's Inbox Access can delete messages. By default, only **Admins** have Owner access to every phone line.
***
## How to invite and manage teammates
### Invite teammates
1. Go to **Settings**, then click your profile image (top right).
2. Open **Team Management** under **Workspace Settings**.
Don't see Team Management? Ask your workspace admin. Your role may not include access.
3. Click **Invite Teammate**, enter one or more **email addresses**, select a **Role**, then click **Send**.
Inviting teammates increases your **seat count** and updates your **subscription** automatically. Learn more: [Billing and Subscription](/settings/workspace-settings/billing-subscriptions).
### Accept an invitation
* The invite email links to `inbox.messagedesk.com/#/create-account`.
* The teammate must sign up with the **same email** that received the invite.
* After signup, they're automatically added to your workspace and any assigned inboxes.
### Update a user's role or details
1. **Team Management**, then select the user.
2. Click **Edit Details** or **Change User Role**.
3. Choose a new **Role** from the dropdown.
4. Changes **save automatically** and apply immediately (a refresh may be required).
### Remove a user from your workspace
1. **Team Management**, then select the user.
2. Click **Remove Member**, then **Confirm**.
3. Access is revoked immediately.
### Manage invitations
After sending invites, you'll see each user's status:
* ❌ **Pending:** User hasn't created an account yet.
* ✅ **Joined:** User created an account and joined your workspace.
To **resend** an invite: **Team Management → ⋯ (More) → Resend Invitation**.
***
## User roles and permissions
**Roles** are a collection of **Permissions** (access levels for features/settings).
Trying to decide between **per-user permissions** in one workspace and a **separate workspace**? Most teams should start here with roles and permissions. Only spin up a new workspace when distinct teams manage **separate contact lists** independently. See [Workspace vs. UAC](/get-started/tenant-management#do-i-need-a-separate-workspace-or-just-user-permissions) for the full decision guide.
### Default user roles (×3)
**1) Admin: full access**
* All features and resources (including account/billing): **Owner**
* Can't be removed by Managers/Operators
* Not editable or deletable (copy to customize)
**2) Manager: lead access**
* Most features: **Editor**.
* **Billing**, **Workspace Profile**, **Workspace Settings**: **Viewer**.
* **Team Management**, **Phone Numbers**: **Editor**.
* **Relay Management**, **Developer**: **No Access**.
**3) Operator: frontline access**
* **Contacts**, **Contact Properties**, **Custom Fields**, **Labels**, **Message Templates**: **Editor** (Custom Fields: **Viewer**).
* **Relay Management**, **Developer**: **No Access**.
* Everything else: **Viewer**.
***
## Default roles and permissions assignments
### Default role/permission feature assignment/access
| Feature | Purpose | **Admin** | **Manager** | **Operator** |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------: | :---------: | :----------: |
| **Phone number inboxes** | View, create, edit, and phone number views in the inbox | Owner | Editor | Editor |
| **Label inboxes** | View, create, edit, and label views in the inbox | Owner | Editor | Editor |
| **Teammate inboxes** | View, create, edit, and teammate views in the inbox | Owner | Editor | Editor |
| **Workspace profile** | View/update workspace name, address, and info. | Owner | Viewer | Viewer |
| **Inbox settings** | Apply, edit, and create templates and labels | Owner | Viewer | Viewer |
| **Billing & subscriptions** | View and manage workspace subscription, update billing information, and add/remove user seats. | Owner | Viewer | Viewer |
| **Team management** | Invite teammates, create and update user roles, and update user information. | Owner | Editor | Viewer |
| **Phone Management** | View and manage workspace phone numbers | Owner | Editor | Viewer |
| **Custom Fields** | Create, edit, and manage [custom fields](/settings/workspace-settings/custom-fields) on contacts | Owner | Editor | Viewer |
| **Relay Management** | View, create, edit, and manage Relays | Owner | No Access | No Access |
| **Developer** | Access developer features. API keys, webhook endpoints / signing secret in [Developer Tools](/settings/workspace-settings/developer-tools), [Send Webhook Relay action](/relays/webhooks), and [Zapier](/integrations/zapier) authentication. **Editor** or **Owner** required to create or run Zaps under that user's auth. | Owner | No Access | No Access |
| **Analytics** | View workspace messaging metrics, channel stats, and user activity | Owner | Viewer | No Access |
### What each permission level grants access to
Permissions let a user create, read, update, and delete information in MessageDesk. MessageDesk offers four permission levels: **Owner**, **Editor**, **Viewer**, and **No Access**.
| Feature | Owner | Editor | Viewer | No Access |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------- |
| **Phone number inboxes** | Full access and ownership for every conversation in this Inbox. **Only Owners can delete individual messages from a conversation thread.** Ability to import and export conversations in bulk. | Can create conversations, interact with, and view conversations for this Inbox. **Cannot delete messages from a conversation thread.** No bulk import or export. | Can view and interact with conversations in this inbox, but cannot create new conversations or delete them. **Cannot delete messages from a conversation thread.** | Blocked from viewing, editing, or deleting conversations in this Inbox. |
| **Label inboxes** | Full access and ownership for every conversation in this Inbox. **Only Owners can delete individual messages from a conversation thread.** Ability to import and export conversations in bulk. | Can create conversations, interact with, and view conversations for this Inbox. **Cannot delete messages from a conversation thread.** No bulk import or export. | Can view and interact with conversations in this inbox, but cannot create new conversations or delete them. **Cannot delete messages from a conversation thread.** | Blocked from viewing, editing, or deleting conversations in this Inbox. |
| **Teammate inboxes** | Full access and ownership for every conversation in this Inbox. **Only Owners can delete individual messages from a conversation thread.** Ability to import and export conversations in bulk. | Can create conversations, interact with, and view conversations for this Inbox. **Cannot delete messages from a conversation thread.** No bulk import or export. | Can view and interact with conversations in this inbox, but cannot create new conversations or delete them. **Cannot delete messages from a conversation thread.** | Blocked from viewing, editing, or deleting conversations in this Inbox. |
| **Workspace profile** | Designated owner who can edit and override workspace profile information, including name, address, and company details. | Can edit workspace profile information, including name, address, and company details. | Can view workspace profile information, but cannot make changes. | Blocked from workspace profile. |
| **Inbox settings** | Designated owner who can edit and override all inbox settings, including appearance, Labels, message templates, and configuration. | Can create, edit, and delete Templates and Labels for the workspace. | Can select existing Templates or Labels within the Inbox. Cannot create new or edit existing Templates or Labels. | Blocked from accessing Templates or Labels within the Inbox. No access to Inbox settings. |
| **Billing & subscriptions** | Designated owner who can fully manage billing, subscriptions, payment methods, and user seat allocations. Can upgrade, downgrade, and cancel subscriptions. | Can update billing information, manage subscriptions, and modify user seats. | Can view billing information and subscription details, but cannot make changes. | Blocked from access to billing information and subscription details. |
| **Team management** | Designated owner who cannot be removed from the workspace. They can fully manage team members, invite users, create/edit roles, and reset passwords. | Can invite teammates, remove teammates, manage user roles, and perform team administration. | Can view team member information and roles, but cannot make changes. | Blocked from team management with no ability to remove teammates. |
| **Phone Management** | Designated owner who can fully manage phone numbers, including adding, removing, and configuring all phone settings. | Can manage phone number settings and configuration for the workspace. | Can view phone number information, but cannot modify phone settings. | Blocked from accessing phone management settings and number information. |
| **Custom Fields** | Designated owner who can fully manage [custom fields](/settings/workspace-settings/custom-fields), including creating, editing, and deleting all custom field definitions and values. | Can create, edit, and manage custom fields for the workspace. | Can view custom field values on contacts, but cannot create, edit, or delete custom fields. | Blocked from accessing custom fields. Users see a Blocked Resource placeholder. |
| **Relay Management** | Designated owner who can fully manage Relays, including creating, editing, deleting, and configuring all Relay settings. | Can create, edit, and manage Relays for the workspace. | Can view Relay configurations, but can't create, edit, or delete Relays. | Blocked from accessing the Relays module. Can't view, create, or manage Relays. |
| **Developer** | Full access. Manage API keys, configure the webhook endpoint and signing secret, and build and run Zapier workflows under their own auth. | Can configure Developer Tools, and can build and run Zapier workflows under their own auth. | Read-only view of Developer Tools. Can't create or run Zapier workflows under their own auth. | Blocked from Developer Tools, API keys, and Zapier authentication. |
| **Analytics** | Full access to workspace analytics dashboard, including all metrics, channel-level stats, and user-level activity data. | Can view workspace analytics dashboard, including all metrics, channel-level stats, and user-level data. | Can view workspace analytics dashboard with read-only access to all metrics. | Blocked from accessing the analytics dashboard. |
**Who can delete messages from a conversation thread?**
Only users with **Owner** permission on a phone number's Inbox Access can delete individual messages from a conversation thread. **Editors**, **Viewers**, and users with **No Access** can't delete messages.
By default, only **Admin** users have **Owner** access to all phone lines connected to your MessageDesk workspace. **Managers** and **Operators** receive **Editor** access to phone number inboxes by default and **can't** delete messages.
If you don't want a user to be able to delete messages from a conversation thread, make sure that user **doesn't have Owner permission** on the phone line. Adjust their role or use a [custom role](#custom-roles--permissions) to grant **Editor**, **Viewer**, or **No Access** on the relevant **Phone number inboxes**.
## Custom roles and permissions
Create custom roles for users in your workspace.
### Create a custom role
You can rename, edit, or delete a custom role at any time. Before deleting, reassign any teammates associated with the role.
1. **Account → Settings → Team Management**.
2. Click **Create new role**, name it. (Optional.)
Use **Copy permissions from an existing role** as a starting point.
3. Set per-feature access (**Owner / Editor / Viewer / No Access**).
4. Adjust **feature** access for specific **Phone Lines**, **Labels**, **Teammate** Inboxes, and other **Workspace Settings**.
Uncheck **Select all** to grant/remove access on **specific** phone lines, labels, or teammate inboxes.
5. **Save changes** and apply your new role to teammates.
### Edit, delete, or rename a custom role
1. **Account → Settings → Team Management**.
2. Click **Edit** on the **custom role** you want to edit.
3. Click **Delete** on the custom role you want to delete.
4. Update the **role name** or adjust **permissions** as needed.
5. **Save changes** to update and apply immediately (users may need to refresh).
Reassign users associated with a custom role before you can fully delete the role.
***
## Custom role templates (examples you can copy)
**Support Agent (Frontline)**
* Features: Contacts/Labels/Templates = **Editor**. Broadcasts = **Viewer**. Billing/Settings = **Viewer**.
* Resource-level: Editor on **Support line(s)** and **Support labels** only.
**Dispatcher (Operations/Logistics)**
* Features: Contacts/Labels/Templates = **Editor**. Phone Numbers = **Viewer**. Relays = **Viewer**.
* Resource-level: Editor on **Dispatch line**, **Region labels** (West/East).
**HR Coordinator (Internal Comms)**
* Features: Broadcasts = **Editor**. Contacts/Labels/Templates = **Editor**. Billing/Phone Numbers = **Viewer**.
* Resource-level: Editor on **HR labels** (Benefits, New Hire), Viewer elsewhere.
**View-Only Auditor (Read-Only)**
* Features: Everything = **Viewer**.
* Resource-level: Viewer on **All**. No Access to Billing if needed.
***
## FAQ
**I invited the wrong email. What now?**\
Remove the pending invite from **Team Management** and send a new invite to the correct email.
**Unlimited teammates and roles?**\
Yes. You can invite unlimited teammates and create unlimited custom roles. Each teammate counts as a **seat**.
**Role vs. Permission?**\
A **Role** is a collection of **Permissions**. A **Permission** is the access level for a specific feature or resource.
**Can I delete a custom role?**\
Yes. Go to **Settings → Team Management**, click **Edit** on the custom role, and select **Delete**. Reassign any teammates currently using the role before it can be fully deleted.
**Can Managers delete things?**\
No. Editors can't delete. Only the **Owner** can delete.
**Who can delete messages from a conversation thread?**\
Only users with **Owner** permission on a phone number's Inbox Access can delete individual messages from a conversation thread. By default, only **Admin** users have **Owner** access to all phone lines. To prevent a user from deleting messages, make sure their role does **not** have **Owner** permission on that phone line. Use **Editor**, **Viewer**, or **No Access** on **Phone number inboxes** instead.
**What happens when a message is deleted?**\
When an Owner deletes a message, it's a **soft delete**. The message is removed from the front end, but MessageDesk retains the message history on the back end. This data is exportable for compliance and record-keeping purposes.
**Limit someone to one phone line?**\
Grant **Editor** on that **Phone Number** and set others to **Viewer/No Access**.
**Can I use phone line extension numbers with MessageDesk?**\
MessageDesk doesn't directly integrate with or support texting for phone line extension numbers. You can configure **user Roles and Permissions** to limit access to certain phone lines. You can also use **conversation assignment** and **Relays** to automate who gets assigned to what conversation on any given phone line.
**See a conversation without line/label access?**\
Yes. **Assignment** to the conversation grants **Editor** on that thread.
**Restrict to certain labels (e.g., Support: Urgent)?**\
Grant **Editor** on that label and set others to **Viewer/No Access**.
**Do changes apply immediately?**\
Yes. Have users **refresh** to see the updated UI.
**Who can access Relays by default?**\
Only **Admin** users have access to Relays and Zapier by default. Admins can grant **Relay Management** or **Developer** permissions to other roles via custom role configuration to unlock those features. Learn more: [Relays Overview](/relays/overview).
**Who can build Zapier workflows?**\
Any user whose role grants **Editor** or **Owner** on the **Developer** feature. Admins have this by default. For other roles, grant Developer access via a custom role. Viewers can't authenticate Zapier under their own account, so any Zap built or owned by a Viewer will fail to run. See [Zapier](/integrations/zapier).
***
## Troubleshooting
**Invite not received**
* Check **spam/junk** and verify the **email address**.
* Resend: **Team Management → ⋯ → Resend Invitation**.
* Still missing? Ask IT to allowlist `messagedesk.com` and try again.
**User can't see Team Management**
* Their role likely has **Viewer/No Access** for **Team Management**. An **Admin** or **Manager** (Editor) must adjust.
**User can't see Relays**
* By default, only **Admin** users have access to Relays. An **Admin** must grant **Relay Management** permissions to the user's role via custom role configuration.
**Buttons are greyed out**
* The user is likely a **Viewer** on that feature, or the action requires **Owner**. Hover for the tooltip, then upgrade access if appropriate.
**User sees conversations they shouldn't**
* Check for **assignment** (assignment grants Editor).
* Review **resource-level** permissions (wildcards `*` on Labels or Phone Numbers).
* Remove any **user override** that elevates access.
**Role changes didn't "stick"**
* Ask them to **refresh**.
* Confirm there isn't a conflicting **override** or **resource-level** restriction.
***
## Team management best practices
* **Least privilege first.** Start with **Operator**. Elevate only as needed.
* **Prefer roles over overrides.** Keep exceptions rare and documented.
* **Mirror your routing.** If you route by **phone line** or **label**, set permissions the same way.
* **Quarterly audits.** Review who has **Owner** on **Billing**, **Phone Numbers**, and **Team Management**.
* **Onboarding checklist.** Invite, assign role, confirm resource-level access, share key labels/lines, verify login.
* **Offboarding checklist.** Remove member, reassign conversations, review resource permissions, audit roles.
***
# Workspace Profile
Source: https://docs.messagedesk.com/settings/workspace-settings/workspace-profile
Manage your workspace's name, address, website, and logo in MessageDesk. This information is used in carrier registration and should stay consistent across your account.
# Workspace Profile
The **Workspace Profile** page is where you manage your workspace's identity: name, address, website, and branding. These fields also feed **A2P/carrier registration**, so the info you enter here should match what you submitted to the carriers.
***
## Open Workspace Profile
Go to **Account → Settings → Workspace Settings → Workspace Profile**.
***
## Fields you can edit
* **Workspace name.** Shown to teammates throughout MessageDesk and used in personalization tags like `{{ WorkspaceName }}`.
* **Address.** Your business address. Used as the registered address for compliance and carrier registration.
* **Website.** Your company website URL. Referenced during carrier registration.
* **Logo / branding.** Upload a workspace logo for in-app branding.
After updating, click **Save changes**.
***
## Who can edit Workspace Profile
Your role controls access:
| Role | Workspace Profile access |
| ------------ | ------------------------ |
| **Admin** | Owner (full edit) |
| **Manager** | Viewer |
| **Operator** | Viewer |
See [Roles & Permissions](/settings/workspace-settings/team-management) for the full default permissions table and how to customize roles.
***
## Keep this consistent with carrier registration
Your Workspace Profile feeds **A2P 10DLC** and **toll-free** carrier registration. Changes to your **legal business name**, **address**, or **website** after you've registered may require a resubmission or update with the carriers to keep your messaging compliant.
If you need to update registration details, see [Carrier Registration → Overview](/carrier-registration/overview) and the [Compliance Center](/settings/workspace-settings/compliance-center).
***
## See also
* [Carrier Registration overview](/carrier-registration/overview)
* [Compliance Center](/settings/workspace-settings/compliance-center)
* [Team Management & Permissions](/settings/workspace-settings/team-management)