[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"documentation:page:\u002Fdocumentation\u002Ftickets\u002Fmessages":3,"documentation:nav":446},{"id":4,"title":5,"body":6,"category":435,"description":436,"extension":437,"meta":438,"navigation":439,"order":440,"path":441,"seo":442,"stem":443,"updated":444,"__hash__":445},"documentation\u002Fdocumentation\u002Ftickets\u002Fmessages.md","Messages & conversation",{"type":7,"value":8,"toc":420},"minimark",[9,19,24,27,31,39,57,61,64,123,126,130,190,193,197,200,204,207,211,218,248,252,258,307,335,356,360,387,390,394,413,417],[10,11,12,13,18],"p",{},"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 ",[14,15,17],"a",{"href":16},"\u002Fdocumentation\u002Ftickets\u002Fstatuses","Ticket statuses",".",[20,21,23],"h2",{"id":22},"messages-and-markdown","Messages and Markdown",[10,25,26],{},"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).",[20,28,30],{"id":29},"internal-notes","Internal notes",[10,32,33,34,38],{},"Staff can post ",[35,36,37],"strong",{},"internal notes",": messages that customers never see, anywhere. They are excluded from the portal thread, portal unread counts, and customer notifications.",[40,41,42,51,54],"ul",{},[43,44,45,46,50],"li",{},"Posting one requires the ",[47,48],"permission-label",{"permission":49},"messages.create_internal"," permission.",[43,52,53],{},"A reply to an internal note is always internal itself, so a private thread can never leak into the public conversation.",[43,55,56],{},"Only staff can be @mentioned in an internal note.",[20,58,60],{"id":59},"file-attachments","File attachments",[10,62,63],{},"Both staff and customers can attach files to messages:",[40,65,66,76,102,120],{},[43,67,68,69,72,73,18],{},"Up to ",[35,70,71],{},"5 files per message",", ",[35,74,75],{},"10 MB each",[43,77,78,79,83,84,83,87,90,91,94,95,83,98,101],{},"Allowed: images (except SVG), documents (PDF, Office), plain text and config files, archives, audio\u002Fvideo, common code files, and GTA\u002FFiveM modding assets (RPF archives, ",[80,81,82],"code",{},".ydr","\u002F",[80,85,86],{},".ytd",[80,88,89],{},".ymap"," and other RAGE resources, ",[80,92,93],{},".meta"," data files, ",[80,96,97],{},".dll",[80,99,100],{},".asi"," mod libraries).",[43,103,104,105,72,108,72,111,72,114,72,117,119],{},"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 (",[80,106,107],{},".txt",[80,109,110],{},".log",[80,112,113],{},".lua",[80,115,116],{},".cfg",[80,118,93],{},"…).",[43,121,122],{},"A project-wide toggle can disable file uploads entirely; it applies to staff and customers alike.",[10,124,125],{},"Images render inline in the thread with a lightbox preview; other files are offered as downloads.",[20,127,129],{"id":128},"editing-and-deleting","Editing and deleting",[131,132,133,149],"table",{},[134,135,136],"thead",{},[137,138,139,143,146],"tr",{},[140,141,142],"th",{},"Action",[140,144,145],{},"Staff",[140,147,148],{},"Customers",[150,151,152,171],"tbody",{},[137,153,154,158,164],{},[155,156,157],"td",{},"Edit",[155,159,160,161],{},"Own messages, with ",[47,162],{"permission":163},"messages.edit_own",[155,165,166,167,170],{},"Own messages, except on ",[80,168,169],{},"closed"," tickets",[137,172,173,176,186],{},[155,174,175],{},"Delete",[155,177,178,179,182,183],{},"Own messages with ",[47,180],{"permission":181},"messages.delete_own",", or any message with ",[47,184],{"permission":185},"messages.delete_any",[155,187,166,188,170],{},[80,189,169],{},[10,191,192],{},"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.",[20,194,196],{"id":195},"replying-to-a-message","Replying to a message",[10,198,199],{},"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).",[20,201,203],{"id":202},"emoji-reactions","Emoji reactions",[10,205,206],{},"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.",[20,208,210],{"id":209},"mentions","@Mentions",[10,212,213,214,217],{},"Type ",[80,215,216],{},"@"," to mention someone with autocomplete:",[40,219,220,233,241],{},[43,221,222,224,225,228,229,232],{},[35,223,145],{}," can mention team members with access to the ticket, the customer, and ticket participants. Two groups are available: ",[80,226,227],{},"@team"," (every staff member) and ",[80,230,231],{},"@all"," (staff plus the customer and participants, public messages only).",[43,234,235,237,238,240],{},[35,236,148],{}," can mention staff and other participants, but not the ",[80,239,227],{}," group.",[43,242,243,244,18],{},"Mentioned users are notified in real time and see a badge on the ticket. See ",[14,245,247],{"href":246},"\u002Fdocumentation\u002Faccount\u002Fnotifications","Notifications",[20,249,251],{"id":250},"chat-commands","Chat commands",[10,253,254,255,257],{},"Staff can type ",[80,256,83],{}," in the reply form to trigger commands with autocomplete:",[40,259,260,272,283],{},[43,261,262,267,268,271],{},[35,263,264],{},[80,265,266],{},"\u002Fclose"," closes the ticket (requires ",[47,269],{"permission":270},"tickets.change_status",").",[43,273,274,279,280,271],{},[35,275,276],{},[80,277,278],{},"\u002Fassign @name"," assigns the ticket to a team member (requires ",[47,281],{"permission":282},"tickets.assign",[43,284,285,290,291,294,295,298,299,302,303,306],{},[35,286,287],{},[80,288,289],{},"\u002Fai [instruction]"," generates an AI reply draft from the conversation history, optionally steered by your instruction — e.g. ",[80,292,293],{},"\u002Fai give the installation instructions"," (requires ",[47,296],{"permission":297},"tickets.ask_ai","). 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 ",[80,300,301],{},"\u002Fia"," and ",[80,304,305],{},"\u002Fki"," work in any language. An instruction can be up to 500 characters; without one, the command behaves like the Ask AI button.",[10,308,309,310,313,314,317,318,321,322,72,325,72,328,331,332,18],{},"Built-in commands can be enabled or disabled per project. Staff with the ",[47,311],{"permission":312},"commands.manage"," permission can also create ",[35,315,316],{},"custom commands",": reusable reply templates (up to 2,000 characters) triggered by ",[80,319,320],{},"\u002Fname",". Templates support dynamic variables filled in when the command is used: ",[80,323,324],{},"{customer_name}",[80,326,327],{},"{ticket_id}",[80,329,330],{},"{project_name}",", and ",[80,333,334],{},"{staff_name}",[10,336,337,338,341,342,345,346,348,349,352,353,355],{},"Each custom command has a visibility. ",[35,339,340],{},"Everyone in the project"," is the default and makes the command available to every member, and it requires the ",[47,343],{"permission":344},"commands.share"," permission on top of ",[47,347],{"permission":312},". ",[35,350,351],{},"Only me"," keeps the command private to the member who created it: nobody else sees it, in the commands settings or in the ",[80,354,83],{}," autocomplete, and only its creator can edit or delete it. Command names stay unique across the whole project, private ones included.",[20,357,359],{"id":358},"translation-and-ai-correction","Translation and AI correction",[40,361,362,368,374,377],{},[43,363,364,367],{},[35,365,366],{},"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.",[43,369,370,373],{},[35,371,372],{},"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.",[43,375,376],{},"In both translation modes, inline code and fenced code blocks are left untranslated: commands, identifiers, and snippets reach the reader exactly as written.",[43,378,379,382,383,18],{},[35,380,381],{},"AI correction"," (Team plan and higher): one-click polish of your draft before sending. See ",[14,384,386],{"href":385},"\u002Fdocumentation\u002Fai\u002Fassistant#ai-message-correction","AI assistant",[10,388,389],{},"Neither feature counts toward the monthly AI response quota.",[20,391,393],{"id":392},"read-state","Read state",[40,395,396,399,402],{},[43,397,398],{},"Joely tracks how far each person has read in every ticket. Staff can see when the customer has read their messages.",[43,400,401],{},"Opening a ticket scrolls to the first unread message, marked with a \"New\" separator line.",[43,403,404,405,408,409,412],{},"Any message can be ",[35,406,407],{},"marked as unread"," from its context menu to bring the ticket back into your unread queue. For staff this requires access to the ticket (",[47,410],{"permission":411},"tickets.view_all"," or being assigned).",[20,414,416],{"id":415},"system-messages","System messages",[10,418,419],{},"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.",{"title":421,"searchDepth":422,"depth":422,"links":423},"",2,[424,425,426,427,428,429,430,431,432,433,434],{"id":22,"depth":422,"text":23},{"id":29,"depth":422,"text":30},{"id":59,"depth":422,"text":60},{"id":128,"depth":422,"text":129},{"id":195,"depth":422,"text":196},{"id":202,"depth":422,"text":203},{"id":209,"depth":422,"text":210},{"id":250,"depth":422,"text":251},{"id":358,"depth":422,"text":359},{"id":392,"depth":422,"text":393},{"id":415,"depth":422,"text":416},"tickets","Internal notes, attachments, mentions, replies, reactions, chat commands, translation, and editing rules inside a ticket thread.","md",{},true,3,"\u002Fdocumentation\u002Ftickets\u002Fmessages",{"title":5,"description":436},"documentation\u002Ftickets\u002Fmessages","2026-06-11","3gaqZlB3onYrjddWLR_MWAW68WxreOUqOD4DAqed-po",[447,451,454,459,462,466,470,474,478,479,480,483,486,489,493,496,499,502,503,507,510],{"title":448,"path":449,"category":450,"order":450},"Customer portal","\u002Fdocumentation\u002Fportal\u002Foverview",null,{"title":452,"path":453,"category":450,"order":450},"Ticket lifecycle","\u002Fdocumentation\u002Ftickets\u002Flifecycle",{"title":455,"path":456,"category":457,"order":458},"Account & security","\u002Fdocumentation\u002Faccount\u002Fsecurity","account",1,{"title":386,"path":460,"category":461,"order":458},"\u002Fdocumentation\u002Fai\u002Fassistant","ai",{"title":463,"path":464,"category":465,"order":458},"CSAT surveys","\u002Fdocumentation\u002Fcsat","csat",{"title":467,"path":468,"category":469,"order":458},"Getting started","\u002Fdocumentation\u002Fgetting-started","getting-started",{"title":471,"path":472,"category":473,"order":458},"Tebex integration","\u002Fdocumentation\u002Fintegrations\u002Ftebex","integrations",{"title":475,"path":476,"category":477,"order":458},"Roles & permissions","\u002Fdocumentation\u002Fteam\u002Froles-permissions","team",{"title":17,"path":16,"category":435,"order":458},{"title":247,"path":246,"category":457,"order":422},{"title":481,"path":482,"category":461,"order":422},"AI knowledge base","\u002Fdocumentation\u002Fai\u002Fknowledge",{"title":484,"path":485,"category":473,"order":422},"Discord integration","\u002Fdocumentation\u002Fintegrations\u002Fdiscord",{"title":487,"path":488,"category":469,"order":422},"Plans & limits","\u002Fdocumentation\u002Fplans-limits",{"title":490,"path":491,"category":492,"order":422},"Portal customization","\u002Fdocumentation\u002Fportal\u002Fbranding","portal",{"title":494,"path":495,"category":477,"order":422},"Members & invitations","\u002Fdocumentation\u002Fteam\u002Fmembers-invitations",{"title":497,"path":498,"category":461,"order":440},"Writing AI-ready documentation","\u002Fdocumentation\u002Fai\u002Fwriting-ai-ready-docs",{"title":500,"path":501,"category":473,"order":440},"GitHub integration","\u002Fdocumentation\u002Fintegrations\u002Fgithub",{"title":5,"path":441,"category":435,"order":440},{"title":504,"path":505,"category":473,"order":506},"Tebex keys & security","\u002Fdocumentation\u002Fintegrations\u002Ftebex-keys",4,{"title":508,"path":509,"category":435,"order":506},"Configuring the ticket form","\u002Fdocumentation\u002Ftickets\u002Fconfiguration",{"title":511,"path":512,"category":473,"order":513},"Self-hosted Tebex Bridge","\u002Fdocumentation\u002Fintegrations\u002Ftebex-bridge",5]