Queueing the send through Action Scheduler is the right default, since a slow Cloud API call during a status change would otherwise hold up checkout. Storing the returned message ID as order meta and falling back to email when the delivery webhook says failed covers the case most setups forget. Custom statuses like shipped are an easy miss in the map too.
StackShortlist
Proof Over Promises.
Queueing the send through Action Scheduler is the right default, since a slow Cloud API call during a status change would otherwise hold up checkout. Storing the returned message ID as order meta and falling back to email when the delivery webhook says failed covers the case most setups forget. Custom statuses like shipped are an easy miss in the map too.