¶ Database row
Inspect the scheduled-message row state first. The durable record tells you whether ReplyBox still believes the message is queued.
Operations
Recover the scheduler, not the transport. A small percentage of scheduled messages can remain queued after the BullMQ job disappears and no error is raised.
Rule
Scheduled messages, flow runs, and broadcasts decide when to send inside API workers. Recovery should re-create or resume that orchestration state, then call the same producer functions used by synchronous endpoints.
Failure shape
A scheduled message can still look queued in application state while its BullMQ job is gone. The dangerous part is the silence: no raised error, no obvious failed job, and no automatic send.
Inspect the scheduled-message row state first. The durable record tells you whether ReplyBox still believes the message is queued.
Inspect BullMQ for the expected job. The known gap is a queued schedule whose job has disappeared.
Confirm whether an orchestration worker is running before changing data or adding recovery behavior.
Triage
Keep the investigation in the same order every time so a missing job is not mistaken for connector or WhatsApp behavior.
Recovery path
Capture the scheduled-message row state and the missing BullMQ job evidence together.
Scheduled recovery belongs to API orchestration. The connector should remain a consumer of producer-created WhatsApp work, not the owner of scheduler repair.
After recovery decides the message should send, it must call the same producer functions as the synchronous endpoints.