Edit and delete
Customers can edit or delete only their own messages, and only while the conversation is open. The window iseditWindowMinutes on the widget (default 15 minutes from createdAt). After that, the widget shows Edit window closed and the server rejects the request with edit_window_closed.
If the conversation is resolved or closed, the composer is replaced by reopen or start-new, and edit or delete is rejected.
Deleting is soft: deletedAt is set and both the widget and the inbox show a tombstone (This message was deleted). Agents follow the same ownership and window rules for their own chat replies.
In the widget, Esc cancels an in-progress edit. Delete shows an undo toast before the request is sent.
Reactions
The widget uses a fixed set of emoji: six quick reactions (π β€οΈ π π π π) plus a 24-emoji grid in the composer and on the message action bar. The server rejects any other emoji withinvalid_emoji.
Customers and agents can add or remove a reaction on any non-deleted chat message. Counts are per emoji; the customer view only shows whether the current contact reacted (mine).
Reopen
While a conversation is resolved and insidereopenWindowDays (default 7), the widget offers Reopen conversation and Start new. Reopen restores an open status and keeps the previous assignee. Past that window, or when the conversation is cancelled, only Start a new conversation is offered.
Unread
A message counts as read when the messenger is open, the tab is visible, and the agent message is in view. The widget sendsmarkRead (debounced). Unread is stored on the contactβs ConversationRead row, so the launcher badge stays in sync across devices.