Need to call ERC20 transfer function through open GSN

I need to call the ERC20 transfer function but the user must not pay for the gas. I found Open GSN as a way to do so. But can someone guide me on how to use it? I am completely clueless here. I need to make the relay call but I am somewhere missing the whole setup part. If you can please send me a sample code it would be very helpful.

Gsn can’t be used for arbitrary token transfer.
The target contract (in this case, the town l token) had be gsn-enabled: inherit from IErc2771Recipient, and use _msgSender() instead of msg.sender, so it can reference the original transaction sender.