1. A method comprising: receiving a first request from an interactive voice response (IVR) workflow engine, wherein the first request is to store a first event data associated with execution of a first instruction block of a contact workflow for an IVR caller, wherein the IVR caller is associated with a contact identifier, and wherein the first event data comprises an execution state of the first instruction block for the contact identifier; storing the first event data for the first instruction block associated with the contact identifier; detecting that the IVR workflow engine failed to execute a second instruction block of the contact workflow for the IVR caller, wherein the second instruction block was invoked by the first instruction block in the contact workflow; storing a second event data in a data store, the second event data associated with the contact identifier and indicating that the second instruction block for the contact identifier failed to execute; receiving a second request from the IVR workflow engine to provide a starting instruction block to be invoked to restart the contact workflow for the IVR caller; retrieving a set of stored event data associated with the contact identifier, the set of stored event data comprising the first event data and the second event data; determining, using the set of stored event data, a starting instruction block to be invoked in the contact workflow for the IVR caller; and sending a notification to the IVR workflow engine to cause the IVR workflow engine to execute the contact workflow for the IVR caller at the starting instruction block.