discord / action / schema v1
Ticket Panel
Post a message where members open a private ticket channel by clicking a button. Support staff get Close plus optional Claim, Hold, Escalate, Priority and Transcript controls. No other nodes needed.
Prerequisites
- Add the discord plugin inside this workflow.
Parameters
| Parameter | Type | Description |
|---|---|---|
ServerguildId | discord_guild Required | |
ChannelchannelId | discord_channel Required | Where the ticket panel message is posted. |
Support rolessupportRoleIds | discord_role Required | These roles can see and close every ticket. |
Panel messagepanelText | textarea Optional Default: | |
Send panel as an embedpanelAsEmbed | boolean Optional | Post the panel message inside an embed card instead of plain text. |
Panel titlepanelTitle | text Optional | Title shown at the top of the panel embed.Field conditions{
"visible": {
"key": "panelAsEmbed",
"values": [
"true"
]
}
} |
Button labelbuttonLabel | text Optional Default: | Used as the panel's only button when no ticket types are configured below. |
Button emojibuttonEmoji | text Optional | Optional emoji shown before the default ticket button label. |
Button colorbuttonStyle | select Optional Default: | Same four styles as a normal Discord button. Options: Blue (primary), Grey (secondary), Green (success), Red (danger) |
When the button is clickedticketOpenMode | select Optional Default: | A modal can collect up to five answers before the ticket channel is created. Options: Open the ticket immediately (direct), Ask questions first (modal) (form) |
Opening formopenModal | modal_builder Conditionally required | Questions shown before opening the ticket. Answers are available in messages as {{field_FIELD_ID}}.Field conditions{
"visible": {
"key": "ticketOpenMode",
"values": [
"form"
]
},
"required": {
"key": "ticketOpenMode",
"values": [
"form"
]
}
} |
Ticket typesticketTypes | ticket_types_map Optional | {{ticket_type}} in the channel name / welcome message below resolves to the clicked type's label. Filled in when someone clicks. |
Ticket channel nameticketNameTemplate | text Optional Default: | {{author_username}} is filled in with the Discord username of whoever opens the ticket, {{ticket_type}} with the clicked type's label (if any). Other variables, such as a Date & time {{result}}, are captured when this panel node runs; run it again after changing those variable bindings. |
Welcome messagewelcomeMessage | textarea Optional | {{author_id}}/{{author_username}}/{{ticket_type}} resolve when THIS ticket opens. Wrap {{author_id}} in <@…> for a mention. Other upstream variables are captured when the panel node runs, then reused when the welcome message is posted; run the panel again after adding or changing one. |
Send welcome as an embedwelcomeAsEmbed | boolean Optional | Post the welcome message inside an embed card instead of plain text. |
Embed colorembedColor | text Optional | Accent color used when the panel/welcome messages are sent as embeds. |
One open ticket per memberoneTicketPerUser | boolean Optional Default: | Stop a member opening a second ticket while one is already open. |
How staff conversations workclaimMode | select Optional Default: | Required claim keeps the ticket visible to the support team but unlocks replies only for the moderator who claims it. Options: Free talk: all support staff can reply (free), Optional claim: ownership is visible, everyone can reply (optional), Claim required, only the claiming moderator can reply (required) |
CategorycategoryId | discord_category Optional | Optional. Create tickets under this category. Used when no ticket types are configured above, or as the fallback for a type that doesn't set its own category. Leave empty to create tickets at the top level. |
Ticket log channellogChannelId | discord_channel Optional | Leave empty to skip logging. Otherwise posts a line there whenever a ticket is opened or closed. |
Extra ticket controlsticketFeatures | multiselect Optional | Extra buttons posted inside each ticket channel, on top of Close (which is always there). Only support staff can use them. Claiming is configured separately above; claim, hold and priority appear in the channel topic so the queue stays readable. Options: Hold / Resume: mute the opener while they wait (hold), Escalate, ping a senior role (escalate), Transcript. Save the conversation to a file (transcript), Priority: Low / Normal / High / Urgent (priority) |
Escalation rolesescalationRoleIds | discord_role Conditionally required | Pinged in the ticket channel when a staff member clicks Escalate. They are not given access. Add them to Support roles too if they need to read the ticket.Field conditions{
"visible": {
"key": "ticketFeatures",
"values": [
"escalate"
]
},
"required": {
"key": "ticketFeatures",
"values": [
"escalate"
]
}
} |
Transcript channeltranscriptChannelId | discord_channel Optional | Where transcript files are posted. Leave empty to use the ticket log channel above, or the ticket channel itself if neither is set.Field conditions{
"visible": {
"key": "ticketFeatures",
"values": [
"transcript"
]
}
} |
Save a transcript when a ticket is closedtranscriptOnClose | boolean Optional | Closing deletes the channel for good. Turn this on to post the conversation as a text file first. It works whether or not staff have the Transcript button. |
Inputs and outputs
Inputs
execute- Execute (input)
Outputs
done- Done (output)message_id- Message ID (output)error- Error (output)
No detailed data schema is declared. Inspect a test run to see its result.
Examples and troubleshooting have not yet been reviewed for this contract.
Version and compatibility
This reference follows the current authoring contract. Existing workflows retain their saved node revisions.
Contract identifier
09662ab01e30d821f34020ae2552d1e2d9f016790a4f07a87e0e533f38496db8