Your Arduino registers with the router and the router assigns the internal IP Address by DHCP. Clients outside the router (in the public space) cannot see the internal IP Address but only the public address of your router (the public address is the IP Address that your router is reached or known by to the outside web world). So, to hit the Arduino, the router has to accept the call from the outside and direct it internally to your Arduino. That’s a process people refer to as Port Forwarding and Network Address Translation (NAT).
On your router there will be a feature that allows you to set up Port Forwarding. How to do that is different between routers and you will have to find out how to use the feature on your router. In general, you will need to make an association between your Arduino internal IP Address including the port it responds on, and the port of the external address that your router is known by. By default, client requests will come to your router from outside on port 80. Your Arduino might have an internal address of 192.168.1.32 and it probably responds on port 80. You will set up forwarding from external port 80 to internal 192.168.1.32:80 for TCP and UDP (transfer protocols – not important right now).
That’s great for now, and will all work, but, as noted by WildBill, you should set the Arduino to always use the same internal address because if you don’t it could get issued a different IP address by DHCP next time and your port forwarding will fail. There are several ways to do that, but if your router allows it, use a feature like “always use this address” in the config of the Arduino on the router device page.