when no agent is available caller will sit in the queue and listen to music and once the agent is available, caller will be played a message and then route to that particular agent (this caller should not be getting another call when caller being played message)?
Probably sort of “function” apprach can work here. I mean instead of Selection object to use in strategy SelectDN/SuspenForDN functions that will find ready target and reserve it (if agent reservation is activated) but will not route to it. Treatment can be played after that and on it completion call can be routed (RouteCall funtion) to selected before target. The interval between target was selected and before call routing should not be long however - reservation can expire (by default as far as I remeber it is 15 sec)
As kubikle said, you can use SelectDN/SuspenfForDN. If agent reservation turned on, these functions can block the target for duration for some time (transition_time). If you need additional time, use BlockDN and play announcement in between and route the call.