xxxx_uplink_routine() calls are sending out a packet?
If you call
api.system.sleep.all(10000);, before the transmission has ended, then the device will wake up again. You will have to check whether the transmission has finished before calling sleep from your loop.
Is not really usefull. You keep the MCU awake with the first call, only send LoRa transceiver to sleep which will not work anyway because the transmission is still ongoing.
Just find a method to get the end of transmission (we have callbacks for that) and then call sleep.
Not sure why
delay() would not work in a timer callback. But usually I avoid such power wasting delays in my code wherever I can.