call.execute is used to call from a channel.
You don't have one in your script.
Some modules (like dumb, tonegen) have the ability to build a channel and re-send the call.execute message.
You must add a 'target' (containing the called party number) parameter to your message.
If you do it the dumb module will send a call.route message and then a call.execute on behalf of the newly created dumb channel.
If you add a 'direct' parameter the dumb module will send a call.execute (to indicated 'direct' will be set in 'callto' parameter) without routing the call.
On return your call.execute will contain the 'id' of the dumb channel and 'peerid' its peer channel id.
You may then use these to track the call.
Don't forget to track call termination.
You may use call.cdr with operation=finalize: check the 'chan' parameter
You may also track chan.disconnected for either channel (chan.disconnected is sent by the disconnected channel, i.e. for a call only 1 channel will send it).
When you attach your sources (play) instruct wavefile to notify on termination and do your stuff when a source terminates.
See
http://docs.yate.ro/wiki/Chan.attach and
http://docs.yate.ro/wiki/Chan.notifyWhen you are done just enqueue a call.drop message with 'id' set to one of the tracked channel's id.