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 Send internal notes permission.
- 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, common code files, and GTA/FiveM modding assets (RPF archives,
.ydr/.ytd/.ymapand other RAGE resources,.metadata files,.dll/.asimod libraries). - Blocked: executables, installers, shell and server-side scripts, macro-enabled documents, and HTML pages. File contents are checked against the declared type, so renaming a blocked file does not get it through — and a file whose content cannot be identified at all is refused too, unless its extension is a text format that legitimately has no signature (
.txt,.log,.lua,.cfg,.meta…). - 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 Edit own messages | Own messages, except on closed tickets |
| Delete | Own messages with Delete own messages, or any message with Delete any message | 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 (requires Change ticket status)./assign @nameassigns the ticket to a team member (requires Assign tickets)./ai [instruction]generates an AI reply draft from the conversation history, optionally steered by your instruction — e.g./ai give the installation instructions(requires Use AI to generate response suggestions). The draft appears in the thread as a pending message to review, edit, and approve before it is sent, exactly like the Ask AI button, and counts toward the monthly AI response quota. The aliases/iaand/kiwork in any language. An instruction can be up to 500 characters; without one, the command behaves like the Ask AI button.
Built-in commands can be enabled or disabled per project. Staff with the Manage chat command settings 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}.
Each custom command has a visibility. Everyone in the project is the default and makes the command available to every member, and it requires the Create and edit commands shared with the whole project permission on top of Manage chat command settings. Only me keeps the command private to the member who created it: nobody else sees it, in the commands settings or in the / autocomplete, and only its creator can edit or delete it. Command names stay unique across the whole project, private ones included.
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.
- Conversation translation (Team plan and higher): translate the whole thread at once from the languages button on the ticket page. Each message switches to a side-by-side view (original on the left, translation on the right) and new messages are translated automatically while the mode is on. Pick any target language from the bar above the conversation. Available on both the staff dashboard and the customer portal, and translations are never stored.
- In both translation modes, inline code and fenced code blocks are left untranslated: commands, identifiers, and snippets reach the reader exactly as written.
- 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 (View all tickets or 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.