My way to go was always to get all the information in the button IDs.
So let's say, I have 3 types of tickets.
"Partner" "Apply" and "Report".
The Action IDs would be "ticketpartner", "ticketapply" and "ticketreport".
I would register a Function to the InteractionCreated Event of the Discord Client.
In there, I will check if the ID starts with "ticket". If not, return.
Then I will check for more detailed things.
Of course, create channel, blah blah blah as you know from normal ticket systems.
This way you can get your ticket logic wherever you want.