Personalized token in CTA or Button

I had a similar issue where I needed to generate a unique ID at the end of a URL for each person that downloaded a hosted asset. Not sure if there’s an easier way, but when they fill out the form I have a workflow that first assigns the URL plus ?token to a custom field on the contact record and then I reference that custom field in the email that delivers the asset within an HTML button (since it can’t be applied to CTA). Each user clicking the asset now has it’s own personal link and I’m not using an image as the CTA since those can be blocked.