Message Reference
Every message TicketCord sends on its own that you can change on the Messages page: when it is sent, where it shows, its variables, and its buttons
This page lists every message you can change on the Messages page, in the order the dashboard shows them: by moment (Ticket opens, In a ticket, Ticket closes, Feedback, Reminders, ModMail, AI, Staff logs, and Member joins), then by who sees them. For each message it says when TicketCord sends it, which variables it has and what each one shows, and which buttons it carries. How to edit a message, restyle its buttons, and reset it is on Messages.
Changing these messages and their buttons needs Basic or higher on the bot owner's plan. On Free every message is sent as built in.
How to read this page
- Name: the message's title on the Messages page. The line under it says when TicketCord sends it and where it shows.
- Variables: what you can type as
{name}in your version. Each is filled in when the message is sent. A name the message does not have is shown exactly as typed. A line whose variables all come out empty is left out, so**Reason:** {reason}disappears when no reason was given; see Empty values. - Built-in wording: variables that hold TicketCord's own text, in the bot's language unless noted. Use them to keep the built-in wording while you change the layout. The quoted text is the English version.
- Buttons: TicketCord's buttons on the message. You can change each one's label, emoji, and color, but never what it does. "Can be hidden" means the message works without it, so Show this button is offered; "Shown only when" means it appears only when that setting is on, whatever you do here.
Variables that mention someone (shown as "as a mention") can ping them. Messages that never ping anyone, which are marked below, stay that way in your version.
Ticket variables
Most messages about a ticket share these eight variables. Where an entry says "the ticket variables", all of them work in it.
| Variable | Shows |
|---|---|
{user} | The member who opened the ticket, as a mention |
{userId} | The Discord ID of the member who opened the ticket |
{username} | The username of the member who opened the ticket, without a ping |
{ticketNumber} | The ticket number with leading zeros, such as 0042 |
{channel} | The ticket channel, as a link |
{subject} | The button or dropdown option the ticket was opened with |
{priority} | The ticket's priority, such as high |
{server} | The server name |
Ticket opens
The Ticket opens moment holds the welcome message for each kind of ticket: Button tickets, Dropdown tickets, Modal tickets, Application tickets, and ModMail tickets. Each sends a saved design you pick, or the built-in welcome message. Their variables, and how to restyle their Claim, Pin, and Close buttons, are on Welcome Messages.
In a ticket
Messages about handling an open ticket: claims, closing and reopening, members and roles, renames, priorities, applications, approvals, and the replies to staff commands.
Posted in the ticket
Ticket claimed
Posted in the ticket when a staff member claims it with the Claim button, /claim, or the dashboard.
- Variables: the ticket variables, plus
{staff}(the staff member who claimed it, as a mention),{staffName}(their name, without a ping),{claimedAt}(when, as a relative time). - Built-in wording:
{claimedTitle}("Ticket Claimed"),{claimedByLabel}("Claimed by"),{claimedAtLabel}("Claimed at"). - Buttons: none.
Close request
Posted in the ticket for everyone to see when a staff member uses /closerequest, asking the member who opened it to close it.
- Variables: the ticket variables, plus
{staff}(the staff member who asked, as a mention),{staffName}(their name, without a ping),{reason}(the reason given with the command, empty when there is none). - Built-in wording:
{closeRequestTitle}("Close Request"),{closeRequestText}("Staff member (name) has requested to close this ticket."),{reasonLabel}("Reason"),{confirmationLabel}("Confirmation"),{closeRequestQuestion}("Would you like to close this ticket?"). - Buttons: Only the member who opened the ticket can use them.
- Close Ticket (✅): Closes the ticket. Cannot be hidden.
- Cancel (❌): Keeps the ticket open and deletes the request. Cannot be hidden.
- The built-in request mentions the member who opened the ticket. Your version mentions whoever you write in it, following its Who gets pinged settings.
- A line with
{reason}is left out when no reason was given, label and all, as long as the line has no other variable that is filled.
Close request accepted
Replaces the close request in the ticket when the member who opened the ticket presses Close Ticket on it.
- Variables: the ticket variables.
- Built-in wording:
{acceptedTitle}("Close Request Accepted"),{acceptedText}("Close request accepted! Your ticket will be closed shortly..."). - Buttons: none.
Close request done
Posted in the ticket once a ticket closed after its close request was accepted.
- Variables: the ticket variables.
- Built-in wording:
{requestClosedText}("Ticket closed successfully based on staff request."). - Buttons: none.
- The built-in version is one line of text, not a card.
Ticket reopened
Posted in the ticket when it is reopened with the Reopen button, /reopen, or the dashboard.
- Variables: the ticket variables, plus
{staff}(who reopened it, as a mention),{staffName}(their name, without a ping),{reopenedAt}(when, as a relative time). - Built-in wording:
{reopenNoticeTitle}("🔓 Ticket Reopened"),{reopenStatusLine}("Status: Closed → Open"),{reopenedByLine}("Reopened by:" and who),{reopenTimeLine}("Time:" and when),{reopenDetailsTitle}("📋 Ticket Details"),{reopenDetailsText}(the ticket number, the member who opened it, and that their access is restored),{historyLabel}("History", always in English),{historyText}("💬 Your conversation history has been preserved"). - Buttons: none.
- The member who opened the ticket is still pinged as long as your version's Who gets pinged includes Mentioned members: where
{user}appears, or on a line above your text when it does not.
Member added
Posted in the ticket when staff add a member with /add or from the dashboard.
- Variables: the ticket variables, plus
{staff}(who added the member, as a mention),{member}(the member added, as a mention),{memberName}(the member's name, without a ping). - Buttons: none.
- The built-in text is in English in every bot language.
- This notice never pings anyone, even in your version. Adding a role does not post it.
Member removed
Posted in the ticket when someone removes a member with /remove or from the dashboard.
- Variables: the ticket variables, plus
{staff}(who removed the member, as a mention),{member}(the member removed, as a mention),{memberName}(the member's name, without a ping),{removedText}(the built-in sentence saying who removed whom),{removedDetails}(the built-in line explaining who lost access). - Built-in wording:
{removedTitle}("⚠️ User Removed from Ticket"). - Buttons: none.
- This notice never pings anyone: a ping would add the member back to a thread ticket.
- Removing the member who opened the ticket with
/removeshows the Remove creator warning first, and this notice is not posted after it.
Role removed
Posted in the ticket when someone removes a role with /remove.
- Variables: the ticket variables, plus
{staff}(who removed the role, as a mention),{staffName}(the staff member's name, no ping),{role}(the role, as a mention),{roleName}(the role's name, without a ping),{removedText}(the built-in sentence saying who removed which role),{removedDetails}(the built-in line saying who lost access). - Built-in wording:
{removedTitle}("⚠️ Role Removed from Ticket"). - Buttons: none.
- On thread tickets,
{removedDetails}says how many members were removed, because threads cannot hold roles. - This notice never pings anyone.
Ticket renamed
Posted in the ticket after it is renamed with /rename or from the dashboard.
- Variables: the ticket variables, plus
{renamedBy}(who renamed the ticket, as a mention),{renamedByName}(who renamed the ticket, without a ping),{oldName}(the channel name before the rename),{newName}(the channel name after the rename). - Built-in wording:
{renamedTitle}("✏️ Ticket Renamed"),{renamedText}("The ticket channel has been successfully renamed."),{oldNameLabel}("Old Name"),{newNameLabel}("New Name"),{renamedStatus}("The channel name is now updated in Discord"). - Buttons: none.
- The member who opened the ticket can rename it too, so
{renamedBy}is not always staff.
Ticket routed
Posted in the ticket when auto-routing moves it, if routing is set to show a notice in the ticket.
- Variables: the ticket variables, plus
{ruleName}(the name of the routing rule that matched). - Buttons: none.
{ruleName}is "Default Category" when the ticket went to the fallback category.- The detailed routing entry in your logs channel is a separate message (Ticket auto-routed log).
- This notice never pings anyone. The built-in text is in English in every bot language.
Member left
Posted in the ticket when it closes because the member who opened it left the server, was kicked, or was banned, with closing on leave turned on.
- Variables: the ticket variables, plus
{memberName}(the member's name, without a ping). - Built-in wording:
{leftTitle}(the built-in title, which follows the reason: left, kicked, or banned),{leftText}(the built-in sentence, which follows the reason),{userLabel}("User"),{pinnedNotice}(a note that a pinned ticket was not deleted; empty unless the ticket is pinned and auto-delete is on). - Buttons: none.
- One message covers all three reasons. The built-in card changes color with the reason; your version uses the colors you choose.
- When tickets close because the bot owner's TicketCord account was suspended, TicketCord's own notice is sent instead and cannot be changed.
Application review
Posted in an application ticket when it opens, for staff to accept or deny the application, and updated once they decide.
- Variables: the ticket variables, plus
{applicationTitle}(the name of the application form),{reviewedBy}(the staff member who decided, as a mention, empty while pending),{reason}(the reason staff gave when denying, empty if none),{rolesGranted}(the roles given to the applicant, as mentions, empty if none),{rolesFailed}(the roles that could not be given, as mentions, empty if none),{reviewDetails}(the built-in status, applicant and decision lines). - Built-in wording:
{reviewTitle}("Application review"),{status}(the built-in status, "⏳ Pending review" until staff decide). - Buttons: Both disappear once staff decide.
- Accept: Accepts the application. Cannot be hidden.
- Deny: Asks for an optional reason, then denies it. Cannot be hidden.
- The same version is used before and after the decision, so write it to read well in both states.
{status}and{reviewDetails}change with the decision; the other decision variables are empty while the application is pending.
Application accepted
Posted in the application ticket when staff accept the application.
- Variables: the ticket variables, plus
{applicationTitle}(the name of the application form),{acceptedText}(the built-in sentence telling the applicant they were accepted, with a mention of them),{rolesGranted}(the roles given to the applicant, as mentions, empty if none),{rolesGrantedText}(the built-in line listing the roles given, empty if none),{rolesFailedText}(the built-in line listing roles that could not be given, empty if none). - Buttons: none.
- The notice pings only the applicant.
Application denied
Posted in the application ticket when staff deny the application.
- Variables: the ticket variables, plus
{applicationTitle}(the name of the application form),{deniedText}(the built-in sentence telling the applicant they were denied, with a mention of them),{reason}(the reason staff gave, empty if none),{reasonText}(the built-in reason line, empty if staff gave no reason). - Buttons: none.
- The notice pings only the applicant.
Approval request
Posted in the ticket for your approvers when a staff member asks for approval with /approval request.
- Variables: the ticket variables, plus
{staff}(who asked, as a mention),{staffName}(their name, without a ping),{approverRole}(the approval role, as a mention),{requestId}(the approval request's ID),{approvalType}(the kind of approval asked for, for example Refund),{urgency}(how urgent it is, such as High),{amount}(the estimated amount, for example $25.00, empty if none was given),{reason}(the reason given, empty when there is none). - Built-in wording:
{notifyText}("New approval request requires your attention."),{requestTitle}("⏰ New Approval Request"),{ticketLabel}("Ticket"),{typeLabel}("Type"),{urgencyLabel}("Urgency"),{requestedByLabel}("Requested by"),{amountLabel}("Amount"),{reasonLabel}("Reason"),{statusLabel}("Status"),{statusText}("Use /approval approve or /approval reject to respond"). - Buttons: none.
- Approvers answer with
/approval approveor/approval reject. - The approvers are pinged with your version too: where
{approverRole}appears, or on a line above your text when it does not. This message can only ping the approval role, whatever your version says. - The approval workflow needs Enterprise. See Approval Workflows.
Approval pending notice
Posted in the ticket to tell the member their request is waiting for approval, when the approval settings notify the customer.
- Variables: the ticket variables, plus
{approvalType}(the kind of approval asked for, for example Refund),{noticeText}(the built-in sentence for the member). - Built-in wording:
{noticeTitle}("Customer Notification"). - Buttons: none.
- The built-in notice is plain text; your version is sent as a card.
Request approved notice
Posted in the ticket to tell the member their request was approved, when the approval settings notify the customer.
- Variables: the ticket variables, plus
{approvalType}(the kind of approval asked for, for example Refund),{noticeText}(the built-in sentence for the member). - Buttons: none.
- The built-in notice is plain text; your version is sent as a card.
Request rejected notice
Posted in the ticket to tell the member their request was rejected, when the approval settings notify the customer.
- Variables: the ticket variables, plus
{approvalType}(the kind of approval asked for, for example Refund),{noticeText}(the built-in sentence for the member). - Buttons: none.
- The built-in notice is plain text; your version is sent as a card.
Shown only to who clicked
Claim reply
Shown only to the staff member who claims a ticket with the Claim button or /claim while Exclusive claims is off.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{claimedTitle}("Ticket Claimed"),{claimedText}("You have claimed this ticket."). - Buttons: none.
- The built-in reply to
/claimis one line of text; the button's is a small card.
Exclusive claim warning
Shown only to a staff member who presses Claim while Exclusive claims (Staff → Claiming) is on. /claim claims straight away without it.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{claimConfirmTitle}("Claim this ticket?"),{claimConfirmWarning}(the explanation that everyone except the claimer and the member who opened the ticket will be removed). - Buttons:
- Yes, claim it (✅): Claims the ticket. Cannot be hidden.
- Cancel (❌): Cancels the claim. Can be hidden.
Exclusive claim reply
Shown only to the staff member once an exclusive claim went through and everyone else was removed, after Yes, claim it or /claim. After the button it replaces the warning.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{exclusiveClaimedText}("Ticket claimed. Other users have been removed."). - Buttons: none.
- The built-in reply to
/claimis one line of text.
Exclusive claim cancelled
Replaces the exclusive claim warning when the staff member presses Cancel.
- Variables:
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{claimCancelledText}("Claim cancelled."). - Buttons: none.
Unclaim reply
Shown only to the person who unclaims a ticket with the Unclaim button or /unclaim.
- Variables: the ticket variables, plus
{staff}(the person who unclaimed, as a mention),{staffName}(the staff member's name, no ping),{unclaimedAt}(when the ticket was unclaimed, as a full date and time). - Built-in wording:
{unclaimedTitle}("Ticket Unclaimed"),{unclaimedText}("You have unclaimed this ticket."). - Buttons: none.
- The built-in reply to
/unclaimis longer: it adds who released the ticket, when, and a tip that staff can now use/claim.
Close confirmation
Shown only to the person who presses Close or uses /close, unless Close without asking first (Closing tickets → Closing rules) is on.
- Variables: the ticket variables, plus
{reason}(the reason given with/close, empty from the button). - Built-in wording:
{silentNote}(the silent mode note, only when/closewas used with silent mode on),{closeConfirmTitle}("⚠️ Close Ticket Confirmation"),{closeConfirmText}(what closing does, as a list). - Buttons:
- Yes, Close Ticket (✅): Closes the ticket. Cannot be hidden.
- No, Keep Open (❌): Keeps it open (the message can also be dismissed). Can be hidden.
- The built-in version for
/closealso shows the ticket number, the reason, and a tip. Your version shows what you wrote; a line with{reason}is left out when no reason was given, such as from the button.
Closing in progress
Shown only to the person closing the ticket while the close is running, after Yes, Close Ticket or straight after Close when Close without asking first is on. It is replaced by the Close reply when done.
- Variables: the ticket variables.
- Built-in wording:
{closingTitle}("🔄 Processing..."),{closingText}("Closing ticket, please wait..."). - Buttons: none.
/closewith Close without asking first on shows Discord's own "thinking" state instead.
Close reply
Shown only to the person who closed the ticket with the Close button or /close, once the close has finished.
- Variables: the ticket variables, plus
{closedBy}(the person who closed it, as a mention),{reason}(the reason given with/close, if any). - Built-in wording:
{closedText}("Ticket closed successfully."). - Buttons: none.
- The built-in wording depends on how the ticket was closed: some versions include the ticket number, and a confirmed
/closealso shows the reason and a hint about/reopen. A failed close shows an error instead. - The notice posted in the ticket when it closes is a separate message, set under Ticket closes.
Close cancelled
Replaces the close confirmation when No, Keep Open is pressed (button or /close).
- Variables: none.
- Built-in wording:
{closeCancelledTitle}("✅ Ticket Close Cancelled"),{closeCancelledText}("The ticket will remain open."). - Buttons: none.
Reopen confirmation
Shown only to staff who press Reopen on a closed ticket, or to staff or the member who opened it when they use /reopen. ModMail tickets cannot be reopened this way.
- Variables: the ticket variables.
- Built-in wording:
{reopenConfirmTitle}("🔓 Reopen Ticket Confirmation"),{reopenConfirmText}(what reopening does, with the ticket number). - Buttons:
- Yes, Reopen Ticket (🔓): Reopens the ticket. Cannot be hidden.
- No, Keep Closed (❌): Keeps it closed (the message can also be dismissed). Can be hidden.
- The built-in version for
/reopenshows the ticket number in the title, what will happen, and a tip.
Reopening in progress
Shown only to the person reopening the ticket after Yes, Reopen Ticket, while the reopen is running. It is replaced by the Reopen reply when done.
- Variables: the ticket variables.
- Built-in wording:
{reopeningTitle}("🔄 Reopening Ticket..."),{reopeningText}("Please wait while we reopen your ticket."). - Buttons: none.
Reopen reply
Shown only to the person who reopened the ticket with Yes, Reopen Ticket, once it is open again.
- Variables: the ticket variables.
- Built-in wording:
{reopenedTitle}("Ticket Reopened Successfully"),{reopenedText}("The ticket has been reopened and the creator has been granted access."). - Buttons: none.
- If the ticket was already open or the reopen failed, a different status or an error is shown instead.
Reopen cancelled
Replaces the reopen confirmation when No, Keep Closed is pressed (button or /reopen).
- Variables: none.
- Built-in wording:
{reopenCancelledTitle}("✅ Ticket Reopen Cancelled"),{reopenCancelledText}("The ticket will remain closed."). - Buttons: none.
Ticket created reply
Shown only to the member right after they open a ticket from a panel button, dropdown, form, application, or Auto Support.
- Variables: the ticket variables.
In this message,
{channel}is the new ticket, as a link. - Built-in wording:
{createdText}("Ticket created!"). - Buttons: none.
- The built-in reply is plain text. Your version is sent as a card and stays visible only to the member.
Remove creator warning
Shown only to the person running /remove when they try to remove the member who opened the ticket.
- Variables: the ticket variables, plus
{warningText}(the built-in warning naming the member),{warningEffects}(the built-in list of what removing them does). - Built-in wording:
{warningTitle}("⚠️ Remove Ticket Creator"),{warningQuestion}("Are you absolutely sure you want to proceed?"). - Buttons:
- Yes, Remove Creator (⚠️): Removes the member who opened the ticket. Cannot be hidden.
- Cancel (❌): Deletes the warning. Cannot be hidden.
Priority changed reply
Shown only to the staff member who changes a ticket's priority with /priority.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping),{oldPriority}(the previous priority level, for example none or low),{priorityLabel}(the new priority with its emoji, for example 🟠 High),{oldPriorityLabel}(the previous priority with its emoji),{guidance}(the built-in advice for the new priority level). In this message,{priority}is the new priority level. - Buttons: none.
- The built-in text and
{guidance}are in English in every bot language.
Member added reply
Shown only to the person who adds a member to a ticket with /add and the user option.
- Variables: the ticket variables, plus
{staff}(who ran/add, as a mention; this can be the member who opened the ticket),{member}(the member added, as a mention),{addedText}(the built-in sentence naming who or what was added). - Built-in wording:
{addedTitle}("✅ User Added Successfully"). - Buttons: none.
- The Member added notice posted in the ticket is a separate message.
Role added reply
Shown only to the person who adds a role to a ticket with /add and the role option.
- Variables: the ticket variables, plus
{staff}(who ran/add, as a mention),{role}(the role, as a mention),{roleName}(the role's name, without a ping),{addedText}(the built-in sentence naming who or what was added),{addedDetails}(the built-in lines saying who added the role and who now has access). - Built-in wording:
{addedTitle}("✅ Role Added Successfully"). - Buttons: none.
- In a thread ticket TicketCord adds the role's current members one by one, and
{addedDetails}then says how many were added and that members who get the role later are not added.
Member removed reply
Shown only to the person who removes a member from a ticket with /remove and the user option.
- Variables: the ticket variables, plus
{staff}(who ran/remove, as a mention),{member}(the member removed, as a mention). - Built-in wording:
{removedTitle}("✅ User Removed"),{removedText}("The user has been successfully removed from the ticket."). - Buttons: none.
- Removing the member who opened the ticket shows the Remove creator warning instead, then the Creator removed reply. The Member removed notice in the ticket is a separate message.
Creator removed reply
Replaces the remove creator warning after the person running /remove confirms it.
- Variables: the ticket variables, plus
{staff}(who confirmed, as a mention),{removedText}(the built-in sentence naming the member who opened the ticket). In this message,{user}is the member who was removed, as a mention. - Built-in wording:
{removedTitle}("✅ Creator Removed Successfully"). - Buttons: none.
- The warning's buttons are gone once it is replaced.
Rename reply
Shown only to the person who renames a ticket with /rename.
- Variables: the ticket variables, plus
{staff}(who renamed it, as a mention). In this message,{channel}is the ticket under its new name, as a link. - Built-in wording:
{confirmText}("✅ Ticket renamed successfully."). - Buttons: none.
- The built-in reply is plain text; your version is sent as a card. The Ticket renamed notice in the ticket is a separate message.
Tag added reply
Shown only to the staff member who adds a tag with /tag add.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{tag}(the tag that was added or removed). - Buttons: none.
- The built-in text is in English in every bot language.
/tag listcannot be customized.
Tag removed reply
Shown only to the staff member who removes a tag with /tag remove.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{tag}(the tag that was added or removed). - Buttons: none.
- The built-in text is in English in every bot language.
Tags cleared reply
Shown only to the staff member who removes every tag with /tag clear.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{tagCount}(how many tags were removed). - Buttons: none.
- The built-in text is in English in every bot language.
Canned response sent
Shown only to the staff member after /reply posts a canned response in the ticket.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{responseName}(the name of the canned response that was sent),{sentText}(the built-in sentence naming the canned response). - Buttons: none.
/replyneeds Basic or higher. The built-in reply is plain text; your version is sent as a card.
Approval requested reply
Shown only to the staff member who asks for approval with /approval request.
- Variables: the ticket variables, plus
{staff}(who asked, as a mention),{staffName}(their name, without a ping),{requestId}(the approval request's ID),{approvalType}(the kind of approval asked for, for example Refund),{urgency}(how urgent it is, such as High),{amount}(the estimated amount, for example $25.00, empty if none was given),{reason}(the reason given, empty when there is none). - Built-in wording:
{requestTitle}("🔒 Approval Request Created"),{reasonLabel}("Reason"),{statusLabel}("Status"),{statusText}("Request submitted and awaiting management review"). - Buttons: none.
- The built-in labels Request ID, Type, Urgency, and Amount are in English in every bot language.
Approved reply
Shown only to the approver who approves a request with /approval approve.
- Variables: the ticket variables, plus
{staff}(the approver, as a mention),{staffName}(their name, without a ping),{requestId}(the approval request's ID),{approvalType}(the kind of approval asked for, for example Refund),{reason}(the approver's reason, empty if none was given). - Built-in wording:
{decisionTitle}("Request Approved"),{requestIdLabel}("Request ID"),{typeLabel}("Type"),{decidedByLabel}("Decided by"),{reasonLabel}("Reason"),{statusLabel}("Status"),{statusText}("Request successfully approved by management"). - Buttons: none.
- The built-in card hides the reason section when there is no reason. Your version does the same for a line with
{reason}, and for a bold label on its own line right above it.
Rejected reply
Shown only to the approver who rejects a request with /approval reject.
- Variables: the ticket variables, plus
{staff}(the approver, as a mention),{staffName}(their name, without a ping),{requestId}(the approval request's ID),{approvalType}(the kind of approval asked for, for example Refund),{reason}(the approver's reason, which is required when rejecting). - Built-in wording:
{decisionTitle}("Request Rejected"),{requestIdLabel}("Request ID"),{typeLabel}("Type"),{decidedByLabel}("Decided by"),{reasonLabel}("Reason"),{statusLabel}("Status"),{statusText}("Request rejected - customer will be notified"). - Buttons: none.
Unclaimed tickets list
Shown only to the staff member who runs /unclaimed: the open tickets nobody has claimed, ten per page, the one waiting longest first.
- Variables:
{staff}(who ran the command, as a mention),{ticketList}(the tickets on this page, one per line: the ticket number linking to it, its name, who opened it, how long ago, and its priority when it has one),{waitingCount}(how many open tickets nobody has claimed),{pageNumber}(the page shown),{pageCount}(how many pages the list has). It covers many tickets, so the eight ticket variables do not work in it. - Built-in wording:
{waitingTitle}("Unclaimed tickets"),{waitingSummary}("Waiting: 12 · Page 1 of 2", or "Every open ticket has been claimed." when there is nothing to list). - Buttons:
- Previous and Next: Turn the page. Shown only when the list has more than one page. Cannot be hidden.
- Refresh: Loads the list again. Can be hidden.
- Your version must show the whole list through
{ticketList}. Without it, or if your text shortens it, the built-in list is sent instead. With nothing to list, the{ticketList}line is left out. - This list never pings anyone, even in your version.
Staff stats: team
Shown only to whoever runs /staff-stats for the whole team (Manage Server, Administrator, or the bot's owner): each staff member's numbers in this server, ten per page. See /staff-stats for what each number means.
- Variables:
{staff}(who ran the command, as a mention),{teamSummary}(the server's tickets, share handled by staff, median first reply, and rating),{staffRows}(the staff members on this page, one per line, each mentioned with their numbers),{staffCount}(how many staff members the list holds),{pageNumber}(the page shown),{pageCount}(how many pages the list has). It covers many tickets, so the eight ticket variables do not work in it. - Built-in wording:
{statsTitle}("Staff stats"),{statsPeriod}("Last 30 days", or the period picked),{sampleNote}("Fewer than 10 tickets in this period is too few to judge someone on.", empty when no one on the page has so few). - Buttons:
- Previous and Next: Turn the page. Shown only when the list has more than one page. Cannot be hidden.
- Refresh: Loads the numbers again. Can be hidden.
- Open in dashboard: Opens the team page with the same server and period. Label and emoji only.
- The period menu and the menu to open one member's card always stay below your text and cannot be changed.
- Your version must show the whole list through
{staffRows}. Without it, or if your text shortens it, the built-in card is sent instead. - This card never pings anyone, even in your version.
Staff stats: one member
Shown only to whoever runs /staff-stats for one staff member: their own numbers, or anyone's with Manage Server. Each number comes with the team median, the middle value among the server's staff.
- Variables: A number with no data reads
-. The eight ticket variables do not work in it.{staff}(who ran the command, as a mention){staffMember}(the staff member, as a mention){staffMemberName}(their name, without a ping; empty when unknown){memberStats}(the default text with every number){statTickets}{statClosed}{statFirstReply}(median first reply){statTimeToClose}(median time to close){statRating}(average rating){statRatingCount}(how many ratings it averages){statReopened}(share of their closes reopened later){statHandoffs}(claims they gave up){statIdleClaims}(open tickets they claimed with no reply yet, right now){statLateReplies}(first replies that missed the response target)- the team medians
{teamTickets},{teamClosed},{teamFirstReply},{teamTimeToClose},{teamRating},{teamReopened}
- Built-in wording:
{statsTitle}("Staff stats"),{statsPeriod}("Last 30 days", or the period picked),{sampleNote}("Fewer than 10 tickets in this period is too few to judge someone on.", or a note about fewer than 5 ratings; empty otherwise). - Buttons:
- Whole team: Goes back to the team card. Shown only to those who may see the whole team. Cannot be hidden.
- Refresh: Loads the numbers again. Can be hidden.
- Open in dashboard: Opens the member's page with the same server and period. Label and emoji only.
- The period menu always stays below your text and cannot be changed.
- This card never pings anyone, even in your version.
Ticket closes
The first two rows under Ticket closes are not listed here: Message in the ticket and DM to the member use a saved design you pick, described in Close messages. The rows below are TicketCord messages you edit like any other.
Posted in the ticket
Closed ticket controls
Posted in the ticket right after it closes, whether staff closed it, auto-close closed it, or it closed because its member left the server.
- Variables: the ticket variables.
- Built-in wording:
{controlsTitle}("🎛️ Ticket Controls"),{controlsDescription}("Use the buttons below to manage this closed ticket:"),{reopenHeading}("🔓 Reopen"),{reopenHint}("Restore ticket creator access and move back to active category"),{transcriptHeading}("📄 Transcript"),{transcriptHint}("Generate and save a transcript of this ticket's conversation"),{deleteHeading}("🗑️ Delete"),{deleteHint}("Permanently delete this ticket (generates transcript first)"). - Buttons:
- Reopen: Gives the member access again and moves the ticket back to its open category (staff can still use
/reopen). Can be hidden. - Get Transcript: Saves a transcript and posts it in your transcript channel (staff can still use
/transcript). Can be hidden. - Delete: Asks for confirmation, then deletes the ticket. Staff only. Cannot be hidden.
- Reopen: Gives the member access again and moves the ticket back to its open category (staff can still use
- ModMail tickets never show the Reopen button, even if your text mentions it.
- After auto-close or a member leaving, the built-in panel shows button emoji and the transcript button reads Transcript. Your button changes apply to every version.
- When a member leaving closes a ticket that is about to be deleted automatically, this panel is not posted.
Scheduled close cancelled
Posted in the ticket when a new message from the member or staff cancels a scheduled close.
- Variables: the ticket variables.
- Built-in wording:
{cancelledText}("Scheduled close cancelled because new activity was posted."). - Buttons: none.
- It never pings anyone. The built-in notice is plain text; your version is sent as a card.
Deletion countdown
Posted in a closed ticket a few seconds before it is deleted automatically: after a close with Delete the channel on close on (5 seconds), after an auto-close (10 seconds), and after a member leaving closed the ticket (3 seconds).
- Variables: the ticket variables, plus
{deleteDescription}(the built-in text, which differs between the three cases),{deleteAt}(when the ticket will be deleted, as a countdown, in 5 seconds). - Built-in wording:
{deleteTitle}("Ticket Auto-Deletion"). - Buttons: none.
Sent to the member
Transcript sent by DM
Sent as a direct message with the transcript file when staff use /transcript and choose someone to send it to.
- Variables: the ticket variables, plus
{transcriptTitle}(the built-in title, such as "Ticket #42 Transcript"),{transcriptDescription}(the sentence saying which ticket the transcript is for),{messageCount}(how many messages the transcript holds),{duration}(how long the ticket was open),{staff}(the staff member who sent it, as a mention). - Buttons: none.
- The transcript file is always attached. Transcripts with evidence can only be sent to staff members.
Posted for staff
Transcript post
Posted in your transcript channel (or the channel picked with /transcript) with the transcript file whenever a transcript is saved: on close when transcripts on close are on, from the closed ticket controls, after an auto-close, a member leaving, or a scheduled close, and when staff use /transcript without choosing a member.
- Variables: the ticket variables, plus
{transcriptDescription}(the built-in sentence saying which ticket the transcript is for),{messageCount}(how many messages the transcript holds),{duration}(how long the ticket was open),{staff}(the staff member who used/transcript; empty for transcripts saved automatically). - Built-in wording:
{transcriptTitle}(the built-in title, which changes with what saved the transcript, for example "Auto-Generated Transcript" or "Ticket #42 Transcript"),{transcriptStatus}(how the transcript was made, such as "Closed (Auto-transcript)"; empty for/transcript). - Buttons: none.
- The transcript file is always attached, whatever your text says.
- When
/transcriptis limited to fewer messages, a separate notice about the limit follows the transcript.
Shown only to who clicked
Scheduled close confirmed
Shown only to the staff member who uses /close with a delay in a ModMail ticket.
- Variables: the ticket variables, plus
{scheduledText}(the built-in sentence, with the ticket number and closing time),{staff}(the staff member who scheduled the close, as a mention),{staffName}(their name, without a ping),{reason}(the reason given, empty when there is none),{closeAt}(when the ticket will close, as a countdown, in 2 hours),{closeAtFull}(when the ticket will close, as a date and time). - Buttons: none.
- The built-in reply is plain text; your version is sent as a card.
Feedback
These messages are sent only when ratings are on in Closing tickets → Ratings.
Sent to the member
Rating request
Sent to the member who opened the ticket as a direct message after it closes, right away or after the delay set in Closing tickets → Ratings. Members with direct messages turned off do not get it.
- Variables:
{user}(the member, as a mention){userId}(the member's Discord ID){username}(the member's username, no ping){ticketNumber}(the ticket number with leading zeros, such as 0042){subject}(the button or option the ticket was opened with){server}(the server name, the server's ID if the name is not available){category}(the ticket's category){resolutionTime}(how long the ticket was open, for example 2 hours 5 minutes){handledBy}(the staff member who claimed the ticket, or the AI assistant){closeRequestedBy}(who asked to close the ticket){closedBy}(who closed the ticket){staffDetails}(who handled, asked to close and closed the ticket, laid out like the built-in message, empty when none are known)
- Built-in wording:
{requestTitle}("Rate Your Experience"),{requestText}("Hi (name)! Your support ticket has been resolved." and the request to rate it),{ticketDetails}(the ticket number, the server, and how long the ticket took to resolve). - Buttons:
- 1 to 5 (⭐): Record the rating. Cannot be hidden.
- Add Comment (📝): Opens a comment form once the member has rated. Can be hidden.
- No Thanks (❌): Stops the reminder. Can be hidden.
- Leave a Review (⭐): A link to your RestoreCord review page. Shown only when the RestoreCord review link is on in the ratings settings. Its label and emoji can change, but not its color or where it leads. Can be hidden.
Rating reminder
Sent to the member as a direct message about a day after the rating request, once, if they have not rated, commented, or clicked No Thanks.
- Variables:
{user}(the member, as a mention){userId}(the member's Discord ID){username}(the member's username, no ping){ticketNumber}(the ticket number with leading zeros, such as 0042){subject}(the button or option the ticket was opened with){server}(the server name){category}(the ticket's category){resolutionTime}(how long the ticket was open, for example 2 hours 5 minutes){handledBy}(the staff member who claimed the ticket, or the AI assistant){closeRequestedBy}(who asked to close the ticket){closedBy}(who closed the ticket){staffDetails}(who handled, asked to close and closed the ticket, laid out like the built-in message, empty when none are known)
- Built-in wording:
{reminderTitle}("Feedback Reminder"),{reminderText}("Hi (name)! We're still hoping to hear about your recent support experience."). - Buttons:
- 1 to 5 (⭐): Record the rating. Cannot be hidden.
- Add Comment (📝): Opens a comment form once the member has rated. Can be hidden.
- No Thanks (❌): Declines the rating. Can be hidden.
- Its buttons are styled separately from the rating request. The reminder has no review link.
Posted for staff
Rating received
Posted in the feedback channel set in the ratings settings (or the logs channel when there is none or posting there fails) each time a member rates a ticket, and again when they add a comment, so that rating is posted twice.
- Variables:
{user}(the member who rated, as a mention){userId}(their Discord ID){username}(their username, no ping){ticketNumber}(the ticket number with leading zeros, such as 0042){rating}(the star rating, from 1 to 5){stars}(the rating as stars, for example ⭐⭐⭐⭐☆){comment}(the comment, empty without one){handledBy}(the staff member who claimed the ticket, or the AI assistant){closeRequestedBy}(who asked to close the ticket){closedBy}(who closed the ticket){details}(the comment and staff lines, laid out like the built-in message, empty when there are none)
- Built-in wording:
{resultTitle}("Feedback Received"),{submittedByText}("Feedback submitted by" and the member),{ticketLabel}("Ticket"),{ratingLabel}("Rating"). - Buttons: none.
- It never pings anyone. The built-in post is green for 4 or 5 stars, yellow for 3, and red for 1 or 2; your version uses the color you choose for every rating.
Shown only to who clicked
Thanks for rating
Shown only to the member after they pick a star rating or use /feedback.
- Variables: the ticket variables, plus
{rating}(the star rating, from 1 to 5). - Built-in wording:
{thanksText}("Thank you for your (rating)-star rating!", worded slightly differently after/feedback). - Buttons: none.
- One version replaces both the star button and the
/feedbackthank-you.
Thanks for commenting
Shown only to the member after they add a comment to their rating.
- Variables: the ticket variables.
- Built-in wording:
{commentAddedText}("Your comment has been added. Thank you!"). - Buttons: none.
Rating declined
Shown only to the member after they click No Thanks on the rating request or reminder.
- Variables: the ticket variables.
- Built-in wording:
{dismissText}("No problem! Thanks for using our support system."). - Buttons: none.
Reminders
Inactivity reminders, asking a member for details, and response target alerts.
Posted in the ticket
Inactivity reminder
Posted in a ticket when nobody has written in it for the reminder time set in the Reminders card under Closing tickets → Auto-close and reminders. A ticket gets at most Reminders per ticket reminders, and pinned tickets never get one. ModMail tickets never get it either: their member is not in the ticket channel, so they get the ModMail Member reminder in their DMs, and staff the Staff reminder.
- Variables: the ticket variables, plus
{reminderNumber}(which reminder this is, as in "1/2"),{maxReminders}(how many reminders a ticket can get),{reminderMention}(the greeting that pings the member, such as "Hey @Alex! ". Empty when Mention the member is off; with your own Reminder text it is just the mention),{inactiveFor}(the reminder time, such as "2 hours"). - Built-in wording:
{reminderTitle}("Ticket Reminder"),{reminderMessage}(your Reminder text, or "Your ticket has been inactive for a while. Do you still need assistance?" when it is empty),{inactiveNote}("No activity for 2 hours"). - Buttons:
- Extend Time (⏱️): Gives the ticket more time (the Time added setting) and resets its reminders. Shown only when Let them ask for more time is on and the ticket has extensions left. Can be hidden.
- Close Ticket (✅): Closes the ticket the same way as the Close button on the welcome message. Shown only when Add a Close button is on. Can be hidden.
- Reminder text keeps working with your version: put
{reminderMessage}where it should go. - Mention the member decides whether the member is pinged. While it is on, they are pinged as long as your version's Who gets pinged includes Mentioned members; when your text does not show them, the ping goes on a line above it. While it is off, your version can still show them with
{user}, but nobody is notified. - The reminder settings still decide whether each button appears; this page only changes how they look or hides them.
- The built-in card, its greeting, and its buttons follow your bot language. The reminder time itself (such as "2 hours") is in English in every language.
More time notice
Posted in the ticket every time someone gets more time with Extend Time on a reminder.
- Variables: the ticket variables, plus
{extendedBy}(the person who asked for more time, as a mention),{extensionTime}(how much time was added, such as 1 hour),{extendedUntil}(when the extra time runs out),{extendedNotice}(the built-in sentence, such as "📢 @Alex has extended this ticket for 1 hour."). - Buttons: none.
Ask for details
Posted in the ticket when the member who opened it sends a message that only says hello, and What Atlas does under Ask for details is Send a message. It waits for the delay you set and is not sent if the member writes again first.
- Variables: the ticket variables.
- Built-in wording:
{noHelloMessage}(the Message you set, or "Hello! To help you more efficiently, could you please describe the specific issue you're experiencing?" when it is empty). - Buttons: none.
- With translation on,
{noHelloMessage}is translated into the member's language, but the rest of your text is sent as you wrote it.
Hello-only staff ping
Posted in the ticket when the member only says hello and What Atlas does under Ask for details is Ping a role.
- Variables: the ticket variables, plus
{staffRoles}(the Role to ping, or your staff roles when none is picked, as mentions). - Buttons: none.
- The roles are pinged with your version too: where your text uses
{staffRoles}, or on a line above it when it does not. The built-in message is in English in every bot language.
Posted for staff
Response target warning
Posted in the channel set under Post warnings in when a ticket's first-response or resolution timer reaches 75% and again at 90% of its target, while Early warning is on. Nothing is sent when no channel is set.
- Variables: the ticket variables, plus
{slaMessage}(the built-in sentence, such as "Ticket 42 is approaching SLA deadline (first_response at 75%)"),{slaDetails}(the lines Include ticket details, Include member info, and Include recent performance add, each on a new line; empty when all three are off). - Built-in wording:
{slaTitle}("SLA Warning"). - Buttons: none.
- The people chosen under Who gets pinged are still pinged, on a line above your text. The message is in English in every bot language. See SLA Management.
Response target missed
Posted in the channel set under Post warnings in when a ticket's timer passes its target.
- Variables: the ticket variables, plus
{slaMessage}(the built-in sentence, such as "[CRITICAL] SLA Breach: Ticket 42 resolution target missed by 12.0 minutes"),{slaDetails}(the extra lines your settings add, as on the warning). - Built-in wording:
{slaTitle}("SLA Breach"). - Buttons: none.
- The people chosen under Who gets pinged are still pinged, on a line above your text. The message is in English in every bot language.
Response target met
Posted in the channel set under Post warnings in when a ticket's timer finishes within its target, only when Also report targets that are met is on.
- Variables: the ticket variables, plus
{slaMessage}(the built-in sentence, such as "[SUCCESS] SLA Target Met: Ticket 42 resolution completed within target time"),{slaDetails}(the extra lines your settings add, as on the warning). - Built-in wording:
{slaTitle}("SLA Success"). - Buttons: none.
- The people chosen under Who gets pinged are still pinged, on a line above your text. The message is in English in every bot language.
Escalation alert
Posted in the channel set under Post warnings in when a ticket's timer crosses the Warning alert or Critical alert percentage, and again after Wait between escalations while Escalate automatically is on, up to Maximum escalations.
- Variables: the ticket variables, plus
{escalationLevel}(the escalation number for this ticket, such as 2),{escalationReason}(which timer crossed the alert and how far along it is, such as "first_response SLA at 90.0% (threshold: 90%)"),{slaType}("First Response" or "Resolution"),{progress}(how much of the target time has been used, such as 90.0%). - Built-in wording:
{escalationTitle}("SLA Escalation Level"). - Buttons: none.
- The people and roles the alert notifies are still pinged, on a line above your text. The message is in English in every bot language.
Shown only to who clicked
More time confirmed
Shown only to the person who clicked Extend Time on a reminder. Only the member who opened the ticket and staff can use the button.
- Variables: the ticket variables, plus
{extendedBy}(the person who asked for more time, as a mention),{extensionTime}(how much time was added, such as 1 hour),{extendedUntil}(when the extra time runs out, as a relative time such as "in 1 hour"),{extensionsUsed}(how many times the ticket has been given more time),{maxExtensions}(how many times the ticket can be given more time),{extendedDescription}(the built-in sentence saying how much time was added). - Built-in wording:
{extendedTitle}("⏱️ Ticket Extended"),{ticketNumberLabel}("🎫 Ticket Number"),{extensionTimeLabel}("⏰ Extension Time"),{extendedUntilLabel}("📅 Extended Until"),{extensionsUsedLabel}("📊 Extensions Used"). - Buttons: none.
ModMail
Messages around ModMail conversations. Messages to the member arrive in their direct messages with the bot, and in them {channel} points to the staff ticket channel, which the member cannot open. The ModMail welcome message in the ticket, with its Alert, Subscribe, and Mute buttons, is a welcome design (ModMail tickets under Ticket opens).
Posted in the ticket
Member message
Posted in the ModMail ticket for each message the member sends in their DMs, including the one that opened the ticket. Nobody is pinged.
- Variables: the ticket variables, plus
{memberName}(the member's name, without a ping),{memberMessage}(the member's message, exactly as written),{memberSentAt}(when they sent it). - Buttons: none.
- Your version must show the whole message through
{memberMessage}. Without it, or when your text would have to shorten it, the built-in card is sent instead. - The message's images and files are always added under your text.
- A message too long for one message of your version is sent in the built-in layout, split over several messages.
- When the member edits their message, your version is kept and the original text and an Edited line are added under it. When they delete it, a note is added and the message stays for staff.
- This message carries no TicketCord branding.
Staff reply copy
Posted in the ModMail ticket in place of a staff member's reply once it reaches the member. Files in the reply go into this message, so staff see them the way the member does. A reply stays as the staff member sent it, marked with ✅, when its files cannot be copied: a file over 8 MB, more than 20 MB in total, more than 3 files that are not images or videos, or a file that fails to copy. Replies sent from the dashboard and AI Help drafts sent to a ModMail ticket use this message too. Nobody is pinged.
- Variables: the ticket variables, plus
{replyAuthor}(the staff member's username),{replyContent}(the reply, exactly as written),{replySentAt}(when it was sent). - Buttons: none.
- Your version must show the whole reply through
{replyContent}, or the built-in card is sent instead. - A reply too long for one message of your version is sent in the built-in layout, split over several messages.
- An AI Help draft always gets a small "AI Help • Sent by" line.
- This message carries no TicketCord branding.
Ticket closed notice
Posted in the ModMail ticket when it closes: by a staff member, by a scheduled close, or by auto-close.
- Variables: the ticket variables, plus
{closedBy}(the staff member who closed the ticket or scheduled the close, as a mention, or the auto-close label),{reason}(the reason given, empty when there is none),{closedTitle}(the built-in title, such as "Ticket Closed"),{closedDescription}(what the built-in card says, which depends on how the ticket closed: who closed it and why, or how long it was inactive). - Buttons: none.
- Close message designs do not apply to ModMail tickets; this message is the ModMail version. Nobody is pinged unless your version's Who gets pinged settings allow it.
Staff reminder
Posted in the ModMail ticket when the member has waited for a staff reply for the time set in ModMail reminders (paid plans), or when a staff member clicks Nudge staff.
- Variables: the ticket variables, plus
{reminderMessage}(your reminder text, or the default),{reminderCount}(which reminder this is, as a number),{reminderMax}(the most reminders that will be sent). - Built-in wording:
{reminderTitle}("ModMail Reminder"),{reminderDetailsLabel}("Reminder Details"),{waitingLabel}("Waiting on staff"),{reminderLabel}("Reminder"). The built-in card and its default text follow your bot language. - Buttons: none.
- The pings (the claimer, the last staff member who replied, or your ping roles, plus your supervisor roles on the last reminder) are always added above your version.
Member reminder not delivered
Posted in the ModMail ticket when a Member reminder could not reach the member's DMs, for example because they turned DMs off.
- Variables: the ticket variables.
- Built-in wording:
{reminderTitle}("ModMail Reminder"),{undeliveredText}("I could not DM the member a reminder. They may have DMs turned off."). - Buttons: none.
- Nobody is pinged.
Reply alert
Posted in the ModMail ticket when the member replies and staff asked to hear about it (Alert or Subscribe), or when Ping the last staff member is on.
- Variables: the ticket variables, plus
{alertFooter}(the ticket number line). - Built-in wording:
{alertTitle}("ModMail Reply Alert"),{alertBody}("The customer replied in this ModMail ticket."). - Buttons: none.
- The pings are always added above your version.
AI reply notice
Posted in the ModMail ticket whenever the AI sends the member an answer or a clarifying question in their DM, since staff cannot see the DM. Nobody is pinged.
- Variables: the ticket variables, plus
{replyPreview}(the AI's whole message; a message longer than about 3,000 characters goes on in follow-up cards below the notice),{confidence}(the answer's match score, for example87%; empty for a clarifying question),{source}(where the answer came from, empty when there is no source). - Built-in wording:
{replyNoticeTitle}("AI Auto-Response Sent", or "AI Asked a Clarifying Question"),{replyNoticeText}("An AI response was automatically sent to the user.", or "The AI asked the user to clarify before answering."). - Buttons: none.
Talk to Staff notice
Posted in the ModMail ticket when the AI could not answer the member and offered them the Talk to Staff button in their DM. The ticket is not escalated and nobody is pinged; the AI keeps answering the member's next questions until they press the button.
- Variables: the ticket variables, plus
{question}(the member's question, up to 200 characters). - Built-in wording:
{offerTitle}("Talk to Staff Offered"),{offerText}("The AI could not answer this from the knowledge base. The user was offered a Talk to Staff button and can keep asking the AI."),{offerFooter}("Not escalated"). - Buttons: none.
AI check unavailable
Posted in the ModMail ticket when the check for whether the member is asking to talk to a person failed, so staff can read the message themselves. Nobody is pinged.
- Variables: the ticket variables.
- Built-in wording:
{unavailableTitle}("AI Detection Unavailable"),{unavailableText}("Human assistance detection failed for this message. Please manually review if the user needs staff help."). - Buttons: none.
ModMail status card
Posted and pinned in the ModMail ticket, and updated whenever the member or staff write and whenever a reminder is sent or snoozed. It shows who is waiting, recent activity, and reminders.
- Variables: the ticket variables, plus:
{waitingState}(who the ticket is waiting on, or when its snooze ends){activity}(the last member message and last staff reply, one per line){reminders}(staff and member reminders sent so far, one per line){assignment}(who claimed the ticket){lastCustomerAt}(when the member last wrote){lastStaffAt}(when staff last replied){staffReminders}(staff reminders sent, out of the most allowed){userReminders}(member reminders sent, out of the most allowed){claimedBy}(who claimed the ticket, empty when nobody has)
- Built-in wording:
{stateTitle}("ModMail State"),{activityLabel}("Activity"),{remindersLabel}("Reminders"),{assignmentLabel}("Assignment"). - Buttons:
- Nudge staff: Sends the staff reminder now. Can be hidden.
- Nudge user: Sends the member reminder now. Can be hidden.
- Snooze 24h: Pauses reminders for a day. Can be hidden.
- Unsnooze: Resumes reminders. It replaces Snooze 24h while reminders are snoozed. Cannot be hidden.
- Your changes stay applied every time the card updates.
Sent to the member
Message received
Sent to the member in DMs when their first message opens a ModMail ticket.
- Variables: the ticket variables, plus
{openedDescription}(the default text). In this message,{channel}is the staff ticket channel, which the member cannot open. - Built-in wording:
{openedTitle}("Message Received"). - Buttons:
- Close ModMail: Lets the member close their own ticket. Shown only when Members can close their ticket is on; turn that setting off to remove it. Cannot be hidden.
- This is your ModMail greeting: write it as the message's text. Its text can be changed on every plan, also below Basic; restyling the button needs Basic.
- When the member picked a server, or chose Create new ticket, it replaces that message instead of arriving as a new one.
Server picker
Sent in DMs when a member who shares more than one ModMail server with the bot writes to it and has no open ticket, asking which server to contact.
- Variables:
{user}(the member, as a mention),{userId}(the member's Discord ID),{username}(the member's username, no ping),{serverList}(the servers the member can choose from, one per line),{serverCount}(how many servers the member can choose from),{pickerDescription}(the default text with the list). - Built-in wording:
{pickerTitle}("ModMail - Select a Server"),{pickerNote}("Your message is saved and will be sent once you select a server"). - Buttons: none.
- The server menu always stays below the text and cannot be changed.
- The picker appears before a server is chosen, so there is one version for every server the bot runs ModMail in, marked All servers on the Messages page. You can open and save it from any of those servers, and saving it changes it for all of them.
- Only the bot owner can change it. Others with dashboard access see "Only the bot owner can change this message".
- It cannot show an image uploaded to one server. Use a linked image from a trusted host instead.
- Import settings from another server does not copy it, since it does not belong to a server.
Recently closed prompt
Sent in DMs when a member writes shortly after their ModMail ticket was closed, asking whether to open a new one. Their message is held until they answer.
- Variables:
{user}(the member, as a mention),{userId}(the member's Discord ID),{username}(the member's username, no ping),{server}(the server name),{ticketNumber}(the closed ticket),{closedAgo}(how long ago the previous ticket was closed),{messagePreview}(a short quote of the held message),{promptMessage}(the default text). - Built-in wording:
{afterCloseTitle}("Ticket recently closed"). - Buttons:
- Create new ticket: Opens a new ticket and forwards the held message. Cannot be hidden.
- Never mind: Discards the held message. Can be hidden.
New ticket starting
Replaces the recently closed prompt when the member chooses to open a new ticket.
- Variables:
{user}(the member, as a mention),{userId}(the member's Discord ID),{username}(the member's username, no ping). - Built-in wording:
{afterCloseTitle}("Ticket recently closed"),{creatingMessage}("Creating a new ticket and forwarding your pending message to staff..."). - Buttons: none.
- Message received replaces it once the new ticket opens. When the prompt can no longer be used (it expired, or a newer one replaced it), TicketCord shows its own notice instead, which cannot be changed.
New ticket declined
Replaces the recently closed prompt when the member chooses not to open a new ticket.
- Variables:
{user}(the member, as a mention),{userId}(the member's Discord ID),{username}(the member's username, no ping). - Built-in wording:
{afterCloseTitle}("Ticket recently closed"),{dismissedMessage}("No new ticket was opened, and your pending message was not sent to staff."). - Buttons: none.
Staff reply
Sent to the member in DMs when a staff member writes in the ModMail ticket. Replies sent from the dashboard's reply box and AI Help drafts sent to a ModMail ticket use this message too. Nobody is pinged.
- Variables: the ticket variables, plus
{replyAuthor}(who wrote the reply, for example "Sam (Staff)", or, when Hide staff names is on, your Team name, "Support Team" if you left it empty),{replyContent}(the reply, exactly as written),{replySentAt}(when the reply was sent). - Built-in wording:
{anonymousNote}("Anonymous Reply"; empty when replies show names, so its line is left out). - Buttons: none.
- Your version must show the whole reply through
{replyContent}. Without it, or when your text would have to shorten it, the built-in card is sent instead. - With Hide staff names on, the staff member's name never reaches this message.
- The reply's images and files are always added under your text.
- A reply too long for one message of your version is sent in the built-in layout, split over several messages.
- When the reply is edited, your version is kept and the original text and an Edited line are added under it.
- An AI Help draft also gets a small "AI Help" line while replies show names.
- This message carries no TicketCord branding.
Closing
Replaces the Message received card in the member's DMs while the ticket they closed with Close ModMail is closing. Once it is closed, the Ticket closed DM takes its place.
- Variables: the ticket variables.
- Built-in wording:
{closingTitle}("🔄 Processing..."),{closingText}("Closing ticket, please wait..."). - Buttons: none.
Ticket closed DM
Sent to the member in DMs when their ModMail ticket closes, if DM when a ticket closes is on or you wrote your own version of this message. Sent for closes by staff, by the member, by auto-close, and by a scheduled close. When the member closes the ticket with Close ModMail, it replaces their Closing card, and it is sent even if DM when a ticket closes is off.
- Variables: the ticket variables, plus
{closedBy}(a staff name, your Team name ("Support Team" if you left it empty) when Hide staff names is on, the member's own name when they closed it with Close ModMail in their DM, or the auto-close label),{reason}(the reason given, empty when there is none),{closedTitle}(the built-in title),{closedDescription}(the default text, with the reason). - Buttons: none.
- This is your ModMail goodbye: write it as the message's text. Its text can be changed on every plan, also below Basic.
- The built-in text adds the reason below it unless it already shows the reason.
- When Attach the transcript is on, the transcript file stays attached to your version.
- Close message designs do not apply to ModMail tickets; this message is the ModMail version. The built-in card differs slightly for a scheduled close.
Member reminder
Sent to the member in DMs when staff replied and the member has not answered for the time set in ModMail reminders (paid plans), or when a staff member clicks Nudge user.
- Variables: the ticket variables, plus
{reminderMessage}(your reminder text, or the default),{reminderCount}(which reminder this is, as a number),{reminderMax}(the most reminders that will be sent). - Built-in wording:
{reminderTitle}("ModMail Reminder"),{reminderLabel}("Reminder"). The built-in card and its default text follow your bot language. - Buttons: none.
- ModMail tickets do not get the Inactivity reminder; this is the reminder the member gets. Auto-close still applies to ModMail tickets, so it is the member's only notice before one closes.
Shown only to who clicked
The Alert, Subscribe, and Mute buttons of the ModMail welcome message are shared by every staff member in the ticket, so they keep their label. Each confirms privately with a button that undoes it, and clicking one again shows that confirmation again.
Alert turned on
Shown only to the staff member who clicks Alert on the ModMail welcome message.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{alertOnMessage}("You'll be pinged once when the customer replies."). - Buttons:
- Cancel alert: Takes the alert back and replaces this message with Alert cancelled. Cannot be hidden.
- Error replies, for example when the person is not staff, cannot be changed.
Subscribed to replies
Shown only to the staff member who clicks Subscribe on the ModMail welcome message.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{subscribedMessage}("You're subscribed to customer replies in this ModMail thread."). - Buttons:
- Unsubscribe: Ends the subscription and replaces this message with Unsubscribed from replies. Cannot be hidden.
Ticket muted
Shown only to the staff member who clicks Mute on the ModMail welcome message.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{mutedMessage}("You won't be pinged for this ModMail thread."). - Buttons:
- Unmute: Ends the mute and replaces this message with Ticket unmuted. Cannot be hidden.
Alert cancelled
Replaces Alert turned on when the staff member clicks Cancel alert on it.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{alertCancelledMessage}("Your alert for this ModMail thread is cancelled."). - Buttons: none.
Unsubscribed from replies
Replaces Subscribed to replies when the staff member clicks Unsubscribe on it.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{unsubscribedMessage}("You're unsubscribed from customer replies in this ModMail thread."). - Buttons: none.
Ticket unmuted
Replaces Ticket muted when the staff member clicks Unmute on it.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{unmutedMessage}("You can be pinged for this ModMail thread again."). - Buttons: none.
Nudge sent
Shown only to the staff member who uses Nudge staff or Nudge user on the ModMail status card.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{nudgeSentMessage}("Done."). - Buttons: none.
- Replies explaining why an action could not run cannot be changed.
Reminders snoozed
Shown only to the staff member who uses Snooze 24h on the ModMail status card.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{snoozedMessage}("ModMail reminders are snoozed for 24 hours."). - Buttons: none.
Reminders resumed
Shown only to the staff member who uses Unsnooze on the ModMail status card.
- Variables: the ticket variables, plus
{staff}(the staff member, as a mention),{staffName}(the staff member's name, no ping). - Built-in wording:
{unsnoozedMessage}("ModMail reminders are active again."). - Buttons: none.
AI
What the AI writes (an answer, a summary, a draft, a translation) is never part of the text you edit: it reaches your version as a variable such as {answer} or {summary}, so you choose the layout around it.
Posted in the ticket
AI answer
Posted in the ticket, as a reply to the member's message, when the AI answers it from your knowledge base.
- Variables: the ticket variables, plus
{answer}(the answer the AI wrote),{source}(where the answer came from; empty when source info is off or the answer did not use your knowledge base). - Buttons:
- 👍: Records that the answer helped. Shown only when answer feedback is on. Can be hidden.
- 👎: Records that it did not help. Shown only when answer feedback is on. Can be hidden.
- Your version must show the whole answer through
{answer}. Without it, or if your text shortens it, the built-in answer is sent instead. - TicketCord adds the AI notice to the end of every version as a small last line, such as "Confidence: 87% • Generated by AI. Staff can verify important details." It is not a variable, so your text cannot move, hide or reword it.
- The confidence part shows only while AI assistant → Knowledge base → Answering → Show the match score is on.
- An answer written only from general AI knowledge, when your sources have nothing on the question, has no confidence and starts the line with "General AI knowledge, not from this server's knowledge base" before the AI notice.
- An answer that adds a generic tech step to what your sources say keeps the usual line.
- If there is no room for the line, the built-in answer is sent.
- An answer too long for one message is sent in the built-in layout over several messages, with your button looks on the last one.
- Mentions in an answer never ping anyone.
Talk to Staff offer
Posted in the ticket when the AI has no answer in your knowledge base for a member's message, at most once every five minutes per ticket. In ModMail it is sent to the member's DM instead, and staff see the Talk to Staff notice in the ticket. The AI keeps answering the member's next questions until the button is pressed.
- Variables: the ticket variables, plus
{reason}(the topic the AI could not answer, empty when it gave none). - Built-in wording:
{talkToStaffText}(the built-in sentence naming the topic and pointing to the button). - Buttons:
- Talk to Staff (🙋): Alerts staff and stops the AI in the ticket. It is turned off after a click. Cannot be hidden.
AI answers paused
Posted in the ticket when the AI cannot answer because your knowledge base sources are being re-indexed after an upgrade, at most once every 30 minutes per ticket.
- Variables: the ticket variables.
- Built-in wording:
{migrationText}(the built-in notice that answers are paused for a while). - Buttons: none.
AI escalation
Posted in the ticket for staff when the AI could not answer the member's questions and hands the ticket over. Questions sent close together are summed up in one alert.
- Variables: the ticket variables, plus
{staffRoles}(the staff roles to ping, empty when pinging is off),{summary}(the AI's summary of the question or questions),{messageCount}(how many questions the alert covers). - Built-in wording:
{escalationTitle}("AI Escalation"),{escalationText}("The AI could not find relevant information to answer this question."),{escalationFooter}("Escalated due to insufficient knowledge"),{questionLabel}("User Question"). - Buttons: none.
- Staff are pinged when pinging staff on escalation is on in the knowledge base settings: where
{staffRoles}appears, or on a line above your text when it does not.
AI hand-over
Posted in the ticket for staff when the AI answered but said staff should take over, for example for billing or account questions. ModMail tickets use it too.
- Variables: the ticket variables, plus
{staffRoles}(the staff roles to ping, empty when pinging is off),{summary}(the AI's summary for staff),{handoffReason}(why the AI asked for staff). - Built-in wording:
{escalationTitle}("AI Escalation"),{handoffText}("The AI has responded but indicated that staff attention is needed."),{handoffFooter}("AI requested staff assistance"),{questionLabel}("User Question"),{reasonLabel}("Escalation Reason"). - Buttons: none.
- Staff are pinged with your version too: where
{staffRoles}appears, or on a line above your text when it does not.
Person requested reply
Posted in the ticket for the member when they ask to talk to a person instead of the AI. The AI then stops answering in the ticket. In ModMail it is sent to the member's DM.
- Variables: the ticket variables.
- Built-in wording:
{replyText}("I've shared our conversation with the team. A team member will be with you shortly."). - Buttons: none.
Person requested alert
Posted in the ticket for staff, right after the Person requested reply, when a member asks to talk to a person instead of the AI. ModMail tickets use it too.
- Variables: the ticket variables, plus
{staffRoles}(the staff roles to ping, empty when pinging is off). - Built-in wording:
{alertTitle}("Human Assistance Requested"),{alertText}("This user has requested to speak with a human staff member."),{alertFooter}("AI responses disabled for this ticket"). - Buttons: none.
- Staff are pinged with your version too: where
{staffRoles}appears, or on a line above your text when it does not.
Closed by AI
Posted in the ticket after the AI closes it because the member asked it to.
- Variables: the ticket variables.
- Built-in wording:
{closeText}(the built-in confirmation that the ticket was closed as requested). - Buttons: none.
Close ticket offer
Posted in the ticket when the member probably asked to close it, but not clearly enough for the AI to close it on its own. It is posted at most once per ticket.
- Variables: the ticket variables.
- Built-in wording:
{closeOfferText}("Sounds like you're all set. Press the button below to close this ticket."). - Buttons: Close Ticket. It is the ticket's normal close button, so your close rules apply when it is pressed, including Only staff can close and the close confirmation.
Talk to Staff alert
Posted in the ticket for staff when the member, or a staff member, clicks Talk to Staff. In ModMail the member clicks it in their DM, and the alert is posted in the ModMail ticket.
- Variables: the ticket variables, plus
{staffRoles}(the staff roles to ping, empty when pinging is off),{requestedBy}(who clicked, as a mention),{summary}(the AI's summary of the ticket). - Built-in wording:
{alertTitle}("Staff Assistance Requested"),{summaryLabel}("Summary"). - Buttons: none.
- The built-in title says staff escalated the ticket when a staff member clicked. Staff are pinged where
{staffRoles}appears, or on a line above your text when it does not.
Auto Support greeting
The first message in a new Auto Support thread for a member's question, before the AI answers.
- Variables:
{user}(the member who asked, as a mention),{userId}(their Discord ID),{channel}(the thread). - Built-in wording:
{introText}(the built-in greeting, which mentions the member). - Buttons:
- Open ticket (🎫): Turns the thread into a ticket. Shown only when turned on in the Auto Support settings. Can be hidden.
- Mark resolved (✅): Closes the thread. Shown only when turned on in the Auto Support settings. Can be hidden.
Auto Support staff greeting
The only message in a new Auto Support thread when the AI will not answer there: Learning Mode is on, or there is nothing for the AI to answer from.
- Variables:
{user}(the member who asked, as a mention),{userId}(their Discord ID),{channel}(the thread). - Built-in wording:
{introText}(the built-in greeting, which mentions the member and says a team member will reply). - Buttons:
- Open ticket (🎫): Turns the thread into a ticket. Shown only when turned on in the Auto Support settings. Can be hidden.
- Mark resolved (✅): Closes the thread. Shown only when turned on in the Auto Support settings. Can be hidden.
Auto Support answer
Posted in an Auto Support thread when the AI answers from your knowledge base.
- Variables:
{user}(the member who asked, as a mention),{userId}(their Discord ID),{channel}(the thread),{answer}(the answer the AI wrote),{source}(where the answer came from; empty when source info is off). - Buttons:
- 👍: Records that the answer helped. Shown only when answer feedback is on. Can be hidden.
- 👎: Records that it did not help. Shown only when answer feedback is on. Can be hidden.
- Open ticket (🎫): Turns the thread into a ticket. Shown only when turned on in the Auto Support settings. Can be hidden.
- Mark resolved (✅): Closes the thread. Shown only when turned on in the Auto Support settings. Can be hidden.
- Your version must show the whole answer through
{answer}. Without it, or if your text shortens it, the built-in answer is sent instead. - TicketCord adds the AI notice line to the end of every version, the same way as on the AI answer. It cannot be moved, hidden or reworded.
Auto Support no answer
Posted in an Auto Support thread when the knowledge base has no answer.
- Variables:
{channel}(the thread),{reason}(the topic, can be empty). - Built-in wording:
{fallbackText}(the built-in sentence saying the knowledge base has nothing on the topic). - Buttons:
- Open ticket (🎫): Turns the thread into a ticket. Shown only when turned on in the Auto Support settings. Can be hidden.
- Mark resolved (✅): Closes the thread. Shown only when turned on in the Auto Support settings. Can be hidden.
- Your version must include
{fallbackText}. Without it the built-in message is sent instead. - TicketCord adds "Automated reply from the AI assistant." to the end of every version as a small last line. It is not a variable, so your text cannot move, hide or reword it.
Thread already open
Posted in a member's open Auto Support thread when they ask a new question in the channel. Their new message is removed. At most once a minute per member.
- Variables:
{user}(the member, as a mention),{userId}(their Discord ID),{channel}(the open thread). - Built-in wording:
{reminderText}(the built-in reminder, which mentions the member and asks them to continue in the thread or mark it resolved). - Buttons: none.
Thread moved to ticket
Posted in an Auto Support thread after someone clicks Open ticket.
- Variables:
{user}(the member who asked, as a mention),{userId}(their Discord ID),{channel}(the thread),{ticketChannel}(the new ticket, as a channel link). - Built-in wording:
{openedText}("Ticket opened:" with a link to the new ticket, and "Staff will reply there."). - Buttons: none.
Auto Support summary
Posted in a ticket opened from an Auto Support thread with Open ticket, summing up the thread for staff.
- Variables:
{user}(the member who asked, as a mention),{userId}(their Discord ID),{channel}(the new ticket),{thread}(the Auto Support thread, with a link to the question),{question}(the member's original question),{summary}(the AI's summary),{aiAnswer}(the AI's answer in the thread, empty when there was none),{details}(the thread, question and answer, laid out like the built-in message). - Built-in wording:
{handoffTitle}("Auto Support Escalation"),{handoffFooter}("Created from a public Auto Support thread"),{threadLabel}("Source thread"),{questionLabel}("Original question"),{aiAnswerLabel}("AI answer"). - Buttons: none.
AI limit reached
Posted in the channel where the member used the AI when they use up the AI allowance your server gives each member, once per period.
- Variables:
{user}(the member, as a mention),{userId}(their Discord ID),{channel}(the channel where they used the AI),{period}(the limit's period, for example day or month). - Built-in wording:
{limitText}(the built-in notice naming the period). - Buttons: none.
Message translation
Posted in the ticket in place of a message the bot translated, depending on the display mode in the translation settings.
- Variables:
{author}(who wrote the translated message),{sentAt}(when the translated message was sent),{sourceFlag}(the flag of the original language),{sourceLanguage}(the original language, for example ES),{original}(the original message),{targetFlag}(the flag of the language it was translated to),{targetLanguage}(the language it was translated to, for example EN),{translation}(the translated message). - Built-in wording:
{translationTitle}("Message Translation"). - Buttons: none.
- Your version must show the whole original message through
{original}and the whole translation through{translation}, because the original message is deleted once the card is posted. Without either, or if your text shortens one, the built-in card is sent instead. - Mentions in a translated message never ping anyone.
Translation reply
Posted in the ticket as a reply to a translated message, which stays, depending on the display mode in the translation settings. Messages with attachments always get a reply in automatic mode.
- Variables:
{targetFlag}(the flag of the language it was translated to),{targetLanguage}(the language it was translated to, for example EN),{translation}(the translated message). - Built-in wording:
{translationLabel}("Translation to"). - Buttons: none.
- Mentions in a translated message never ping anyone.
Posted for staff
Translation status
Posted in your translation notification channel when a translation completes, its language cannot be detected or is not enabled, or its confidence is too low, and the matching notification is on in the translation settings.
- Variables:
{channel}(the ticket),{noticeTitle}(what happened, for example Translation completed),{noticeText}(the details of what happened). - Buttons: none.
- One version covers every kind of status. The built-in color changes with the status; your version uses the color you choose.
Possible duplicates
Posted in your logs channel when duplicate detection finds tickets that look like a new one.
- Variables: the ticket variables, plus
{ticketLink}(the new ticket's number and name, with a link),{matchCount}(how many similar tickets were found),{matches}(up to five similar tickets with the AI's reasons, laid out like the built-in message). - Built-in wording:
{matchesTitle}("Potential Ticket Matches"),{matchesIntro}(the built-in intro with the new ticket),{matchesNote}(the built-in note that staff should verify the results). - Buttons: none.
- The ticket variables are those of the new ticket.
Shown only to who clicked
Talk to Staff sent
Shown only to the person who clicked Talk to Staff, once staff were alerted.
- Variables: the ticket variables.
- Built-in wording:
{sentText}("A staff member has been notified and will be with you shortly!"). - Buttons: none.
Thread resolved
Shown only to the person who clicked Mark resolved in an Auto Support thread.
- Variables:
{user}(the member who asked, as a mention),{userId}(their Discord ID),{channel}(the thread). - Built-in wording:
{resolvedText}("Thread marked resolved."). - Buttons: none.
AI Help draft
Shown only to the staff member who used AI Help (the button or /ai-help) in a ticket, with the reply the AI drafted.
- Text: written by TicketCord. Only the buttons can change.
- Buttons:
- Send Now: Posts the draft in the ticket. Cannot be hidden.
- Edit & Send: Opens the draft for editing first. Can be hidden.
- Try Again: Writes a new draft. Can be hidden.
- Only the buttons of this message can change. TicketCord always shows the draft as is, because sending it relies on that text.
AI Help sent
Shown only to the staff member once their AI Help reply is posted in the ticket.
- Variables: the ticket variables.
- Built-in wording:
{sentText}("Message sent to the ticket!"). - Buttons: none.
Staff logs
Entries posted in your logs channel and other staff channels. They are not sent when the channel is not set. Ticket numbers in {ticketNumber} have four digits (0042), while the built-in cards show #42.
Posted for staff
AI priority alert
Posted in your logs channel when AI priority detection raises a ticket to high or urgent, with its staff notification on.
- Variables: the ticket variables, plus
{priorityLabel}(the new priority with its emoji, for example 🟠 High),{confidence}(how sure the AI is, as a percentage),{analysis}(the AI's explanation),{urgencyIndicators}(the signs the AI found, comma-separated). In this message,{priority}is the new level. In this message,{user}is the member who opened the ticket, as a mention. - Buttons: none.
- No alert is posted for medium or low, or when no logs channel is set. It never pings anyone. The built-in text is in English in every bot language, and its color follows the priority; your version uses the color you pick.
Approval audit entry
Posted in your approval audit channel after each approve or reject, when the approval audit log is on and has a channel.
- Variables: the ticket variables, plus
{staff}(the approver, as a mention),{staffName}(their name, without a ping),{requestId}(the approval request's ID),{decision}(Approved or Rejected),{approvalType}(the kind of approval asked for, for example Refund),{responseTime}(how long the decision took, for example 540 seconds),{reason}(the reason; empty unless the audit settings include decision reasons). - Built-in wording:
{auditTitle}("📝 Approval Decision Logged"),{ticketLabel}("Ticket"),{requestIdLabel}("Request ID"),{decisionLabel}("Decision"),{approverLabel}("Approver"),{typeLabel}("Type"),{responseTimeLabel}("Response Time"),{reasonLabel}("Reason"),{auditLabel}("Audit"),{auditText}("Logged to audit channel for compliance tracking"). - Buttons: none.
- It never pings anyone. Requests that time out do not post an entry.
Ticket opened log
Posted in your logs channel when someone opens a ticket.
- Variables: the ticket variables, plus
{createdAt}(when it was opened). - Buttons: none.
Ticket closed log
Posted in your logs channel when a staff member or the member closes a ticket, a scheduled close runs, or the ticket closes because the member left the server.
- Variables: the ticket variables, plus
{closedBy}(who closed it, as a mention; the bot itself when the member left),{duration}(how long the ticket was open),{closedAt}(when the ticket was closed). - Buttons: none.
- Closes by auto-close use the Ticket auto-closed log instead.
Ticket auto-closed log
Posted in your logs channel when auto-close closes a ticket for inactivity.
- Variables: the ticket variables, plus
{inactiveFor}(the auto-close time, for example1 day),{closedAt}(when the ticket was closed). - Buttons: none.
Ticket claimed log
Posted in your logs channel when a staff member claims a ticket.
- Variables: the ticket variables, plus
{staff}(who claimed it, as a mention),{claimedAt}(when the ticket was claimed). - Buttons: none.
Ticket reopened log
Posted in your logs channel when a closed ticket is reopened.
- Variables: the ticket variables, plus
{reopenedBy}(who reopened it, as a mention),{reopenedAt}(when the ticket was reopened). - Buttons: none.
Reminder sent log
Posted in your logs channel each time an inactivity reminder is sent in a ticket.
- Variables: the ticket variables, plus
{reminderCount}(which reminder this is),{maxReminders}(the configured maximum),{inactiveFor}(the reminder time),{sentAt}(when the reminder was sent). - Buttons: none.
SLA breached log
Posted in your logs channel when a ticket misses one of its SLA targets.
- Variables:
{ticketNumber}(the ticket number with leading zeros, such as 0042),{channel}(the ticket channel, as a link),{slaType}(first_responseorresolution),{targetTime}(the SLA target time),{elapsedTime}(how much time had passed),{priority}(the ticket's priority, such as high),{breachedAt}(when the target was missed). - Buttons: none.
- This is the log entry only. The Response target missed alert in your response targets channel is a separate message.
Ticket escalated log
Posted in your logs channel when a ticket is escalated, for example by an escalation rule or the Talk to Staff button.
- Variables:
{ticketNumber}(the ticket number with leading zeros, such as 0042),{channel}(the ticket channel, as a link),{reason}(why it was escalated),{source}(what escalated it, as a short code such assla_management),{escalatedAt}(when the ticket was escalated). - Buttons: none.
{reason}and{source}are empty when the escalation did not record them.
Tone alert
Posted in your logs channel when AI tone detection matches a rule that pings a role.
- Variables:
{role}(the role to ping, as a mention),{channel}(the ticket),{user}(the member, as a mention),{tone}(the tone found, for exampleAngry),{confidence}(how sure the AI is, as a percentage),{analysis}(the AI's explanation). - Buttons: none.
- The role is pinged with your version too: where
{role}appears, or on a line above your text when it does not. The built-in card's color follows the tone.
Ticket auto-routed log
Posted in your logs channel when auto-routing moves a ticket to another category and logs channel notifications are on.
- Variables:
{channel}(the ticket),{user}(the member, as a mention),{rule}(the matching rule's name),{confidence}(how sure the AI is, as a percentage),{analysis}(the AI's reasoning),{notifyRole}(the role the rule pings, as a mention; empty when the rule pings nobody or the AI was less sure than your threshold),{restrictedRoles}(the staff roles the ticket is limited to, separated by commas; empty when the rule does not limit access). - Buttons: none.
- The rule's notify role is pinged: where
{notifyRole}appears, or on a line above your text when it does not. The short notice auto-routing can post inside the ticket is a different message (Ticket routed).
Manual routing alert
Posted in your logs channel when auto-routing finds no matching rule and is set to notify staff.
- Variables:
{channel}(the ticket),{user}(the member, as a mention),{sentiment}(the member's sentiment as the AI read it, empty when it did not report one),{urgency}(how urgent the AI rated it, empty when it did not report one). - Buttons: none.
Knowledge base limit alert
Posted in your logs channel when a new message in a channel your knowledge base syncs is not added because the knowledge base reached your plan's limit. At most once every 5 minutes per synced source.
- Variables:
{user}(who wrote the message, as a mention),{sourceChannel}(the channel of the message that was not added),{count}(how many messages the knowledge base holds),{limit}(how many messages your plan allows). - Buttons: none.
Knowledge base cleanup log
Posted in your logs channel after an automatic knowledge base cleanup merges or archives entries.
- Variables:
{merged}(how many duplicate entries were merged),{created}(how many entries they were merged into),{pruned}(how many outdated entries were archived),{summary}(one sentence with all three numbers, in the bot's language). - Built-in wording:
{consolidationTitle}("Knowledge Base Consolidated"),{consolidationNote}(the built-in note line). - Buttons: none.
Member joins
The Member joins moment holds DM to new members, a plain text direct message sent to each member who joins the server (Basic or higher). Its text and its {server} and {username} variables are set on its row, not in the designer. See DM on Join.
Common questions
Which message is posted when a staff member claims a ticket? Ticket claimed under In a ticket is posted in the ticket for everyone. The staff member who claimed also sees the private Claim reply, or the Exclusive claim warning and Exclusive claim reply when exclusive claims are on.
Can I change the reminder that says a ticket has been inactive?
Yes. It is Inactivity reminder under Reminders. Your Reminder text setting still works: place {reminderMessage} where it should go. Its Extend Time and Close Ticket buttons can be restyled or hidden.
Can I change the direct message that asks members to rate their ticket? Yes. It is Rating request under Feedback. The five star buttons always stay; Add Comment, No Thanks, and Leave a Review can be hidden.
Why does a staff alert no longer ping anyone after I changed it?
Alerts such as AI escalation, Talk to Staff alert, and Hello-only staff ping ping the staff roles only through {staffRoles}, and Approval request only through {approverRole}. Put that variable back in your text.
Can I change the text of the AI Help draft? No. TicketCord writes the draft, so only its Send Now, Edit & Send, and Try Again buttons can change.
Where is the close message posted in the ticket? It is not on this list: Message in the ticket and DM to the member under Ticket closes use a saved design you pick. See Close messages.
Join our Discord server for support
Was this page helpful?
Last updated on