How can a user interact with the contract? Is typing the command
cleos push action the only option?
Like Patrick said you need to build a front end to communicate with smart contracts on the eosio blockchain. Here a couple of library's to get you started. I have seen a few others as well. Just search eosio on github and look around, there is always new libraries and boilerplates popping up. https://github.com/EOSIO/demux-js https://github.com/EOSIO/eosjs
I think the idea is that you create a web front end using react. The user probably doesn't ever see there is a contract or even blockchain behind the webpage
Create front end and make it interecting with contract using eosiojs