Messages & conversation
Internal notes, attachments, mentions, replies, reactions, chat commands, translation, and editing rules inside a ticket thread.
Every ticket is a conversation thread shared between your team and the customer. This page covers what each side can do inside that thread. For who can reply in which status, see Ticket statuses.
Messages and Markdown
Messages support full Markdown (bold, italic, lists, code blocks, and more) and are limited to 10,000 characters. URLs in messages get rich previews: Joely fetches the page's Open Graph metadata server-side and renders a preview card (videos like YouTube embed directly in the thread).
Internal notes
Staff can post internal notes: messages that customers never see, anywhere. They are excluded from the portal thread, portal unread counts, and customer notifications.
- Posting one requires the
messages.create_internalpermission. - A reply to an internal note is always internal itself, so a private thread can never leak into the public conversation.
- Only staff can be @mentioned in an internal note.
File attachments
Both staff and customers can attach files to messages:
- Up to 5 files per message, 10 MB each.
- Allowed: images (except SVG), documents (PDF, Office), plain text and config files, archives, audio/video, and common code files.
- Blocked: executables, scripts, and macro-enabled documents. File contents are checked against the declared type, so renaming a blocked file does not get it through.
- A project-wide toggle can disable file uploads entirely; it applies to staff and customers alike.
Images render inline in the thread with a lightbox preview; other files are offered as downloads.
Editing and deleting
| Action | Staff | Customers |
|---|---|---|
| Edit | Own messages, with messages.edit_own | Own messages, except on closed tickets |
| Delete | Own messages with messages.delete_own, or any message with messages.delete_any | Own messages, except on closed tickets |
The project owner can always delete any message. When a staff member deletes a message, the matching Discord DM notification the customer received is deleted too. Edits and deletions propagate in real time to everyone viewing the ticket.
Replying to a message
Any message can be quoted as a threaded reply, showing an excerpt of the original with a scroll-to-original shortcut. You cannot reply to system messages or to pending AI drafts, and customers cannot reply to internal notes (they never see them).
Emoji reactions
Staff and customers can react to messages with emojis; reactions are visible to both sides and update in real time. Reacting twice with the same emoji removes your reaction. System messages and pending AI drafts cannot receive reactions. Your most-used emojis appear first in the picker.
@Mentions
Type @ to mention someone with autocomplete:
- Staff can mention team members with access to the ticket, the customer, and ticket participants. Two groups are available:
@team(every staff member) and@all(staff plus the customer and participants, public messages only). - Customers can mention staff and other participants, but not the
@teamgroup. - Mentioned users are notified in real time and see a badge on the ticket. See Notifications.
Chat commands
Staff can type / in the reply form to trigger commands with autocomplete:
/closecloses the ticket (requirestickets.change_status)./assign @nameassigns the ticket to a team member (requirestickets.assign).
Built-in commands can be enabled or disabled per project. Staff with the commands.manage permission can also create custom commands: reusable reply templates (up to 2,000 characters) triggered by /name. Templates support dynamic variables filled in when the command is used: {customer_name}, {ticket_id}, {project_name}, and {staff_name}.
Translation and AI correction
- Translation (Team plan and higher): translate any message into your language in one click. The translation is shown only to you and is not stored; the original message is untouched.
- AI correction (Team plan and higher): one-click polish of your draft before sending. See AI assistant.
Neither feature counts toward the monthly AI response quota.
Read state
- Joely tracks how far each person has read in every ticket. Staff can see when the customer has read their messages.
- Opening a ticket scrolls to the first unread message, marked with a "New" separator line.
- Any message can be marked as unread from its context menu to bring the ticket back into your unread queue. For staff this requires access to the ticket (
tickets.view_allor being assigned).
System messages
Joely posts automatic system messages for ticket events: status changes, scheduled closures and deletions, customer closure requests, and (visible to staff only) assignment changes. System messages cannot be replied to or reacted to.