Dealerships run website chat and Facebook/Instagram DMs through a third-party AI today. We are replacing it. Chat becomes a real channel in the CRM — pink, the one accent pair with no other meaning — beside Text, Email, Note, Log and Call in the composer, feed and row Inbox already owns.
Three things change. Every turn is its own message in the feed, one bubble each, rather than a batch of internal notes dumped after the fact. A rep steps into a thread the assistant is handling by switching the DAISI pill to Assist. And the conversation starts before the customer exists: a nameless website visitor chats, the AI holds the thread, and the whole transcript lands on the record when a phone number arrives.
Seven days on the incumbent at our largest affected dealership: 8,413 messages across 637 conversations — 48% handled by the assistant alone, 48% by the assistant and a human, 5% human only. Half of all conversations involve a human stepping in, so a rep must always be able to tell which turns were theirs. Chat is a follow-up to Inbox, which is in development now — it reuses the same composer, feed, row and header, so the two ship in sequence.
| Date | Ruling |
|---|---|
| 08-14 | Chat is pink — the one accent pair with no assigned meaning; no token was added. |
| 08-14 | Sub-channels are context, not tabs — ONE Chat tab; Website/Facebook/Instagram is a property of the conversation, displayed, never a picker (you cannot start a Facebook DM outbound, so a chooser would lie). |
| 08-14 | One bubble per turn, not one per session — individual activity items are the point; consecutive turns from the same actor group under one stamp. |
| 08-14 | Chat joins the unread badge — amending the 08-06 ruling that scoped it to call, SMS and email; the badge answers "who is waiting on me", and a waiting chat qualifies. |
| 08-14 | There is no takeover feature — a rep who wants the conversation switches the existing DAISI mode pill to Assist. No new control, no in-feed marker, nothing built. |
| 08-14 | AI and human turns stay visually distinguishable inside one thread — a change of actor always breaks a group. |
| 08-14 | The mark is fa-comments — both single-bubble marks are already spent on SMS. |
| 08-14 | The sub-channel is not shown at list density — the row has one icon slot and shows the class of sender. |
| 08-14 | Anonymous turns are never back-filled with a name once identity is known — the transcript records what was known at the time. |
| 08-17 | Online status is website-only — we host the chat widget, so we know the visitor has the page open; Meta's Conversations API returns conversation and message metadata only — there is no presence signal to read — so the cell is hidden entirely on Facebook and Instagram rather than faked. |
| 08-17 | Chat is inbound-initiated only — a rep cannot start a chat, so the Chat tab is disabled when no open thread exists. |
| 08-17 | The channel is chosen the way a Log type is chosen — the composer carries a channel cell that defaults to the customer's last inbound chat channel and only offers channels with an open thread. |
| 08-17 | Grouped turns keep their bubble header — only the stamp collapses; stripping the header broke the feed's pattern. |
| 08-17 | A grouped turn is a feed item, not a parallel atom — it composes as .sb-activity plus a modifier, so it inherits every feed override for free. |
| 08-17 | No reply-window countdown and no takeover marker — both removed as invented requirements. |
| 09-02 | Opening a conversation marks it read, dealership-wide — one shared timestamp on the customer; the first opener clears it for the whole team. Chat threads follow the same model since chat counts in the unread badge. |
Chat is a seventh channel in the one composer, with an availability model no other channel has.
A conversation is a run of turns, grouped by actor and marked where identity arrives.
How a conversation reads in the thread list — one icon slot carrying the class of sender.
Chat carries its sub-channel in the composer row, and on website chat the visitor's live presence.
Chat is the channel most likely to be used on a phone, so every state has a mobile answer.
Chat instances the existing UI atoms, but most of the channel behind them is new.
is_owner — which app is responsible for replying to a thread, part of Meta's Handover Protocol. A parallel ownership concept can disagree with it, and Meta decides whether a send is accepted./PAGE-ID/conversations, and the same person carries a Page-scoped id on Facebook but an Instagram-scoped id on Instagram — the id must be stored with its scope.Open questions — two Inbox rulings Chat contradicts: