What i do for exactly the same result, is to verify the response code of every command that is sent. (None of the standard libraries do this, but FONA is probably the closest)
If the response is not as expected, i retry the commands a number of times, then power cycle and reinitialise the modem
(Touch wood, it hasn’t let me down yet(