Create a private note for you and your teammates...
Product guide
Notes are the private team layer inside a customer conversation. Agents use them for handovers, escalation context, order details, reminders, and background that should stay inside ReplyBox.
Create a private note for you and your teammates...
Customer prefers afternoon delivery. Check payment proof before confirming.
Daily workflow
Use the Message / Note tabs above the bottom input bar. Note mode stays available even when the channel is disconnected.
Add text, emoji, files, image attachments, PDFs, documents, or in-browser voice recordings.
The API stores the note in Postgres with author, timestamp, attachments, and conversation scope.
Realtime events fold new and deleted notes into the per-conversation cache without a full refresh.
Feature surface
Notes are never sent to WhatsApp. The UI marks them clearly with a private team label.
Notes are interleaved chronologically with customer messages so handover context stays where agents work.
The contact detail rail has Profile / Notes tabs, a count badge, author names, timestamps, and scrollable history.
Images render as thumbnails, files expose downloads, and voice recordings play inline.
Users can remove their own notes. Deletes are optimistic in the UI and confirmed by the backend.
The old mock filename remains, but the client now calls the real REST API and maps API fields at the boundary.
Backend contract
Notes live under the organization and conversation path. View requires conversation:read, create requires conversation:manage, and delete is author-only.
GET /organizations/{org}/conversations/{conv}/notes List note history.
POST /organizations/{org}/conversations/{conv}/notes Create a note and attachments.
DELETE /organizations/{org}/conversations/{conv}/notes/{id} Delete your own note.
Storage
Attachments are stored inline as base64 data_url values with a 3 MB cap per attachment. That is acceptable for the current rollout; before heavy production use, move note media to object storage and reuse the message-media streaming path.
notes + note_attachments
Migration0032_notes
Realtimenote.created + note.deleted
Implementation map
Web presentation
List rows show a small amber note glyph beside the pin for conversations that have notes, replacing the previous icon-plus-word chip. It uses the app token --rbx-note-marker for colour.
The note composer's Save action sits in the composer action row beneath the writing area, and the composer box no longer paints the notepad sheet over the entire card corner.
These are presentational changes: the marker only appears when the server provides the corresponding field, for example has_note or notes_count.
Status
Frontend and backend are built, typechecked, linted, rebased onto the message-flow work, and verified locally. The DigitalOcean database tables have been applied manually; deploying the live app remains intentionally on hold so production behavior changes only when you choose.