Using the Unified Inbox
Conversations aggregates messages from all connected channels into a single inbox. Reply to emails, SMS, WhatsApp, Facebook, Instagram, X, LinkedIn, and YouTube comments — all from one screen.
Steps
- Go to Conversations from the sidebar.
- Click "+ Compose" at the top of the conversation list to start a brand-new message — pick a channel, search an existing contact (or type a new email/phone), add subject + body, Send.
- Browse existing threads on the left panel — each shows the channel icon, contact name, and last message preview.
- Click a thread to view the full conversation and reply with the channel tabs at the bottom of the message pane.
- Use the channel selector at the top to filter by specific channels — All, Email, SMS, WhatsApp, Web Chat, Facebook, Instagram, LinkedIn.
- Click the contact name to view their full CRM profile.
Good to know
- Drafts: anything you start and don't send is saved automatically — replies inside a conversation and new messages from Compose. Find them under Conversations → Drafts (next to Inbox / Sent / Deleted); click one to pick up where you left off, or hover and click Discard. Drafts are private to you and follow you to any device. Compose shows "Draft saved" once it has been stored.
- Scheduled sends: pick a time with the clock button when sending. Until it goes out, the message shows an amber "Sends <time>" pill with an Edit button — change the text, Cc/Bcc or time, click Send now, or Cancel send (nothing is sent and the message moves to Drafts). Conversations → Scheduled lists everything you have queued. Once a message has started sending it can no longer be edited.
- AI Draft: Click the AI icon to generate a suggested reply based on conversation context.
- Templates: Save and reuse message templates for common responses.
- Assign conversations to team members for collaboration.
- Compose auto-creates a contact for new email/SMS recipients you don't have yet.
- Threads load 30 messages at a time by default (max 100). Scroll up to load older messages on demand — the inbox doesn't pull the full history in one shot to keep large threads fast.
- Web Chat filter covers both the modern webchat module and legacy chat-widget (live_chat) rows — picking it shows every visitor chat session regardless of which widget produced it.
- Deep-linkable filters: any URL with ?channel=instagram (or sms / webchat / etc.) opens Conversations pre-filtered. Used by the Website Capture hub's "View messages →" links.
- Channel-aware empty state: when a filtered channel returns 0 conversations, the panel shows a "Set up <channel> →" link pointing to the right install page (Workspace Sync for email, Calls & Numbers for SMS, Website Capture for the others).
- Per-user inbox channel scope: Settings → Organization Members → click the inbox icon next to a member to pick which channels they see (e.g., marketing → Facebook/Instagram/X/LinkedIn; customer service → Web Chat/Email). Empty list = full access. Owners and admins always see every channel and the icon is hidden on their rows. Hiding the channel pill also blocks reading and replying to those conversations server-side.
- Email tracking pill: outbound email bubbles show a HubSpot-style status pill in the message footer — gray "Sent" → blue "Opened" (or "Opened 3x" for repeats) → green "Clicked" / "Clicked 2x". Hover for the full timeline (sent / first open / last open / first click / last click).
- Apple Mail caveat: an "Opened?" pill in gray means the only open fired within ~30s of sending — Apple Mail Privacy Protection prefetches every tracking pixel on receipt, so it isn't proof a human read it. Real reads usually arrive minutes to hours later.
- Tracking is per-message via an invisible pixel + rewritten links. It works for emails sent from CRMown (1:1, drip, campaign). Emails sent from outside CRMown (Gmail web, Outlook desktop) won't have the pixel and stay in the inbox without tracking data.
- Non-email outbound delivery pill: SMS / WhatsApp / social DM bubbles show a simpler pill driven by Message.status + readAt — gray "Sent", blue "Delivered" (WhatsApp via Meta status webhook), blue "Read" (WhatsApp 'read' event sets readAt), red "Failed". SMS stays at "Sent" unless a Twilio status-callback hook is configured.
- Engagement Report: 📊 button next to Compose opens /dashboard/conversations/insights — org-wide 90-day roll-up of opens / clicks / replies, 30-day sparkline of send and open volume, top 10 engaged contacts (ranked by opens + 3x clicks), and top 10 clicked links (querystrings stripped so utm-tagged variants merge). Pure read; no AI tokens.
- Bounce & spam pills: outbound email bubbles flip to red "Bounced" or "Spam" when the Resend webhook reports a delivery failure or recipient complaint. Tooltip shows the bounce reason. Future sends to that contact are blocked automatically — emailConsent flips off, doNotContact flips on. The same webhook handler updates Lead Gen sequences (OutboundEnrollment) and inbox 1:1 messages.
- Stale pill ("ignored / deleted" proxy): outbound email turns purple "Stale" when the recipient opened it 14+ days ago, never clicked any link, and never replied on the thread. Email protocols (SMTP/IMAP/Gmail API/Microsoft Graph) don't expose deletion or folder moves to senders, so this is the closest signal we can compute — practically equivalent to "ignored". Tooltip explains the limit.
- DND List: 🛡 button on /dashboard/contacts opens /dashboard/contacts/dnd — every contact opted out of any channel (global doNotContact, unsubscribed, or all-channels-off). Per-row source label shows why they opted out (preference center / unsubscribe link / SMS STOP / admin / bounce webhook). Filter by channel, search, export CSV, and "Re-consent" override (logged in audit history with source=admin_ui).
- Mark as DND quick action: Conversations → More menu → 🛡 Mark as DND flips the contact's doNotContact flag in one click without leaving the message thread. Use it when a contact replies "remove me from your list" — saves navigating to the contact sidebar. Idempotent — second click un-marks (admin override, also logged).
- SMS STOP/START handler: when a contact texts STOP / UNSUBSCRIBE / QUIT / CANCEL / END / STOPALL we flip smsConsent=false AND doNotContact=true automatically (TCPA compliance). START / YES / UNSTOP re-opt-in to SMS only (doesn't restore the global DND). Twilio also blocks at the carrier level; this just keeps our DB honest so the inbox UI shows the contact as opted-out. All keyword changes show in the contact's consent history with source=sms_stop_keyword / sms_start_keyword.
- DND-related templates: every org gets 6 seeded templates on first /messaging/templates load — 3 email (Confirm subscription / Unsubscribe confirmed / CASL footer) and 3 SMS (Confirm / Opt-out confirmed / Welcome). Tokens like {{contact.firstName}}, {{org.name}}, {{unsubscribeLink}}, {{preferenceLink}}, {{confirmLink}} are substituted at send time. Edit/delete via the Templates picker in the inbox compose box.
- Contact Timeline (GHL-style): the Timeline tab in the conversations sidebar now unions ActivityLog + Messages + TrackingEvent (email opens, link clicks, page visits, form submits, downloads) + ConsentLog (opt-out/opt-in events) + Bookings + PipelineItem changes. Engagement events show UTM source/campaign chips. Each event has a colored dot indicating its category (blue=engagement, teal=outreach, amber=consent, emerald=deal won, red=deal lost). Powered by GET /contacts/:id/timeline.
- Source-channel badge on conversation avatars: small colored dot on the bottom-right corner indicates the source — blue ✉ Email, green 💬 SMS, blue f Facebook, blue in LinkedIn, 𝕏 X, amber 🌐 Web Chat, red ▶ YouTube. GHL-style at-a-glance scan; the existing channel pill below the contact name stays for explicit labeling.
Example: A boutique fitness studio gets DMs from prospective clients on Instagram and Facebook, billing questions over email, and class reschedule requests by SMS. Instead of juggling 4 apps, the front desk works one inbox: filters Email + SMS for billing/scheduling, replies to social DMs in the same view, and uses AI Draft for repeatedly-asked "how do I cancel?" replies that just need a personal touch.
Troubleshooting
Sent an email but it's not in the thread
The email was sent from Gmail/Outlook directly, not through CRMown. The sync pulls it in on the next sync cycle (every 5 minutes).
Fix: Wait 5 minutes for the next sync, or click Sync Now in Connected Accounts. Emails sent from CRMown appear instantly.
Emails going to wrong contact
The email address matches a different contact in the system. CRMown matches emails to contacts by email address.
Fix: Check the "To" field before sending. If wrong contact is linked, update the contact's email or create a new contact with the correct email.
Error messages
Failed to send email— OAuth token may have expired. Reconnect your email account in Settings > Communications.Message too large— Attachments exceed the 25 MB limit. Reduce attachment size or use a file-sharing link.Rate limit exceeded— Too many emails sent in a short period. Wait 1 minute and retry. Gmail limits: ~500/day for Workspace, ~100/day for free accounts.
Plans
All plans include email conversations. SMS requires Twilio setup (bring your own account). WhatsApp requires Meta Business verification.
Related
- Connected Accounts — link Gmail/Outlook
- Contacts — conversations are linked to contacts
- Automation — workflows can auto-send emails based on triggers