What is the best way to deal with asynchronous provisioning?

We want to onboard a target system that does not have synchronous API. So when we want to create an account, we send a message and some time later the system sends a response with operation status and generated user id.
So I need a step in "UNSAccountB - Insert" process that waits until response is received. In case of approval process I could use WC or EX approval procedure, but I can't find anything similar in provisioning process.
As PoC I implemented it this way:
STEP 1 - ScriptExec to send a message
STEP 2 - Delay component to wait some time (= approximate target system response time)
STEP 3 - ScriptExec to check if response is received. The step has "wait mode on error", "stop on error" options selected and "retries", "latency" specified. So if response is not received, then I throw an error and this step is retried after some time.
STEP 4 - I analyze a response and fill UNSAccountB with generated account objectguid (I can't combine it with previous step because if I receive "operation failed in target system" response on STEP 3 I need to prevent next retries; I don't need them since I already got a response).

Is there a better way to implement this scenario?

We are using 8.0.2