My solution still works, so it’s something is with the webhook pack you use.
You don’t send an object there — you’re sending key/value varargs. My guess is that the pack treats the arguments as text and instead of sending the object to the webhook as is, it basically turns that Text._Merge() to string (escapes it).
I probably should just publish my webhook pack to the gallery. Initially I didn’t want to do this because I thought publishing my pack while there was already one wouldn’t be very ethical. However I see there are already multiple webhook packs in the gallery so there’s no more reason not to publish mine too.